From 63d645cd1ed5932cf24d1aa91621e1f175537d65 Mon Sep 17 00:00:00 2001 From: Ian Wahbe Date: Wed, 12 Jun 2024 20:01:36 -0700 Subject: [PATCH] Upgrade terraform-provider-google-beta to v5.33.0 (#2084) This PR was generated via `$ upgrade-provider pulumi/pulumi-gcp`. --- - Upgrading terraform-provider-google-beta from 5.32.0 to 5.33.0. Fixes #2069 --- ...001-Allow-disabling-the-partner-name.patch | 6 +- ...for-sql-database-instance-flattening.patch | 14 +- patches/0006-docs-patching.patch | 120 +- ...08-Remove-duplicative-resource-token.patch | 4 +- ...9-Fix-794-with-an-unconditional-read.patch | 4 +- patches/0011-fix-label-imports.patch | 4 +- .../pulumi-resource-gcp/bridge-metadata.json | 235 ++ provider/cmd/pulumi-resource-gcp/schema.json | 2072 +++++++++- provider/go.mod | 3 +- provider/go.sum | 6 +- sdk/dotnet/AppEngine/FlexibleAppVersion.cs | 18 + ...leAppVersionFlexibleRuntimeSettingsArgs.cs | 32 + ...ppVersionFlexibleRuntimeSettingsGetArgs.cs | 32 + ...exibleAppVersionFlexibleRuntimeSettings.cs | 35 + sdk/dotnet/BigTable/Instance.cs | 18 + .../Inputs/TargetExecutionConfigArgs.cs | 6 + .../Inputs/TargetExecutionConfigGetArgs.cs | 6 + .../Outputs/TargetExecutionConfig.cs | 7 + sdk/dotnet/Compute/BackendService.cs | 21 + sdk/dotnet/Compute/Disk.cs | 27 + sdk/dotnet/Compute/GetBackendService.cs | 4 + sdk/dotnet/Compute/GetDisk.cs | 4 + sdk/dotnet/Compute/GetInstance.cs | 4 + sdk/dotnet/Compute/GetInstanceGroupManager.cs | 12 + sdk/dotnet/Compute/GetInstanceTemplate.cs | 4 + .../Compute/GetRegionInstanceTemplate.cs | 4 + sdk/dotnet/Compute/GetSecurityPolicy.cs | 192 + .../InstanceGroupManagerStandbyPolicyArgs.cs | 33 + ...nstanceGroupManagerStandbyPolicyGetArgs.cs | 33 + ...onInstanceGroupManagerStandbyPolicyArgs.cs | 33 + ...nstanceGroupManagerStandbyPolicyGetArgs.cs | 33 + sdk/dotnet/Compute/Instance.cs | 30 + .../Compute/InstanceFromMachineImage.cs | 30 + sdk/dotnet/Compute/InstanceFromTemplate.cs | 30 + sdk/dotnet/Compute/InstanceGroupManager.cs | 89 + sdk/dotnet/Compute/InstanceTemplate.cs | 30 + ...InstanceGroupManagerStandbyPolicyResult.cs | 35 + ...eProtectionConfigAutoDeployConfigResult.cs | 49 + ...tionConfigLayer7DdosDefenseConfigResult.cs | 35 + ...ityPolicyAdaptiveProtectionConfigResult.cs | 35 + ...ncedOptionsConfigJsonCustomConfigResult.cs | 27 + ...curityPolicyAdvancedOptionsConfigResult.cs | 49 + ...urityPolicyRecaptchaOptionsConfigResult.cs | 27 + ...leHeaderActionRequestHeadersToAddResult.cs | 35 + ...GetSecurityPolicyRuleHeaderActionResult.cs | 27 + .../GetSecurityPolicyRuleMatchConfigResult.cs | 27 + .../GetSecurityPolicyRuleMatchExprResult.cs | 27 + .../GetSecurityPolicyRuleMatchResult.cs | 42 + ...redWafConfigExclusionRequestCookyResult.cs | 35 + ...edWafConfigExclusionRequestHeaderResult.cs | 35 + ...fConfigExclusionRequestQueryParamResult.cs | 35 + ...guredWafConfigExclusionRequestUriResult.cs | 35 + ...lePreconfiguredWafConfigExclusionResult.cs | 63 + ...yPolicyRulePreconfiguredWafConfigResult.cs | 27 + ...cyRuleRateLimitOptionBanThresholdResult.cs | 35 + ...RateLimitOptionEnforceOnKeyConfigResult.cs | 35 + ...teLimitOptionExceedRedirectOptionResult.cs | 35 + ...RateLimitOptionRateLimitThresholdResult.cs | 35 + ...SecurityPolicyRuleRateLimitOptionResult.cs | 84 + ...tSecurityPolicyRuleRedirectOptionResult.cs | 35 + .../Outputs/GetSecurityPolicyRuleResult.cs | 84 + .../InstanceGroupManagerStandbyPolicy.cs | 36 + ...RegionInstanceGroupManagerStandbyPolicy.cs | 36 + sdk/dotnet/Compute/ProjectCloudArmorTier.cs | 210 + .../Compute/RegionInstanceGroupManager.cs | 89 + sdk/dotnet/Compute/RegionInstanceTemplate.cs | 30 + sdk/dotnet/Config/Config.cs | 7 + sdk/dotnet/Container/Cluster.cs | 24 + sdk/dotnet/Container/GetCluster.cs | 4 + .../Inputs/ClusterSecretManagerConfigArgs.cs | 26 + .../ClusterSecretManagerConfigGetArgs.cs | 26 + .../Inputs/NodePoolNetworkConfigArgs.cs | 4 +- .../Inputs/NodePoolNetworkConfigGetArgs.cs | 4 +- ...orkConfigPodCidrOverprovisionConfigArgs.cs | 3 + ...ConfigPodCidrOverprovisionConfigGetArgs.cs | 3 + .../Outputs/ClusterSecretManagerConfig.cs | 27 + .../GetClusterSecretManagerConfigResult.cs | 27 + .../Outputs/NodePoolNetworkConfig.cs | 4 +- ...NetworkConfigPodCidrOverprovisionConfig.cs | 3 + .../PreventionDiscoveryConfigTargetArgs.cs | 6 + ...eryConfigTargetBigQueryTargetFilterArgs.cs | 7 + ...ConfigTargetBigQueryTargetFilterGetArgs.cs | 7 + ...tBigQueryTargetFilterTableReferenceArgs.cs | 32 + ...gQueryTargetFilterTableReferenceGetArgs.cs | 32 + ...eryConfigTargetCloudSqlTargetFilterArgs.cs | 7 + ...rgetFilterDatabaseResourceReferenceArgs.cs | 44 + ...tFilterDatabaseResourceReferenceGetArgs.cs | 44 + ...ConfigTargetCloudSqlTargetFilterGetArgs.cs | 7 + .../PreventionDiscoveryConfigTargetGetArgs.cs | 6 + ...nDiscoveryConfigTargetSecretsTargetArgs.cs | 20 + ...scoveryConfigTargetSecretsTargetGetArgs.cs | 20 + ...tConfigLimitsMaxFindingsPerInfoTypeArgs.cs | 4 +- ...nfigLimitsMaxFindingsPerInfoTypeGetArgs.cs | 4 +- .../PreventionDiscoveryConfigTarget.cs | 9 +- ...scoveryConfigTargetBigQueryTargetFilter.cs | 8 + ...argetBigQueryTargetFilterTableReference.cs | 35 + ...scoveryConfigTargetCloudSqlTargetFilter.cs | 8 + ...qlTargetFilterDatabaseResourceReference.cs | 49 + ...ntionDiscoveryConfigTargetSecretsTarget.cs | 21 + ...spectConfigLimitsMaxFindingsPerInfoType.cs | 4 +- .../DataLoss/PreventionInspectTemplate.cs | 44 + sdk/dotnet/GkeBackup/BackupPlan.cs | 71 + .../Inputs/BackupPlanBackupConfigArgs.cs | 8 + .../Inputs/BackupPlanBackupConfigGetArgs.cs | 8 + .../Inputs/RestorePlanRestoreConfigArgs.cs | 24 +- .../Inputs/RestorePlanRestoreConfigGetArgs.cs | 24 +- ...estorePlanRestoreConfigRestoreOrderArgs.cs | 35 + ...orePlanRestoreConfigRestoreOrderGetArgs.cs | 35 + ...nfigRestoreOrderGroupKindDependencyArgs.cs | 36 + ...gRestoreOrderGroupKindDependencyGetArgs.cs | 36 + ...reOrderGroupKindDependencyRequiringArgs.cs | 37 + ...rderGroupKindDependencyRequiringGetArgs.cs | 37 + ...eOrderGroupKindDependencySatisfyingArgs.cs | 35 + ...derGroupKindDependencySatisfyingGetArgs.cs | 35 + ...ConfigTransformationRuleFieldActionArgs.cs | 2 - ...figTransformationRuleFieldActionGetArgs.cs | 2 - ...onfigVolumeDataRestorePolicyBindingArgs.cs | 37 + ...igVolumeDataRestorePolicyBindingGetArgs.cs | 37 + .../Outputs/BackupPlanBackupConfig.cs | 9 + .../Outputs/RestorePlanRestoreConfig.cs | 22 +- .../RestorePlanRestoreConfigRestoreOrder.cs | 30 + ...reConfigRestoreOrderGroupKindDependency.cs | 39 + ...estoreOrderGroupKindDependencyRequiring.cs | 40 + ...storeOrderGroupKindDependencySatisfying.cs | 38 + ...toreConfigTransformationRuleFieldAction.cs | 2 - ...oreConfigVolumeDataRestorePolicyBinding.cs | 40 + sdk/dotnet/GkeBackup/RestorePlan.cs | 235 ++ sdk/dotnet/GkeBackup/RestorePlanIamBinding.cs | 235 ++ sdk/dotnet/GkeBackup/RestorePlanIamMember.cs | 235 ++ sdk/dotnet/GkeBackup/RestorePlanIamPolicy.cs | 235 ++ sdk/dotnet/Healthcare/DicomStore.cs | 1 + sdk/dotnet/Healthcare/FhirStore.cs | 59 +- .../DicomStoreNotificationConfigArgs.cs | 6 + .../DicomStoreNotificationConfigGetArgs.cs | 6 + .../Outputs/DicomStoreNotificationConfig.cs | 10 +- .../EndpointAttachment.cs | 18 + sdk/dotnet/Kms/CryptoKey.cs | 9 +- .../Netapp/Inputs/VolumeBackupConfigArgs.cs | 45 + .../Inputs/VolumeBackupConfigGetArgs.cs | 45 + .../Netapp/Outputs/VolumeBackupConfig.cs | 43 + sdk/dotnet/Netapp/Volume.cs | 21 + .../ServiceLbPoliciesAutoCapacityDrainArgs.cs | 26 + ...rviceLbPoliciesAutoCapacityDrainGetArgs.cs | 26 + .../ServiceLbPoliciesFailoverConfigArgs.cs | 26 + .../ServiceLbPoliciesFailoverConfigGetArgs.cs | 26 + .../ServiceLbPoliciesAutoCapacityDrain.cs | 27 + .../ServiceLbPoliciesFailoverConfig.cs | 27 + .../NetworkServices/ServiceLbPolicies.cs | 419 ++ sdk/dotnet/Provider.cs | 6 + sdk/dotnet/Redis/Cluster.cs | 89 + .../ClusterZoneDistributionConfigArgs.cs | 34 + .../ClusterZoneDistributionConfigGetArgs.cs | 34 + .../Outputs/ClusterZoneDistributionConfig.cs | 37 + .../Inputs/SecretIamBindingConditionArgs.cs | 6 + .../SecretIamBindingConditionGetArgs.cs | 6 + .../Inputs/SecretIamMemberConditionArgs.cs | 6 + .../Inputs/SecretIamMemberConditionGetArgs.cs | 6 + .../Outputs/SecretIamBindingCondition.cs | 6 + .../Outputs/SecretIamMemberCondition.cs | 6 + sdk/dotnet/SecretManager/SecretIamBinding.cs | 206 + sdk/dotnet/SecretManager/SecretIamMember.cs | 206 + sdk/dotnet/SecretManager/SecretIamPolicy.cs | 194 + ...izationEventThreatDetectionCustomModule.cs | 270 ++ .../Inputs/InstanceConfigReplicaArgs.cs | 44 + .../Inputs/InstanceConfigReplicaGetArgs.cs | 44 + sdk/dotnet/Spanner/InstanceConfig.cs | 314 ++ .../Spanner/Outputs/InstanceConfigReplica.cs | 48 + ...baseInstanceSettingsIpConfigurationArgs.cs | 2 +- ...eInstanceSettingsIpConfigurationGetArgs.cs | 2 +- ...DatabaseInstanceSettingsIpConfiguration.cs | 2 +- ...aseInstanceSettingIpConfigurationResult.cs | 2 +- ...cesInstanceSettingIpConfigurationResult.cs | 2 +- ...ionConfigHostGceInstanceBoostConfigArgs.cs | 19 + ...ConfigHostGceInstanceBoostConfigGetArgs.cs | 19 + ...stationConfigHostGceInstanceBoostConfig.cs | 24 +- sdk/dotnet/Workstations/WorkstationConfig.cs | 7 +- sdk/go/gcp/appengine/flexibleAppVersion.go | 17 + sdk/go/gcp/appengine/pulumiTypes.go | 160 + sdk/go/gcp/bigtable/instance.go | 15 + sdk/go/gcp/clouddeploy/pulumiTypes.go | 9 + sdk/go/gcp/compute/backendService.go | 21 + sdk/go/gcp/compute/disk.go | 33 + sdk/go/gcp/compute/getBackendService.go | 7 +- sdk/go/gcp/compute/getDisk.go | 5 + sdk/go/gcp/compute/getInstance.go | 5 + sdk/go/gcp/compute/getInstanceGroupManager.go | 17 + sdk/go/gcp/compute/getInstanceTemplate.go | 5 + .../gcp/compute/getRegionInstanceTemplate.go | 5 + sdk/go/gcp/compute/getSecurityPolicy.go | 183 + sdk/go/gcp/compute/init.go | 7 + sdk/go/gcp/compute/instance.go | 15 + .../gcp/compute/instanceFromMachineImage.go | 15 + sdk/go/gcp/compute/instanceFromTemplate.go | 15 + sdk/go/gcp/compute/instanceGroupManager.go | 85 + sdk/go/gcp/compute/instanceTemplate.go | 15 + sdk/go/gcp/compute/projectCloudArmorTier.go | 356 ++ sdk/go/gcp/compute/pulumiTypes.go | 668 ++-- sdk/go/gcp/compute/pulumiTypes1.go | 3375 ++++++++++++++++- .../gcp/compute/regionInstanceGroupManager.go | 87 + sdk/go/gcp/compute/regionInstanceTemplate.go | 15 + sdk/go/gcp/config/config.go | 3 + sdk/go/gcp/container/cluster.go | 27 + sdk/go/gcp/container/getCluster.go | 5 + sdk/go/gcp/container/pulumiTypes.go | 262 +- .../gcp/dataloss/preventionInspectTemplate.go | 45 + sdk/go/gcp/dataloss/pulumiTypes.go | 668 +++- sdk/go/gcp/gkebackup/backupPlan.go | 71 + sdk/go/gcp/gkebackup/pulumiTypes.go | 661 +++- sdk/go/gcp/gkebackup/restorePlan.go | 240 ++ sdk/go/gcp/gkebackup/restorePlanIamBinding.go | 240 ++ sdk/go/gcp/gkebackup/restorePlanIamMember.go | 240 ++ sdk/go/gcp/gkebackup/restorePlanIamPolicy.go | 240 ++ sdk/go/gcp/healthcare/dicomStore.go | 3 +- sdk/go/gcp/healthcare/fhirStore.go | 88 +- sdk/go/gcp/healthcare/pulumiTypes.go | 19 + .../endpointAttachment.go | 15 + sdk/go/gcp/kms/cryptoKey.go | 18 +- sdk/go/gcp/netapp/pulumiTypes.go | 183 + sdk/go/gcp/netapp/volume.go | 21 + sdk/go/gcp/networkservices/init.go | 7 + sdk/go/gcp/networkservices/pulumiTypes.go | 282 ++ .../gcp/networkservices/serviceLbPolicies.go | 528 +++ sdk/go/gcp/provider.go | 7 + sdk/go/gcp/redis/cluster.go | 89 + sdk/go/gcp/redis/pulumiTypes.go | 168 + sdk/go/gcp/secretmanager/pulumiTypes.go | 32 +- sdk/go/gcp/secretmanager/secretIamBinding.go | 244 ++ sdk/go/gcp/secretmanager/secretIamMember.go | 244 ++ sdk/go/gcp/secretmanager/secretIamPolicy.go | 232 ++ sdk/go/gcp/securitycenter/init.go | 7 + ...izationEventThreatDetectionCustomModule.go | 405 ++ sdk/go/gcp/spanner/init.go | 7 + sdk/go/gcp/spanner/instanceConfig.go | 402 ++ sdk/go/gcp/spanner/pulumiTypes.go | 137 + sdk/go/gcp/sql/pulumiTypes.go | 28 +- sdk/go/gcp/workstations/pulumiTypes.go | 30 + sdk/go/gcp/workstations/workstationConfig.go | 7 +- .../src/main/java/com/pulumi/gcp/Config.java | 3 + .../main/java/com/pulumi/gcp/Provider.java | 6 + .../java/com/pulumi/gcp/ProviderArgs.java | 17 + .../gcp/appengine/FlexibleAppVersion.java | 15 + .../gcp/appengine/FlexibleAppVersionArgs.java | 38 + ...AppVersionFlexibleRuntimeSettingsArgs.java | 120 + .../inputs/FlexibleAppVersionState.java | 38 + ...ibleAppVersionFlexibleRuntimeSettings.java | 78 + .../com/pulumi/gcp/bigtable/Instance.java | 14 + .../com/pulumi/gcp/bigtable/InstanceArgs.java | 37 + .../gcp/bigtable/inputs/InstanceState.java | 37 + .../inputs/TargetExecutionConfigArgs.java | 38 + .../outputs/TargetExecutionConfig.java | 22 + .../pulumi/gcp/compute/BackendService.java | 16 + .../gcp/compute/BackendServiceArgs.java | 41 + .../pulumi/gcp/compute/ComputeFunctions.java | 309 ++ .../java/com/pulumi/gcp/compute/Disk.java | 20 + .../java/com/pulumi/gcp/compute/DiskArgs.java | 49 + .../java/com/pulumi/gcp/compute/Instance.java | 14 + .../com/pulumi/gcp/compute/InstanceArgs.java | 37 + .../gcp/compute/InstanceFromMachineImage.java | 14 + .../compute/InstanceFromMachineImageArgs.java | 37 + .../gcp/compute/InstanceFromTemplate.java | 14 + .../gcp/compute/InstanceFromTemplateArgs.java | 37 + .../gcp/compute/InstanceGroupManager.java | 92 + .../gcp/compute/InstanceGroupManagerArgs.java | 112 + .../pulumi/gcp/compute/InstanceTemplate.java | 14 + .../gcp/compute/InstanceTemplateArgs.java | 37 + .../gcp/compute/ProjectCloudArmorTier.java | 222 ++ .../compute/ProjectCloudArmorTierArgs.java | 140 + .../compute/RegionInstanceGroupManager.java | 92 + .../RegionInstanceGroupManagerArgs.java | 112 + .../gcp/compute/RegionInstanceTemplate.java | 14 + .../compute/RegionInstanceTemplateArgs.java | 37 + .../compute/inputs/BackendServiceState.java | 41 + .../pulumi/gcp/compute/inputs/DiskState.java | 49 + .../compute/inputs/GetSecurityPolicyArgs.java | 157 + .../inputs/GetSecurityPolicyPlainArgs.java | 126 + .../inputs/InstanceFromMachineImageState.java | 37 + .../inputs/InstanceFromTemplateState.java | 37 + ...InstanceGroupManagerStandbyPolicyArgs.java | 125 + .../inputs/InstanceGroupManagerState.java | 112 + .../gcp/compute/inputs/InstanceState.java | 37 + .../compute/inputs/InstanceTemplateState.java | 37 + .../inputs/ProjectCloudArmorTierState.java | 136 + ...InstanceGroupManagerStandbyPolicyArgs.java | 125 + .../RegionInstanceGroupManagerState.java | 112 + .../inputs/RegionInstanceTemplateState.java | 37 + .../outputs/GetBackendServiceResult.java | 15 + .../gcp/compute/outputs/GetDiskResult.java | 15 + .../GetInstanceGroupManagerResult.java | 49 + .../GetInstanceGroupManagerStandbyPolicy.java | 82 + .../compute/outputs/GetInstanceResult.java | 15 + .../outputs/GetInstanceTemplateResult.java | 15 + .../GetRegionInstanceTemplateResult.java | 15 + ...ecurityPolicyAdaptiveProtectionConfig.java | 89 + ...ptiveProtectionConfigAutoDeployConfig.java | 128 + ...otectionConfigLayer7DdosDefenseConfig.java | 82 + ...etSecurityPolicyAdvancedOptionsConfig.java | 135 + ...AdvancedOptionsConfigJsonCustomConfig.java | 62 + ...tSecurityPolicyRecaptchaOptionsConfig.java | 58 + .../outputs/GetSecurityPolicyResult.java | 221 ++ .../outputs/GetSecurityPolicyRule.java | 265 ++ .../GetSecurityPolicyRuleHeaderAction.java | 62 + ...cyRuleHeaderActionRequestHeadersToAdd.java | 81 + .../outputs/GetSecurityPolicyRuleMatch.java | 113 + .../GetSecurityPolicyRuleMatchConfig.java | 62 + .../GetSecurityPolicyRuleMatchExpr.java | 58 + ...urityPolicyRulePreconfiguredWafConfig.java | 62 + ...cyRulePreconfiguredWafConfigExclusion.java | 193 + ...figuredWafConfigExclusionRequestCooky.java | 81 + ...iguredWafConfigExclusionRequestHeader.java | 81 + ...edWafConfigExclusionRequestQueryParam.java | 81 + ...onfiguredWafConfigExclusionRequestUri.java | 81 + .../GetSecurityPolicyRuleRateLimitOption.java | 260 ++ ...PolicyRuleRateLimitOptionBanThreshold.java | 81 + ...RuleRateLimitOptionEnforceOnKeyConfig.java | 81 + ...leRateLimitOptionExceedRedirectOption.java | 81 + ...RuleRateLimitOptionRateLimitThreshold.java | 81 + .../GetSecurityPolicyRuleRedirectOption.java | 81 + .../InstanceGroupManagerStandbyPolicy.java | 81 + ...gionInstanceGroupManagerStandbyPolicy.java | 81 + .../com/pulumi/gcp/container/Cluster.java | 19 + .../com/pulumi/gcp/container/ClusterArgs.java | 46 + .../ClusterSecretManagerConfigArgs.java | 85 + .../gcp/container/inputs/ClusterState.java | 46 + .../inputs/NodePoolNetworkConfigArgs.java | 16 +- ...kConfigPodCidrOverprovisionConfigArgs.java | 20 + .../outputs/ClusterSecretManagerConfig.java | 58 + .../container/outputs/GetClusterResult.java | 19 + .../GetClusterSecretManagerConfig.java | 58 + .../outputs/NodePoolNetworkConfig.java | 8 +- ...tworkConfigPodCidrOverprovisionConfig.java | 8 + .../dataloss/PreventionInspectTemplate.java | 53 + .../PreventionDiscoveryConfigTargetArgs.java | 38 + ...yConfigTargetBigQueryTargetFilterArgs.java | 42 + ...igQueryTargetFilterTableReferenceArgs.java | 125 + ...yConfigTargetCloudSqlTargetFilterArgs.java | 42 + ...etFilterDatabaseResourceReferenceArgs.java | 205 + ...iscoveryConfigTargetSecretsTargetArgs.java | 28 + ...onfigLimitsMaxFindingsPerInfoTypeArgs.java | 15 +- .../PreventionDiscoveryConfigTarget.java | 22 + ...overyConfigTargetBigQueryTargetFilter.java | 24 + ...getBigQueryTargetFilterTableReference.java | 81 + ...overyConfigTargetCloudSqlTargetFilter.java | 24 + ...TargetFilterDatabaseResourceReference.java | 127 + ...ionDiscoveryConfigTargetSecretsTarget.java | 32 + ...ectConfigLimitsMaxFindingsPerInfoType.java | 16 +- .../com/pulumi/gcp/gkebackup/BackupPlan.java | 85 + .../com/pulumi/gcp/gkebackup/RestorePlan.java | 280 ++ .../gcp/gkebackup/RestorePlanIamBinding.java | 280 ++ .../gcp/gkebackup/RestorePlanIamMember.java | 280 ++ .../gcp/gkebackup/RestorePlanIamPolicy.java | 280 ++ .../inputs/BackupPlanBackupConfigArgs.java | 45 + .../inputs/RestorePlanRestoreConfigArgs.java | 113 +- ...torePlanRestoreConfigRestoreOrderArgs.java | 111 + ...igRestoreOrderGroupKindDependencyArgs.java | 142 + ...OrderGroupKindDependencyRequiringArgs.java | 140 + ...rderGroupKindDependencySatisfyingArgs.java | 132 + ...nfigTransformationRuleFieldActionArgs.java | 8 - ...figVolumeDataRestorePolicyBindingArgs.java | 145 + .../outputs/BackupPlanBackupConfig.java | 25 + .../outputs/RestorePlanRestoreConfig.java | 59 +- .../RestorePlanRestoreConfigRestoreOrder.java | 68 + ...ConfigRestoreOrderGroupKindDependency.java | 90 + ...toreOrderGroupKindDependencyRequiring.java | 88 + ...oreOrderGroupKindDependencySatisfying.java | 84 + ...reConfigTransformationRuleFieldAction.java | 4 - ...eConfigVolumeDataRestorePolicyBinding.java | 91 + .../com/pulumi/gcp/healthcare/DicomStore.java | 1 + .../com/pulumi/gcp/healthcare/FhirStore.java | 73 +- .../pulumi/gcp/healthcare/FhirStoreArgs.java | 34 +- .../DicomStoreNotificationConfigArgs.java | 40 + .../gcp/healthcare/inputs/FhirStoreState.java | 34 +- .../outputs/DicomStoreNotificationConfig.java | 24 + .../EndpointAttachment.java | 15 + .../EndpointAttachmentArgs.java | 38 + .../inputs/EndpointAttachmentState.java | 38 + .../java/com/pulumi/gcp/kms/CryptoKey.java | 6 +- .../com/pulumi/gcp/kms/CryptoKeyArgs.java | 12 +- .../pulumi/gcp/kms/inputs/CryptoKeyState.java | 12 +- .../java/com/pulumi/gcp/netapp/Volume.java | 17 + .../com/pulumi/gcp/netapp/VolumeArgs.java | 42 + .../netapp/inputs/VolumeBackupConfigArgs.java | 173 + .../pulumi/gcp/netapp/inputs/VolumeState.java | 42 + .../netapp/outputs/VolumeBackupConfig.java | 106 + .../networkservices/ServiceLbPolicies.java | 382 ++ .../ServiceLbPoliciesArgs.java | 381 ++ ...erviceLbPoliciesAutoCapacityDrainArgs.java | 83 + .../ServiceLbPoliciesFailoverConfigArgs.java | 85 + .../inputs/ServiceLbPoliciesState.java | 529 +++ .../ServiceLbPoliciesAutoCapacityDrain.java | 57 + .../ServiceLbPoliciesFailoverConfig.java | 58 + .../java/com/pulumi/gcp/redis/Cluster.java | 97 + .../com/pulumi/gcp/redis/ClusterArgs.java | 38 + .../pulumi/gcp/redis/inputs/ClusterState.java | 38 + .../ClusterZoneDistributionConfigArgs.java | 128 + .../ClusterZoneDistributionConfig.java | 82 + .../gcp/secretmanager/SecretIamBinding.java | 286 ++ .../secretmanager/SecretIamBindingArgs.java | 24 + .../gcp/secretmanager/SecretIamMember.java | 286 ++ .../secretmanager/SecretIamMemberArgs.java | 24 + .../gcp/secretmanager/SecretIamPolicy.java | 276 ++ .../inputs/SecretIamBindingConditionArgs.java | 40 + .../inputs/SecretIamBindingState.java | 24 + .../inputs/SecretIamMemberConditionArgs.java | 40 + .../inputs/SecretIamMemberState.java | 24 + .../outputs/SecretIamBindingCondition.java | 16 + .../outputs/SecretIamMemberCondition.java | 16 + ...ationEventThreatDetectionCustomModule.java | 245 ++ ...nEventThreatDetectionCustomModuleArgs.java | 288 ++ ...EventThreatDetectionCustomModuleState.java | 407 ++ .../pulumi/gcp/spanner/InstanceConfig.java | 244 ++ .../gcp/spanner/InstanceConfigArgs.java | 293 ++ .../inputs/InstanceConfigReplicaArgs.java | 182 + .../spanner/inputs/InstanceConfigState.java | 401 ++ .../outputs/InstanceConfigReplica.java | 112 + ...seInstanceSettingsIpConfigurationArgs.java | 24 +- ...tabaseInstanceSettingsIpConfiguration.java | 12 +- ...atabaseInstanceSettingIpConfiguration.java | 4 +- ...stancesInstanceSettingIpConfiguration.java | 4 +- .../gcp/workstations/WorkstationConfig.java | 7 +- ...nConfigHostGceInstanceBoostConfigArgs.java | 117 + ...ationConfigHostGceInstanceBoostConfig.java | 67 + sdk/nodejs/appengine/flexibleAppVersion.ts | 14 + sdk/nodejs/bigtable/instance.ts | 14 + sdk/nodejs/compute/backendService.ts | 17 + sdk/nodejs/compute/disk.ts | 23 + sdk/nodejs/compute/getBackendService.ts | 1 + sdk/nodejs/compute/getDisk.ts | 1 + sdk/nodejs/compute/getInstance.ts | 1 + sdk/nodejs/compute/getInstanceGroupManager.ts | 3 + sdk/nodejs/compute/getInstanceTemplate.ts | 1 + .../compute/getRegionInstanceTemplate.ts | 1 + sdk/nodejs/compute/getSecurityPolicy.ts | 121 + sdk/nodejs/compute/index.ts | 13 + sdk/nodejs/compute/instance.ts | 14 + .../compute/instanceFromMachineImage.ts | 14 + sdk/nodejs/compute/instanceFromTemplate.ts | 14 + sdk/nodejs/compute/instanceGroupManager.ts | 65 + sdk/nodejs/compute/instanceTemplate.ts | 14 + sdk/nodejs/compute/projectCloudArmorTier.ts | 174 + .../compute/regionInstanceGroupManager.ts | 65 + sdk/nodejs/compute/regionInstanceTemplate.ts | 14 + sdk/nodejs/config/vars.ts | 8 + sdk/nodejs/container/cluster.ts | 20 + sdk/nodejs/container/getCluster.ts | 1 + .../dataloss/preventionInspectTemplate.ts | 28 + sdk/nodejs/gkebackup/backupPlan.ts | 52 + sdk/nodejs/gkebackup/restorePlan.ts | 172 + sdk/nodejs/gkebackup/restorePlanIamBinding.ts | 172 + sdk/nodejs/gkebackup/restorePlanIamMember.ts | 172 + sdk/nodejs/gkebackup/restorePlanIamPolicy.ts | 172 + sdk/nodejs/healthcare/dicomStore.ts | 1 + sdk/nodejs/healthcare/fhirStore.ts | 47 +- .../endpointAttachment.ts | 14 + sdk/nodejs/kms/cryptoKey.ts | 9 +- sdk/nodejs/netapp/volume.ts | 17 + sdk/nodejs/networkservices/index.ts | 8 + .../networkservices/serviceLbPolicies.ts | 323 ++ sdk/nodejs/provider.ts | 3 + sdk/nodejs/redis/cluster.ts | 58 + sdk/nodejs/secretmanager/secretIamBinding.ts | 134 + sdk/nodejs/secretmanager/secretIamMember.ts | 134 + sdk/nodejs/secretmanager/secretIamPolicy.ts | 122 + sdk/nodejs/securitycenter/index.ts | 8 + ...izationEventThreatDetectionCustomModule.ts | 236 ++ sdk/nodejs/spanner/index.ts | 8 + sdk/nodejs/spanner/instanceConfig.ts | 238 ++ sdk/nodejs/tsconfig.json | 5 + sdk/nodejs/types/input.ts | 292 +- sdk/nodejs/types/output.ts | 646 +++- sdk/nodejs/workstations/workstationConfig.ts | 7 +- sdk/python/pulumi_gcp/__init__.py | 32 + sdk/python/pulumi_gcp/appengine/_inputs.py | 40 + .../appengine/flexible_app_version.py | 47 + sdk/python/pulumi_gcp/appengine/outputs.py | 51 + sdk/python/pulumi_gcp/bigtable/instance.py | 47 + sdk/python/pulumi_gcp/clouddeploy/_inputs.py | 16 + sdk/python/pulumi_gcp/clouddeploy/outputs.py | 12 + sdk/python/pulumi_gcp/compute/__init__.py | 2 + sdk/python/pulumi_gcp/compute/_inputs.py | 84 + .../pulumi_gcp/compute/backend_service.py | 54 + sdk/python/pulumi_gcp/compute/disk.py | 68 + .../pulumi_gcp/compute/get_backend_service.py | 12 +- sdk/python/pulumi_gcp/compute/get_disk.py | 12 +- sdk/python/pulumi_gcp/compute/get_instance.py | 12 +- .../compute/get_instance_group_manager.py | 32 +- .../compute/get_instance_template.py | 12 +- .../compute/get_region_instance_template.py | 12 +- .../pulumi_gcp/compute/get_security_policy.py | 214 ++ sdk/python/pulumi_gcp/compute/instance.py | 47 + .../compute/instance_from_machine_image.py | 47 + .../compute/instance_from_template.py | 47 + .../compute/instance_group_manager.py | 185 + .../pulumi_gcp/compute/instance_template.py | 47 + sdk/python/pulumi_gcp/compute/outputs.py | 1039 +++++ .../compute/project_cloud_armor_tier.py | 336 ++ .../compute/region_instance_group_manager.py | 185 + .../compute/region_instance_template.py | 47 + sdk/python/pulumi_gcp/config/__init__.pyi | 2 + sdk/python/pulumi_gcp/config/vars.py | 4 + sdk/python/pulumi_gcp/container/_inputs.py | 37 +- sdk/python/pulumi_gcp/container/cluster.py | 61 + .../pulumi_gcp/container/get_cluster.py | 12 +- sdk/python/pulumi_gcp/container/outputs.py | 52 +- sdk/python/pulumi_gcp/dataloss/_inputs.py | 204 +- sdk/python/pulumi_gcp/dataloss/outputs.py | 223 +- .../dataloss/prevention_inspect_template.py | 54 + sdk/python/pulumi_gcp/gkebackup/_inputs.py | 289 +- .../pulumi_gcp/gkebackup/backup_plan.py | 100 + sdk/python/pulumi_gcp/gkebackup/outputs.py | 319 +- .../pulumi_gcp/gkebackup/restore_plan.py | 326 ++ .../gkebackup/restore_plan_iam_binding.py | 326 ++ .../gkebackup/restore_plan_iam_member.py | 326 ++ .../gkebackup/restore_plan_iam_policy.py | 326 ++ sdk/python/pulumi_gcp/healthcare/_inputs.py | 18 +- .../pulumi_gcp/healthcare/dicom_store.py | 2 + .../pulumi_gcp/healthcare/fhir_store.py | 104 +- sdk/python/pulumi_gcp/healthcare/outputs.py | 16 +- .../endpoint_attachment.py | 47 + sdk/python/pulumi_gcp/kms/crypto_key.py | 21 +- sdk/python/pulumi_gcp/netapp/_inputs.py | 58 + sdk/python/pulumi_gcp/netapp/outputs.py | 67 + sdk/python/pulumi_gcp/netapp/volume.py | 54 + .../pulumi_gcp/networkservices/__init__.py | 1 + .../pulumi_gcp/networkservices/_inputs.py | 47 + .../pulumi_gcp/networkservices/outputs.py | 56 + .../networkservices/service_lb_policies.py | 782 ++++ sdk/python/pulumi_gcp/provider.py | 20 + sdk/python/pulumi_gcp/redis/_inputs.py | 44 + sdk/python/pulumi_gcp/redis/cluster.py | 131 +- sdk/python/pulumi_gcp/redis/outputs.py | 36 + .../pulumi_gcp/secretmanager/_inputs.py | 20 + .../pulumi_gcp/secretmanager/outputs.py | 20 + .../secretmanager/secret_iam_binding.py | 244 ++ .../secretmanager/secret_iam_member.py | 244 ++ .../secretmanager/secret_iam_policy.py | 224 ++ .../pulumi_gcp/securitycenter/__init__.py | 1 + ...on_event_threat_detection_custom_module.py | 568 +++ sdk/python/pulumi_gcp/spanner/__init__.py | 1 + sdk/python/pulumi_gcp/spanner/_inputs.py | 68 + .../pulumi_gcp/spanner/instance_config.py | 569 +++ sdk/python/pulumi_gcp/spanner/outputs.py | 73 + sdk/python/pulumi_gcp/sql/_inputs.py | 10 +- sdk/python/pulumi_gcp/sql/outputs.py | 15 +- sdk/python/pulumi_gcp/workstations/_inputs.py | 52 +- sdk/python/pulumi_gcp/workstations/outputs.py | 48 +- .../workstations/workstation_config.py | 14 +- upstream | 2 +- 547 files changed, 48191 insertions(+), 1015 deletions(-) create mode 100644 sdk/dotnet/AppEngine/Inputs/FlexibleAppVersionFlexibleRuntimeSettingsArgs.cs create mode 100644 sdk/dotnet/AppEngine/Inputs/FlexibleAppVersionFlexibleRuntimeSettingsGetArgs.cs create mode 100644 sdk/dotnet/AppEngine/Outputs/FlexibleAppVersionFlexibleRuntimeSettings.cs create mode 100644 sdk/dotnet/Compute/GetSecurityPolicy.cs create mode 100644 sdk/dotnet/Compute/Inputs/InstanceGroupManagerStandbyPolicyArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/InstanceGroupManagerStandbyPolicyGetArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/RegionInstanceGroupManagerStandbyPolicyArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/RegionInstanceGroupManagerStandbyPolicyGetArgs.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetInstanceGroupManagerStandbyPolicyResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdvancedOptionsConfigResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRecaptchaOptionsConfigResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleHeaderActionRequestHeadersToAddResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleHeaderActionResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleMatchConfigResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleMatchExprResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleMatchResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionBanThresholdResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRedirectOptionResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/InstanceGroupManagerStandbyPolicy.cs create mode 100644 sdk/dotnet/Compute/Outputs/RegionInstanceGroupManagerStandbyPolicy.cs create mode 100644 sdk/dotnet/Compute/ProjectCloudArmorTier.cs create mode 100644 sdk/dotnet/Container/Inputs/ClusterSecretManagerConfigArgs.cs create mode 100644 sdk/dotnet/Container/Inputs/ClusterSecretManagerConfigGetArgs.cs create mode 100644 sdk/dotnet/Container/Outputs/ClusterSecretManagerConfig.cs create mode 100644 sdk/dotnet/Container/Outputs/GetClusterSecretManagerConfigResult.cs create mode 100644 sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs.cs create mode 100644 sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceGetArgs.cs create mode 100644 sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs.cs create mode 100644 sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceGetArgs.cs create mode 100644 sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetSecretsTargetArgs.cs create mode 100644 sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetSecretsTargetGetArgs.cs create mode 100644 sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference.cs create mode 100644 sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference.cs create mode 100644 sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetSecretsTarget.cs create mode 100644 sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderArgs.cs create mode 100644 sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGetArgs.cs create mode 100644 sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.cs create mode 100644 sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyGetArgs.cs create mode 100644 sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.cs create mode 100644 sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringGetArgs.cs create mode 100644 sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.cs create mode 100644 sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingGetArgs.cs create mode 100644 sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.cs create mode 100644 sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBindingGetArgs.cs create mode 100644 sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrder.cs create mode 100644 sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependency.cs create mode 100644 sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring.cs create mode 100644 sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying.cs create mode 100644 sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBinding.cs create mode 100644 sdk/dotnet/Netapp/Inputs/VolumeBackupConfigArgs.cs create mode 100644 sdk/dotnet/Netapp/Inputs/VolumeBackupConfigGetArgs.cs create mode 100644 sdk/dotnet/Netapp/Outputs/VolumeBackupConfig.cs create mode 100644 sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesAutoCapacityDrainArgs.cs create mode 100644 sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesAutoCapacityDrainGetArgs.cs create mode 100644 sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesFailoverConfigArgs.cs create mode 100644 sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesFailoverConfigGetArgs.cs create mode 100644 sdk/dotnet/NetworkServices/Outputs/ServiceLbPoliciesAutoCapacityDrain.cs create mode 100644 sdk/dotnet/NetworkServices/Outputs/ServiceLbPoliciesFailoverConfig.cs create mode 100644 sdk/dotnet/NetworkServices/ServiceLbPolicies.cs create mode 100644 sdk/dotnet/Redis/Inputs/ClusterZoneDistributionConfigArgs.cs create mode 100644 sdk/dotnet/Redis/Inputs/ClusterZoneDistributionConfigGetArgs.cs create mode 100644 sdk/dotnet/Redis/Outputs/ClusterZoneDistributionConfig.cs create mode 100644 sdk/dotnet/SecurityCenter/ManagementOrganizationEventThreatDetectionCustomModule.cs create mode 100644 sdk/dotnet/Spanner/Inputs/InstanceConfigReplicaArgs.cs create mode 100644 sdk/dotnet/Spanner/Inputs/InstanceConfigReplicaGetArgs.cs create mode 100644 sdk/dotnet/Spanner/InstanceConfig.cs create mode 100644 sdk/dotnet/Spanner/Outputs/InstanceConfigReplica.cs create mode 100644 sdk/go/gcp/compute/getSecurityPolicy.go create mode 100644 sdk/go/gcp/compute/projectCloudArmorTier.go create mode 100644 sdk/go/gcp/networkservices/serviceLbPolicies.go create mode 100644 sdk/go/gcp/securitycenter/managementOrganizationEventThreatDetectionCustomModule.go create mode 100644 sdk/go/gcp/spanner/instanceConfig.go create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/appengine/inputs/FlexibleAppVersionFlexibleRuntimeSettingsArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/appengine/outputs/FlexibleAppVersionFlexibleRuntimeSettings.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/ProjectCloudArmorTier.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/ProjectCloudArmorTierArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetSecurityPolicyArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetSecurityPolicyPlainArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceGroupManagerStandbyPolicyArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/ProjectCloudArmorTierState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceGroupManagerStandbyPolicyArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceGroupManagerStandbyPolicy.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdvancedOptionsConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRecaptchaOptionsConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyResult.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRule.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleHeaderAction.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleMatch.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleMatchConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleMatchExpr.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusion.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOption.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionBanThreshold.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRedirectOption.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceGroupManagerStandbyPolicy.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceGroupManagerStandbyPolicy.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterSecretManagerConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterSecretManagerConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterSecretManagerConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetSecretsTargetArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetSecretsTarget.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrder.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependency.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBinding.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeBackupConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/netapp/outputs/VolumeBackupConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/networkservices/ServiceLbPolicies.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/networkservices/ServiceLbPoliciesArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/networkservices/inputs/ServiceLbPoliciesAutoCapacityDrainArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/networkservices/inputs/ServiceLbPoliciesFailoverConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/networkservices/inputs/ServiceLbPoliciesState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/networkservices/outputs/ServiceLbPoliciesAutoCapacityDrain.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/networkservices/outputs/ServiceLbPoliciesFailoverConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterZoneDistributionConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterZoneDistributionConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/securitycenter/ManagementOrganizationEventThreatDetectionCustomModule.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/securitycenter/ManagementOrganizationEventThreatDetectionCustomModuleArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/securitycenter/inputs/ManagementOrganizationEventThreatDetectionCustomModuleState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/spanner/InstanceConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/spanner/InstanceConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/spanner/inputs/InstanceConfigReplicaArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/spanner/inputs/InstanceConfigState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/spanner/outputs/InstanceConfigReplica.java create mode 100644 sdk/nodejs/compute/getSecurityPolicy.ts create mode 100644 sdk/nodejs/compute/projectCloudArmorTier.ts create mode 100644 sdk/nodejs/networkservices/serviceLbPolicies.ts create mode 100644 sdk/nodejs/securitycenter/managementOrganizationEventThreatDetectionCustomModule.ts create mode 100644 sdk/nodejs/spanner/instanceConfig.ts create mode 100644 sdk/python/pulumi_gcp/compute/get_security_policy.py create mode 100644 sdk/python/pulumi_gcp/compute/project_cloud_armor_tier.py create mode 100644 sdk/python/pulumi_gcp/networkservices/service_lb_policies.py create mode 100644 sdk/python/pulumi_gcp/securitycenter/management_organization_event_threat_detection_custom_module.py create mode 100644 sdk/python/pulumi_gcp/spanner/instance_config.py diff --git a/patches/0001-Allow-disabling-the-partner-name.patch b/patches/0001-Allow-disabling-the-partner-name.patch index 02b6a84a40..c6f0b29da1 100644 --- a/patches/0001-Allow-disabling-the-partner-name.patch +++ b/patches/0001-Allow-disabling-the-partner-name.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Allow disabling the partner name Add options to set or disable partner name. diff --git a/google-beta/provider/provider.go b/google-beta/provider/provider.go -index c26d864a9..64491e969 100644 +index e592732aa..31215950d 100644 --- a/google-beta/provider/provider.go +++ b/google-beta/provider/provider.go -@@ -123,6 +123,19 @@ func Provider() *schema.Provider { +@@ -122,6 +122,19 @@ func Provider() *schema.Provider { Optional: true, }, @@ -29,7 +29,7 @@ index c26d864a9..64491e969 100644 "request_reason": { Type: schema.TypeString, Optional: true, -@@ -875,6 +888,21 @@ func ProviderConfigure(ctx context.Context, d *schema.ResourceData, p *schema.Pr +@@ -879,6 +892,21 @@ func ProviderConfigure(ctx context.Context, d *schema.ResourceData, p *schema.Pr UserAgent: p.UserAgent("terraform-provider-google-beta", version.ProviderVersion), } diff --git a/patches/0002-Add-nil-checks-for-sql-database-instance-flattening.patch b/patches/0002-Add-nil-checks-for-sql-database-instance-flattening.patch index f3cb00d99c..3b3e1b85ad 100644 --- a/patches/0002-Add-nil-checks-for-sql-database-instance-flattening.patch +++ b/patches/0002-Add-nil-checks-for-sql-database-instance-flattening.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add nil checks for sql database instance flattening diff --git a/google-beta/services/sql/resource_sql_database_instance.go b/google-beta/services/sql/resource_sql_database_instance.go -index 1a9487b54..52ea39529 100644 +index a2ad8ea46..990596c42 100644 --- a/google-beta/services/sql/resource_sql_database_instance.go +++ b/google-beta/services/sql/resource_sql_database_instance.go -@@ -2054,6 +2054,10 @@ func resourceSqlDatabaseInstanceImport(d *schema.ResourceData, meta interface{}) +@@ -2055,6 +2055,10 @@ func resourceSqlDatabaseInstanceImport(d *schema.ResourceData, meta interface{}) } func flattenSettings(settings *sqladmin.Settings, d *schema.ResourceData) []map[string]interface{} { @@ -19,7 +19,7 @@ index 1a9487b54..52ea39529 100644 data := map[string]interface{}{ "version": settings.SettingsVersion, "tier": settings.Tier, -@@ -2143,6 +2147,10 @@ func flattenDataCacheConfig(d *sqladmin.DataCacheConfig) []map[string]interface{ +@@ -2144,6 +2148,10 @@ func flattenDataCacheConfig(d *sqladmin.DataCacheConfig) []map[string]interface{ } func flattenBackupConfiguration(backupConfiguration *sqladmin.BackupConfiguration) []map[string]interface{} { @@ -30,7 +30,7 @@ index 1a9487b54..52ea39529 100644 data := map[string]interface{}{ "binary_log_enabled": backupConfiguration.BinaryLogEnabled, "enabled": backupConfiguration.Enabled, -@@ -2235,6 +2243,10 @@ func flattenDatabaseFlags(databaseFlags []*sqladmin.DatabaseFlags) []map[string] +@@ -2236,6 +2244,10 @@ func flattenDatabaseFlags(databaseFlags []*sqladmin.DatabaseFlags) []map[string] } func flattenIpConfiguration(ipConfiguration *sqladmin.IpConfiguration, d *schema.ResourceData) interface{} { @@ -41,7 +41,7 @@ index 1a9487b54..52ea39529 100644 data := map[string]interface{}{ "ipv4_enabled": ipConfiguration.Ipv4Enabled, "private_network": ipConfiguration.PrivateNetwork, -@@ -2285,6 +2297,10 @@ func flattenAuthorizedNetworks(entries []*sqladmin.AclEntry) interface{} { +@@ -2286,6 +2298,10 @@ func flattenAuthorizedNetworks(entries []*sqladmin.AclEntry) interface{} { } func flattenLocationPreference(locationPreference *sqladmin.LocationPreference) interface{} { @@ -52,7 +52,7 @@ index 1a9487b54..52ea39529 100644 data := map[string]interface{}{ "follow_gae_application": locationPreference.FollowGaeApplication, "zone": locationPreference.Zone, -@@ -2295,6 +2311,10 @@ func flattenLocationPreference(locationPreference *sqladmin.LocationPreference) +@@ -2296,6 +2312,10 @@ func flattenLocationPreference(locationPreference *sqladmin.LocationPreference) } func flattenMaintenanceWindow(maintenanceWindow *sqladmin.MaintenanceWindow) interface{} { @@ -63,7 +63,7 @@ index 1a9487b54..52ea39529 100644 data := map[string]interface{}{ "day": maintenanceWindow.Day, "hour": maintenanceWindow.Hour, -@@ -2369,6 +2389,10 @@ func flattenServerCaCerts(caCerts []*sqladmin.SslCert) []map[string]interface{} +@@ -2370,6 +2390,10 @@ func flattenServerCaCerts(caCerts []*sqladmin.SslCert) []map[string]interface{} } func flattenInsightsConfig(insightsConfig *sqladmin.InsightsConfig) interface{} { diff --git a/patches/0006-docs-patching.patch b/patches/0006-docs-patching.patch index 3e4aff3a3f..d32bbc53e6 100644 --- a/patches/0006-docs-patching.patch +++ b/patches/0006-docs-patching.patch @@ -147,10 +147,10 @@ index de386e9ff..0029e996e 100644 ~> **Warning:** All arguments including `iap.oauth2_client_secret` will be stored in the raw state as plain-text. [Read more about sensitive data in state](https://www.terraform.io/language/state/sensitive-data). diff --git a/website/docs/r/app_engine_flexible_app_version.html.markdown b/website/docs/r/app_engine_flexible_app_version.html.markdown -index 9cd05ee8e..865b6fe33 100644 +index 20dbca48c..bc9d08794 100644 --- a/website/docs/r/app_engine_flexible_app_version.html.markdown +++ b/website/docs/r/app_engine_flexible_app_version.html.markdown -@@ -302,7 +302,7 @@ The following arguments are supported: +@@ -307,7 +307,7 @@ The following arguments are supported: * `env_variables` - (Optional) @@ -188,7 +188,7 @@ index ff370dce5..423d163bb 100644 location = "us-central1" slot_capacity = 0 diff --git a/website/docs/r/bigquery_table.html.markdown b/website/docs/r/bigquery_table.html.markdown -index dc0c5df59..451e468b9 100644 +index 48109ed6a..e3bd7d19c 100644 --- a/website/docs/r/bigquery_table.html.markdown +++ b/website/docs/r/bigquery_table.html.markdown @@ -11,7 +11,7 @@ Creates a table resource in a dataset for Google BigQuery. For more information @@ -200,18 +200,20 @@ index dc0c5df59..451e468b9 100644 It is recommended to not set this field (or set it to true) until you're ready to destroy. ## Example Usage -@@ -161,8 +161,8 @@ The following arguments are supported: +@@ -161,10 +161,8 @@ The following arguments are supported: * `materialized_view` - (Optional) If specified, configures this table as a materialized view. Structure is [documented below](#nested_materialized_view). --* `deletion_protection` - (Optional) 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. +-* `deletion_protection` - (Optional) Whether Terraform will be prevented from destroying the table. +- When the field is set to true or unset in Terraform state, a `terraform apply` +- or `terraform destroy` that would delete the table will fail. +- When the field is set to false, deleting the table is allowed.. +* `deletion_protection` - (Optional) 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. * `table_constraints` - (Optional) Defines the primary key and foreign keys. Structure is [documented below](#nested_table_constraints). -@@ -257,8 +257,8 @@ in Terraform state, a `terraform destroy` or `terraform apply` that would delete +@@ -278,8 +276,8 @@ The following arguments are supported: 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. @@ -238,7 +240,7 @@ index cb9d983d6..79d52eba7 100644 ## Attributes Reference diff --git a/website/docs/r/bigtable_instance.html.markdown b/website/docs/r/bigtable_instance.html.markdown -index c04a97d50..ec907661c 100644 +index c9b952fde..a17feabfb 100644 --- a/website/docs/r/bigtable_instance.html.markdown +++ b/website/docs/r/bigtable_instance.html.markdown @@ -1,4 +1,4 @@ @@ -265,18 +267,22 @@ index c04a97d50..ec907661c 100644 ## Example Usage - Simple Instance ```hcl -@@ -97,8 +86,8 @@ to default to the backend value. See [structure below](#nested_cluster). +@@ -97,11 +86,10 @@ to default to the backend value. See [structure below](#nested_cluster). * `display_name` - (Optional) The human-readable display name of the Bigtable instance. Defaults to the instance `name`. --* `deletion_protection` - (Optional) 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. +-* `force_destroy` - (Optional) Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, Terraform will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. ++* `force_destroy` - (Optional) Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + +-* `deletion_protection` - (Optional) Whether Terraform will be prevented from destroying the instance. +- When the field is set to true or unset in Terraform state, a `terraform apply` or `terraform destroy` that would delete +- the instance will fail. When the field is set to false, deleting the instance is allowed. +* `deletion_protection` - (Optional) 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. * `labels` - (Optional) A set of key/value label pairs to assign to the resource. Label keys must follow the requirements at https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements. -@@ -140,8 +129,10 @@ If no value is set, Cloud Bigtable automatically allocates nodes based on your d +@@ -143,8 +131,10 @@ If no value is set, Cloud Bigtable automatically allocates nodes based on your d -> **Note**: Removing the field entirely from the config will cause the provider to default to the backend value. @@ -410,7 +416,7 @@ index 285a707b8..d2632266f 100644 **Note**: This field is non-authoritative, and will only manage the annotations present in your configuration. Please refer to the field `effective_annotations` for all of the annotations present on the resource. diff --git a/website/docs/r/cloud_run_service.html.markdown b/website/docs/r/cloud_run_service.html.markdown -index fe378c677..11b3297ce 100644 +index 64411b7c3..5fa1ea293 100644 --- a/website/docs/r/cloud_run_service.html.markdown +++ b/website/docs/r/cloud_run_service.html.markdown @@ -31,8 +31,63 @@ To get more information about Service, see: @@ -506,7 +512,7 @@ index fe378c677..11b3297ce 100644 Structure is [documented below](#nested_liveness_probe). -@@ -980,7 +1036,7 @@ this field is set to false, the revision name will still autogenerate.) +@@ -1001,7 +1057,7 @@ this field is set to false, the revision name will still autogenerate.) may be set by external tools to store and retrieve arbitrary metadata. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations **Note**: The Cloud Run API may add additional annotations that were not provided in your config. @@ -529,7 +535,7 @@ index c3e738686..4ab0fb25d 100644 * `project` - (Optional) The ID of the project in which the resource belongs. If it is not provided, the provider project is used. diff --git a/website/docs/r/composer_environment.html.markdown b/website/docs/r/composer_environment.html.markdown -index 9ec2914b1..ce5805f76 100644 +index 27acf1c3b..68be70b82 100644 --- a/website/docs/r/composer_environment.html.markdown +++ b/website/docs/r/composer_environment.html.markdown @@ -27,18 +27,18 @@ To get more information about Environments, see: @@ -594,7 +600,7 @@ index 0a305240d..845f44993 100644 ## Example Usage - Backend Bucket Signed Url Key diff --git a/website/docs/r/compute_backend_service.html.markdown b/website/docs/r/compute_backend_service.html.markdown -index f6304a9cb..2faaac368 100644 +index 4a3cafcef..977f32f58 100644 --- a/website/docs/r/compute_backend_service.html.markdown +++ b/website/docs/r/compute_backend_service.html.markdown @@ -34,9 +34,8 @@ To get more information about BackendService, see: @@ -626,7 +632,7 @@ index a6bbbfa4b..92a6811de 100644 ## Example Usage - Backend Service Signed Url Key diff --git a/website/docs/r/compute_disk.html.markdown b/website/docs/r/compute_disk.html.markdown -index f87237034..0e33439d5 100644 +index 71c68faa2..2a483de9a 100644 --- a/website/docs/r/compute_disk.html.markdown +++ b/website/docs/r/compute_disk.html.markdown @@ -43,9 +43,6 @@ To get more information about Disk, see: @@ -690,7 +696,7 @@ index f9cad9040..243ba6fd0 100644 ## Attributes Reference diff --git a/website/docs/r/compute_instance.html.markdown b/website/docs/r/compute_instance.html.markdown -index 9c7c41e14..62103fea5 100644 +index 9f7553b52..b3ae4ddc6 100644 --- a/website/docs/r/compute_instance.html.markdown +++ b/website/docs/r/compute_instance.html.markdown @@ -87,7 +87,7 @@ The following arguments are supported: @@ -819,10 +825,10 @@ index 5d846e846..8dda2ecb4 100644 instances = [ google_compute_instance.test.id, diff --git a/website/docs/r/compute_instance_group_manager.html.markdown b/website/docs/r/compute_instance_group_manager.html.markdown -index 06fe5a3b0..78cb6f237 100644 +index 7f59c534c..cf9f9c52d 100644 --- a/website/docs/r/compute_instance_group_manager.html.markdown +++ b/website/docs/r/compute_instance_group_manager.html.markdown -@@ -140,7 +140,7 @@ The following arguments are supported: +@@ -165,7 +165,7 @@ The following arguments are supported: not affect existing instances. * `wait_for_instances` - (Optional) Whether to wait for all instances to be created/updated before @@ -847,7 +853,7 @@ index fe6888f17..64fce6636 100644 ## Attributes Reference diff --git a/website/docs/r/compute_instance_template.html.markdown b/website/docs/r/compute_instance_template.html.markdown -index 8700dbdff..14fa13967 100644 +index e1030a25b..807ac4bb7 100644 --- a/website/docs/r/compute_instance_template.html.markdown +++ b/website/docs/r/compute_instance_template.html.markdown @@ -183,12 +183,11 @@ resource "google_compute_instance_template" "foobar" { @@ -911,7 +917,7 @@ index 8700dbdff..14fa13967 100644 * `name_prefix` - (Optional) Creates a unique name beginning with the specified prefix. Conflicts with `name`. -@@ -501,7 +501,7 @@ The following arguments are supported: +@@ -503,7 +503,7 @@ The following arguments are supported: * `access_config` - (Optional) 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 @@ -1152,10 +1158,10 @@ index db7f57628..dceb98ac2 100644 ```hcl diff --git a/website/docs/r/compute_region_instance_group_manager.html.markdown b/website/docs/r/compute_region_instance_group_manager.html.markdown -index b1c16d386..3a38d2595 100644 +index 4a4e7be0e..3891cdef3 100644 --- a/website/docs/r/compute_region_instance_group_manager.html.markdown +++ b/website/docs/r/compute_region_instance_group_manager.html.markdown -@@ -142,7 +142,7 @@ The following arguments are supported: +@@ -166,7 +166,7 @@ The following arguments are supported: not affect existing instances. * `wait_for_instances` - (Optional) Whether to wait for all instances to be created/updated before @@ -1484,7 +1490,7 @@ index 000000000..62d6db522 + +This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override). diff --git a/website/docs/r/compute_security_policy.html.markdown b/website/docs/r/compute_security_policy.html.markdown -index 26305820e..63e16cd7f 100644 +index 76bb154d9..f605d8c1b 100644 --- a/website/docs/r/compute_security_policy.html.markdown +++ b/website/docs/r/compute_security_policy.html.markdown @@ -10,7 +10,7 @@ A Security Policy defines an IP blacklist or whitelist that protects load balanc @@ -1604,7 +1610,7 @@ index f18c91533..924ad4cc0 100644
diff --git a/website/docs/r/container_cluster.html.markdown b/website/docs/r/container_cluster.html.markdown -index d8a9314fb..4d3a2ceef 100644 +index 94443c5c1..803ba538a 100644 --- a/website/docs/r/container_cluster.html.markdown +++ b/website/docs/r/container_cluster.html.markdown @@ -13,15 +13,12 @@ To get more information about GKE clusters, see: @@ -1686,7 +1692,7 @@ index d8a9314fb..4d3a2ceef 100644 To update nodes in other node pools, use the `version` attribute on the node pool. * `notification_config` - (Optional) Configuration for the [cluster upgrade notifications](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-upgrade-notifications) feature. Structure is [documented below](#nested_notification_config). -@@ -313,7 +331,7 @@ When updating this field, GKE imposes specific version requirements. See +@@ -317,7 +335,7 @@ When updating this field, GKE imposes specific version requirements. See [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) for more details; the `google_container_engine_versions` datasource can provide the default version for a channel. Note that removing the `release_channel` @@ -1695,7 +1701,7 @@ index d8a9314fb..4d3a2ceef 100644 release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` channel. Structure is [documented below](#nested_release_channel). -@@ -852,8 +870,6 @@ gvnic { +@@ -856,8 +874,6 @@ gvnic { * `guest_accelerator` - (Optional) List of the type and count of accelerator cards attached to the instance. Structure [documented below](#nested_guest_accelerator). @@ -1704,7 +1710,7 @@ index d8a9314fb..4d3a2ceef 100644 * `image_type` - (Optional) The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool. -@@ -874,7 +890,7 @@ gvnic { +@@ -878,7 +894,7 @@ gvnic { * `metadata` - (Optional) The metadata key/value pairs assigned to instances in the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to `true` by the API; if `metadata` is set but that default value is not @@ -1713,7 +1719,7 @@ index d8a9314fb..4d3a2ceef 100644 value in your config. * `min_cpu_platform` - (Optional) Minimum CPU platform to be used by this instance. -@@ -899,10 +915,7 @@ gvnic { +@@ -903,10 +919,7 @@ gvnic { See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/concepts/spot-vms) for more information. Defaults to false. @@ -1725,7 +1731,7 @@ index d8a9314fb..4d3a2ceef 100644 * `service_account` - (Optional) The service account to be used by the Node VMs. If not specified, the "default" service account is used. -@@ -914,13 +927,14 @@ gvnic { +@@ -918,13 +931,14 @@ gvnic { * `resource_manager_tags` - (Optional) A map of resource manager tag keys and values to be attached to the nodes for managing Compute Engine firewalls using Network Firewall Policies. Tags must be according to specifications found [here](https://cloud.google.com/vpc/docs/tags-firewalls-overview#specifications). A maximum of 5 tag key-value pairs can be specified. Existing tags will be replaced with new values. Tags must be in one of the following formats ([KEY]=[VALUE]) 1. `tagKeys/{tag_key_id}=tagValues/{tag_value_id}` 2. `{org_id}/{tag_key_name}={tag_value_name}` 3. `{project_id}/{tag_key_name}={tag_value_name}`. @@ -1747,10 +1753,16 @@ index d8a9314fb..4d3a2ceef 100644 * `workload_metadata_config` - (Optional) Metadata configuration to expose to workloads on the node pool. Structure is [documented below](#nested_workload_metadata_config). -@@ -977,6 +991,14 @@ sole_tenant_config { +@@ -977,6 +991,20 @@ sole_tenant_config { - * `total_egress_bandwidth_tier` (Required) - Specifies the total network bandwidth tier for the NodePool. + * `enable_nested_virtualization`- (Optional) Defines whether the instance should have nested virtualization enabled. Defaults to false. ++* `network_performance_config` - (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) Network bandwidth tier configuration. ++ ++The `network_performance_config` block supports: ++ ++* `total_egress_bandwidth_tier` (Required) - Specifies the total network bandwidth tier for the NodePool. ++ +The `network_config` block supports: + +* `create_pod_range` - (Optional) 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. @@ -1762,7 +1774,7 @@ index d8a9314fb..4d3a2ceef 100644 The `ephemeral_storage_config` block supports: * `local_ssd_count` (Required) - Number of local SSDs to use to back ephemeral storage. Uses NVMe interfaces. Each local SSD is 375 GB in size. If zero, it means to disable using local SSDs as ephemeral storage. -@@ -1133,7 +1155,7 @@ for more details. This field only applies to private clusters, when +@@ -1137,7 +1165,7 @@ for more details. This field only applies to private clusters, when * `private_endpoint_subnetwork` - (Optional) Subnetwork in cluster's network where master's endpoint will be provisioned. * `master_global_access_config` (Optional) - Controls cluster master global @@ -1771,7 +1783,7 @@ index d8a9314fb..4d3a2ceef 100644 not modify the previously-set value. Structure is [documented below](#nested_master_global_access_config). In addition, the `private_cluster_config` allows access to the following read-only fields: -@@ -1234,9 +1256,9 @@ Enables monitoring and attestation of the boot integrity of the instance. The at +@@ -1238,9 +1266,9 @@ Enables monitoring and attestation of the boot integrity of the instance. The at * `mode` (Required) How to expose the node metadata to the workload running on the node. Accepted values are: @@ -1785,7 +1797,7 @@ index d8a9314fb..4d3a2ceef 100644 The `kubelet_config` block supports: diff --git a/website/docs/r/container_node_pool.html.markdown b/website/docs/r/container_node_pool.html.markdown -index 0df385456..ebe1ac0b7 100644 +index 0eef08600..efb12c98b 100644 --- a/website/docs/r/container_node_pool.html.markdown +++ b/website/docs/r/container_node_pool.html.markdown @@ -6,14 +6,11 @@ description: |- @@ -3069,7 +3081,7 @@ index 3eff57c07..662d642d1 100644 ## Attributes Reference diff --git a/website/docs/r/kms_crypto_key.html.markdown b/website/docs/r/kms_crypto_key.html.markdown -index d91ecfeca..c0aa7efee 100644 +index a1ee8d077..a3d2e5e41 100644 --- a/website/docs/r/kms_crypto_key.html.markdown +++ b/website/docs/r/kms_crypto_key.html.markdown @@ -23,9 +23,9 @@ A `CryptoKey` represents a logical key that can be used for cryptographic operat @@ -3335,7 +3347,7 @@ index 7967f8278..5ad114b4f 100644 goal = 0.9 rolling_period_days = 20 diff --git a/website/docs/r/monitoring_uptime_check_config.html.markdown b/website/docs/r/monitoring_uptime_check_config.html.markdown -index 15f0a2498..d1fe8a6de 100644 +index 042cec9a6..5f4fe6afb 100644 --- a/website/docs/r/monitoring_uptime_check_config.html.markdown +++ b/website/docs/r/monitoring_uptime_check_config.html.markdown @@ -28,9 +28,8 @@ To get more information about UptimeCheckConfig, see: @@ -3552,7 +3564,7 @@ index 7ff5ee271..7d1b76182 100644 * How-to Guides diff --git a/website/docs/r/spanner_database.html.markdown b/website/docs/r/spanner_database.html.markdown -index 26478edfe..da87bdaae 100644 +index 2ac02739f..da87bdaae 100644 --- a/website/docs/r/spanner_database.html.markdown +++ b/website/docs/r/spanner_database.html.markdown @@ -29,12 +29,10 @@ To get more information about Database, see: @@ -3570,19 +3582,23 @@ index 26478edfe..da87bdaae 100644
-@@ -120,8 +118,8 @@ The following arguments are supported: +@@ -120,12 +118,8 @@ The following arguments are supported: * `project` - (Optional) The ID of the project in which the resource belongs. If it is not provided, the provider project is used. --* `deletion_protection` - (Optional) Whether or not to allow Terraform to destroy the database. Defaults to true. Unless this field is set to false --in Terraform state, a `terraform destroy` or `terraform apply` that would delete the database will fail. +-* `deletion_protection` - (Optional) Whether Terraform will be prevented from destroying the database. Defaults to true. +-When a`terraform destroy` or `terraform apply` would delete the database, +-the command will fail if this field is not set to false in Terraform state. +-When the field is set to true or unset in Terraform state, a `terraform apply` +-or `terraform destroy` that would delete the database will fail. +-When the field is set to false, deleting the database is allowed. +* `deletion_protection` - (Optional) 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. The `encryption_config` block supports: diff --git a/website/docs/r/sql_database_instance.html.markdown b/website/docs/r/sql_database_instance.html.markdown -index df8d9ee0f..9c006da71 100644 +index 806bcd2bd..e571081a3 100644 --- a/website/docs/r/sql_database_instance.html.markdown +++ b/website/docs/r/sql_database_instance.html.markdown @@ -10,12 +10,12 @@ Creates a new Google SQL Database Instance. For more information, see the [offic @@ -3618,12 +3634,14 @@ index df8d9ee0f..9c006da71 100644 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 -@@ -248,18 +248,16 @@ includes an up-to-date reference of supported versions. +@@ -248,20 +248,16 @@ includes an up-to-date reference of supported versions. 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). --* `deletion_protection` - (Optional) 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` command that deletes the instance will fail. Defaults to `true`. +-* `deletion_protection` - (Optional) Whether Terraform will be prevented from destroying the instance. +- When the field is set to true or unset in Terraform state, a `terraform apply` +- or `terraform destroy` that would delete the instance will fail. +- When the field is set to false, deleting the instance is allowed. - - ~> **NOTE:** This flag only protects instances from deletion within Terraform. To protect your instances from accidental deletion across all surfaces (API, gcloud, Cloud Console and Terraform), use the API flag `settings.deletion_protection_enabled`. +* `deletion_protection` - (Optional) Whether or not to allow the provider to destroy the instance. Unless this field is set to false @@ -3642,7 +3660,7 @@ index df8d9ee0f..9c006da71 100644 configuration is detailed below. The `settings` block supports: -@@ -499,7 +497,7 @@ The optional `clone` block supports: +@@ -500,7 +496,7 @@ The optional `clone` block supports: * `allocated_ip_range` - (Optional) The name of the allocated ip range for the private ip CloudSQL instance. For example: "google-managed-services-default". If set, the cloned instance ip will be created in the allocated range. The range name must comply with [RFC 1035](https://tools.ietf.org/html/rfc1035). Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])?. The optional `restore_backup_context` block supports: @@ -3651,7 +3669,7 @@ index df8d9ee0f..9c006da71 100644 block during resource creation/update will trigger the restore action after the resource is created/updated. * `backup_run_id` - (Required) The ID of the backup run to restore from. -@@ -537,21 +535,13 @@ instance. +@@ -538,21 +534,13 @@ instance. * A `PRIVATE` address is an address for an instance which has been configured to use private networking see: [Private IP](https://cloud.google.com/sql/docs/mysql/private-ip). @@ -3691,7 +3709,7 @@ index 21e3d32cd..5fc2cc98d 100644 ## Example Usage diff --git a/website/docs/r/sql_user.html.markdown b/website/docs/r/sql_user.html.markdown -index fc3860367..0145f48ba 100644 +index 2f23a5971..a9ad72add 100644 --- a/website/docs/r/sql_user.html.markdown +++ b/website/docs/r/sql_user.html.markdown @@ -9,8 +9,6 @@ description: |- @@ -3704,7 +3722,7 @@ index fc3860367..0145f48ba 100644 ## Example Usage diff --git a/website/docs/r/storage_bucket.html.markdown b/website/docs/r/storage_bucket.html.markdown -index bd223adba..e267e7787 100644 +index e09ba9dae..cef2d6a02 100644 --- a/website/docs/r/storage_bucket.html.markdown +++ b/website/docs/r/storage_bucket.html.markdown @@ -115,7 +115,7 @@ The following arguments are supported: @@ -3716,7 +3734,7 @@ index bd223adba..e267e7787 100644 * `project` - (Optional) The ID of the project in which the resource belongs. If it is not provided, the provider project is used. -@@ -249,9 +249,9 @@ The following arguments are supported: +@@ -255,9 +255,9 @@ The following arguments are supported: until a relevant action has occurred which triggers its creation. You should use the [`google_storage_project_service_account`](/docs/providers/google/d/storage_project_service_account.html) data source to obtain the email address for the service account when configuring IAM policy on the Cloud KMS key. diff --git a/patches/0008-Remove-duplicative-resource-token.patch b/patches/0008-Remove-duplicative-resource-token.patch index 87b626d196..6130b28e98 100644 --- a/patches/0008-Remove-duplicative-resource-token.patch +++ b/patches/0008-Remove-duplicative-resource-token.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove duplicative resource token diff --git a/google-beta/provider/provider.go b/google-beta/provider/provider.go -index 64491e969..70c0826c1 100644 +index 31215950d..6b748384f 100644 --- a/google-beta/provider/provider.go +++ b/google-beta/provider/provider.go -@@ -848,6 +848,15 @@ func Provider() *schema.Provider { +@@ -852,6 +852,15 @@ func Provider() *schema.Provider { func DatasourceMap() map[string]*schema.Resource { datasourceMap, _ := DatasourceMapWithErrors() diff --git a/patches/0009-Fix-794-with-an-unconditional-read.patch b/patches/0009-Fix-794-with-an-unconditional-read.patch index 48b094e0a8..e04d7e06d3 100644 --- a/patches/0009-Fix-794-with-an-unconditional-read.patch +++ b/patches/0009-Fix-794-with-an-unconditional-read.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix #794 with an unconditional read. diff --git a/google-beta/services/sql/resource_sql_database_instance.go b/google-beta/services/sql/resource_sql_database_instance.go -index 52ea39529..ac718482a 100644 +index 990596c42..8bd4c63f3 100644 --- a/google-beta/services/sql/resource_sql_database_instance.go +++ b/google-beta/services/sql/resource_sql_database_instance.go -@@ -1909,10 +1909,11 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{}) +@@ -1910,10 +1910,11 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{}) if err != nil { return err } diff --git a/patches/0011-fix-label-imports.patch b/patches/0011-fix-label-imports.patch index f0aa59ca58..a2665807bf 100644 --- a/patches/0011-fix-label-imports.patch +++ b/patches/0011-fix-label-imports.patch @@ -5,10 +5,10 @@ Subject: [PATCH] fix label imports diff --git a/google-beta/services/storage/resource_storage_bucket.go b/google-beta/services/storage/resource_storage_bucket.go -index ecb3e6ee9..b2890f736 100644 +index 772e911ac..932dfb4a3 100644 --- a/google-beta/services/storage/resource_storage_bucket.go +++ b/google-beta/services/storage/resource_storage_bucket.go -@@ -1785,10 +1785,10 @@ func setStorageBucket(d *schema.ResourceData, config *transport_tpg.Config, res +@@ -1837,10 +1837,10 @@ func setStorageBucket(d *schema.ResourceData, config *transport_tpg.Config, res if err := d.Set("lifecycle_rule", flattenBucketLifecycle(d, res.Lifecycle)); err != nil { return fmt.Errorf("Error setting lifecycle_rule: %s", err) } diff --git a/provider/cmd/pulumi-resource-gcp/bridge-metadata.json b/provider/cmd/pulumi-resource-gcp/bridge-metadata.json index 96450b0b06..251166bda6 100644 --- a/provider/cmd/pulumi-resource-gcp/bridge-metadata.json +++ b/provider/cmd/pulumi-resource-gcp/bridge-metadata.json @@ -1563,6 +1563,9 @@ "entrypoint": { "maxItemsOne": true }, + "flexible_runtime_settings": { + "maxItemsOne": true + }, "handlers": { "maxItemsOne": false, "elem": { @@ -5935,6 +5938,9 @@ "params": { "maxItemsOne": true }, + "standby_policy": { + "maxItemsOne": true + }, "stateful_disk": { "maxItemsOne": false }, @@ -6552,6 +6558,10 @@ } } }, + "google_compute_project_cloud_armor_tier": { + "current": "gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier", + "majorVersion": 7 + }, "google_compute_project_default_network_tier": { "current": "gcp:compute/projectDefaultNetworkTier:ProjectDefaultNetworkTier", "majorVersion": 7 @@ -6852,6 +6862,9 @@ "params": { "maxItemsOne": true }, + "standby_policy": { + "maxItemsOne": true + }, "stateful_disk": { "maxItemsOne": false }, @@ -9947,6 +9960,9 @@ } } }, + "secret_manager_config": { + "maxItemsOne": true + }, "security_posture_config": { "maxItemsOne": true }, @@ -11521,6 +11537,9 @@ "other_tables": { "maxItemsOne": true }, + "table_reference": { + "maxItemsOne": true + }, "tables": { "maxItemsOne": true, "elem": { @@ -11585,6 +11604,9 @@ } } }, + "database_resource_reference": { + "maxItemsOne": true + }, "others": { "maxItemsOne": true } @@ -11610,6 +11632,9 @@ } } } + }, + "secrets_target": { + "maxItemsOne": true } } } @@ -16663,6 +16688,26 @@ } } }, + "restore_order": { + "maxItemsOne": true, + "elem": { + "fields": { + "group_kind_dependencies": { + "maxItemsOne": false, + "elem": { + "fields": { + "requiring": { + "maxItemsOne": true + }, + "satisfying": { + "maxItemsOne": true + } + } + } + } + } + } + }, "selected_applications": { "maxItemsOne": true, "elem": { @@ -16705,6 +16750,9 @@ } } } + }, + "volume_data_restore_policy_bindings": { + "maxItemsOne": false } } } @@ -19965,6 +20013,16 @@ "current": "gcp:netapp/volume:Volume", "majorVersion": 7, "fields": { + "backup_config": { + "maxItemsOne": true, + "elem": { + "fields": { + "backup_policies": { + "maxItemsOne": false + } + } + } + }, "export_policy": { "maxItemsOne": true, "elem": { @@ -20926,6 +20984,18 @@ "current": "gcp:networkservices/serviceBinding:ServiceBinding", "majorVersion": 7 }, + "google_network_services_service_lb_policies": { + "current": "gcp:networkservices/serviceLbPolicies:ServiceLbPolicies", + "majorVersion": 7, + "fields": { + "auto_capacity_drain": { + "maxItemsOne": true + }, + "failover_config": { + "maxItemsOne": true + } + } + }, "google_network_services_tcp_route": { "current": "gcp:networkservices/tcpRoute:TcpRoute", "majorVersion": 7, @@ -23259,6 +23329,9 @@ } } } + }, + "zone_distribution_config": { + "maxItemsOne": true } } }, @@ -23386,6 +23459,10 @@ } } }, + "google_scc_management_organization_event_threat_detection_custom_module": { + "current": "gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule", + "majorVersion": 7 + }, "google_scc_mute_config": { "current": "gcp:securitycenter/muteConfig:MuteConfig", "majorVersion": 7 @@ -24048,6 +24125,15 @@ } } }, + "google_spanner_instance_config": { + "current": "gcp:spanner/instanceConfig:InstanceConfig", + "majorVersion": 7, + "fields": { + "replicas": { + "maxItemsOne": false + } + } + }, "google_spanner_instance_iam_binding": { "current": "gcp:spanner/instanceIAMBinding:InstanceIAMBinding", "majorVersion": 7, @@ -27423,6 +27509,9 @@ "params": { "maxItemsOne": false }, + "standby_policy": { + "maxItemsOne": false + }, "stateful_disk": { "maxItemsOne": false }, @@ -28098,6 +28187,136 @@ } } }, + "google_compute_security_policy": { + "current": "gcp:compute/getSecurityPolicy:getSecurityPolicy", + "majorVersion": 7, + "fields": { + "adaptive_protection_config": { + "maxItemsOne": false, + "elem": { + "fields": { + "auto_deploy_config": { + "maxItemsOne": false + }, + "layer_7_ddos_defense_config": { + "maxItemsOne": false + } + } + } + }, + "advanced_options_config": { + "maxItemsOne": false, + "elem": { + "fields": { + "json_custom_config": { + "maxItemsOne": false, + "elem": { + "fields": { + "content_types": { + "maxItemsOne": false + } + } + } + }, + "user_ip_request_headers": { + "maxItemsOne": false + } + } + } + }, + "recaptcha_options_config": { + "maxItemsOne": false + }, + "rule": { + "maxItemsOne": false, + "elem": { + "fields": { + "header_action": { + "maxItemsOne": false, + "elem": { + "fields": { + "request_headers_to_adds": { + "maxItemsOne": false + } + } + } + }, + "match": { + "maxItemsOne": false, + "elem": { + "fields": { + "config": { + "maxItemsOne": false, + "elem": { + "fields": { + "src_ip_ranges": { + "maxItemsOne": false + } + } + } + }, + "expr": { + "maxItemsOne": false + } + } + } + }, + "preconfigured_waf_config": { + "maxItemsOne": false, + "elem": { + "fields": { + "exclusion": { + "maxItemsOne": false, + "elem": { + "fields": { + "request_cookie": { + "maxItemsOne": false + }, + "request_header": { + "maxItemsOne": false + }, + "request_query_param": { + "maxItemsOne": false + }, + "request_uri": { + "maxItemsOne": false + }, + "target_rule_ids": { + "maxItemsOne": false + } + } + } + } + } + } + }, + "rate_limit_options": { + "maxItemsOne": false, + "elem": { + "fields": { + "ban_threshold": { + "maxItemsOne": false + }, + "enforce_on_key_configs": { + "maxItemsOne": false + }, + "exceed_redirect_options": { + "maxItemsOne": false + }, + "rate_limit_threshold": { + "maxItemsOne": false + } + } + } + }, + "redirect_options": { + "maxItemsOne": false + } + } + } + } + } + }, "google_compute_snapshot": { "current": "gcp:compute/getSnapshot:getSnapshot", "majorVersion": 7, @@ -28900,6 +29119,9 @@ } } }, + "secret_manager_config": { + "maxItemsOne": false + }, "security_posture_config": { "maxItemsOne": false }, @@ -31442,6 +31664,10 @@ "effective_labels", "terraform_labels" ], + "google_network_services_service_lb_policies": [ + "effective_labels", + "terraform_labels" + ], "google_network_services_tcp_route": [ "effective_labels", "terraform_labels" @@ -31510,6 +31736,10 @@ "effective_labels", "terraform_labels" ], + "google_spanner_instance_config": [ + "effective_labels", + "terraform_labels" + ], "google_storage_bucket": [ "effective_labels", "terraform_labels" @@ -32040,6 +32270,7 @@ "gcp:compute/organizationSecurityPolicyRule:OrganizationSecurityPolicyRule": 0, "gcp:compute/packetMirroring:PacketMirroring": 0, "gcp:compute/perInstanceConfig:PerInstanceConfig": 0, + "gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier": 0, "gcp:compute/projectDefaultNetworkTier:ProjectDefaultNetworkTier": 0, "gcp:compute/projectMetadata:ProjectMetadata": 0, "gcp:compute/projectMetadataItem:ProjectMetadataItem": 0, @@ -32485,6 +32716,7 @@ "gcp:networkservices/lbTrafficExtension:LbTrafficExtension": 0, "gcp:networkservices/mesh:Mesh": 0, "gcp:networkservices/serviceBinding:ServiceBinding": 0, + "gcp:networkservices/serviceLbPolicies:ServiceLbPolicies": 0, "gcp:networkservices/tcpRoute:TcpRoute": 0, "gcp:networkservices/tlsRoute:TlsRoute": 0, "gcp:notebooks/environment:Environment": 0, @@ -32565,6 +32797,7 @@ "gcp:securitycenter/instanceIamBinding:InstanceIamBinding": 0, "gcp:securitycenter/instanceIamMember:InstanceIamMember": 0, "gcp:securitycenter/instanceIamPolicy:InstanceIamPolicy": 0, + "gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule": 0, "gcp:securitycenter/muteConfig:MuteConfig": 0, "gcp:securitycenter/notificationConfig:NotificationConfig": 0, "gcp:securitycenter/organizationCustomModule:OrganizationCustomModule": 0, @@ -32601,6 +32834,7 @@ "gcp:spanner/databaseIAMMember:DatabaseIAMMember": 0, "gcp:spanner/databaseIAMPolicy:DatabaseIAMPolicy": 0, "gcp:spanner/instance:Instance": 0, + "gcp:spanner/instanceConfig:InstanceConfig": 0, "gcp:spanner/instanceIAMBinding:InstanceIAMBinding": 0, "gcp:spanner/instanceIAMMember:InstanceIAMMember": 0, "gcp:spanner/instanceIAMPolicy:InstanceIAMPolicy": 0, @@ -32794,6 +33028,7 @@ "gcp:compute/getRouterNat:getRouterNat": 0, "gcp:compute/getRouterStatus:getRouterStatus": 0, "gcp:compute/getSSLPolicy:getSSLPolicy": 0, + "gcp:compute/getSecurityPolicy:getSecurityPolicy": 0, "gcp:compute/getSnapshot:getSnapshot": 0, "gcp:compute/getSnapshotIamPolicy:getSnapshotIamPolicy": 0, "gcp:compute/getSubnetwork:getSubnetwork": 0, diff --git a/provider/cmd/pulumi-resource-gcp/schema.json b/provider/cmd/pulumi-resource-gcp/schema.json index be0e8bc1d7..b6db763f4a 100644 --- a/provider/cmd/pulumi-resource-gcp/schema.json +++ b/provider/cmd/pulumi-resource-gcp/schema.json @@ -633,6 +633,9 @@ "securityCenterCustomEndpoint": { "type": "string" }, + "securityCenterManagementCustomEndpoint": { + "type": "string" + }, "securityScannerCustomEndpoint": { "type": "string" }, @@ -4605,6 +4608,19 @@ "shell" ] }, + "gcp:appengine/FlexibleAppVersionFlexibleRuntimeSettings:FlexibleAppVersionFlexibleRuntimeSettings": { + "properties": { + "operatingSystem": { + "type": "string", + "description": "Operating System of the application runtime.\n" + }, + "runtimeVersion": { + "type": "string", + "description": "The runtime version of an App Engine flexible application.\n" + } + }, + "type": "object" + }, "gcp:appengine/FlexibleAppVersionHandler:FlexibleAppVersionHandler": { "properties": { "authFailAction": { @@ -18000,6 +18016,10 @@ }, "description": "Required. Usages when this configuration should be applied.\n" }, + "verbose": { + "type": "boolean", + "description": "Optional. If true, additional logging will be enabled when running builds in this execution environment.\n" + }, "workerPool": { "type": "string", "description": "Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used.\n" @@ -31625,6 +31645,27 @@ }, "type": "object" }, + "gcp:compute/InstanceGroupManagerStandbyPolicy:InstanceGroupManagerStandbyPolicy": { + "properties": { + "initialDelaySec": { + "type": "integer", + "description": "Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0.\n" + }, + "mode": { + "type": "string", + "description": "Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes.\n- - -\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "initialDelaySec", + "mode" + ] + } + } + }, "gcp:compute/InstanceGroupManagerStatefulDisk:InstanceGroupManagerStatefulDisk": { "properties": { "deleteRule": { @@ -35096,6 +35137,27 @@ }, "type": "object" }, + "gcp:compute/RegionInstanceGroupManagerStandbyPolicy:RegionInstanceGroupManagerStandbyPolicy": { + "properties": { + "initialDelaySec": { + "type": "integer", + "description": "Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0.\n" + }, + "mode": { + "type": "string", + "description": "Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes.\n- - -\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "initialDelaySec", + "mode" + ] + } + } + }, "gcp:compute/RegionInstanceGroupManagerStatefulDisk:RegionInstanceGroupManagerStatefulDisk": { "properties": { "deleteRule": { @@ -43612,6 +43674,28 @@ } } }, + "gcp:compute/getInstanceGroupManagerStandbyPolicy:getInstanceGroupManagerStandbyPolicy": { + "properties": { + "initialDelaySec": { + "type": "integer", + "description": "Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0.\n" + }, + "mode": { + "type": "string", + "description": "Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. The default mode is \"MANUAL\".\n" + } + }, + "type": "object", + "required": [ + "initialDelaySec", + "mode" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:compute/getInstanceGroupManagerStatefulDisk:getInstanceGroupManagerStatefulDisk": { "properties": { "deleteRule": { @@ -47203,6 +47287,691 @@ } } }, + "gcp:compute/getSecurityPolicyAdaptiveProtectionConfig:getSecurityPolicyAdaptiveProtectionConfig": { + "properties": { + "autoDeployConfigs": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig:getSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig" + }, + "description": "Auto Deploy Config of this security policy\n" + }, + "layer7DdosDefenseConfigs": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig:getSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig" + }, + "description": "Layer 7 DDoS Defense Config of this security policy\n" + } + }, + "type": "object", + "required": [ + "autoDeployConfigs", + "layer7DdosDefenseConfigs" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig:getSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig": { + "properties": { + "confidenceThreshold": { + "type": "number", + "description": "Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold.\n" + }, + "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" + }, + "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" + }, + "loadThreshold": { + "type": "number", + "description": "Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold.\n" + } + }, + "type": "object", + "required": [ + "confidenceThreshold", + "expirationSec", + "impactedBaselineThreshold", + "loadThreshold" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig:getSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig": { + "properties": { + "enable": { + "type": "boolean", + "description": "If set to true, enables CAAP for L7 DDoS detection.\n" + }, + "ruleVisibility": { + "type": "string", + "description": "Rule visibility. Supported values include: \"STANDARD\", \"PREMIUM\".\n" + } + }, + "type": "object", + "required": [ + "enable", + "ruleVisibility" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyAdvancedOptionsConfig:getSecurityPolicyAdvancedOptionsConfig": { + "properties": { + "jsonCustomConfigs": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyAdvancedOptionsConfigJsonCustomConfig:getSecurityPolicyAdvancedOptionsConfigJsonCustomConfig" + }, + "description": "Custom configuration to apply the JSON parsing. Only applicable when JSON parsing is set to STANDARD.\n" + }, + "jsonParsing": { + "type": "string", + "description": "JSON body parsing. Supported values include: \"DISABLED\", \"STANDARD\".\n" + }, + "logLevel": { + "type": "string", + "description": "Logging level. Supported values include: \"NORMAL\", \"VERBOSE\".\n" + }, + "userIpRequestHeaders": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An optional list of case-insensitive request header names to use for resolving the callers client IP address.\n" + } + }, + "type": "object", + "required": [ + "jsonCustomConfigs", + "jsonParsing", + "logLevel", + "userIpRequestHeaders" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyAdvancedOptionsConfigJsonCustomConfig:getSecurityPolicyAdvancedOptionsConfigJsonCustomConfig": { + "properties": { + "contentTypes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of custom Content-Type header values to apply the JSON parsing.\n" + } + }, + "type": "object", + "required": [ + "contentTypes" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRecaptchaOptionsConfig:getSecurityPolicyRecaptchaOptionsConfig": { + "properties": { + "redirectSiteKey": { + "type": "string", + "description": "A field to supply a reCAPTCHA site key to be used for all the rules using the redirect action with the type of GOOGLE_RECAPTCHA under the security policy. The specified site key needs to be created from the reCAPTCHA API. The user is responsible for the validity of the specified site key. If not specified, a Google-managed site key is used.\n" + } + }, + "type": "object", + "required": [ + "redirectSiteKey" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRule:getSecurityPolicyRule": { + "properties": { + "action": { + "type": "string", + "description": "Action to take when match matches the request.\n" + }, + "description": { + "type": "string", + "description": "An optional description of this rule. Max size is 64.\n" + }, + "headerActions": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRuleHeaderAction:getSecurityPolicyRuleHeaderAction" + }, + "description": "Additional actions that are performed on headers.\n" + }, + "matches": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRuleMatch:getSecurityPolicyRuleMatch" + }, + "description": "A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding action is enforced.\n" + }, + "preconfiguredWafConfigs": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRulePreconfiguredWafConfig:getSecurityPolicyRulePreconfiguredWafConfig" + }, + "description": "Preconfigured WAF configuration to be applied for the rule. If the rule does not evaluate preconfigured WAF rules, i.e., if evaluatePreconfiguredWaf() is not used, this field will have no effect.\n" + }, + "preview": { + "type": "boolean", + "description": "When set to true, the action specified above is not enforced. Stackdriver logs for requests that trigger a preview action are annotated as such.\n" + }, + "priority": { + "type": "integer", + "description": "An unique positive integer indicating the priority of evaluation for a rule. Rules are evaluated from highest priority (lowest numerically) to lowest priority (highest numerically) in order.\n" + }, + "rateLimitOptions": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRuleRateLimitOption:getSecurityPolicyRuleRateLimitOption" + }, + "description": "Rate limit threshold for this security policy. Must be specified if the action is \"rate_based_ban\" or \"throttle\". Cannot be specified for any other actions.\n" + }, + "redirectOptions": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRuleRedirectOption:getSecurityPolicyRuleRedirectOption" + }, + "description": "Parameters defining the redirect action. Cannot be specified for any other actions.\n" + } + }, + "type": "object", + "required": [ + "action", + "description", + "headerActions", + "matches", + "preconfiguredWafConfigs", + "preview", + "priority", + "rateLimitOptions", + "redirectOptions" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRuleHeaderAction:getSecurityPolicyRuleHeaderAction": { + "properties": { + "requestHeadersToAdds": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRuleHeaderActionRequestHeadersToAdd:getSecurityPolicyRuleHeaderActionRequestHeadersToAdd" + }, + "description": "The list of request headers to add or overwrite if they're already present.\n" + } + }, + "type": "object", + "required": [ + "requestHeadersToAdds" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRuleHeaderActionRequestHeadersToAdd:getSecurityPolicyRuleHeaderActionRequestHeadersToAdd": { + "properties": { + "headerName": { + "type": "string", + "description": "The name of the header to set.\n" + }, + "headerValue": { + "type": "string", + "description": "The value to set the named header to.\n" + } + }, + "type": "object", + "required": [ + "headerName", + "headerValue" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRuleMatch:getSecurityPolicyRuleMatch": { + "properties": { + "configs": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRuleMatchConfig:getSecurityPolicyRuleMatchConfig" + }, + "description": "The configuration options available when specifying versioned_expr. This field must be specified if versioned_expr is specified and cannot be specified if versioned_expr is not specified.\n" + }, + "exprs": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRuleMatchExpr:getSecurityPolicyRuleMatchExpr" + }, + "description": "User defined CEVAL expression. A CEVAL expression is used to specify match criteria such as origin.ip, source.region_code and contents in the request header.\n" + }, + "versionedExpr": { + "type": "string", + "description": "Predefined rule expression. If this field is specified, config must also be specified. Available options: SRC_IPS_V1: Must specify the corresponding src_ip_ranges field in config.\n" + } + }, + "type": "object", + "required": [ + "configs", + "exprs", + "versionedExpr" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRuleMatchConfig:getSecurityPolicyRuleMatchConfig": { + "properties": { + "srcIpRanges": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Set of IP addresses or ranges (IPV4 or IPV6) in CIDR notation to match against inbound traffic. There is a limit of 10 IP ranges per rule. A value of '*' matches all IPs (can be used to override the default behavior).\n" + } + }, + "type": "object", + "required": [ + "srcIpRanges" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRuleMatchExpr:getSecurityPolicyRuleMatchExpr": { + "properties": { + "expression": { + "type": "string", + "description": "Textual representation of an expression in Common Expression Language syntax. The application context of the containing message determines which well-known feature set of CEL is supported.\n" + } + }, + "type": "object", + "required": [ + "expression" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRulePreconfiguredWafConfig:getSecurityPolicyRulePreconfiguredWafConfig": { + "properties": { + "exclusions": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRulePreconfiguredWafConfigExclusion:getSecurityPolicyRulePreconfiguredWafConfigExclusion" + }, + "description": "An exclusion to apply during preconfigured WAF evaluation.\n" + } + }, + "type": "object", + "required": [ + "exclusions" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRulePreconfiguredWafConfigExclusion:getSecurityPolicyRulePreconfiguredWafConfigExclusion": { + "properties": { + "requestCookies": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky:getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky" + }, + "description": "Request cookie whose value will be excluded from inspection during preconfigured WAF evaluation.\n" + }, + "requestHeaders": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader:getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader" + }, + "description": "Request header whose value will be excluded from inspection during preconfigured WAF evaluation.\n" + }, + "requestQueryParams": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam:getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam" + }, + "description": "Request query parameter whose value will be excluded from inspection during preconfigured WAF evaluation. Note that the parameter can be in the query string or in the POST body.\n" + }, + "requestUris": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri:getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri" + }, + "description": "Request URI from the request line to be excluded from inspection during preconfigured WAF evaluation. When specifying this field, the query or fragment part should be excluded.\n" + }, + "targetRuleIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of target rule IDs under the WAF rule set to apply the preconfigured WAF exclusion. If omitted, it refers to all the rule IDs under the WAF rule set.\n" + }, + "targetRuleSet": { + "type": "string", + "description": "Target WAF rule set to apply the preconfigured WAF exclusion.\n" + } + }, + "type": "object", + "required": [ + "requestCookies", + "requestHeaders", + "requestQueryParams", + "requestUris", + "targetRuleIds", + "targetRuleSet" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky:getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky": { + "properties": { + "operator": { + "type": "string", + "description": "You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value.\n" + }, + "value": { + "type": "string", + "description": "A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY.\n" + } + }, + "type": "object", + "required": [ + "operator", + "value" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader:getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader": { + "properties": { + "operator": { + "type": "string", + "description": "You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value.\n" + }, + "value": { + "type": "string", + "description": "A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY.\n" + } + }, + "type": "object", + "required": [ + "operator", + "value" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam:getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam": { + "properties": { + "operator": { + "type": "string", + "description": "You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value.\n" + }, + "value": { + "type": "string", + "description": "A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY.\n" + } + }, + "type": "object", + "required": [ + "operator", + "value" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri:getSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri": { + "properties": { + "operator": { + "type": "string", + "description": "You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value.\n" + }, + "value": { + "type": "string", + "description": "A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY.\n" + } + }, + "type": "object", + "required": [ + "operator", + "value" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRuleRateLimitOption:getSecurityPolicyRuleRateLimitOption": { + "properties": { + "banDurationSec": { + "type": "integer", + "description": "Can only be specified if the action for the rule is \"rate_based_ban\". If specified, determines the time (in seconds) the traffic will continue to be banned by the rate limit after the rate falls below the threshold.\n" + }, + "banThresholds": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRuleRateLimitOptionBanThreshold:getSecurityPolicyRuleRateLimitOptionBanThreshold" + }, + "description": "Can only be specified if the action for the rule is \"rate_based_ban\". If specified, the key will be banned for the configured 'banDurationSec' when the number of requests that exceed the 'rateLimitThreshold' also exceed this 'banThreshold'.\n" + }, + "conformAction": { + "type": "string", + "description": "Action to take for requests that are under the configured rate limit threshold. Valid option is \"allow\" only.\n" + }, + "enforceOnKey": { + "type": "string", + "description": "Determines the key to enforce the rateLimitThreshold on\n" + }, + "enforceOnKeyConfigs": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig:getSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig" + }, + "description": "Enforce On Key Config of this security policy\n" + }, + "enforceOnKeyName": { + "type": "string", + "description": "Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value.\n" + }, + "exceedAction": { + "type": "string", + "description": "Action to take for requests that are above the configured rate limit threshold, to either deny with a specified HTTP response code, or redirect to a different endpoint. Valid options are \"deny()\" where valid values for status are 403, 404, 429, and 502, and \"redirect\" where the redirect parameters come from exceedRedirectOptions below.\n" + }, + "exceedRedirectOptions": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRuleRateLimitOptionExceedRedirectOption:getSecurityPolicyRuleRateLimitOptionExceedRedirectOption" + }, + "description": "Parameters defining the redirect action that is used as the exceed action. Cannot be specified if the exceed action is not redirect.\n" + }, + "rateLimitThresholds": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRuleRateLimitOptionRateLimitThreshold:getSecurityPolicyRuleRateLimitOptionRateLimitThreshold" + }, + "description": "Threshold at which to begin ratelimiting.\n" + } + }, + "type": "object", + "required": [ + "banDurationSec", + "banThresholds", + "conformAction", + "enforceOnKey", + "enforceOnKeyConfigs", + "enforceOnKeyName", + "exceedAction", + "exceedRedirectOptions", + "rateLimitThresholds" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRuleRateLimitOptionBanThreshold:getSecurityPolicyRuleRateLimitOptionBanThreshold": { + "properties": { + "count": { + "type": "integer", + "description": "Number of HTTP(S) requests for calculating the threshold.\n" + }, + "intervalSec": { + "type": "integer", + "description": "Interval over which the threshold is computed.\n" + } + }, + "type": "object", + "required": [ + "count", + "intervalSec" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig:getSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig": { + "properties": { + "enforceOnKeyName": { + "type": "string", + "description": "Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value.\n" + }, + "enforceOnKeyType": { + "type": "string", + "description": "Determines the key to enforce the rate_limit_threshold on\n" + } + }, + "type": "object", + "required": [ + "enforceOnKeyName", + "enforceOnKeyType" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRuleRateLimitOptionExceedRedirectOption:getSecurityPolicyRuleRateLimitOptionExceedRedirectOption": { + "properties": { + "target": { + "type": "string", + "description": "Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA.\n" + }, + "type": { + "type": "string", + "description": "Type of the redirect action.\n" + } + }, + "type": "object", + "required": [ + "target", + "type" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRuleRateLimitOptionRateLimitThreshold:getSecurityPolicyRuleRateLimitOptionRateLimitThreshold": { + "properties": { + "count": { + "type": "integer", + "description": "Number of HTTP(S) requests for calculating the threshold.\n" + }, + "intervalSec": { + "type": "integer", + "description": "Interval over which the threshold is computed.\n" + } + }, + "type": "object", + "required": [ + "count", + "intervalSec" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getSecurityPolicyRuleRedirectOption:getSecurityPolicyRuleRedirectOption": { + "properties": { + "target": { + "type": "string", + "description": "Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA.\n" + }, + "type": { + "type": "string", + "description": "Type of the redirect action. Available options: EXTERNAL_302: Must specify the corresponding target field in config. GOOGLE_RECAPTCHA: Cannot specify target field in config.\n" + } + }, + "type": "object", + "required": [ + "target", + "type" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:compute/getSnapshotSnapshotEncryptionKey:getSnapshotSnapshotEncryptionKey": { "properties": { "kmsKeySelfLink": { @@ -51966,6 +52735,18 @@ "datasetId" ] }, + "gcp:container/ClusterSecretManagerConfig:ClusterSecretManagerConfig": { + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable the Secret Manager add-on for this cluster.\n" + } + }, + "type": "object", + "required": [ + "enabled" + ] + }, "gcp:container/ClusterSecurityPostureConfig:ClusterSecurityPostureConfig": { "properties": { "mode": { @@ -52136,11 +52917,11 @@ }, "networkPerformanceConfig": { "$ref": "#/types/gcp:container/NodePoolNetworkConfigNetworkPerformanceConfig:NodePoolNetworkConfigNetworkPerformanceConfig", - "description": "Network bandwidth tier configuration.\n" + "description": "Network bandwidth tier configuration. Structure is documented below.\n" }, "podCidrOverprovisionConfig": { "$ref": "#/types/gcp:container/NodePoolNetworkConfigPodCidrOverprovisionConfig:NodePoolNetworkConfigPodCidrOverprovisionConfig", - "description": "Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited\n", + "description": "Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below.\n", "willReplaceOnChanges": true }, "podIpv4CidrBlock": { @@ -52223,7 +53004,8 @@ "gcp:container/NodePoolNetworkConfigPodCidrOverprovisionConfig:NodePoolNetworkConfigPodCidrOverprovisionConfig": { "properties": { "disabled": { - "type": "boolean" + "type": "boolean", + "description": "Whether pod cidr overprovision is disabled.\n" } }, "type": "object", @@ -57111,6 +57893,23 @@ } } }, + "gcp:container/getClusterSecretManagerConfig:getClusterSecretManagerConfig": { + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable the Secret manager csi component.\n" + } + }, + "type": "object", + "required": [ + "enabled" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:container/getClusterSecurityPostureConfig:getClusterSecurityPostureConfig": { "properties": { "mode": { @@ -62866,6 +63665,10 @@ "cloudSqlTarget": { "$ref": "#/types/gcp:dataloss/PreventionDiscoveryConfigTargetCloudSqlTarget:PreventionDiscoveryConfigTargetCloudSqlTarget", "description": "Cloud SQL target for Discovery. The first target to match a table will be the one applied.\nStructure is documented below.\n" + }, + "secretsTarget": { + "$ref": "#/types/gcp:dataloss/PreventionDiscoveryConfigTargetSecretsTarget:PreventionDiscoveryConfigTargetSecretsTarget", + "description": "Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed.\n" } }, "type": "object" @@ -62991,6 +63794,10 @@ "$ref": "#/types/gcp:dataloss/PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables:PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables", "description": "Catch-all. This should always be the last filter in the list because anything above it will apply first.\n" }, + "tableReference": { + "$ref": "#/types/gcp:dataloss/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference:PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference", + "description": "The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference).\nStructure is documented below.\n" + }, "tables": { "$ref": "#/types/gcp:dataloss/PreventionDiscoveryConfigTargetBigQueryTargetFilterTables:PreventionDiscoveryConfigTargetBigQueryTargetFilterTables", "description": "A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config.\nStructure is documented below.\n" @@ -63001,6 +63808,23 @@ "gcp:dataloss/PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables:PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables": { "type": "object" }, + "gcp:dataloss/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference:PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference": { + "properties": { + "datasetId": { + "type": "string", + "description": "Dataset ID of the table.\n" + }, + "tableId": { + "type": "string", + "description": "Name of the table.\n" + } + }, + "type": "object", + "required": [ + "datasetId", + "tableId" + ] + }, "gcp:dataloss/PreventionDiscoveryConfigTargetBigQueryTargetFilterTables:PreventionDiscoveryConfigTargetBigQueryTargetFilterTables": { "properties": { "includeRegexes": { @@ -63091,6 +63915,10 @@ "$ref": "#/types/gcp:dataloss/PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollection:PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollection", "description": "A specific set of database resources for this filter to apply to.\nStructure is documented below.\n" }, + "databaseResourceReference": { + "$ref": "#/types/gcp:dataloss/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference:PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference", + "description": "The database resource to scan. Targets including this can only include one target (the target with this database resource reference).\nStructure is documented below.\n" + }, "others": { "$ref": "#/types/gcp:dataloss/PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers:PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers", "description": "Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically.\n" @@ -63140,6 +63968,33 @@ }, "type": "object" }, + "gcp:dataloss/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference:PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference": { + "properties": { + "database": { + "type": "string", + "description": "Required. Name of a database within the instance.\n" + }, + "databaseResource": { + "type": "string", + "description": "Required. Name of a database resource, for example, a table within the database.\n" + }, + "instance": { + "type": "string", + "description": "Required. The instance where this resource is located. For example: Cloud SQL instance ID.\n" + }, + "projectId": { + "type": "string", + "description": "Required. If within a project-level config, then this must match the config's project ID.\n" + } + }, + "type": "object", + "required": [ + "database", + "databaseResource", + "instance", + "projectId" + ] + }, "gcp:dataloss/PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers:PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers": { "type": "object" }, @@ -63172,6 +64027,9 @@ }, "type": "object" }, + "gcp:dataloss/PreventionDiscoveryConfigTargetSecretsTarget:PreventionDiscoveryConfigTargetSecretsTarget": { + "type": "object" + }, "gcp:dataloss/PreventionInspectTemplateInspectConfig:PreventionInspectTemplateInspectConfig": { "properties": { "contentOptions": { @@ -63452,7 +64310,6 @@ }, "type": "object", "required": [ - "infoType", "maxFindings" ] }, @@ -78885,6 +79742,10 @@ "type": "boolean", "description": "This flag specifies whether volume data should be backed up when PVCs are\nincluded in the scope of a Backup.\n" }, + "permissiveMode": { + "type": "boolean", + "description": "This flag specifies whether Backups will not fail when\nBackup for GKE detects Kubernetes configuration that is\nnon-standard or requires additional setup to restore.\n" + }, "selectedApplications": { "$ref": "#/types/gcp:gkebackup/BackupPlanBackupConfigSelectedApplications:BackupPlanBackupConfigSelectedApplications", "description": "A list of namespaced Kubernetes Resources.\nStructure is documented below.\n" @@ -79215,12 +80076,16 @@ }, "namespacedResourceRestoreMode": { "type": "string", - "description": "Defines the behavior for handling the situation where sets of namespaced resources\nbeing restored already exist in the target cluster.\nThis MUST be set to a value other than `NAMESPACED_RESOURCE_RESTORE_MODE_UNSPECIFIED`\nif the `namespacedResourceRestoreScope` is anything other than `noNamespaces`.\nSee https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode\nfor more information on each mode.\nPossible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`.\n" + "description": "Defines the behavior for handling the situation where sets of namespaced resources\nbeing restored already exist in the target cluster.\nThis MUST be set to a value other than `NAMESPACED_RESOURCE_RESTORE_MODE_UNSPECIFIED`\nif the `namespacedResourceRestoreScope` is anything other than `noNamespaces`.\nSee https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode\nfor more information on each mode.\nPossible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`.\n" }, "noNamespaces": { "type": "boolean", "description": "Do not restore any namespaced resources if set to \"True\".\nSpecifying this field to \"False\" is not allowed.\n" }, + "restoreOrder": { + "$ref": "#/types/gcp:gkebackup/RestorePlanRestoreConfigRestoreOrder:RestorePlanRestoreConfigRestoreOrder", + "description": "It contains custom ordering to use on a Restore.\nStructure is documented below.\n" + }, "selectedApplications": { "$ref": "#/types/gcp:gkebackup/RestorePlanRestoreConfigSelectedApplications:RestorePlanRestoreConfigSelectedApplications", "description": "A list of selected ProtectedApplications to restore.\nThe listed ProtectedApplications and all the resources\nto which they refer will be restored.\nStructure is documented below.\n" @@ -79239,6 +80104,13 @@ "volumeDataRestorePolicy": { "type": "string", "description": "Specifies the mechanism to be used to restore volume data.\nThis should be set to a value other than `NAMESPACED_RESOURCE_RESTORE_MODE_UNSPECIFIED`\nif the `namespacedResourceRestoreScope` is anything other than `noNamespaces`.\nIf not specified, it will be treated as `NO_VOLUME_DATA_RESTORATION`.\nSee https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy\nfor more information on each policy option.\nPossible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`.\n" + }, + "volumeDataRestorePolicyBindings": { + "type": "array", + "items": { + "$ref": "#/types/gcp:gkebackup/RestorePlanRestoreConfigVolumeDataRestorePolicyBinding:RestorePlanRestoreConfigVolumeDataRestorePolicyBinding" + }, + "description": "A table that binds volumes by their scope to a restore policy. Bindings\nmust have a unique scope. Any volumes not scoped in the bindings are\nsubject to the policy defined in volume_data_restore_policy.\nStructure is documented below.\n" } }, "type": "object" @@ -79311,6 +80183,64 @@ "namespaces" ] }, + "gcp:gkebackup/RestorePlanRestoreConfigRestoreOrder:RestorePlanRestoreConfigRestoreOrder": { + "properties": { + "groupKindDependencies": { + "type": "array", + "items": { + "$ref": "#/types/gcp:gkebackup/RestorePlanRestoreConfigRestoreOrderGroupKindDependency:RestorePlanRestoreConfigRestoreOrderGroupKindDependency" + }, + "description": "A list of group kind dependency pairs\nthat is used by Backup for GKE to\ngenerate a group kind restore order.\nStructure is documented below.\n" + } + }, + "type": "object", + "required": [ + "groupKindDependencies" + ] + }, + "gcp:gkebackup/RestorePlanRestoreConfigRestoreOrderGroupKindDependency:RestorePlanRestoreConfigRestoreOrderGroupKindDependency": { + "properties": { + "requiring": { + "$ref": "#/types/gcp:gkebackup/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring:RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring", + "description": "The requiring group kind requires that the satisfying\ngroup kind be restored first.\nStructure is documented below.\n" + }, + "satisfying": { + "$ref": "#/types/gcp:gkebackup/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying:RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying", + "description": "The satisfying group kind must be restored first\nin order to satisfy the dependency.\nStructure is documented below.\n" + } + }, + "type": "object", + "required": [ + "requiring", + "satisfying" + ] + }, + "gcp:gkebackup/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring:RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring": { + "properties": { + "resourceGroup": { + "type": "string", + "description": "API Group of a Kubernetes resource, e.g.\n\"apiextensions.k8s.io\", \"storage.k8s.io\", etc.\nUse empty string for core group.\n" + }, + "resourceKind": { + "type": "string", + "description": "Kind of a Kubernetes resource, e.g.\n\"CustomResourceDefinition\", \"StorageClass\", etc.\n\n- - -\n" + } + }, + "type": "object" + }, + "gcp:gkebackup/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying:RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying": { + "properties": { + "resourceGroup": { + "type": "string", + "description": "API Group of a Kubernetes resource, e.g.\n\"apiextensions.k8s.io\", \"storage.k8s.io\", etc.\nUse empty string for core group.\n" + }, + "resourceKind": { + "type": "string", + "description": "Kind of a Kubernetes resource, e.g.\n\"CustomResourceDefinition\", \"StorageClass\", etc.\n" + } + }, + "type": "object" + }, "gcp:gkebackup/RestorePlanRestoreConfigSelectedApplications:RestorePlanRestoreConfigSelectedApplications": { "properties": { "namespacedNames": { @@ -79397,7 +80327,7 @@ }, "value": { "type": "string", - "description": "A string that specifies the desired value in string format\nto use for transformation.\n\n- - -\n" + "description": "A string that specifies the desired value in string format\nto use for transformation.\n" } }, "type": "object", @@ -79441,6 +80371,23 @@ }, "type": "object" }, + "gcp:gkebackup/RestorePlanRestoreConfigVolumeDataRestorePolicyBinding:RestorePlanRestoreConfigVolumeDataRestorePolicyBinding": { + "properties": { + "policy": { + "type": "string", + "description": "Specifies the mechanism to be used to restore this volume data.\nSee https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy\nfor more information on each policy option.\nPossible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`.\n" + }, + "volumeType": { + "type": "string", + "description": "The volume type, as determined by the PVC's\nbound PV, to apply the policy to.\nPossible values are: `GCE_PERSISTENT_DISK`.\n" + } + }, + "type": "object", + "required": [ + "policy", + "volumeType" + ] + }, "gcp:gkehub/FeatureFleetDefaultMemberConfig:FeatureFleetDefaultMemberConfig": { "properties": { "configmanagement": { @@ -83481,6 +84428,10 @@ "pubsubTopic": { "type": "string", "description": "The Cloud Pub/Sub topic that notifications of changes are published on. Supplied by the client.\nPubsubMessage.Data will contain the resource name. PubsubMessage.MessageId is the ID of this message.\nIt is guaranteed to be unique within the topic. PubsubMessage.PublishTime is the time at which the message\nwas published. Notifications are only sent if the topic is non-empty. Topic names must be scoped to a\nproject. service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com must have publisher permissions on the given\nCloud Pub/Sub topic. Not having adequate permissions will cause the calls that send notifications to fail.\n" + }, + "sendForBulkImport": { + "type": "boolean", + "description": "Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports.\n" } }, "type": "object", @@ -89022,6 +89973,26 @@ } } }, + "gcp:netapp/VolumeBackupConfig:VolumeBackupConfig": { + "properties": { + "backupPolicies": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}`\n" + }, + "backupVault": { + "type": "string", + "description": "ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups.\nFormat: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}`\n" + }, + "scheduledBackupEnabled": { + "type": "boolean", + "description": "When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified.\n" + } + }, + "type": "object" + }, "gcp:netapp/VolumeExportPolicy:VolumeExportPolicy": { "properties": { "rules": { @@ -91643,6 +92614,27 @@ "celExpression" ] }, + "gcp:networkservices/ServiceLbPoliciesAutoCapacityDrain:ServiceLbPoliciesAutoCapacityDrain": { + "properties": { + "enable": { + "type": "boolean", + "description": "Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service.\n" + } + }, + "type": "object" + }, + "gcp:networkservices/ServiceLbPoliciesFailoverConfig:ServiceLbPoliciesFailoverConfig": { + "properties": { + "failoverHealthThreshold": { + "type": "integer", + "description": "Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others.\n" + } + }, + "type": "object", + "required": [ + "failoverHealthThreshold" + ] + }, "gcp:networkservices/TcpRouteRule:TcpRouteRule": { "properties": { "action": { @@ -96904,6 +97896,26 @@ }, "type": "object" }, + "gcp:redis/ClusterZoneDistributionConfig:ClusterZoneDistributionConfig": { + "properties": { + "mode": { + "type": "string", + "description": "Immutable. The mode for zone distribution for Memorystore Redis cluster.\nIf not provided, MULTI_ZONE will be used as default\nPossible values are: `MULTI_ZONE`, `SINGLE_ZONE`.\n" + }, + "zone": { + "type": "string", + "description": "Immutable. The zone for single zone Memorystore Redis cluster.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "mode" + ] + } + } + }, "gcp:redis/InstanceMaintenancePolicy:InstanceMaintenancePolicy": { "properties": { "createTime": { @@ -97365,10 +98377,12 @@ }, "expression": { "type": "string", + "description": "Textual representation of an expression in Common Expression Language syntax.\n", "willReplaceOnChanges": true }, "title": { "type": "string", + "description": "A title for the expression, i.e. a short string describing its purpose.\n", "willReplaceOnChanges": true } }, @@ -97386,10 +98400,12 @@ }, "expression": { "type": "string", + "description": "Textual representation of an expression in Common Expression Language syntax.\n", "willReplaceOnChanges": true }, "title": { "type": "string", + "description": "A title for the expression, i.e. a short string describing its purpose.\n", "willReplaceOnChanges": true } }, @@ -99351,6 +100367,26 @@ }, "type": "object" }, + "gcp:spanner/InstanceConfigReplica:InstanceConfigReplica": { + "properties": { + "defaultLeaderLocation": { + "type": "boolean", + "description": "If true, this location is designated as the default leader location where\nleader replicas are placed.\n\n- - -\n", + "willReplaceOnChanges": true + }, + "location": { + "type": "string", + "description": "The location of the serving resources, e.g. \"us-central1\".\n", + "willReplaceOnChanges": true + }, + "type": { + "type": "string", + "description": "Indicates the type of replica. See the [replica types\ndocumentation](https://cloud.google.com/spanner/docs/replication#replica_types)\nfor more details.\nPossible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`.\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + }, "gcp:spanner/InstanceIAMBindingCondition:InstanceIAMBindingCondition": { "properties": { "description": { @@ -99975,7 +101011,8 @@ }, "requireSsl": { "type": "boolean", - "description": "Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`.\n" + "description": "Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. It will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead.\n", + "deprecationMessage": "`require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead." }, "sslMode": { "type": "string", @@ -100848,7 +101885,7 @@ }, "sslMode": { "type": "string", - "description": "Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl.\n" + "description": "Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl until next major release.\n" } }, "type": "object", @@ -101812,7 +102849,7 @@ }, "sslMode": { "type": "string", - "description": "Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl.\n" + "description": "Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl until next major release.\n" } }, "type": "object", @@ -106611,6 +107648,15 @@ }, "description": "An accelerator card attached to the boost instance.\nStructure is documented below.\n" }, + "bootDiskSizeGb": { + "type": "integer", + "description": "Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB.\n", + "willReplaceOnChanges": true + }, + "enableNestedVirtualization": { + "type": "boolean", + "description": "Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations.\nSee https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization\n" + }, "id": { "type": "string", "description": "The id to be used for the boost config.\n" @@ -106618,12 +107664,26 @@ "machineType": { "type": "string", "description": "The type of machine that boosted VM instances will use—for example, e2-standard-4. For more information about machine types that Cloud Workstations supports, see the list of available machine types https://cloud.google.com/workstations/docs/available-machine-types. Defaults to e2-standard-4.\n" + }, + "poolSize": { + "type": "integer", + "description": "Number of instances to pool for faster workstation boosting.\n" } }, "type": "object", "required": [ "id" - ] + ], + "language": { + "nodejs": { + "requiredOutputs": [ + "bootDiskSizeGb", + "enableNestedVirtualization", + "id", + "poolSize" + ] + } + } }, "gcp:workstations/WorkstationConfigHostGceInstanceBoostConfigAccelerator:WorkstationConfigHostGceInstanceBoostConfigAccelerator": { "properties": { @@ -107271,6 +108331,9 @@ "securityCenterCustomEndpoint": { "type": "string" }, + "securityCenterManagementCustomEndpoint": { + "type": "string" + }, "securityScannerCustomEndpoint": { "type": "string" }, @@ -107805,6 +108868,9 @@ "securityCenterCustomEndpoint": { "type": "string" }, + "securityCenterManagementCustomEndpoint": { + "type": "string" + }, "securityScannerCustomEndpoint": { "type": "string" }, @@ -115447,6 +116513,10 @@ "type": "string" } }, + "flexibleRuntimeSettings": { + "$ref": "#/types/gcp:appengine/FlexibleAppVersionFlexibleRuntimeSettings:FlexibleAppVersionFlexibleRuntimeSettings", + "description": "Runtime settings for App Engine flexible environment.\n" + }, "handlers": { "type": "array", "items": { @@ -115590,6 +116660,10 @@ "type": "string" } }, + "flexibleRuntimeSettings": { + "$ref": "#/types/gcp:appengine/FlexibleAppVersionFlexibleRuntimeSettings:FlexibleAppVersionFlexibleRuntimeSettings", + "description": "Runtime settings for App Engine flexible environment.\n" + }, "handlers": { "type": "array", "items": { @@ -115728,6 +116802,10 @@ "type": "string" } }, + "flexibleRuntimeSettings": { + "$ref": "#/types/gcp:appengine/FlexibleAppVersionFlexibleRuntimeSettings:FlexibleAppVersionFlexibleRuntimeSettings", + "description": "Runtime settings for App Engine flexible environment.\n" + }, "handlers": { "type": "array", "items": { @@ -124412,6 +125490,10 @@ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n\n-----\n", "secret": true }, + "forceDestroy": { + "type": "boolean", + "description": "Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false.\n" + }, "instanceType": { "type": "string", "description": "The instance type to create. One of `\"DEVELOPMENT\"` or `\"PRODUCTION\"`. Defaults to `\"PRODUCTION\"`.\nIt is recommended to leave this field unspecified since the distinction between `\"DEVELOPMENT\"` and `\"PRODUCTION\"` instances is going away,\nand all instances will become `\"PRODUCTION\"` instances. This means that new and existing `\"DEVELOPMENT\"` instances will be converted to\n`\"PRODUCTION\"` instances. It is recommended for users to use `\"PRODUCTION\"` instances in any case, since a 1-node `\"PRODUCTION\"` instance\nis functionally identical to a `\"DEVELOPMENT\"` instance, but without the accompanying restrictions.\n", @@ -124465,6 +125547,10 @@ "type": "string", "description": "The human-readable display name of the Bigtable instance. Defaults to the instance `name`.\n" }, + "forceDestroy": { + "type": "boolean", + "description": "Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false.\n" + }, "instanceType": { "type": "string", "description": "The instance type to create. One of `\"DEVELOPMENT\"` or `\"PRODUCTION\"`. Defaults to `\"PRODUCTION\"`.\nIt is recommended to leave this field unspecified since the distinction between `\"DEVELOPMENT\"` and `\"PRODUCTION\"` instances is going away,\nand all instances will become `\"PRODUCTION\"` instances. This means that new and existing `\"DEVELOPMENT\"` instances will be converted to\n`\"PRODUCTION\"` instances. It is recommended for users to use `\"PRODUCTION\"` instances in any case, since a 1-node `\"PRODUCTION\"` instance\nis functionally identical to a `\"DEVELOPMENT\"` instance, but without the accompanying restrictions.\n", @@ -124514,6 +125600,10 @@ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n\n-----\n", "secret": true }, + "forceDestroy": { + "type": "boolean", + "description": "Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false.\n" + }, "instanceType": { "type": "string", "description": "The instance type to create. One of `\"DEVELOPMENT\"` or `\"PRODUCTION\"`. Defaults to `\"PRODUCTION\"`.\nIt is recommended to leave this field unspecified since the distinction between `\"DEVELOPMENT\"` and `\"PRODUCTION\"` instances is going away,\nand all instances will become `\"PRODUCTION\"` instances. This means that new and existing `\"DEVELOPMENT\"` instances will be converted to\n`\"PRODUCTION\"` instances. It is recommended for users to use `\"PRODUCTION\"` instances in any case, since a 1-node `\"PRODUCTION\"` instance\nis functionally identical to a `\"DEVELOPMENT\"` instance, but without the accompanying restrictions.\n", @@ -139220,6 +140310,10 @@ "type": "string", "description": "The URI of the created resource.\n" }, + "serviceLbPolicy": { + "type": "string", + "description": "URL to networkservices.ServiceLbPolicy resource.\nCan only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global.\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`, `HTTP_COOKIE`.\n" @@ -139359,6 +140453,10 @@ "$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" }, + "serviceLbPolicy": { + "type": "string", + "description": "URL to networkservices.ServiceLbPolicy resource.\nCan only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global.\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`, `HTTP_COOKIE`.\n" @@ -139502,6 +140600,10 @@ "type": "string", "description": "The URI of the created resource.\n" }, + "serviceLbPolicy": { + "type": "string", + "description": "URL to networkservices.ServiceLbPolicy resource.\nCan only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global.\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`, `HTTP_COOKIE`.\n" @@ -140104,6 +141206,10 @@ "type": "string", "description": "The unique ID of the snapshot used to create this disk. This value\nidentifies the exact snapshot that was used to create this persistent\ndisk. For example, if you created the persistent disk from a snapshot\nthat was later deleted and recreated under the same name, the source\nsnapshot ID would identify the exact version of the snapshot that was\nused.\n" }, + "storagePool": { + "type": "string", + "description": "The URL of the storage pool in which the new disk is created.\nFor example:\n* https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /projects/{project}/zones/{zone}/storagePools/{storagePool}\n" + }, "type": { "type": "string", "description": "URL of the disk type resource describing which disk type to use to\ncreate the disk. Provide this when creating the disk.\n" @@ -140260,6 +141366,11 @@ "description": "The customer-supplied encryption key of the source snapshot. Required\nif the source snapshot is protected by a customer-supplied encryption\nkey.\nStructure is documented below.\n", "willReplaceOnChanges": true }, + "storagePool": { + "type": "string", + "description": "The URL of the storage pool in which the new disk is created.\nFor example:\n* https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /projects/{project}/zones/{zone}/storagePools/{storagePool}\n", + "willReplaceOnChanges": true + }, "type": { "type": "string", "description": "URL of the disk type resource describing which disk type to use to\ncreate the disk. Provide this when creating the disk.\n", @@ -140440,6 +141551,11 @@ "type": "string", "description": "The unique ID of the snapshot used to create this disk. This value\nidentifies the exact snapshot that was used to create this persistent\ndisk. For example, if you created the persistent disk from a snapshot\nthat was later deleted and recreated under the same name, the source\nsnapshot ID would identify the exact version of the snapshot that was\nused.\n" }, + "storagePool": { + "type": "string", + "description": "The URL of the storage pool in which the new disk is created.\nFor example:\n* https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /projects/{project}/zones/{zone}/storagePools/{storagePool}\n", + "willReplaceOnChanges": true + }, "type": { "type": "string", "description": "URL of the disk type resource describing which disk type to use to\ncreate the disk. Provide this when creating the disk.\n", @@ -144491,6 +145607,13 @@ "$ref": "#/types/gcp:compute/InstanceParams:InstanceParams", "description": "Additional instance parameters.\n.\n" }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If it\nis not provided, the provider project is used.\n" @@ -144682,6 +145805,13 @@ "description": "Additional instance parameters.\n.\n", "willReplaceOnChanges": true }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If it\nis not provided, the provider project is used.\n", @@ -144873,6 +146003,13 @@ "description": "Additional instance parameters.\n.\n", "willReplaceOnChanges": true }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If it\nis not provided, the provider project is used.\n", @@ -145070,6 +146207,13 @@ "$ref": "#/types/gcp:compute/InstanceFromMachineImageParams:InstanceFromMachineImageParams", "description": "Stores additional params passed with the request, but not persisted as part of resource payload.\n" }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Partner Metadata Map made available within the instance.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither\nself_link nor project are provided, the provider project is used.\n" @@ -145161,6 +146305,7 @@ "networkInterfaces", "networkPerformanceConfig", "params", + "partnerMetadata", "project", "reservationAffinity", "resourcePolicies", @@ -145271,6 +146416,13 @@ "description": "Stores additional params passed with the request, but not persisted as part of resource payload.\n", "willReplaceOnChanges": true }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Partner Metadata Map made available within the instance.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither\nself_link nor project are provided, the provider project is used.\n", @@ -145458,6 +146610,13 @@ "description": "Stores additional params passed with the request, but not persisted as part of resource payload.\n", "willReplaceOnChanges": true }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Partner Metadata Map made available within the instance.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither\nself_link nor project are provided, the provider project is used.\n", @@ -145657,6 +146816,13 @@ "$ref": "#/types/gcp:compute/InstanceFromTemplateParams:InstanceFromTemplateParams", "description": "Stores additional params passed with the request, but not persisted as part of resource payload.\n" }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Partner Metadata Map made available within the instance.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither\nself_link nor project are provided, the provider project is used.\n" @@ -145748,6 +146914,7 @@ "networkInterfaces", "networkPerformanceConfig", "params", + "partnerMetadata", "project", "reservationAffinity", "resourcePolicies", @@ -145870,6 +147037,13 @@ "description": "Stores additional params passed with the request, but not persisted as part of resource payload.\n", "willReplaceOnChanges": true }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Partner Metadata Map made available within the instance.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither\nself_link nor project are provided, the provider project is used.\n", @@ -146062,6 +147236,13 @@ "description": "Stores additional params passed with the request, but not persisted as part of resource payload.\n", "willReplaceOnChanges": true }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Partner Metadata Map made available within the instance.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither\nself_link nor project are provided, the provider project is used.\n", @@ -146284,7 +147465,7 @@ } }, "gcp:compute/instanceGroupManager:InstanceGroupManager": { - "description": "The Google Compute Engine Instance Group Manager API creates and manages pools\nof homogeneous Compute Engine virtual machine instances from a common instance\ntemplate. For more information, see [the official documentation](https://cloud.google.com/compute/docs/instance-groups/manager)\nand [API](https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers)\n\n\u003e **Note:** Use [gcp.compute.RegionInstanceGroupManager](https://www.terraform.io/docs/providers/google/r/compute_region_instance_group_manager.html) to create a regional (multi-zone) instance group manager.\n\n## Example Usage\n\n### With Top Level Instance Template (`Google` Provider)\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst autohealing = new gcp.compute.HealthCheck(\"autohealing\", {\n name: \"autohealing-health-check\",\n checkIntervalSec: 5,\n timeoutSec: 5,\n healthyThreshold: 2,\n unhealthyThreshold: 10,\n httpHealthCheck: {\n requestPath: \"/healthz\",\n port: 8080,\n },\n});\nconst appserver = new gcp.compute.InstanceGroupManager(\"appserver\", {\n name: \"appserver-igm\",\n baseInstanceName: \"app\",\n zone: \"us-central1-a\",\n versions: [{\n instanceTemplate: appserverGoogleComputeInstanceTemplate.selfLinkUnique,\n }],\n allInstancesConfig: {\n metadata: {\n metadata_key: \"metadata_value\",\n },\n labels: {\n label_key: \"label_value\",\n },\n },\n targetPools: [appserverGoogleComputeTargetPool.id],\n targetSize: 2,\n namedPorts: [{\n name: \"customhttp\",\n port: 8888,\n }],\n autoHealingPolicies: {\n healthCheck: autohealing.id,\n initialDelaySec: 300,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nautohealing = gcp.compute.HealthCheck(\"autohealing\",\n name=\"autohealing-health-check\",\n check_interval_sec=5,\n timeout_sec=5,\n healthy_threshold=2,\n unhealthy_threshold=10,\n http_health_check=gcp.compute.HealthCheckHttpHealthCheckArgs(\n request_path=\"/healthz\",\n port=8080,\n ))\nappserver = gcp.compute.InstanceGroupManager(\"appserver\",\n name=\"appserver-igm\",\n base_instance_name=\"app\",\n zone=\"us-central1-a\",\n versions=[gcp.compute.InstanceGroupManagerVersionArgs(\n instance_template=appserver_google_compute_instance_template[\"selfLinkUnique\"],\n )],\n all_instances_config=gcp.compute.InstanceGroupManagerAllInstancesConfigArgs(\n metadata={\n \"metadata_key\": \"metadata_value\",\n },\n labels={\n \"label_key\": \"label_value\",\n },\n ),\n target_pools=[appserver_google_compute_target_pool[\"id\"]],\n target_size=2,\n named_ports=[gcp.compute.InstanceGroupManagerNamedPortArgs(\n name=\"customhttp\",\n port=8888,\n )],\n auto_healing_policies=gcp.compute.InstanceGroupManagerAutoHealingPoliciesArgs(\n health_check=autohealing.id,\n initial_delay_sec=300,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var autohealing = new Gcp.Compute.HealthCheck(\"autohealing\", new()\n {\n Name = \"autohealing-health-check\",\n CheckIntervalSec = 5,\n TimeoutSec = 5,\n HealthyThreshold = 2,\n UnhealthyThreshold = 10,\n HttpHealthCheck = new Gcp.Compute.Inputs.HealthCheckHttpHealthCheckArgs\n {\n RequestPath = \"/healthz\",\n Port = 8080,\n },\n });\n\n var appserver = new Gcp.Compute.InstanceGroupManager(\"appserver\", new()\n {\n Name = \"appserver-igm\",\n BaseInstanceName = \"app\",\n Zone = \"us-central1-a\",\n Versions = new[]\n {\n new Gcp.Compute.Inputs.InstanceGroupManagerVersionArgs\n {\n InstanceTemplate = appserverGoogleComputeInstanceTemplate.SelfLinkUnique,\n },\n },\n AllInstancesConfig = new Gcp.Compute.Inputs.InstanceGroupManagerAllInstancesConfigArgs\n {\n Metadata = \n {\n { \"metadata_key\", \"metadata_value\" },\n },\n Labels = \n {\n { \"label_key\", \"label_value\" },\n },\n },\n TargetPools = new[]\n {\n appserverGoogleComputeTargetPool.Id,\n },\n TargetSize = 2,\n NamedPorts = new[]\n {\n new Gcp.Compute.Inputs.InstanceGroupManagerNamedPortArgs\n {\n Name = \"customhttp\",\n Port = 8888,\n },\n },\n AutoHealingPolicies = new Gcp.Compute.Inputs.InstanceGroupManagerAutoHealingPoliciesArgs\n {\n HealthCheck = autohealing.Id,\n InitialDelaySec = 300,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tautohealing, err := compute.NewHealthCheck(ctx, \"autohealing\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"autohealing-health-check\"),\n\t\t\tCheckIntervalSec: pulumi.Int(5),\n\t\t\tTimeoutSec: pulumi.Int(5),\n\t\t\tHealthyThreshold: pulumi.Int(2),\n\t\t\tUnhealthyThreshold: pulumi.Int(10),\n\t\t\tHttpHealthCheck: \u0026compute.HealthCheckHttpHealthCheckArgs{\n\t\t\t\tRequestPath: pulumi.String(\"/healthz\"),\n\t\t\t\tPort: pulumi.Int(8080),\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, \"appserver\", \u0026compute.InstanceGroupManagerArgs{\n\t\t\tName: pulumi.String(\"appserver-igm\"),\n\t\t\tBaseInstanceName: pulumi.String(\"app\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tVersions: compute.InstanceGroupManagerVersionArray{\n\t\t\t\t\u0026compute.InstanceGroupManagerVersionArgs{\n\t\t\t\t\tInstanceTemplate: pulumi.Any(appserverGoogleComputeInstanceTemplate.SelfLinkUnique),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAllInstancesConfig: \u0026compute.InstanceGroupManagerAllInstancesConfigArgs{\n\t\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\t\"metadata_key\": pulumi.String(\"metadata_value\"),\n\t\t\t\t},\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"label_key\": pulumi.String(\"label_value\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetPools: pulumi.StringArray{\n\t\t\t\tappserverGoogleComputeTargetPool.Id,\n\t\t\t},\n\t\t\tTargetSize: pulumi.Int(2),\n\t\t\tNamedPorts: compute.InstanceGroupManagerNamedPortArray{\n\t\t\t\t\u0026compute.InstanceGroupManagerNamedPortArgs{\n\t\t\t\t\tName: pulumi.String(\"customhttp\"),\n\t\t\t\t\tPort: pulumi.Int(8888),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAutoHealingPolicies: \u0026compute.InstanceGroupManagerAutoHealingPoliciesArgs{\n\t\t\t\tHealthCheck: autohealing.ID(),\n\t\t\t\tInitialDelaySec: pulumi.Int(300),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\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.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerAllInstancesConfigArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerNamedPortArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerAutoHealingPoliciesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var autohealing = new HealthCheck(\"autohealing\", HealthCheckArgs.builder()\n .name(\"autohealing-health-check\")\n .checkIntervalSec(5)\n .timeoutSec(5)\n .healthyThreshold(2)\n .unhealthyThreshold(10)\n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .requestPath(\"/healthz\")\n .port(\"8080\")\n .build())\n .build());\n\n var appserver = new InstanceGroupManager(\"appserver\", InstanceGroupManagerArgs.builder()\n .name(\"appserver-igm\")\n .baseInstanceName(\"app\")\n .zone(\"us-central1-a\")\n .versions(InstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(appserverGoogleComputeInstanceTemplate.selfLinkUnique())\n .build())\n .allInstancesConfig(InstanceGroupManagerAllInstancesConfigArgs.builder()\n .metadata(Map.of(\"metadata_key\", \"metadata_value\"))\n .labels(Map.of(\"label_key\", \"label_value\"))\n .build())\n .targetPools(appserverGoogleComputeTargetPool.id())\n .targetSize(2)\n .namedPorts(InstanceGroupManagerNamedPortArgs.builder()\n .name(\"customhttp\")\n .port(8888)\n .build())\n .autoHealingPolicies(InstanceGroupManagerAutoHealingPoliciesArgs.builder()\n .healthCheck(autohealing.id())\n .initialDelaySec(300)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n autohealing:\n type: gcp:compute:HealthCheck\n properties:\n name: autohealing-health-check\n checkIntervalSec: 5\n timeoutSec: 5\n healthyThreshold: 2\n unhealthyThreshold: 10 # 50 seconds\n httpHealthCheck:\n requestPath: /healthz\n port: '8080'\n appserver:\n type: gcp:compute:InstanceGroupManager\n properties:\n name: appserver-igm\n baseInstanceName: app\n zone: us-central1-a\n versions:\n - instanceTemplate: ${appserverGoogleComputeInstanceTemplate.selfLinkUnique}\n allInstancesConfig:\n metadata:\n metadata_key: metadata_value\n labels:\n label_key: label_value\n targetPools:\n - ${appserverGoogleComputeTargetPool.id}\n targetSize: 2\n namedPorts:\n - name: customhttp\n port: 8888\n autoHealingPolicies:\n healthCheck: ${autohealing.id}\n initialDelaySec: 300\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n### With Multiple Versions (`Google-Beta` Provider)\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst appserver = new gcp.compute.InstanceGroupManager(\"appserver\", {\n name: \"appserver-igm\",\n baseInstanceName: \"app\",\n zone: \"us-central1-a\",\n targetSize: 5,\n versions: [\n {\n name: \"appserver\",\n instanceTemplate: appserverGoogleComputeInstanceTemplate.selfLinkUnique,\n },\n {\n name: \"appserver-canary\",\n instanceTemplate: appserver_canary.selfLinkUnique,\n targetSize: {\n fixed: 1,\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nappserver = gcp.compute.InstanceGroupManager(\"appserver\",\n name=\"appserver-igm\",\n base_instance_name=\"app\",\n zone=\"us-central1-a\",\n target_size=5,\n versions=[\n gcp.compute.InstanceGroupManagerVersionArgs(\n name=\"appserver\",\n instance_template=appserver_google_compute_instance_template[\"selfLinkUnique\"],\n ),\n gcp.compute.InstanceGroupManagerVersionArgs(\n name=\"appserver-canary\",\n instance_template=appserver_canary[\"selfLinkUnique\"],\n target_size=gcp.compute.InstanceGroupManagerVersionTargetSizeArgs(\n fixed=1,\n ),\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var appserver = new Gcp.Compute.InstanceGroupManager(\"appserver\", new()\n {\n Name = \"appserver-igm\",\n BaseInstanceName = \"app\",\n Zone = \"us-central1-a\",\n TargetSize = 5,\n Versions = new[]\n {\n new Gcp.Compute.Inputs.InstanceGroupManagerVersionArgs\n {\n Name = \"appserver\",\n InstanceTemplate = appserverGoogleComputeInstanceTemplate.SelfLinkUnique,\n },\n new Gcp.Compute.Inputs.InstanceGroupManagerVersionArgs\n {\n Name = \"appserver-canary\",\n InstanceTemplate = appserver_canary.SelfLinkUnique,\n TargetSize = new Gcp.Compute.Inputs.InstanceGroupManagerVersionTargetSizeArgs\n {\n Fixed = 1,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewInstanceGroupManager(ctx, \"appserver\", \u0026compute.InstanceGroupManagerArgs{\n\t\t\tName: pulumi.String(\"appserver-igm\"),\n\t\t\tBaseInstanceName: pulumi.String(\"app\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tTargetSize: pulumi.Int(5),\n\t\t\tVersions: compute.InstanceGroupManagerVersionArray{\n\t\t\t\t\u0026compute.InstanceGroupManagerVersionArgs{\n\t\t\t\t\tName: pulumi.String(\"appserver\"),\n\t\t\t\t\tInstanceTemplate: pulumi.Any(appserverGoogleComputeInstanceTemplate.SelfLinkUnique),\n\t\t\t\t},\n\t\t\t\t\u0026compute.InstanceGroupManagerVersionArgs{\n\t\t\t\t\tName: pulumi.String(\"appserver-canary\"),\n\t\t\t\t\tInstanceTemplate: pulumi.Any(appserver_canary.SelfLinkUnique),\n\t\t\t\t\tTargetSize: \u0026compute.InstanceGroupManagerVersionTargetSizeArgs{\n\t\t\t\t\t\tFixed: pulumi.Int(1),\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.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionTargetSizeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var appserver = new InstanceGroupManager(\"appserver\", InstanceGroupManagerArgs.builder()\n .name(\"appserver-igm\")\n .baseInstanceName(\"app\")\n .zone(\"us-central1-a\")\n .targetSize(5)\n .versions( \n InstanceGroupManagerVersionArgs.builder()\n .name(\"appserver\")\n .instanceTemplate(appserverGoogleComputeInstanceTemplate.selfLinkUnique())\n .build(),\n InstanceGroupManagerVersionArgs.builder()\n .name(\"appserver-canary\")\n .instanceTemplate(appserver_canary.selfLinkUnique())\n .targetSize(InstanceGroupManagerVersionTargetSizeArgs.builder()\n .fixed(1)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n appserver:\n type: gcp:compute:InstanceGroupManager\n properties:\n name: appserver-igm\n baseInstanceName: app\n zone: us-central1-a\n targetSize: 5\n versions:\n - name: appserver\n instanceTemplate: ${appserverGoogleComputeInstanceTemplate.selfLinkUnique}\n - name: appserver-canary\n instanceTemplate: ${[\"appserver-canary\"].selfLinkUnique}\n targetSize:\n fixed: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstance group managers can be imported using any of these accepted formats:\n\n* `projects/{{project}}/zones/{{zone}}/instanceGroupManagers/{{name}}`\n\n* `{{project}}/{{zone}}/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, instance group managers can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/instanceGroupManager:InstanceGroupManager default projects/{{project}}/zones/{{zone}}/instanceGroupManagers/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/instanceGroupManager:InstanceGroupManager default {{project}}/{{zone}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/instanceGroupManager:InstanceGroupManager default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/instanceGroupManager:InstanceGroupManager default {{name}}\n```\n\n", + "description": "The Google Compute Engine Instance Group Manager API creates and manages pools\nof homogeneous Compute Engine virtual machine instances from a common instance\ntemplate. For more information, see [the official documentation](https://cloud.google.com/compute/docs/instance-groups/manager)\nand [API](https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers)\n\n\u003e **Note:** Use [gcp.compute.RegionInstanceGroupManager](https://www.terraform.io/docs/providers/google/r/compute_region_instance_group_manager.html) to create a regional (multi-zone) instance group manager.\n\n## Example Usage\n\n### With Top Level Instance Template (`Google` Provider)\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst autohealing = new gcp.compute.HealthCheck(\"autohealing\", {\n name: \"autohealing-health-check\",\n checkIntervalSec: 5,\n timeoutSec: 5,\n healthyThreshold: 2,\n unhealthyThreshold: 10,\n httpHealthCheck: {\n requestPath: \"/healthz\",\n port: 8080,\n },\n});\nconst appserver = new gcp.compute.InstanceGroupManager(\"appserver\", {\n name: \"appserver-igm\",\n baseInstanceName: \"app\",\n zone: \"us-central1-a\",\n versions: [{\n instanceTemplate: appserverGoogleComputeInstanceTemplate.selfLinkUnique,\n }],\n allInstancesConfig: {\n metadata: {\n metadata_key: \"metadata_value\",\n },\n labels: {\n label_key: \"label_value\",\n },\n },\n targetPools: [appserverGoogleComputeTargetPool.id],\n targetSize: 2,\n namedPorts: [{\n name: \"customhttp\",\n port: 8888,\n }],\n autoHealingPolicies: {\n healthCheck: autohealing.id,\n initialDelaySec: 300,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nautohealing = gcp.compute.HealthCheck(\"autohealing\",\n name=\"autohealing-health-check\",\n check_interval_sec=5,\n timeout_sec=5,\n healthy_threshold=2,\n unhealthy_threshold=10,\n http_health_check=gcp.compute.HealthCheckHttpHealthCheckArgs(\n request_path=\"/healthz\",\n port=8080,\n ))\nappserver = gcp.compute.InstanceGroupManager(\"appserver\",\n name=\"appserver-igm\",\n base_instance_name=\"app\",\n zone=\"us-central1-a\",\n versions=[gcp.compute.InstanceGroupManagerVersionArgs(\n instance_template=appserver_google_compute_instance_template[\"selfLinkUnique\"],\n )],\n all_instances_config=gcp.compute.InstanceGroupManagerAllInstancesConfigArgs(\n metadata={\n \"metadata_key\": \"metadata_value\",\n },\n labels={\n \"label_key\": \"label_value\",\n },\n ),\n target_pools=[appserver_google_compute_target_pool[\"id\"]],\n target_size=2,\n named_ports=[gcp.compute.InstanceGroupManagerNamedPortArgs(\n name=\"customhttp\",\n port=8888,\n )],\n auto_healing_policies=gcp.compute.InstanceGroupManagerAutoHealingPoliciesArgs(\n health_check=autohealing.id,\n initial_delay_sec=300,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var autohealing = new Gcp.Compute.HealthCheck(\"autohealing\", new()\n {\n Name = \"autohealing-health-check\",\n CheckIntervalSec = 5,\n TimeoutSec = 5,\n HealthyThreshold = 2,\n UnhealthyThreshold = 10,\n HttpHealthCheck = new Gcp.Compute.Inputs.HealthCheckHttpHealthCheckArgs\n {\n RequestPath = \"/healthz\",\n Port = 8080,\n },\n });\n\n var appserver = new Gcp.Compute.InstanceGroupManager(\"appserver\", new()\n {\n Name = \"appserver-igm\",\n BaseInstanceName = \"app\",\n Zone = \"us-central1-a\",\n Versions = new[]\n {\n new Gcp.Compute.Inputs.InstanceGroupManagerVersionArgs\n {\n InstanceTemplate = appserverGoogleComputeInstanceTemplate.SelfLinkUnique,\n },\n },\n AllInstancesConfig = new Gcp.Compute.Inputs.InstanceGroupManagerAllInstancesConfigArgs\n {\n Metadata = \n {\n { \"metadata_key\", \"metadata_value\" },\n },\n Labels = \n {\n { \"label_key\", \"label_value\" },\n },\n },\n TargetPools = new[]\n {\n appserverGoogleComputeTargetPool.Id,\n },\n TargetSize = 2,\n NamedPorts = new[]\n {\n new Gcp.Compute.Inputs.InstanceGroupManagerNamedPortArgs\n {\n Name = \"customhttp\",\n Port = 8888,\n },\n },\n AutoHealingPolicies = new Gcp.Compute.Inputs.InstanceGroupManagerAutoHealingPoliciesArgs\n {\n HealthCheck = autohealing.Id,\n InitialDelaySec = 300,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tautohealing, err := compute.NewHealthCheck(ctx, \"autohealing\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"autohealing-health-check\"),\n\t\t\tCheckIntervalSec: pulumi.Int(5),\n\t\t\tTimeoutSec: pulumi.Int(5),\n\t\t\tHealthyThreshold: pulumi.Int(2),\n\t\t\tUnhealthyThreshold: pulumi.Int(10),\n\t\t\tHttpHealthCheck: \u0026compute.HealthCheckHttpHealthCheckArgs{\n\t\t\t\tRequestPath: pulumi.String(\"/healthz\"),\n\t\t\t\tPort: pulumi.Int(8080),\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, \"appserver\", \u0026compute.InstanceGroupManagerArgs{\n\t\t\tName: pulumi.String(\"appserver-igm\"),\n\t\t\tBaseInstanceName: pulumi.String(\"app\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tVersions: compute.InstanceGroupManagerVersionArray{\n\t\t\t\t\u0026compute.InstanceGroupManagerVersionArgs{\n\t\t\t\t\tInstanceTemplate: pulumi.Any(appserverGoogleComputeInstanceTemplate.SelfLinkUnique),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAllInstancesConfig: \u0026compute.InstanceGroupManagerAllInstancesConfigArgs{\n\t\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\t\"metadata_key\": pulumi.String(\"metadata_value\"),\n\t\t\t\t},\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"label_key\": pulumi.String(\"label_value\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetPools: pulumi.StringArray{\n\t\t\t\tappserverGoogleComputeTargetPool.Id,\n\t\t\t},\n\t\t\tTargetSize: pulumi.Int(2),\n\t\t\tNamedPorts: compute.InstanceGroupManagerNamedPortArray{\n\t\t\t\t\u0026compute.InstanceGroupManagerNamedPortArgs{\n\t\t\t\t\tName: pulumi.String(\"customhttp\"),\n\t\t\t\t\tPort: pulumi.Int(8888),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAutoHealingPolicies: \u0026compute.InstanceGroupManagerAutoHealingPoliciesArgs{\n\t\t\t\tHealthCheck: autohealing.ID(),\n\t\t\t\tInitialDelaySec: pulumi.Int(300),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\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.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerAllInstancesConfigArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerNamedPortArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerAutoHealingPoliciesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var autohealing = new HealthCheck(\"autohealing\", HealthCheckArgs.builder()\n .name(\"autohealing-health-check\")\n .checkIntervalSec(5)\n .timeoutSec(5)\n .healthyThreshold(2)\n .unhealthyThreshold(10)\n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .requestPath(\"/healthz\")\n .port(\"8080\")\n .build())\n .build());\n\n var appserver = new InstanceGroupManager(\"appserver\", InstanceGroupManagerArgs.builder()\n .name(\"appserver-igm\")\n .baseInstanceName(\"app\")\n .zone(\"us-central1-a\")\n .versions(InstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(appserverGoogleComputeInstanceTemplate.selfLinkUnique())\n .build())\n .allInstancesConfig(InstanceGroupManagerAllInstancesConfigArgs.builder()\n .metadata(Map.of(\"metadata_key\", \"metadata_value\"))\n .labels(Map.of(\"label_key\", \"label_value\"))\n .build())\n .targetPools(appserverGoogleComputeTargetPool.id())\n .targetSize(2)\n .namedPorts(InstanceGroupManagerNamedPortArgs.builder()\n .name(\"customhttp\")\n .port(8888)\n .build())\n .autoHealingPolicies(InstanceGroupManagerAutoHealingPoliciesArgs.builder()\n .healthCheck(autohealing.id())\n .initialDelaySec(300)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n autohealing:\n type: gcp:compute:HealthCheck\n properties:\n name: autohealing-health-check\n checkIntervalSec: 5\n timeoutSec: 5\n healthyThreshold: 2\n unhealthyThreshold: 10 # 50 seconds\n httpHealthCheck:\n requestPath: /healthz\n port: '8080'\n appserver:\n type: gcp:compute:InstanceGroupManager\n properties:\n name: appserver-igm\n baseInstanceName: app\n zone: us-central1-a\n versions:\n - instanceTemplate: ${appserverGoogleComputeInstanceTemplate.selfLinkUnique}\n allInstancesConfig:\n metadata:\n metadata_key: metadata_value\n labels:\n label_key: label_value\n targetPools:\n - ${appserverGoogleComputeTargetPool.id}\n targetSize: 2\n namedPorts:\n - name: customhttp\n port: 8888\n autoHealingPolicies:\n healthCheck: ${autohealing.id}\n initialDelaySec: 300\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n### With Multiple Versions (`Google-Beta` Provider)\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst appserver = new gcp.compute.InstanceGroupManager(\"appserver\", {\n name: \"appserver-igm\",\n baseInstanceName: \"app\",\n zone: \"us-central1-a\",\n targetSize: 5,\n versions: [\n {\n name: \"appserver\",\n instanceTemplate: appserverGoogleComputeInstanceTemplate.selfLinkUnique,\n },\n {\n name: \"appserver-canary\",\n instanceTemplate: appserver_canary.selfLinkUnique,\n targetSize: {\n fixed: 1,\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nappserver = gcp.compute.InstanceGroupManager(\"appserver\",\n name=\"appserver-igm\",\n base_instance_name=\"app\",\n zone=\"us-central1-a\",\n target_size=5,\n versions=[\n gcp.compute.InstanceGroupManagerVersionArgs(\n name=\"appserver\",\n instance_template=appserver_google_compute_instance_template[\"selfLinkUnique\"],\n ),\n gcp.compute.InstanceGroupManagerVersionArgs(\n name=\"appserver-canary\",\n instance_template=appserver_canary[\"selfLinkUnique\"],\n target_size=gcp.compute.InstanceGroupManagerVersionTargetSizeArgs(\n fixed=1,\n ),\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var appserver = new Gcp.Compute.InstanceGroupManager(\"appserver\", new()\n {\n Name = \"appserver-igm\",\n BaseInstanceName = \"app\",\n Zone = \"us-central1-a\",\n TargetSize = 5,\n Versions = new[]\n {\n new Gcp.Compute.Inputs.InstanceGroupManagerVersionArgs\n {\n Name = \"appserver\",\n InstanceTemplate = appserverGoogleComputeInstanceTemplate.SelfLinkUnique,\n },\n new Gcp.Compute.Inputs.InstanceGroupManagerVersionArgs\n {\n Name = \"appserver-canary\",\n InstanceTemplate = appserver_canary.SelfLinkUnique,\n TargetSize = new Gcp.Compute.Inputs.InstanceGroupManagerVersionTargetSizeArgs\n {\n Fixed = 1,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewInstanceGroupManager(ctx, \"appserver\", \u0026compute.InstanceGroupManagerArgs{\n\t\t\tName: pulumi.String(\"appserver-igm\"),\n\t\t\tBaseInstanceName: pulumi.String(\"app\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tTargetSize: pulumi.Int(5),\n\t\t\tVersions: compute.InstanceGroupManagerVersionArray{\n\t\t\t\t\u0026compute.InstanceGroupManagerVersionArgs{\n\t\t\t\t\tName: pulumi.String(\"appserver\"),\n\t\t\t\t\tInstanceTemplate: pulumi.Any(appserverGoogleComputeInstanceTemplate.SelfLinkUnique),\n\t\t\t\t},\n\t\t\t\t\u0026compute.InstanceGroupManagerVersionArgs{\n\t\t\t\t\tName: pulumi.String(\"appserver-canary\"),\n\t\t\t\t\tInstanceTemplate: pulumi.Any(appserver_canary.SelfLinkUnique),\n\t\t\t\t\tTargetSize: \u0026compute.InstanceGroupManagerVersionTargetSizeArgs{\n\t\t\t\t\t\tFixed: pulumi.Int(1),\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.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionTargetSizeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var appserver = new InstanceGroupManager(\"appserver\", InstanceGroupManagerArgs.builder()\n .name(\"appserver-igm\")\n .baseInstanceName(\"app\")\n .zone(\"us-central1-a\")\n .targetSize(5)\n .versions( \n InstanceGroupManagerVersionArgs.builder()\n .name(\"appserver\")\n .instanceTemplate(appserverGoogleComputeInstanceTemplate.selfLinkUnique())\n .build(),\n InstanceGroupManagerVersionArgs.builder()\n .name(\"appserver-canary\")\n .instanceTemplate(appserver_canary.selfLinkUnique())\n .targetSize(InstanceGroupManagerVersionTargetSizeArgs.builder()\n .fixed(1)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n appserver:\n type: gcp:compute:InstanceGroupManager\n properties:\n name: appserver-igm\n baseInstanceName: app\n zone: us-central1-a\n targetSize: 5\n versions:\n - name: appserver\n instanceTemplate: ${appserverGoogleComputeInstanceTemplate.selfLinkUnique}\n - name: appserver-canary\n instanceTemplate: ${[\"appserver-canary\"].selfLinkUnique}\n targetSize:\n fixed: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n### With Standby Policy (`Google-Beta` Provider)\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst igm_sr = new gcp.compute.InstanceGroupManager(\"igm-sr\", {\n name: \"tf-sr-igm\",\n baseInstanceName: \"tf-sr-igm-instance\",\n zone: \"us-central1-a\",\n targetSize: 5,\n versions: [{\n instanceTemplate: sr_igm.selfLink,\n name: \"primary\",\n }],\n standbyPolicy: {\n initialDelaySec: 30,\n mode: \"MANUAL\",\n },\n targetSuspendedSize: 2,\n targetStoppedSize: 1,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nigm_sr = gcp.compute.InstanceGroupManager(\"igm-sr\",\n name=\"tf-sr-igm\",\n base_instance_name=\"tf-sr-igm-instance\",\n zone=\"us-central1-a\",\n target_size=5,\n versions=[gcp.compute.InstanceGroupManagerVersionArgs(\n instance_template=sr_igm[\"selfLink\"],\n name=\"primary\",\n )],\n standby_policy=gcp.compute.InstanceGroupManagerStandbyPolicyArgs(\n initial_delay_sec=30,\n mode=\"MANUAL\",\n ),\n target_suspended_size=2,\n target_stopped_size=1)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var igm_sr = new Gcp.Compute.InstanceGroupManager(\"igm-sr\", new()\n {\n Name = \"tf-sr-igm\",\n BaseInstanceName = \"tf-sr-igm-instance\",\n Zone = \"us-central1-a\",\n TargetSize = 5,\n Versions = new[]\n {\n new Gcp.Compute.Inputs.InstanceGroupManagerVersionArgs\n {\n InstanceTemplate = sr_igm.SelfLink,\n Name = \"primary\",\n },\n },\n StandbyPolicy = new Gcp.Compute.Inputs.InstanceGroupManagerStandbyPolicyArgs\n {\n InitialDelaySec = 30,\n Mode = \"MANUAL\",\n },\n TargetSuspendedSize = 2,\n TargetStoppedSize = 1,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewInstanceGroupManager(ctx, \"igm-sr\", \u0026compute.InstanceGroupManagerArgs{\n\t\t\tName: pulumi.String(\"tf-sr-igm\"),\n\t\t\tBaseInstanceName: pulumi.String(\"tf-sr-igm-instance\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tTargetSize: pulumi.Int(5),\n\t\t\tVersions: compute.InstanceGroupManagerVersionArray{\n\t\t\t\t\u0026compute.InstanceGroupManagerVersionArgs{\n\t\t\t\t\tInstanceTemplate: pulumi.Any(sr_igm.SelfLink),\n\t\t\t\t\tName: pulumi.String(\"primary\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tStandbyPolicy: \u0026compute.InstanceGroupManagerStandbyPolicyArgs{\n\t\t\t\tInitialDelaySec: pulumi.Int(30),\n\t\t\t\tMode: pulumi.String(\"MANUAL\"),\n\t\t\t},\n\t\t\tTargetSuspendedSize: pulumi.Int(2),\n\t\t\tTargetStoppedSize: 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.compute.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerStandbyPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var igm_sr = new InstanceGroupManager(\"igm-sr\", InstanceGroupManagerArgs.builder()\n .name(\"tf-sr-igm\")\n .baseInstanceName(\"tf-sr-igm-instance\")\n .zone(\"us-central1-a\")\n .targetSize(5)\n .versions(InstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(sr_igm.selfLink())\n .name(\"primary\")\n .build())\n .standbyPolicy(InstanceGroupManagerStandbyPolicyArgs.builder()\n .initialDelaySec(30)\n .mode(\"MANUAL\")\n .build())\n .targetSuspendedSize(2)\n .targetStoppedSize(1)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n igm-sr:\n type: gcp:compute:InstanceGroupManager\n properties:\n name: tf-sr-igm\n baseInstanceName: tf-sr-igm-instance\n zone: us-central1-a\n targetSize: 5\n versions:\n - instanceTemplate: ${[\"sr-igm\"].selfLink}\n name: primary\n standbyPolicy:\n initialDelaySec: 30\n mode: MANUAL\n targetSuspendedSize: 2\n targetStoppedSize: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstance group managers can be imported using any of these accepted formats:\n\n* `projects/{{project}}/zones/{{zone}}/instanceGroupManagers/{{name}}`\n\n* `{{project}}/{{zone}}/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, instance group managers can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/instanceGroupManager:InstanceGroupManager default projects/{{project}}/zones/{{zone}}/instanceGroupManagers/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/instanceGroupManager:InstanceGroupManager default {{project}}/{{zone}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/instanceGroupManager:InstanceGroupManager default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/instanceGroupManager:InstanceGroupManager default {{name}}\n```\n\n", "properties": { "allInstancesConfig": { "$ref": "#/types/gcp:compute/InstanceGroupManagerAllInstancesConfig:InstanceGroupManagerAllInstancesConfig", @@ -146348,6 +147529,10 @@ "type": "string", "description": "The URL of the created resource.\n" }, + "standbyPolicy": { + "$ref": "#/types/gcp:compute/InstanceGroupManagerStandbyPolicy:InstanceGroupManagerStandbyPolicy", + "description": "The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch)\n" + }, "statefulDisks": { "type": "array", "items": { @@ -146387,6 +147572,14 @@ "type": "integer", "description": "The target number of running instances for this managed instance group. This value should always be explicitly set\nunless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0.\n" }, + "targetStoppedSize": { + "type": "integer", + "description": "The target number of stopped instances for this managed instance group.\n" + }, + "targetSuspendedSize": { + "type": "integer", + "description": "The target number of suspended instances for this managed instance group.\n" + }, "updatePolicy": { "$ref": "#/types/gcp:compute/InstanceGroupManagerUpdatePolicy:InstanceGroupManagerUpdatePolicy", "description": "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).\n" @@ -146421,8 +147614,11 @@ "operation", "project", "selfLink", + "standbyPolicy", "statuses", "targetSize", + "targetStoppedSize", + "targetSuspendedSize", "updatePolicy", "versions", "zone" @@ -146475,6 +147671,10 @@ "description": "The ID of the project in which the resource belongs. If it\nis not provided, the provider project is used.\n", "willReplaceOnChanges": true }, + "standbyPolicy": { + "$ref": "#/types/gcp:compute/InstanceGroupManagerStandbyPolicy:InstanceGroupManagerStandbyPolicy", + "description": "The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch)\n" + }, "statefulDisks": { "type": "array", "items": { @@ -146507,6 +147707,14 @@ "type": "integer", "description": "The target number of running instances for this managed instance group. This value should always be explicitly set\nunless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0.\n" }, + "targetStoppedSize": { + "type": "integer", + "description": "The target number of stopped instances for this managed instance group.\n" + }, + "targetSuspendedSize": { + "type": "integer", + "description": "The target number of suspended instances for this managed instance group.\n" + }, "updatePolicy": { "$ref": "#/types/gcp:compute/InstanceGroupManagerUpdatePolicy:InstanceGroupManagerUpdatePolicy", "description": "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).\n" @@ -146605,6 +147813,10 @@ "type": "string", "description": "The URL of the created resource.\n" }, + "standbyPolicy": { + "$ref": "#/types/gcp:compute/InstanceGroupManagerStandbyPolicy:InstanceGroupManagerStandbyPolicy", + "description": "The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch)\n" + }, "statefulDisks": { "type": "array", "items": { @@ -146644,6 +147856,14 @@ "type": "integer", "description": "The target number of running instances for this managed instance group. This value should always be explicitly set\nunless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0.\n" }, + "targetStoppedSize": { + "type": "integer", + "description": "The target number of stopped instances for this managed instance group.\n" + }, + "targetSuspendedSize": { + "type": "integer", + "description": "The target number of suspended instances for this managed instance group.\n" + }, "updatePolicy": { "$ref": "#/types/gcp:compute/InstanceGroupManagerUpdatePolicy:InstanceGroupManagerUpdatePolicy", "description": "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).\n" @@ -147338,6 +148558,13 @@ "$ref": "#/types/gcp:compute/InstanceTemplateNetworkPerformanceConfig:InstanceTemplateNetworkPerformanceConfig", "description": "(Optional, Configures network performance settings for the instance created from the\ntemplate. Structure is documented below. **Note**: `machine_type`\nmust be a [supported type](https://cloud.google.com/compute/docs/networking/configure-vm-with-high-bandwidth-configuration),\nthe `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image)\nin `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC`\nin order for this setting to take effect.\n" }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If it\nis not provided, the provider project is used.\n" @@ -147518,6 +148745,13 @@ "description": "(Optional, Configures network performance settings for the instance created from the\ntemplate. Structure is documented below. **Note**: `machine_type`\nmust be a [supported type](https://cloud.google.com/compute/docs/networking/configure-vm-with-high-bandwidth-configuration),\nthe `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image)\nin `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC`\nin order for this setting to take effect.\n", "willReplaceOnChanges": true }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If it\nis not provided, the provider project is used.\n", @@ -147690,6 +148924,13 @@ "description": "(Optional, Configures network performance settings for the instance created from the\ntemplate. Structure is documented below. **Note**: `machine_type`\nmust be a [supported type](https://cloud.google.com/compute/docs/networking/configure-vm-with-high-bandwidth-configuration),\nthe `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image)\nin `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC`\nin order for this setting to take effect.\n", "willReplaceOnChanges": true }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If it\nis not provided, the provider project is used.\n", @@ -151797,6 +153038,52 @@ "type": "object" } }, + "gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier": { + "description": "Sets the Cloud Armor tier of the project.\n\n\nTo get more information about ProjectCloudArmorTier, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/projects/setCloudArmorTier)\n* How-to Guides\n * [Subscribing to Cloud Armor Enterprise](https://cloud.google.com/armor/docs/managed-protection-overview#subscribing_to_plus)\n\n## Example Usage\n\n### Compute Project Cloud Armor Tier Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cloudArmorTierConfig = new gcp.compute.ProjectCloudArmorTier(\"cloud_armor_tier_config\", {cloudArmorTier: \"CA_STANDARD\"});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncloud_armor_tier_config = gcp.compute.ProjectCloudArmorTier(\"cloud_armor_tier_config\", cloud_armor_tier=\"CA_STANDARD\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudArmorTierConfig = new Gcp.Compute.ProjectCloudArmorTier(\"cloud_armor_tier_config\", new()\n {\n CloudArmorTier = \"CA_STANDARD\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewProjectCloudArmorTier(ctx, \"cloud_armor_tier_config\", \u0026compute.ProjectCloudArmorTierArgs{\n\t\t\tCloudArmorTier: pulumi.String(\"CA_STANDARD\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.ProjectCloudArmorTier;\nimport com.pulumi.gcp.compute.ProjectCloudArmorTierArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudArmorTierConfig = new ProjectCloudArmorTier(\"cloudArmorTierConfig\", ProjectCloudArmorTierArgs.builder()\n .cloudArmorTier(\"CA_STANDARD\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cloudArmorTierConfig:\n type: gcp:compute:ProjectCloudArmorTier\n name: cloud_armor_tier_config\n properties:\n cloudArmorTier: CA_STANDARD\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Compute Project Cloud Armor Tier Project Set\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.organizations.Project(\"project\", {\n projectId: \"your_project_id\",\n name: \"your_project_id\",\n orgId: \"123456789\",\n billingAccount: \"000000-0000000-0000000-000000\",\n});\nconst compute = new gcp.projects.Service(\"compute\", {\n project: project.projectId,\n service: \"compute.googleapis.com\",\n});\nconst cloudArmorTierConfig = new gcp.compute.ProjectCloudArmorTier(\"cloud_armor_tier_config\", {\n project: project.projectId,\n cloudArmorTier: \"CA_STANDARD\",\n}, {\n dependsOn: [compute],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.Project(\"project\",\n project_id=\"your_project_id\",\n name=\"your_project_id\",\n org_id=\"123456789\",\n billing_account=\"000000-0000000-0000000-000000\")\ncompute = gcp.projects.Service(\"compute\",\n project=project.project_id,\n service=\"compute.googleapis.com\")\ncloud_armor_tier_config = gcp.compute.ProjectCloudArmorTier(\"cloud_armor_tier_config\",\n project=project.project_id,\n cloud_armor_tier=\"CA_STANDARD\",\n opts=pulumi.ResourceOptions(depends_on=[compute]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n ProjectId = \"your_project_id\",\n Name = \"your_project_id\",\n OrgId = \"123456789\",\n BillingAccount = \"000000-0000000-0000000-000000\",\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 cloudArmorTierConfig = new Gcp.Compute.ProjectCloudArmorTier(\"cloud_armor_tier_config\", new()\n {\n Project = project.ProjectId,\n CloudArmorTier = \"CA_STANDARD\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n compute,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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(\"your_project_id\"),\n\t\t\tName: pulumi.String(\"your_project_id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\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\t_, err = compute.NewProjectCloudArmorTier(ctx, \"cloud_armor_tier_config\", \u0026compute.ProjectCloudArmorTierArgs{\n\t\t\tProject: project.ProjectId,\n\t\t\tCloudArmorTier: pulumi.String(\"CA_STANDARD\"),\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\treturn nil\n\t})\n}\n```\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.ProjectCloudArmorTier;\nimport com.pulumi.gcp.compute.ProjectCloudArmorTierArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(\"your_project_id\")\n .name(\"your_project_id\")\n .orgId(\"123456789\")\n .billingAccount(\"000000-0000000-0000000-000000\")\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 cloudArmorTierConfig = new ProjectCloudArmorTier(\"cloudArmorTierConfig\", ProjectCloudArmorTierArgs.builder()\n .project(project.projectId())\n .cloudArmorTier(\"CA_STANDARD\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(compute)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: your_project_id\n name: your_project_id\n orgId: '123456789'\n billingAccount: 000000-0000000-0000000-000000\n compute:\n type: gcp:projects:Service\n properties:\n project: ${project.projectId}\n service: compute.googleapis.com\n cloudArmorTierConfig:\n type: gcp:compute:ProjectCloudArmorTier\n name: cloud_armor_tier_config\n properties:\n project: ${project.projectId}\n cloudArmorTier: CA_STANDARD\n options:\n dependson:\n - ${compute}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nProjectCloudArmorTier can be imported using any of these accepted formats:\n\n* `projects/{{project}}`\n\n* `{{project}}`\n\nWhen using the `pulumi import` command, ProjectCloudArmorTier can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default projects/{{project}}\n```\n\n```sh\n$ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default {{project}}\n```\n\n", + "properties": { + "cloudArmorTier": { + "type": "string", + "description": "Managed protection tier to be set.\nPossible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`.\n\n\n- - -\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n" + } + }, + "required": [ + "cloudArmorTier", + "project" + ], + "inputProperties": { + "cloudArmorTier": { + "type": "string", + "description": "Managed protection tier to be set.\nPossible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`.\n\n\n- - -\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "cloudArmorTier" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering ProjectCloudArmorTier resources.\n", + "properties": { + "cloudArmorTier": { + "type": "string", + "description": "Managed protection tier to be set.\nPossible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`.\n\n\n- - -\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + } + }, "gcp:compute/projectDefaultNetworkTier:ProjectDefaultNetworkTier": { "description": "Configures the Google Compute Engine\n[Default Network Tier](https://cloud.google.com/network-tiers/docs/using-network-service-tiers#setting_the_tier_for_all_resources_in_a_project)\nfor a project.\n\nFor more information, see,\n[the Project API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/projects/setDefaultNetworkTier).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.ProjectDefaultNetworkTier(\"default\", {networkTier: \"PREMIUM\"});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.ProjectDefaultNetworkTier(\"default\", network_tier=\"PREMIUM\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.ProjectDefaultNetworkTier(\"default\", new()\n {\n NetworkTier = \"PREMIUM\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewProjectDefaultNetworkTier(ctx, \"default\", \u0026compute.ProjectDefaultNetworkTierArgs{\n\t\t\tNetworkTier: pulumi.String(\"PREMIUM\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.ProjectDefaultNetworkTier;\nimport com.pulumi.gcp.compute.ProjectDefaultNetworkTierArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ProjectDefaultNetworkTier(\"default\", ProjectDefaultNetworkTierArgs.builder()\n .networkTier(\"PREMIUM\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:ProjectDefaultNetworkTier\n properties:\n networkTier: PREMIUM\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nCompute Engine Default Network Tier can be imported using any of these accepted formats:\n\n* `{{project_id}}`\n\nWhen using the `pulumi import` command, Compute Engine Default Network Tier can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/projectDefaultNetworkTier:ProjectDefaultNetworkTier default {{project_id}}\n```\n\n", "properties": { @@ -154294,7 +155581,7 @@ } }, "gcp:compute/regionInstanceGroupManager:RegionInstanceGroupManager": { - "description": "The Google Compute Engine Regional Instance Group Manager API creates and manages pools\nof homogeneous Compute Engine virtual machine instances from a common instance\ntemplate.\n\nTo get more information about regionInstanceGroupManagers, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/latest/regionInstanceGroupManagers)\n* How-to Guides\n * [Regional Instance Groups Guide](https://cloud.google.com/compute/docs/instance-groups/distributing-instances-with-regional-instance-groups)\n\n\u003e **Note:** Use [gcp.compute.InstanceGroupManager](https://www.terraform.io/docs/providers/google/r/compute_instance_group_manager.html) to create a zonal instance group manager.\n\n## Example Usage\n\n### With Top Level Instance Template (`Google` Provider)\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst autohealing = new gcp.compute.HealthCheck(\"autohealing\", {\n name: \"autohealing-health-check\",\n checkIntervalSec: 5,\n timeoutSec: 5,\n healthyThreshold: 2,\n unhealthyThreshold: 10,\n httpHealthCheck: {\n requestPath: \"/healthz\",\n port: 8080,\n },\n});\nconst appserver = new gcp.compute.RegionInstanceGroupManager(\"appserver\", {\n name: \"appserver-igm\",\n baseInstanceName: \"app\",\n region: \"us-central1\",\n distributionPolicyZones: [\n \"us-central1-a\",\n \"us-central1-f\",\n ],\n versions: [{\n instanceTemplate: appserverGoogleComputeInstanceTemplate.selfLinkUnique,\n }],\n allInstancesConfig: {\n metadata: {\n metadata_key: \"metadata_value\",\n },\n labels: {\n label_key: \"label_value\",\n },\n },\n targetPools: [appserverGoogleComputeTargetPool.id],\n targetSize: 2,\n namedPorts: [{\n name: \"custom\",\n port: 8888,\n }],\n autoHealingPolicies: {\n healthCheck: autohealing.id,\n initialDelaySec: 300,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nautohealing = gcp.compute.HealthCheck(\"autohealing\",\n name=\"autohealing-health-check\",\n check_interval_sec=5,\n timeout_sec=5,\n healthy_threshold=2,\n unhealthy_threshold=10,\n http_health_check=gcp.compute.HealthCheckHttpHealthCheckArgs(\n request_path=\"/healthz\",\n port=8080,\n ))\nappserver = gcp.compute.RegionInstanceGroupManager(\"appserver\",\n name=\"appserver-igm\",\n base_instance_name=\"app\",\n region=\"us-central1\",\n distribution_policy_zones=[\n \"us-central1-a\",\n \"us-central1-f\",\n ],\n versions=[gcp.compute.RegionInstanceGroupManagerVersionArgs(\n instance_template=appserver_google_compute_instance_template[\"selfLinkUnique\"],\n )],\n all_instances_config=gcp.compute.RegionInstanceGroupManagerAllInstancesConfigArgs(\n metadata={\n \"metadata_key\": \"metadata_value\",\n },\n labels={\n \"label_key\": \"label_value\",\n },\n ),\n target_pools=[appserver_google_compute_target_pool[\"id\"]],\n target_size=2,\n named_ports=[gcp.compute.RegionInstanceGroupManagerNamedPortArgs(\n name=\"custom\",\n port=8888,\n )],\n auto_healing_policies=gcp.compute.RegionInstanceGroupManagerAutoHealingPoliciesArgs(\n health_check=autohealing.id,\n initial_delay_sec=300,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var autohealing = new Gcp.Compute.HealthCheck(\"autohealing\", new()\n {\n Name = \"autohealing-health-check\",\n CheckIntervalSec = 5,\n TimeoutSec = 5,\n HealthyThreshold = 2,\n UnhealthyThreshold = 10,\n HttpHealthCheck = new Gcp.Compute.Inputs.HealthCheckHttpHealthCheckArgs\n {\n RequestPath = \"/healthz\",\n Port = 8080,\n },\n });\n\n var appserver = new Gcp.Compute.RegionInstanceGroupManager(\"appserver\", new()\n {\n Name = \"appserver-igm\",\n BaseInstanceName = \"app\",\n Region = \"us-central1\",\n DistributionPolicyZones = new[]\n {\n \"us-central1-a\",\n \"us-central1-f\",\n },\n Versions = new[]\n {\n new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionArgs\n {\n InstanceTemplate = appserverGoogleComputeInstanceTemplate.SelfLinkUnique,\n },\n },\n AllInstancesConfig = new Gcp.Compute.Inputs.RegionInstanceGroupManagerAllInstancesConfigArgs\n {\n Metadata = \n {\n { \"metadata_key\", \"metadata_value\" },\n },\n Labels = \n {\n { \"label_key\", \"label_value\" },\n },\n },\n TargetPools = new[]\n {\n appserverGoogleComputeTargetPool.Id,\n },\n TargetSize = 2,\n NamedPorts = new[]\n {\n new Gcp.Compute.Inputs.RegionInstanceGroupManagerNamedPortArgs\n {\n Name = \"custom\",\n Port = 8888,\n },\n },\n AutoHealingPolicies = new Gcp.Compute.Inputs.RegionInstanceGroupManagerAutoHealingPoliciesArgs\n {\n HealthCheck = autohealing.Id,\n InitialDelaySec = 300,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tautohealing, err := compute.NewHealthCheck(ctx, \"autohealing\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"autohealing-health-check\"),\n\t\t\tCheckIntervalSec: pulumi.Int(5),\n\t\t\tTimeoutSec: pulumi.Int(5),\n\t\t\tHealthyThreshold: pulumi.Int(2),\n\t\t\tUnhealthyThreshold: pulumi.Int(10),\n\t\t\tHttpHealthCheck: \u0026compute.HealthCheckHttpHealthCheckArgs{\n\t\t\t\tRequestPath: pulumi.String(\"/healthz\"),\n\t\t\t\tPort: pulumi.Int(8080),\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.NewRegionInstanceGroupManager(ctx, \"appserver\", \u0026compute.RegionInstanceGroupManagerArgs{\n\t\t\tName: pulumi.String(\"appserver-igm\"),\n\t\t\tBaseInstanceName: pulumi.String(\"app\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDistributionPolicyZones: 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\tVersions: compute.RegionInstanceGroupManagerVersionArray{\n\t\t\t\t\u0026compute.RegionInstanceGroupManagerVersionArgs{\n\t\t\t\t\tInstanceTemplate: pulumi.Any(appserverGoogleComputeInstanceTemplate.SelfLinkUnique),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAllInstancesConfig: \u0026compute.RegionInstanceGroupManagerAllInstancesConfigArgs{\n\t\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\t\"metadata_key\": pulumi.String(\"metadata_value\"),\n\t\t\t\t},\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"label_key\": pulumi.String(\"label_value\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetPools: pulumi.StringArray{\n\t\t\t\tappserverGoogleComputeTargetPool.Id,\n\t\t\t},\n\t\t\tTargetSize: pulumi.Int(2),\n\t\t\tNamedPorts: compute.RegionInstanceGroupManagerNamedPortArray{\n\t\t\t\t\u0026compute.RegionInstanceGroupManagerNamedPortArgs{\n\t\t\t\t\tName: pulumi.String(\"custom\"),\n\t\t\t\t\tPort: pulumi.Int(8888),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAutoHealingPolicies: \u0026compute.RegionInstanceGroupManagerAutoHealingPoliciesArgs{\n\t\t\t\tHealthCheck: autohealing.ID(),\n\t\t\t\tInitialDelaySec: pulumi.Int(300),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\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.RegionInstanceGroupManager;\nimport com.pulumi.gcp.compute.RegionInstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerAllInstancesConfigArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerNamedPortArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerAutoHealingPoliciesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var autohealing = new HealthCheck(\"autohealing\", HealthCheckArgs.builder()\n .name(\"autohealing-health-check\")\n .checkIntervalSec(5)\n .timeoutSec(5)\n .healthyThreshold(2)\n .unhealthyThreshold(10)\n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .requestPath(\"/healthz\")\n .port(\"8080\")\n .build())\n .build());\n\n var appserver = new RegionInstanceGroupManager(\"appserver\", RegionInstanceGroupManagerArgs.builder()\n .name(\"appserver-igm\")\n .baseInstanceName(\"app\")\n .region(\"us-central1\")\n .distributionPolicyZones( \n \"us-central1-a\",\n \"us-central1-f\")\n .versions(RegionInstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(appserverGoogleComputeInstanceTemplate.selfLinkUnique())\n .build())\n .allInstancesConfig(RegionInstanceGroupManagerAllInstancesConfigArgs.builder()\n .metadata(Map.of(\"metadata_key\", \"metadata_value\"))\n .labels(Map.of(\"label_key\", \"label_value\"))\n .build())\n .targetPools(appserverGoogleComputeTargetPool.id())\n .targetSize(2)\n .namedPorts(RegionInstanceGroupManagerNamedPortArgs.builder()\n .name(\"custom\")\n .port(8888)\n .build())\n .autoHealingPolicies(RegionInstanceGroupManagerAutoHealingPoliciesArgs.builder()\n .healthCheck(autohealing.id())\n .initialDelaySec(300)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n autohealing:\n type: gcp:compute:HealthCheck\n properties:\n name: autohealing-health-check\n checkIntervalSec: 5\n timeoutSec: 5\n healthyThreshold: 2\n unhealthyThreshold: 10 # 50 seconds\n httpHealthCheck:\n requestPath: /healthz\n port: '8080'\n appserver:\n type: gcp:compute:RegionInstanceGroupManager\n properties:\n name: appserver-igm\n baseInstanceName: app\n region: us-central1\n distributionPolicyZones:\n - us-central1-a\n - us-central1-f\n versions:\n - instanceTemplate: ${appserverGoogleComputeInstanceTemplate.selfLinkUnique}\n allInstancesConfig:\n metadata:\n metadata_key: metadata_value\n labels:\n label_key: label_value\n targetPools:\n - ${appserverGoogleComputeTargetPool.id}\n targetSize: 2\n namedPorts:\n - name: custom\n port: 8888\n autoHealingPolicies:\n healthCheck: ${autohealing.id}\n initialDelaySec: 300\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n### With Multiple Versions\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst appserver = new gcp.compute.RegionInstanceGroupManager(\"appserver\", {\n name: \"appserver-igm\",\n baseInstanceName: \"app\",\n region: \"us-central1\",\n targetSize: 5,\n versions: [\n {\n instanceTemplate: appserverGoogleComputeInstanceTemplate.selfLinkUnique,\n },\n {\n instanceTemplate: appserver_canary.selfLinkUnique,\n targetSize: {\n fixed: 1,\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nappserver = gcp.compute.RegionInstanceGroupManager(\"appserver\",\n name=\"appserver-igm\",\n base_instance_name=\"app\",\n region=\"us-central1\",\n target_size=5,\n versions=[\n gcp.compute.RegionInstanceGroupManagerVersionArgs(\n instance_template=appserver_google_compute_instance_template[\"selfLinkUnique\"],\n ),\n gcp.compute.RegionInstanceGroupManagerVersionArgs(\n instance_template=appserver_canary[\"selfLinkUnique\"],\n target_size=gcp.compute.RegionInstanceGroupManagerVersionTargetSizeArgs(\n fixed=1,\n ),\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var appserver = new Gcp.Compute.RegionInstanceGroupManager(\"appserver\", new()\n {\n Name = \"appserver-igm\",\n BaseInstanceName = \"app\",\n Region = \"us-central1\",\n TargetSize = 5,\n Versions = new[]\n {\n new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionArgs\n {\n InstanceTemplate = appserverGoogleComputeInstanceTemplate.SelfLinkUnique,\n },\n new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionArgs\n {\n InstanceTemplate = appserver_canary.SelfLinkUnique,\n TargetSize = new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionTargetSizeArgs\n {\n Fixed = 1,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionInstanceGroupManager(ctx, \"appserver\", \u0026compute.RegionInstanceGroupManagerArgs{\n\t\t\tName: pulumi.String(\"appserver-igm\"),\n\t\t\tBaseInstanceName: pulumi.String(\"app\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tTargetSize: pulumi.Int(5),\n\t\t\tVersions: compute.RegionInstanceGroupManagerVersionArray{\n\t\t\t\t\u0026compute.RegionInstanceGroupManagerVersionArgs{\n\t\t\t\t\tInstanceTemplate: pulumi.Any(appserverGoogleComputeInstanceTemplate.SelfLinkUnique),\n\t\t\t\t},\n\t\t\t\t\u0026compute.RegionInstanceGroupManagerVersionArgs{\n\t\t\t\t\tInstanceTemplate: pulumi.Any(appserver_canary.SelfLinkUnique),\n\t\t\t\t\tTargetSize: \u0026compute.RegionInstanceGroupManagerVersionTargetSizeArgs{\n\t\t\t\t\t\tFixed: pulumi.Int(1),\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.RegionInstanceGroupManager;\nimport com.pulumi.gcp.compute.RegionInstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerVersionTargetSizeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var appserver = new RegionInstanceGroupManager(\"appserver\", RegionInstanceGroupManagerArgs.builder()\n .name(\"appserver-igm\")\n .baseInstanceName(\"app\")\n .region(\"us-central1\")\n .targetSize(5)\n .versions( \n RegionInstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(appserverGoogleComputeInstanceTemplate.selfLinkUnique())\n .build(),\n RegionInstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(appserver_canary.selfLinkUnique())\n .targetSize(RegionInstanceGroupManagerVersionTargetSizeArgs.builder()\n .fixed(1)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n appserver:\n type: gcp:compute:RegionInstanceGroupManager\n properties:\n name: appserver-igm\n baseInstanceName: app\n region: us-central1\n targetSize: 5\n versions:\n - instanceTemplate: ${appserverGoogleComputeInstanceTemplate.selfLinkUnique}\n - instanceTemplate: ${[\"appserver-canary\"].selfLinkUnique}\n targetSize:\n fixed: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstance group managers can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, instance group managers can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/regionInstanceGroupManager:RegionInstanceGroupManager default {{name}}\n```\n\n", + "description": "The Google Compute Engine Regional Instance Group Manager API creates and manages pools\nof homogeneous Compute Engine virtual machine instances from a common instance\ntemplate.\n\nTo get more information about regionInstanceGroupManagers, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/latest/regionInstanceGroupManagers)\n* How-to Guides\n * [Regional Instance Groups Guide](https://cloud.google.com/compute/docs/instance-groups/distributing-instances-with-regional-instance-groups)\n\n\u003e **Note:** Use [gcp.compute.InstanceGroupManager](https://www.terraform.io/docs/providers/google/r/compute_instance_group_manager.html) to create a zonal instance group manager.\n\n## Example Usage\n\n### With Top Level Instance Template (`Google` Provider)\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst autohealing = new gcp.compute.HealthCheck(\"autohealing\", {\n name: \"autohealing-health-check\",\n checkIntervalSec: 5,\n timeoutSec: 5,\n healthyThreshold: 2,\n unhealthyThreshold: 10,\n httpHealthCheck: {\n requestPath: \"/healthz\",\n port: 8080,\n },\n});\nconst appserver = new gcp.compute.RegionInstanceGroupManager(\"appserver\", {\n name: \"appserver-igm\",\n baseInstanceName: \"app\",\n region: \"us-central1\",\n distributionPolicyZones: [\n \"us-central1-a\",\n \"us-central1-f\",\n ],\n versions: [{\n instanceTemplate: appserverGoogleComputeInstanceTemplate.selfLinkUnique,\n }],\n allInstancesConfig: {\n metadata: {\n metadata_key: \"metadata_value\",\n },\n labels: {\n label_key: \"label_value\",\n },\n },\n targetPools: [appserverGoogleComputeTargetPool.id],\n targetSize: 2,\n namedPorts: [{\n name: \"custom\",\n port: 8888,\n }],\n autoHealingPolicies: {\n healthCheck: autohealing.id,\n initialDelaySec: 300,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nautohealing = gcp.compute.HealthCheck(\"autohealing\",\n name=\"autohealing-health-check\",\n check_interval_sec=5,\n timeout_sec=5,\n healthy_threshold=2,\n unhealthy_threshold=10,\n http_health_check=gcp.compute.HealthCheckHttpHealthCheckArgs(\n request_path=\"/healthz\",\n port=8080,\n ))\nappserver = gcp.compute.RegionInstanceGroupManager(\"appserver\",\n name=\"appserver-igm\",\n base_instance_name=\"app\",\n region=\"us-central1\",\n distribution_policy_zones=[\n \"us-central1-a\",\n \"us-central1-f\",\n ],\n versions=[gcp.compute.RegionInstanceGroupManagerVersionArgs(\n instance_template=appserver_google_compute_instance_template[\"selfLinkUnique\"],\n )],\n all_instances_config=gcp.compute.RegionInstanceGroupManagerAllInstancesConfigArgs(\n metadata={\n \"metadata_key\": \"metadata_value\",\n },\n labels={\n \"label_key\": \"label_value\",\n },\n ),\n target_pools=[appserver_google_compute_target_pool[\"id\"]],\n target_size=2,\n named_ports=[gcp.compute.RegionInstanceGroupManagerNamedPortArgs(\n name=\"custom\",\n port=8888,\n )],\n auto_healing_policies=gcp.compute.RegionInstanceGroupManagerAutoHealingPoliciesArgs(\n health_check=autohealing.id,\n initial_delay_sec=300,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var autohealing = new Gcp.Compute.HealthCheck(\"autohealing\", new()\n {\n Name = \"autohealing-health-check\",\n CheckIntervalSec = 5,\n TimeoutSec = 5,\n HealthyThreshold = 2,\n UnhealthyThreshold = 10,\n HttpHealthCheck = new Gcp.Compute.Inputs.HealthCheckHttpHealthCheckArgs\n {\n RequestPath = \"/healthz\",\n Port = 8080,\n },\n });\n\n var appserver = new Gcp.Compute.RegionInstanceGroupManager(\"appserver\", new()\n {\n Name = \"appserver-igm\",\n BaseInstanceName = \"app\",\n Region = \"us-central1\",\n DistributionPolicyZones = new[]\n {\n \"us-central1-a\",\n \"us-central1-f\",\n },\n Versions = new[]\n {\n new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionArgs\n {\n InstanceTemplate = appserverGoogleComputeInstanceTemplate.SelfLinkUnique,\n },\n },\n AllInstancesConfig = new Gcp.Compute.Inputs.RegionInstanceGroupManagerAllInstancesConfigArgs\n {\n Metadata = \n {\n { \"metadata_key\", \"metadata_value\" },\n },\n Labels = \n {\n { \"label_key\", \"label_value\" },\n },\n },\n TargetPools = new[]\n {\n appserverGoogleComputeTargetPool.Id,\n },\n TargetSize = 2,\n NamedPorts = new[]\n {\n new Gcp.Compute.Inputs.RegionInstanceGroupManagerNamedPortArgs\n {\n Name = \"custom\",\n Port = 8888,\n },\n },\n AutoHealingPolicies = new Gcp.Compute.Inputs.RegionInstanceGroupManagerAutoHealingPoliciesArgs\n {\n HealthCheck = autohealing.Id,\n InitialDelaySec = 300,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tautohealing, err := compute.NewHealthCheck(ctx, \"autohealing\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"autohealing-health-check\"),\n\t\t\tCheckIntervalSec: pulumi.Int(5),\n\t\t\tTimeoutSec: pulumi.Int(5),\n\t\t\tHealthyThreshold: pulumi.Int(2),\n\t\t\tUnhealthyThreshold: pulumi.Int(10),\n\t\t\tHttpHealthCheck: \u0026compute.HealthCheckHttpHealthCheckArgs{\n\t\t\t\tRequestPath: pulumi.String(\"/healthz\"),\n\t\t\t\tPort: pulumi.Int(8080),\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.NewRegionInstanceGroupManager(ctx, \"appserver\", \u0026compute.RegionInstanceGroupManagerArgs{\n\t\t\tName: pulumi.String(\"appserver-igm\"),\n\t\t\tBaseInstanceName: pulumi.String(\"app\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDistributionPolicyZones: 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\tVersions: compute.RegionInstanceGroupManagerVersionArray{\n\t\t\t\t\u0026compute.RegionInstanceGroupManagerVersionArgs{\n\t\t\t\t\tInstanceTemplate: pulumi.Any(appserverGoogleComputeInstanceTemplate.SelfLinkUnique),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAllInstancesConfig: \u0026compute.RegionInstanceGroupManagerAllInstancesConfigArgs{\n\t\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\t\"metadata_key\": pulumi.String(\"metadata_value\"),\n\t\t\t\t},\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"label_key\": pulumi.String(\"label_value\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetPools: pulumi.StringArray{\n\t\t\t\tappserverGoogleComputeTargetPool.Id,\n\t\t\t},\n\t\t\tTargetSize: pulumi.Int(2),\n\t\t\tNamedPorts: compute.RegionInstanceGroupManagerNamedPortArray{\n\t\t\t\t\u0026compute.RegionInstanceGroupManagerNamedPortArgs{\n\t\t\t\t\tName: pulumi.String(\"custom\"),\n\t\t\t\t\tPort: pulumi.Int(8888),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAutoHealingPolicies: \u0026compute.RegionInstanceGroupManagerAutoHealingPoliciesArgs{\n\t\t\t\tHealthCheck: autohealing.ID(),\n\t\t\t\tInitialDelaySec: pulumi.Int(300),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\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.RegionInstanceGroupManager;\nimport com.pulumi.gcp.compute.RegionInstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerAllInstancesConfigArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerNamedPortArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerAutoHealingPoliciesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var autohealing = new HealthCheck(\"autohealing\", HealthCheckArgs.builder()\n .name(\"autohealing-health-check\")\n .checkIntervalSec(5)\n .timeoutSec(5)\n .healthyThreshold(2)\n .unhealthyThreshold(10)\n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .requestPath(\"/healthz\")\n .port(\"8080\")\n .build())\n .build());\n\n var appserver = new RegionInstanceGroupManager(\"appserver\", RegionInstanceGroupManagerArgs.builder()\n .name(\"appserver-igm\")\n .baseInstanceName(\"app\")\n .region(\"us-central1\")\n .distributionPolicyZones( \n \"us-central1-a\",\n \"us-central1-f\")\n .versions(RegionInstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(appserverGoogleComputeInstanceTemplate.selfLinkUnique())\n .build())\n .allInstancesConfig(RegionInstanceGroupManagerAllInstancesConfigArgs.builder()\n .metadata(Map.of(\"metadata_key\", \"metadata_value\"))\n .labels(Map.of(\"label_key\", \"label_value\"))\n .build())\n .targetPools(appserverGoogleComputeTargetPool.id())\n .targetSize(2)\n .namedPorts(RegionInstanceGroupManagerNamedPortArgs.builder()\n .name(\"custom\")\n .port(8888)\n .build())\n .autoHealingPolicies(RegionInstanceGroupManagerAutoHealingPoliciesArgs.builder()\n .healthCheck(autohealing.id())\n .initialDelaySec(300)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n autohealing:\n type: gcp:compute:HealthCheck\n properties:\n name: autohealing-health-check\n checkIntervalSec: 5\n timeoutSec: 5\n healthyThreshold: 2\n unhealthyThreshold: 10 # 50 seconds\n httpHealthCheck:\n requestPath: /healthz\n port: '8080'\n appserver:\n type: gcp:compute:RegionInstanceGroupManager\n properties:\n name: appserver-igm\n baseInstanceName: app\n region: us-central1\n distributionPolicyZones:\n - us-central1-a\n - us-central1-f\n versions:\n - instanceTemplate: ${appserverGoogleComputeInstanceTemplate.selfLinkUnique}\n allInstancesConfig:\n metadata:\n metadata_key: metadata_value\n labels:\n label_key: label_value\n targetPools:\n - ${appserverGoogleComputeTargetPool.id}\n targetSize: 2\n namedPorts:\n - name: custom\n port: 8888\n autoHealingPolicies:\n healthCheck: ${autohealing.id}\n initialDelaySec: 300\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n### With Multiple Versions\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst appserver = new gcp.compute.RegionInstanceGroupManager(\"appserver\", {\n name: \"appserver-igm\",\n baseInstanceName: \"app\",\n region: \"us-central1\",\n targetSize: 5,\n versions: [\n {\n instanceTemplate: appserverGoogleComputeInstanceTemplate.selfLinkUnique,\n },\n {\n instanceTemplate: appserver_canary.selfLinkUnique,\n targetSize: {\n fixed: 1,\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nappserver = gcp.compute.RegionInstanceGroupManager(\"appserver\",\n name=\"appserver-igm\",\n base_instance_name=\"app\",\n region=\"us-central1\",\n target_size=5,\n versions=[\n gcp.compute.RegionInstanceGroupManagerVersionArgs(\n instance_template=appserver_google_compute_instance_template[\"selfLinkUnique\"],\n ),\n gcp.compute.RegionInstanceGroupManagerVersionArgs(\n instance_template=appserver_canary[\"selfLinkUnique\"],\n target_size=gcp.compute.RegionInstanceGroupManagerVersionTargetSizeArgs(\n fixed=1,\n ),\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var appserver = new Gcp.Compute.RegionInstanceGroupManager(\"appserver\", new()\n {\n Name = \"appserver-igm\",\n BaseInstanceName = \"app\",\n Region = \"us-central1\",\n TargetSize = 5,\n Versions = new[]\n {\n new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionArgs\n {\n InstanceTemplate = appserverGoogleComputeInstanceTemplate.SelfLinkUnique,\n },\n new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionArgs\n {\n InstanceTemplate = appserver_canary.SelfLinkUnique,\n TargetSize = new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionTargetSizeArgs\n {\n Fixed = 1,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionInstanceGroupManager(ctx, \"appserver\", \u0026compute.RegionInstanceGroupManagerArgs{\n\t\t\tName: pulumi.String(\"appserver-igm\"),\n\t\t\tBaseInstanceName: pulumi.String(\"app\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tTargetSize: pulumi.Int(5),\n\t\t\tVersions: compute.RegionInstanceGroupManagerVersionArray{\n\t\t\t\t\u0026compute.RegionInstanceGroupManagerVersionArgs{\n\t\t\t\t\tInstanceTemplate: pulumi.Any(appserverGoogleComputeInstanceTemplate.SelfLinkUnique),\n\t\t\t\t},\n\t\t\t\t\u0026compute.RegionInstanceGroupManagerVersionArgs{\n\t\t\t\t\tInstanceTemplate: pulumi.Any(appserver_canary.SelfLinkUnique),\n\t\t\t\t\tTargetSize: \u0026compute.RegionInstanceGroupManagerVersionTargetSizeArgs{\n\t\t\t\t\t\tFixed: pulumi.Int(1),\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.RegionInstanceGroupManager;\nimport com.pulumi.gcp.compute.RegionInstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerVersionTargetSizeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var appserver = new RegionInstanceGroupManager(\"appserver\", RegionInstanceGroupManagerArgs.builder()\n .name(\"appserver-igm\")\n .baseInstanceName(\"app\")\n .region(\"us-central1\")\n .targetSize(5)\n .versions( \n RegionInstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(appserverGoogleComputeInstanceTemplate.selfLinkUnique())\n .build(),\n RegionInstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(appserver_canary.selfLinkUnique())\n .targetSize(RegionInstanceGroupManagerVersionTargetSizeArgs.builder()\n .fixed(1)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n appserver:\n type: gcp:compute:RegionInstanceGroupManager\n properties:\n name: appserver-igm\n baseInstanceName: app\n region: us-central1\n targetSize: 5\n versions:\n - instanceTemplate: ${appserverGoogleComputeInstanceTemplate.selfLinkUnique}\n - instanceTemplate: ${[\"appserver-canary\"].selfLinkUnique}\n targetSize:\n fixed: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### With Standby Policy (`Google-Beta` Provider)\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst igm_sr = new gcp.compute.RegionInstanceGroupManager(\"igm-sr\", {\n name: \"tf-sr-igm\",\n baseInstanceName: \"tf-sr-igm-instance\",\n region: \"us-central1\",\n targetSize: 5,\n versions: [{\n instanceTemplate: sr_igm.selfLink,\n name: \"primary\",\n }],\n standbyPolicy: {\n initialDelaySec: 50,\n mode: \"SCALE_OUT_POOL\",\n },\n targetSuspendedSize: 1,\n targetStoppedSize: 1,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nigm_sr = gcp.compute.RegionInstanceGroupManager(\"igm-sr\",\n name=\"tf-sr-igm\",\n base_instance_name=\"tf-sr-igm-instance\",\n region=\"us-central1\",\n target_size=5,\n versions=[gcp.compute.RegionInstanceGroupManagerVersionArgs(\n instance_template=sr_igm[\"selfLink\"],\n name=\"primary\",\n )],\n standby_policy=gcp.compute.RegionInstanceGroupManagerStandbyPolicyArgs(\n initial_delay_sec=50,\n mode=\"SCALE_OUT_POOL\",\n ),\n target_suspended_size=1,\n target_stopped_size=1)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var igm_sr = new Gcp.Compute.RegionInstanceGroupManager(\"igm-sr\", new()\n {\n Name = \"tf-sr-igm\",\n BaseInstanceName = \"tf-sr-igm-instance\",\n Region = \"us-central1\",\n TargetSize = 5,\n Versions = new[]\n {\n new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionArgs\n {\n InstanceTemplate = sr_igm.SelfLink,\n Name = \"primary\",\n },\n },\n StandbyPolicy = new Gcp.Compute.Inputs.RegionInstanceGroupManagerStandbyPolicyArgs\n {\n InitialDelaySec = 50,\n Mode = \"SCALE_OUT_POOL\",\n },\n TargetSuspendedSize = 1,\n TargetStoppedSize = 1,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionInstanceGroupManager(ctx, \"igm-sr\", \u0026compute.RegionInstanceGroupManagerArgs{\n\t\t\tName: pulumi.String(\"tf-sr-igm\"),\n\t\t\tBaseInstanceName: pulumi.String(\"tf-sr-igm-instance\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tTargetSize: pulumi.Int(5),\n\t\t\tVersions: compute.RegionInstanceGroupManagerVersionArray{\n\t\t\t\t\u0026compute.RegionInstanceGroupManagerVersionArgs{\n\t\t\t\t\tInstanceTemplate: pulumi.Any(sr_igm.SelfLink),\n\t\t\t\t\tName: pulumi.String(\"primary\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tStandbyPolicy: \u0026compute.RegionInstanceGroupManagerStandbyPolicyArgs{\n\t\t\t\tInitialDelaySec: pulumi.Int(50),\n\t\t\t\tMode: pulumi.String(\"SCALE_OUT_POOL\"),\n\t\t\t},\n\t\t\tTargetSuspendedSize: pulumi.Int(1),\n\t\t\tTargetStoppedSize: 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.compute.RegionInstanceGroupManager;\nimport com.pulumi.gcp.compute.RegionInstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerStandbyPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var igm_sr = new RegionInstanceGroupManager(\"igm-sr\", RegionInstanceGroupManagerArgs.builder()\n .name(\"tf-sr-igm\")\n .baseInstanceName(\"tf-sr-igm-instance\")\n .region(\"us-central1\")\n .targetSize(5)\n .versions(RegionInstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(sr_igm.selfLink())\n .name(\"primary\")\n .build())\n .standbyPolicy(RegionInstanceGroupManagerStandbyPolicyArgs.builder()\n .initialDelaySec(50)\n .mode(\"SCALE_OUT_POOL\")\n .build())\n .targetSuspendedSize(1)\n .targetStoppedSize(1)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n igm-sr:\n type: gcp:compute:RegionInstanceGroupManager\n properties:\n name: tf-sr-igm\n baseInstanceName: tf-sr-igm-instance\n region: us-central1\n targetSize: 5\n versions:\n - instanceTemplate: ${[\"sr-igm\"].selfLink}\n name: primary\n standbyPolicy:\n initialDelaySec: 50\n mode: SCALE_OUT_POOL\n targetSuspendedSize: 1\n targetStoppedSize: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstance group managers can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, instance group managers can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/regionInstanceGroupManager:RegionInstanceGroupManager default {{name}}\n```\n\n", "properties": { "allInstancesConfig": { "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerAllInstancesConfig:RegionInstanceGroupManagerAllInstancesConfig", @@ -154370,6 +155657,10 @@ "type": "string", "description": "The URL of the created resource.\n" }, + "standbyPolicy": { + "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerStandbyPolicy:RegionInstanceGroupManagerStandbyPolicy", + "description": "The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch)\n" + }, "statefulDisks": { "type": "array", "items": { @@ -154409,6 +155700,14 @@ "type": "integer", "description": "The target number of running instances for this managed instance group. This value should always be explicitly set\nunless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0.\n" }, + "targetStoppedSize": { + "type": "integer", + "description": "The target number of stopped instances for this managed instance group.\n" + }, + "targetSuspendedSize": { + "type": "integer", + "description": "The target number of suspended instances for this managed instance group.\n" + }, "updatePolicy": { "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerUpdatePolicy:RegionInstanceGroupManagerUpdatePolicy", "description": "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)\n" @@ -154441,8 +155740,11 @@ "project", "region", "selfLink", + "standbyPolicy", "statuses", "targetSize", + "targetStoppedSize", + "targetSuspendedSize", "updatePolicy", "versions" ], @@ -154512,6 +155814,10 @@ "description": "The region where the managed instance group resides. If not provided, the provider region is used.\n\n- - -\n", "willReplaceOnChanges": true }, + "standbyPolicy": { + "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerStandbyPolicy:RegionInstanceGroupManagerStandbyPolicy", + "description": "The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch)\n" + }, "statefulDisks": { "type": "array", "items": { @@ -154544,6 +155850,14 @@ "type": "integer", "description": "The target number of running instances for this managed instance group. This value should always be explicitly set\nunless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0.\n" }, + "targetStoppedSize": { + "type": "integer", + "description": "The target number of stopped instances for this managed instance group.\n" + }, + "targetSuspendedSize": { + "type": "integer", + "description": "The target number of suspended instances for this managed instance group.\n" + }, "updatePolicy": { "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerUpdatePolicy:RegionInstanceGroupManagerUpdatePolicy", "description": "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)\n" @@ -154652,6 +155966,10 @@ "type": "string", "description": "The URL of the created resource.\n" }, + "standbyPolicy": { + "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerStandbyPolicy:RegionInstanceGroupManagerStandbyPolicy", + "description": "The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch)\n" + }, "statefulDisks": { "type": "array", "items": { @@ -154691,6 +156009,14 @@ "type": "integer", "description": "The target number of running instances for this managed instance group. This value should always be explicitly set\nunless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0.\n" }, + "targetStoppedSize": { + "type": "integer", + "description": "The target number of stopped instances for this managed instance group.\n" + }, + "targetSuspendedSize": { + "type": "integer", + "description": "The target number of suspended instances for this managed instance group.\n" + }, "updatePolicy": { "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerUpdatePolicy:RegionInstanceGroupManagerUpdatePolicy", "description": "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)\n" @@ -154811,6 +156137,13 @@ "$ref": "#/types/gcp:compute/RegionInstanceTemplateNetworkPerformanceConfig:RegionInstanceTemplateNetworkPerformanceConfig", "description": "Configures network performance settings for the instance created from the\ntemplate. Structure is documented below. **Note**: `machine_type`\nmust be a [supported type](https://cloud.google.com/compute/docs/networking/configure-vm-with-high-bandwidth-configuration),\nthe `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image)\nin `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC`\nin order for this setting to take effect.\n" }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If it\nis not provided, the provider project is used.\n" @@ -154985,6 +156318,13 @@ "description": "Configures network performance settings for the instance created from the\ntemplate. Structure is documented below. **Note**: `machine_type`\nmust be a [supported type](https://cloud.google.com/compute/docs/networking/configure-vm-with-high-bandwidth-configuration),\nthe `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image)\nin `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC`\nin order for this setting to take effect.\n", "willReplaceOnChanges": true }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If it\nis not provided, the provider project is used.\n", @@ -155156,6 +156496,13 @@ "description": "Configures network performance settings for the instance created from the\ntemplate. Structure is documented below. **Note**: `machine_type`\nmust be a [supported type](https://cloud.google.com/compute/docs/networking/configure-vm-with-high-bandwidth-configuration),\nthe `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image)\nin `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC`\nin order for this setting to take effect.\n", "willReplaceOnChanges": true }, + "partnerMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs. If it\nis not provided, the provider project is used.\n", @@ -164940,6 +166287,10 @@ "$ref": "#/types/gcp:container/ClusterResourceUsageExportConfig:ClusterResourceUsageExportConfig", "description": "Configuration for the\n[ResourceUsageExportConfig](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-usage-metering) feature.\nStructure is documented below.\n" }, + "secretManagerConfig": { + "$ref": "#/types/gcp:container/ClusterSecretManagerConfig:ClusterSecretManagerConfig", + "description": "Configuration for the\n[SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature.\nStructure is documented below.\n" + }, "securityPostureConfig": { "$ref": "#/types/gcp:container/ClusterSecurityPostureConfig:ClusterSecurityPostureConfig", "description": "Enable/Disable Security Posture API features for the cluster. Structure is documented below.\n" @@ -165310,6 +166661,10 @@ "$ref": "#/types/gcp:container/ClusterResourceUsageExportConfig:ClusterResourceUsageExportConfig", "description": "Configuration for the\n[ResourceUsageExportConfig](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-usage-metering) feature.\nStructure is documented below.\n" }, + "secretManagerConfig": { + "$ref": "#/types/gcp:container/ClusterSecretManagerConfig:ClusterSecretManagerConfig", + "description": "Configuration for the\n[SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature.\nStructure is documented below.\n" + }, "securityPostureConfig": { "$ref": "#/types/gcp:container/ClusterSecurityPostureConfig:ClusterSecurityPostureConfig", "description": "Enable/Disable Security Posture API features for the cluster. Structure is documented below.\n" @@ -165632,6 +166987,10 @@ "$ref": "#/types/gcp:container/ClusterResourceUsageExportConfig:ClusterResourceUsageExportConfig", "description": "Configuration for the\n[ResourceUsageExportConfig](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-usage-metering) feature.\nStructure is documented below.\n" }, + "secretManagerConfig": { + "$ref": "#/types/gcp:container/ClusterSecretManagerConfig:ClusterSecretManagerConfig", + "description": "Configuration for the\n[SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature.\nStructure is documented below.\n" + }, "securityPostureConfig": { "$ref": "#/types/gcp:container/ClusterSecurityPostureConfig:ClusterSecurityPostureConfig", "description": "Enable/Disable Security Posture API features for the cluster. Structure is documented below.\n" @@ -171355,7 +172714,7 @@ } }, "gcp:dataloss/preventionInspectTemplate:PreventionInspectTemplate": { - "description": "An inspect job template.\n\n\nTo get more information about InspectTemplate, see:\n\n* [API documentation](https://cloud.google.com/dlp/docs/reference/rest/v2/projects.inspectTemplates)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/dlp/docs/creating-templates-inspect)\n\n## Example Usage\n\n### Dlp Inspect Template Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.dataloss.PreventionInspectTemplate(\"basic\", {\n parent: \"projects/my-project-name\",\n description: \"My description\",\n displayName: \"display_name\",\n inspectConfig: {\n infoTypes: [\n {\n name: \"EMAIL_ADDRESS\",\n },\n {\n name: \"PERSON_NAME\",\n },\n {\n name: \"LAST_NAME\",\n },\n {\n name: \"DOMAIN_NAME\",\n },\n {\n name: \"PHONE_NUMBER\",\n },\n {\n name: \"FIRST_NAME\",\n },\n ],\n minLikelihood: \"UNLIKELY\",\n ruleSets: [\n {\n infoTypes: [{\n name: \"EMAIL_ADDRESS\",\n }],\n rules: [{\n exclusionRule: {\n regex: {\n pattern: \".+@example.com\",\n },\n matchingType: \"MATCHING_TYPE_FULL_MATCH\",\n },\n }],\n },\n {\n infoTypes: [\n {\n name: \"EMAIL_ADDRESS\",\n },\n {\n name: \"DOMAIN_NAME\",\n },\n {\n name: \"PHONE_NUMBER\",\n },\n {\n name: \"PERSON_NAME\",\n },\n {\n name: \"FIRST_NAME\",\n },\n ],\n rules: [{\n exclusionRule: {\n dictionary: {\n wordList: {\n words: [\"TEST\"],\n },\n },\n matchingType: \"MATCHING_TYPE_PARTIAL_MATCH\",\n },\n }],\n },\n {\n infoTypes: [{\n name: \"PERSON_NAME\",\n }],\n rules: [{\n hotwordRule: {\n hotwordRegex: {\n pattern: \"patient\",\n },\n proximity: {\n windowBefore: 50,\n },\n likelihoodAdjustment: {\n fixedLikelihood: \"VERY_LIKELY\",\n },\n },\n }],\n },\n ],\n limits: {\n maxFindingsPerItem: 10,\n maxFindingsPerRequest: 50,\n maxFindingsPerInfoTypes: [\n {\n maxFindings: 75,\n infoType: {\n name: \"PERSON_NAME\",\n },\n },\n {\n maxFindings: 80,\n infoType: {\n name: \"LAST_NAME\",\n },\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.dataloss.PreventionInspectTemplate(\"basic\",\n parent=\"projects/my-project-name\",\n description=\"My description\",\n display_name=\"display_name\",\n inspect_config=gcp.dataloss.PreventionInspectTemplateInspectConfigArgs(\n info_types=[\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"PERSON_NAME\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"LAST_NAME\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"DOMAIN_NAME\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"PHONE_NUMBER\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"FIRST_NAME\",\n ),\n ],\n min_likelihood=\"UNLIKELY\",\n rule_sets=[\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n )],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n exclusion_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs(\n regex=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs(\n pattern=\".+@example.com\",\n ),\n matching_type=\"MATCHING_TYPE_FULL_MATCH\",\n ),\n )],\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"DOMAIN_NAME\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"PHONE_NUMBER\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"PERSON_NAME\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"FIRST_NAME\",\n ),\n ],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n exclusion_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs(\n dictionary=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryArgs(\n word_list=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryWordListArgs(\n words=[\"TEST\"],\n ),\n ),\n matching_type=\"MATCHING_TYPE_PARTIAL_MATCH\",\n ),\n )],\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"PERSON_NAME\",\n )],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n hotword_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs(\n hotword_regex=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs(\n pattern=\"patient\",\n ),\n proximity=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs(\n window_before=50,\n ),\n likelihood_adjustment=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs(\n fixed_likelihood=\"VERY_LIKELY\",\n ),\n ),\n )],\n ),\n ],\n limits=gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsArgs(\n max_findings_per_item=10,\n max_findings_per_request=50,\n max_findings_per_info_types=[\n gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs(\n max_findings=75,\n info_type=gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs(\n name=\"PERSON_NAME\",\n ),\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs(\n max_findings=80,\n info_type=gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs(\n name=\"LAST_NAME\",\n ),\n ),\n ],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.DataLoss.PreventionInspectTemplate(\"basic\", new()\n {\n Parent = \"projects/my-project-name\",\n Description = \"My description\",\n DisplayName = \"display_name\",\n InspectConfig = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"PERSON_NAME\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"LAST_NAME\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"DOMAIN_NAME\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"PHONE_NUMBER\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"FIRST_NAME\",\n },\n },\n MinLikelihood = \"UNLIKELY\",\n RuleSets = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n ExclusionRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs\n {\n Regex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs\n {\n Pattern = \".+@example.com\",\n },\n MatchingType = \"MATCHING_TYPE_FULL_MATCH\",\n },\n },\n },\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"DOMAIN_NAME\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"PHONE_NUMBER\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"PERSON_NAME\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"FIRST_NAME\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n ExclusionRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs\n {\n Dictionary = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryArgs\n {\n WordList = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryWordListArgs\n {\n Words = new[]\n {\n \"TEST\",\n },\n },\n },\n MatchingType = \"MATCHING_TYPE_PARTIAL_MATCH\",\n },\n },\n },\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"PERSON_NAME\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n HotwordRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs\n {\n HotwordRegex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs\n {\n Pattern = \"patient\",\n },\n Proximity = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs\n {\n WindowBefore = 50,\n },\n LikelihoodAdjustment = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs\n {\n FixedLikelihood = \"VERY_LIKELY\",\n },\n },\n },\n },\n },\n },\n Limits = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsArgs\n {\n MaxFindingsPerItem = 10,\n MaxFindingsPerRequest = 50,\n MaxFindingsPerInfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs\n {\n MaxFindings = 75,\n InfoType = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs\n {\n Name = \"PERSON_NAME\",\n },\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs\n {\n MaxFindings = 80,\n InfoType = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs\n {\n Name = \"LAST_NAME\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/dataloss\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataloss.NewPreventionInspectTemplate(ctx, \"basic\", \u0026dataloss.PreventionInspectTemplateArgs{\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tDescription: pulumi.String(\"My description\"),\n\t\t\tDisplayName: pulumi.String(\"display_name\"),\n\t\t\tInspectConfig: \u0026dataloss.PreventionInspectTemplateInspectConfigArgs{\n\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigInfoTypeArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"PERSON_NAME\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"LAST_NAME\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"DOMAIN_NAME\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"PHONE_NUMBER\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"FIRST_NAME\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMinLikelihood: pulumi.String(\"UNLIKELY\"),\n\t\t\t\tRuleSets: dataloss.PreventionInspectTemplateInspectConfigRuleSetArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tExclusionRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs{\n\t\t\t\t\t\t\t\t\tRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs{\n\t\t\t\t\t\t\t\t\t\tPattern: pulumi.String(\".+@example.com\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tMatchingType: pulumi.String(\"MATCHING_TYPE_FULL_MATCH\"),\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\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"DOMAIN_NAME\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"PHONE_NUMBER\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"PERSON_NAME\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"FIRST_NAME\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tExclusionRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs{\n\t\t\t\t\t\t\t\t\tDictionary: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryArgs{\n\t\t\t\t\t\t\t\t\t\tWordList: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryWordListArgs{\n\t\t\t\t\t\t\t\t\t\t\tWords: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"TEST\"),\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\tMatchingType: pulumi.String(\"MATCHING_TYPE_PARTIAL_MATCH\"),\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\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"PERSON_NAME\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tHotwordRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs{\n\t\t\t\t\t\t\t\t\tHotwordRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs{\n\t\t\t\t\t\t\t\t\t\tPattern: pulumi.String(\"patient\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tProximity: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs{\n\t\t\t\t\t\t\t\t\t\tWindowBefore: pulumi.Int(50),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tLikelihoodAdjustment: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs{\n\t\t\t\t\t\t\t\t\t\tFixedLikelihood: pulumi.String(\"VERY_LIKELY\"),\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\tLimits: \u0026dataloss.PreventionInspectTemplateInspectConfigLimitsArgs{\n\t\t\t\t\tMaxFindingsPerItem: pulumi.Int(10),\n\t\t\t\t\tMaxFindingsPerRequest: pulumi.Int(50),\n\t\t\t\t\tMaxFindingsPerInfoTypes: dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArray{\n\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs{\n\t\t\t\t\t\t\tMaxFindings: pulumi.Int(75),\n\t\t\t\t\t\t\tInfoType: \u0026dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"PERSON_NAME\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs{\n\t\t\t\t\t\t\tMaxFindings: pulumi.Int(80),\n\t\t\t\t\t\t\tInfoType: \u0026dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"LAST_NAME\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataloss.PreventionInspectTemplate;\nimport com.pulumi.gcp.dataloss.PreventionInspectTemplateArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigLimitsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 PreventionInspectTemplate(\"basic\", PreventionInspectTemplateArgs.builder()\n .parent(\"projects/my-project-name\")\n .description(\"My description\")\n .displayName(\"display_name\")\n .inspectConfig(PreventionInspectTemplateInspectConfigArgs.builder()\n .infoTypes( \n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build(),\n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"PERSON_NAME\")\n .build(),\n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"LAST_NAME\")\n .build(),\n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"DOMAIN_NAME\")\n .build(),\n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"PHONE_NUMBER\")\n .build(),\n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"FIRST_NAME\")\n .build())\n .minLikelihood(\"UNLIKELY\")\n .ruleSets( \n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes(PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .exclusionRule(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs.builder()\n .regex(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs.builder()\n .pattern(\".+@example.com\")\n .build())\n .matchingType(\"MATCHING_TYPE_FULL_MATCH\")\n .build())\n .build())\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes( \n PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"DOMAIN_NAME\")\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"PHONE_NUMBER\")\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"PERSON_NAME\")\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"FIRST_NAME\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .exclusionRule(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs.builder()\n .dictionary(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryArgs.builder()\n .wordList(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryWordListArgs.builder()\n .words(\"TEST\")\n .build())\n .build())\n .matchingType(\"MATCHING_TYPE_PARTIAL_MATCH\")\n .build())\n .build())\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes(PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"PERSON_NAME\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .hotwordRule(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs.builder()\n .hotwordRegex(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs.builder()\n .pattern(\"patient\")\n .build())\n .proximity(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs.builder()\n .windowBefore(50)\n .build())\n .likelihoodAdjustment(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs.builder()\n .fixedLikelihood(\"VERY_LIKELY\")\n .build())\n .build())\n .build())\n .build())\n .limits(PreventionInspectTemplateInspectConfigLimitsArgs.builder()\n .maxFindingsPerItem(10)\n .maxFindingsPerRequest(50)\n .maxFindingsPerInfoTypes( \n PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.builder()\n .maxFindings(\"75\")\n .infoType(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs.builder()\n .name(\"PERSON_NAME\")\n .build())\n .build(),\n PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.builder()\n .maxFindings(\"80\")\n .infoType(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs.builder()\n .name(\"LAST_NAME\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:dataloss:PreventionInspectTemplate\n properties:\n parent: projects/my-project-name\n description: My description\n displayName: display_name\n inspectConfig:\n infoTypes:\n - name: EMAIL_ADDRESS\n - name: PERSON_NAME\n - name: LAST_NAME\n - name: DOMAIN_NAME\n - name: PHONE_NUMBER\n - name: FIRST_NAME\n minLikelihood: UNLIKELY\n ruleSets:\n - infoTypes:\n - name: EMAIL_ADDRESS\n rules:\n - exclusionRule:\n regex:\n pattern: .+@example.com\n matchingType: MATCHING_TYPE_FULL_MATCH\n - infoTypes:\n - name: EMAIL_ADDRESS\n - name: DOMAIN_NAME\n - name: PHONE_NUMBER\n - name: PERSON_NAME\n - name: FIRST_NAME\n rules:\n - exclusionRule:\n dictionary:\n wordList:\n words:\n - TEST\n matchingType: MATCHING_TYPE_PARTIAL_MATCH\n - infoTypes:\n - name: PERSON_NAME\n rules:\n - hotwordRule:\n hotwordRegex:\n pattern: patient\n proximity:\n windowBefore: 50\n likelihoodAdjustment:\n fixedLikelihood: VERY_LIKELY\n limits:\n maxFindingsPerItem: 10\n maxFindingsPerRequest: 50\n maxFindingsPerInfoTypes:\n - maxFindings: '75'\n infoType:\n name: PERSON_NAME\n - maxFindings: '80'\n infoType:\n name: LAST_NAME\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dlp Inspect Template Custom Type\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst custom = new gcp.dataloss.PreventionInspectTemplate(\"custom\", {\n parent: \"projects/my-project-name\",\n description: \"My description\",\n displayName: \"display_name\",\n inspectConfig: {\n customInfoTypes: [{\n infoType: {\n name: \"MY_CUSTOM_TYPE\",\n },\n likelihood: \"UNLIKELY\",\n regex: {\n pattern: \"test*\",\n },\n }],\n infoTypes: [{\n name: \"EMAIL_ADDRESS\",\n }],\n minLikelihood: \"UNLIKELY\",\n ruleSets: [\n {\n infoTypes: [{\n name: \"EMAIL_ADDRESS\",\n }],\n rules: [{\n exclusionRule: {\n regex: {\n pattern: \".+@example.com\",\n },\n matchingType: \"MATCHING_TYPE_FULL_MATCH\",\n },\n }],\n },\n {\n infoTypes: [{\n name: \"MY_CUSTOM_TYPE\",\n }],\n rules: [{\n hotwordRule: {\n hotwordRegex: {\n pattern: \"example*\",\n },\n proximity: {\n windowBefore: 50,\n },\n likelihoodAdjustment: {\n fixedLikelihood: \"VERY_LIKELY\",\n },\n },\n }],\n },\n ],\n limits: {\n maxFindingsPerItem: 10,\n maxFindingsPerRequest: 50,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom = gcp.dataloss.PreventionInspectTemplate(\"custom\",\n parent=\"projects/my-project-name\",\n description=\"My description\",\n display_name=\"display_name\",\n inspect_config=gcp.dataloss.PreventionInspectTemplateInspectConfigArgs(\n custom_info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeArgs(\n info_type=gcp.dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs(\n name=\"MY_CUSTOM_TYPE\",\n ),\n likelihood=\"UNLIKELY\",\n regex=gcp.dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeRegexArgs(\n pattern=\"test*\",\n ),\n )],\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n )],\n min_likelihood=\"UNLIKELY\",\n rule_sets=[\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n )],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n exclusion_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs(\n regex=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs(\n pattern=\".+@example.com\",\n ),\n matching_type=\"MATCHING_TYPE_FULL_MATCH\",\n ),\n )],\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"MY_CUSTOM_TYPE\",\n )],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n hotword_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs(\n hotword_regex=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs(\n pattern=\"example*\",\n ),\n proximity=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs(\n window_before=50,\n ),\n likelihood_adjustment=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs(\n fixed_likelihood=\"VERY_LIKELY\",\n ),\n ),\n )],\n ),\n ],\n limits=gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsArgs(\n max_findings_per_item=10,\n max_findings_per_request=50,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var custom = new Gcp.DataLoss.PreventionInspectTemplate(\"custom\", new()\n {\n Parent = \"projects/my-project-name\",\n Description = \"My description\",\n DisplayName = \"display_name\",\n InspectConfig = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigArgs\n {\n CustomInfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigCustomInfoTypeArgs\n {\n InfoType = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs\n {\n Name = \"MY_CUSTOM_TYPE\",\n },\n Likelihood = \"UNLIKELY\",\n Regex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigCustomInfoTypeRegexArgs\n {\n Pattern = \"test*\",\n },\n },\n },\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n },\n MinLikelihood = \"UNLIKELY\",\n RuleSets = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n ExclusionRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs\n {\n Regex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs\n {\n Pattern = \".+@example.com\",\n },\n MatchingType = \"MATCHING_TYPE_FULL_MATCH\",\n },\n },\n },\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"MY_CUSTOM_TYPE\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n HotwordRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs\n {\n HotwordRegex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs\n {\n Pattern = \"example*\",\n },\n Proximity = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs\n {\n WindowBefore = 50,\n },\n LikelihoodAdjustment = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs\n {\n FixedLikelihood = \"VERY_LIKELY\",\n },\n },\n },\n },\n },\n },\n Limits = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsArgs\n {\n MaxFindingsPerItem = 10,\n MaxFindingsPerRequest = 50,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/dataloss\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataloss.NewPreventionInspectTemplate(ctx, \"custom\", \u0026dataloss.PreventionInspectTemplateArgs{\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tDescription: pulumi.String(\"My description\"),\n\t\t\tDisplayName: pulumi.String(\"display_name\"),\n\t\t\tInspectConfig: \u0026dataloss.PreventionInspectTemplateInspectConfigArgs{\n\t\t\t\tCustomInfoTypes: dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeArgs{\n\t\t\t\t\t\tInfoType: \u0026dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"MY_CUSTOM_TYPE\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLikelihood: pulumi.String(\"UNLIKELY\"),\n\t\t\t\t\t\tRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeRegexArgs{\n\t\t\t\t\t\t\tPattern: 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\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigInfoTypeArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMinLikelihood: pulumi.String(\"UNLIKELY\"),\n\t\t\t\tRuleSets: dataloss.PreventionInspectTemplateInspectConfigRuleSetArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tExclusionRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs{\n\t\t\t\t\t\t\t\t\tRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs{\n\t\t\t\t\t\t\t\t\t\tPattern: pulumi.String(\".+@example.com\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tMatchingType: pulumi.String(\"MATCHING_TYPE_FULL_MATCH\"),\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\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"MY_CUSTOM_TYPE\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tHotwordRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs{\n\t\t\t\t\t\t\t\t\tHotwordRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs{\n\t\t\t\t\t\t\t\t\t\tPattern: pulumi.String(\"example*\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tProximity: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs{\n\t\t\t\t\t\t\t\t\t\tWindowBefore: pulumi.Int(50),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tLikelihoodAdjustment: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs{\n\t\t\t\t\t\t\t\t\t\tFixedLikelihood: pulumi.String(\"VERY_LIKELY\"),\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\tLimits: \u0026dataloss.PreventionInspectTemplateInspectConfigLimitsArgs{\n\t\t\t\t\tMaxFindingsPerItem: pulumi.Int(10),\n\t\t\t\t\tMaxFindingsPerRequest: pulumi.Int(50),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataloss.PreventionInspectTemplate;\nimport com.pulumi.gcp.dataloss.PreventionInspectTemplateArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigLimitsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var custom = new PreventionInspectTemplate(\"custom\", PreventionInspectTemplateArgs.builder()\n .parent(\"projects/my-project-name\")\n .description(\"My description\")\n .displayName(\"display_name\")\n .inspectConfig(PreventionInspectTemplateInspectConfigArgs.builder()\n .customInfoTypes(PreventionInspectTemplateInspectConfigCustomInfoTypeArgs.builder()\n .infoType(PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs.builder()\n .name(\"MY_CUSTOM_TYPE\")\n .build())\n .likelihood(\"UNLIKELY\")\n .regex(PreventionInspectTemplateInspectConfigCustomInfoTypeRegexArgs.builder()\n .pattern(\"test*\")\n .build())\n .build())\n .infoTypes(PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build())\n .minLikelihood(\"UNLIKELY\")\n .ruleSets( \n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes(PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .exclusionRule(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs.builder()\n .regex(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs.builder()\n .pattern(\".+@example.com\")\n .build())\n .matchingType(\"MATCHING_TYPE_FULL_MATCH\")\n .build())\n .build())\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes(PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"MY_CUSTOM_TYPE\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .hotwordRule(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs.builder()\n .hotwordRegex(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs.builder()\n .pattern(\"example*\")\n .build())\n .proximity(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs.builder()\n .windowBefore(50)\n .build())\n .likelihoodAdjustment(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs.builder()\n .fixedLikelihood(\"VERY_LIKELY\")\n .build())\n .build())\n .build())\n .build())\n .limits(PreventionInspectTemplateInspectConfigLimitsArgs.builder()\n .maxFindingsPerItem(10)\n .maxFindingsPerRequest(50)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n custom:\n type: gcp:dataloss:PreventionInspectTemplate\n properties:\n parent: projects/my-project-name\n description: My description\n displayName: display_name\n inspectConfig:\n customInfoTypes:\n - infoType:\n name: MY_CUSTOM_TYPE\n likelihood: UNLIKELY\n regex:\n pattern: test*\n infoTypes:\n - name: EMAIL_ADDRESS\n minLikelihood: UNLIKELY\n ruleSets:\n - infoTypes:\n - name: EMAIL_ADDRESS\n rules:\n - exclusionRule:\n regex:\n pattern: .+@example.com\n matchingType: MATCHING_TYPE_FULL_MATCH\n - infoTypes:\n - name: MY_CUSTOM_TYPE\n rules:\n - hotwordRule:\n hotwordRegex:\n pattern: example*\n proximity:\n windowBefore: 50\n likelihoodAdjustment:\n fixedLikelihood: VERY_LIKELY\n limits:\n maxFindingsPerItem: 10\n maxFindingsPerRequest: 50\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dlp Inspect Template Custom Type Surrogate\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customTypeSurrogate = new gcp.dataloss.PreventionInspectTemplate(\"custom_type_surrogate\", {\n parent: \"projects/my-project-name\",\n description: \"My description\",\n displayName: \"display_name\",\n inspectConfig: {\n customInfoTypes: [{\n infoType: {\n name: \"MY_CUSTOM_TYPE\",\n },\n likelihood: \"UNLIKELY\",\n surrogateType: {},\n }],\n infoTypes: [{\n name: \"EMAIL_ADDRESS\",\n }],\n minLikelihood: \"UNLIKELY\",\n ruleSets: [\n {\n infoTypes: [{\n name: \"EMAIL_ADDRESS\",\n }],\n rules: [{\n exclusionRule: {\n regex: {\n pattern: \".+@example.com\",\n },\n matchingType: \"MATCHING_TYPE_FULL_MATCH\",\n },\n }],\n },\n {\n infoTypes: [{\n name: \"MY_CUSTOM_TYPE\",\n }],\n rules: [{\n hotwordRule: {\n hotwordRegex: {\n pattern: \"example*\",\n },\n proximity: {\n windowBefore: 50,\n },\n likelihoodAdjustment: {\n fixedLikelihood: \"VERY_LIKELY\",\n },\n },\n }],\n },\n ],\n limits: {\n maxFindingsPerItem: 10,\n maxFindingsPerRequest: 50,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom_type_surrogate = gcp.dataloss.PreventionInspectTemplate(\"custom_type_surrogate\",\n parent=\"projects/my-project-name\",\n description=\"My description\",\n display_name=\"display_name\",\n inspect_config=gcp.dataloss.PreventionInspectTemplateInspectConfigArgs(\n custom_info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeArgs(\n info_type=gcp.dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs(\n name=\"MY_CUSTOM_TYPE\",\n ),\n likelihood=\"UNLIKELY\",\n surrogate_type=gcp.dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeSurrogateTypeArgs(),\n )],\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n )],\n min_likelihood=\"UNLIKELY\",\n rule_sets=[\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n )],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n exclusion_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs(\n regex=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs(\n pattern=\".+@example.com\",\n ),\n matching_type=\"MATCHING_TYPE_FULL_MATCH\",\n ),\n )],\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"MY_CUSTOM_TYPE\",\n )],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n hotword_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs(\n hotword_regex=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs(\n pattern=\"example*\",\n ),\n proximity=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs(\n window_before=50,\n ),\n likelihood_adjustment=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs(\n fixed_likelihood=\"VERY_LIKELY\",\n ),\n ),\n )],\n ),\n ],\n limits=gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsArgs(\n max_findings_per_item=10,\n max_findings_per_request=50,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customTypeSurrogate = new Gcp.DataLoss.PreventionInspectTemplate(\"custom_type_surrogate\", new()\n {\n Parent = \"projects/my-project-name\",\n Description = \"My description\",\n DisplayName = \"display_name\",\n InspectConfig = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigArgs\n {\n CustomInfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigCustomInfoTypeArgs\n {\n InfoType = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs\n {\n Name = \"MY_CUSTOM_TYPE\",\n },\n Likelihood = \"UNLIKELY\",\n SurrogateType = null,\n },\n },\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n },\n MinLikelihood = \"UNLIKELY\",\n RuleSets = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n ExclusionRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs\n {\n Regex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs\n {\n Pattern = \".+@example.com\",\n },\n MatchingType = \"MATCHING_TYPE_FULL_MATCH\",\n },\n },\n },\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"MY_CUSTOM_TYPE\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n HotwordRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs\n {\n HotwordRegex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs\n {\n Pattern = \"example*\",\n },\n Proximity = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs\n {\n WindowBefore = 50,\n },\n LikelihoodAdjustment = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs\n {\n FixedLikelihood = \"VERY_LIKELY\",\n },\n },\n },\n },\n },\n },\n Limits = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsArgs\n {\n MaxFindingsPerItem = 10,\n MaxFindingsPerRequest = 50,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/dataloss\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataloss.NewPreventionInspectTemplate(ctx, \"custom_type_surrogate\", \u0026dataloss.PreventionInspectTemplateArgs{\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tDescription: pulumi.String(\"My description\"),\n\t\t\tDisplayName: pulumi.String(\"display_name\"),\n\t\t\tInspectConfig: \u0026dataloss.PreventionInspectTemplateInspectConfigArgs{\n\t\t\t\tCustomInfoTypes: dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeArgs{\n\t\t\t\t\t\tInfoType: \u0026dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"MY_CUSTOM_TYPE\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLikelihood: pulumi.String(\"UNLIKELY\"),\n\t\t\t\t\t\tSurrogateType: nil,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigInfoTypeArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMinLikelihood: pulumi.String(\"UNLIKELY\"),\n\t\t\t\tRuleSets: dataloss.PreventionInspectTemplateInspectConfigRuleSetArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tExclusionRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs{\n\t\t\t\t\t\t\t\t\tRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs{\n\t\t\t\t\t\t\t\t\t\tPattern: pulumi.String(\".+@example.com\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tMatchingType: pulumi.String(\"MATCHING_TYPE_FULL_MATCH\"),\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\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"MY_CUSTOM_TYPE\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tHotwordRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs{\n\t\t\t\t\t\t\t\t\tHotwordRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs{\n\t\t\t\t\t\t\t\t\t\tPattern: pulumi.String(\"example*\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tProximity: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs{\n\t\t\t\t\t\t\t\t\t\tWindowBefore: pulumi.Int(50),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tLikelihoodAdjustment: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs{\n\t\t\t\t\t\t\t\t\t\tFixedLikelihood: pulumi.String(\"VERY_LIKELY\"),\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\tLimits: \u0026dataloss.PreventionInspectTemplateInspectConfigLimitsArgs{\n\t\t\t\t\tMaxFindingsPerItem: pulumi.Int(10),\n\t\t\t\t\tMaxFindingsPerRequest: pulumi.Int(50),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataloss.PreventionInspectTemplate;\nimport com.pulumi.gcp.dataloss.PreventionInspectTemplateArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigLimitsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var customTypeSurrogate = new PreventionInspectTemplate(\"customTypeSurrogate\", PreventionInspectTemplateArgs.builder()\n .parent(\"projects/my-project-name\")\n .description(\"My description\")\n .displayName(\"display_name\")\n .inspectConfig(PreventionInspectTemplateInspectConfigArgs.builder()\n .customInfoTypes(PreventionInspectTemplateInspectConfigCustomInfoTypeArgs.builder()\n .infoType(PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs.builder()\n .name(\"MY_CUSTOM_TYPE\")\n .build())\n .likelihood(\"UNLIKELY\")\n .surrogateType()\n .build())\n .infoTypes(PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build())\n .minLikelihood(\"UNLIKELY\")\n .ruleSets( \n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes(PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .exclusionRule(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs.builder()\n .regex(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs.builder()\n .pattern(\".+@example.com\")\n .build())\n .matchingType(\"MATCHING_TYPE_FULL_MATCH\")\n .build())\n .build())\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes(PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"MY_CUSTOM_TYPE\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .hotwordRule(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs.builder()\n .hotwordRegex(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs.builder()\n .pattern(\"example*\")\n .build())\n .proximity(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs.builder()\n .windowBefore(50)\n .build())\n .likelihoodAdjustment(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs.builder()\n .fixedLikelihood(\"VERY_LIKELY\")\n .build())\n .build())\n .build())\n .build())\n .limits(PreventionInspectTemplateInspectConfigLimitsArgs.builder()\n .maxFindingsPerItem(10)\n .maxFindingsPerRequest(50)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customTypeSurrogate:\n type: gcp:dataloss:PreventionInspectTemplate\n name: custom_type_surrogate\n properties:\n parent: projects/my-project-name\n description: My description\n displayName: display_name\n inspectConfig:\n customInfoTypes:\n - infoType:\n name: MY_CUSTOM_TYPE\n likelihood: UNLIKELY\n surrogateType: {}\n infoTypes:\n - name: EMAIL_ADDRESS\n minLikelihood: UNLIKELY\n ruleSets:\n - infoTypes:\n - name: EMAIL_ADDRESS\n rules:\n - exclusionRule:\n regex:\n pattern: .+@example.com\n matchingType: MATCHING_TYPE_FULL_MATCH\n - infoTypes:\n - name: MY_CUSTOM_TYPE\n rules:\n - hotwordRule:\n hotwordRegex:\n pattern: example*\n proximity:\n windowBefore: 50\n likelihoodAdjustment:\n fixedLikelihood: VERY_LIKELY\n limits:\n maxFindingsPerItem: 10\n maxFindingsPerRequest: 50\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInspectTemplate can be imported using any of these accepted formats:\n\n* `{{parent}}/inspectTemplates/{{name}}`\n\n* `{{parent}}/{{name}}`\n\nWhen using the `pulumi import` command, InspectTemplate can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:dataloss/preventionInspectTemplate:PreventionInspectTemplate default {{parent}}/inspectTemplates/{{name}}\n```\n\n```sh\n$ pulumi import gcp:dataloss/preventionInspectTemplate:PreventionInspectTemplate default {{parent}}/{{name}}\n```\n\n", + "description": "An inspect job template.\n\n\nTo get more information about InspectTemplate, see:\n\n* [API documentation](https://cloud.google.com/dlp/docs/reference/rest/v2/projects.inspectTemplates)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/dlp/docs/creating-templates-inspect)\n\n## Example Usage\n\n### Dlp Inspect Template Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.dataloss.PreventionInspectTemplate(\"basic\", {\n parent: \"projects/my-project-name\",\n description: \"My description\",\n displayName: \"display_name\",\n inspectConfig: {\n infoTypes: [\n {\n name: \"EMAIL_ADDRESS\",\n },\n {\n name: \"PERSON_NAME\",\n },\n {\n name: \"LAST_NAME\",\n },\n {\n name: \"DOMAIN_NAME\",\n },\n {\n name: \"PHONE_NUMBER\",\n },\n {\n name: \"FIRST_NAME\",\n },\n ],\n minLikelihood: \"UNLIKELY\",\n ruleSets: [\n {\n infoTypes: [{\n name: \"EMAIL_ADDRESS\",\n }],\n rules: [{\n exclusionRule: {\n regex: {\n pattern: \".+@example.com\",\n },\n matchingType: \"MATCHING_TYPE_FULL_MATCH\",\n },\n }],\n },\n {\n infoTypes: [\n {\n name: \"EMAIL_ADDRESS\",\n },\n {\n name: \"DOMAIN_NAME\",\n },\n {\n name: \"PHONE_NUMBER\",\n },\n {\n name: \"PERSON_NAME\",\n },\n {\n name: \"FIRST_NAME\",\n },\n ],\n rules: [{\n exclusionRule: {\n dictionary: {\n wordList: {\n words: [\"TEST\"],\n },\n },\n matchingType: \"MATCHING_TYPE_PARTIAL_MATCH\",\n },\n }],\n },\n {\n infoTypes: [{\n name: \"PERSON_NAME\",\n }],\n rules: [{\n hotwordRule: {\n hotwordRegex: {\n pattern: \"patient\",\n },\n proximity: {\n windowBefore: 50,\n },\n likelihoodAdjustment: {\n fixedLikelihood: \"VERY_LIKELY\",\n },\n },\n }],\n },\n ],\n limits: {\n maxFindingsPerItem: 10,\n maxFindingsPerRequest: 50,\n maxFindingsPerInfoTypes: [\n {\n maxFindings: 75,\n infoType: {\n name: \"PERSON_NAME\",\n },\n },\n {\n maxFindings: 80,\n infoType: {\n name: \"LAST_NAME\",\n },\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.dataloss.PreventionInspectTemplate(\"basic\",\n parent=\"projects/my-project-name\",\n description=\"My description\",\n display_name=\"display_name\",\n inspect_config=gcp.dataloss.PreventionInspectTemplateInspectConfigArgs(\n info_types=[\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"PERSON_NAME\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"LAST_NAME\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"DOMAIN_NAME\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"PHONE_NUMBER\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"FIRST_NAME\",\n ),\n ],\n min_likelihood=\"UNLIKELY\",\n rule_sets=[\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n )],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n exclusion_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs(\n regex=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs(\n pattern=\".+@example.com\",\n ),\n matching_type=\"MATCHING_TYPE_FULL_MATCH\",\n ),\n )],\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"DOMAIN_NAME\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"PHONE_NUMBER\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"PERSON_NAME\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"FIRST_NAME\",\n ),\n ],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n exclusion_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs(\n dictionary=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryArgs(\n word_list=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryWordListArgs(\n words=[\"TEST\"],\n ),\n ),\n matching_type=\"MATCHING_TYPE_PARTIAL_MATCH\",\n ),\n )],\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"PERSON_NAME\",\n )],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n hotword_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs(\n hotword_regex=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs(\n pattern=\"patient\",\n ),\n proximity=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs(\n window_before=50,\n ),\n likelihood_adjustment=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs(\n fixed_likelihood=\"VERY_LIKELY\",\n ),\n ),\n )],\n ),\n ],\n limits=gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsArgs(\n max_findings_per_item=10,\n max_findings_per_request=50,\n max_findings_per_info_types=[\n gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs(\n max_findings=75,\n info_type=gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs(\n name=\"PERSON_NAME\",\n ),\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs(\n max_findings=80,\n info_type=gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs(\n name=\"LAST_NAME\",\n ),\n ),\n ],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.DataLoss.PreventionInspectTemplate(\"basic\", new()\n {\n Parent = \"projects/my-project-name\",\n Description = \"My description\",\n DisplayName = \"display_name\",\n InspectConfig = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"PERSON_NAME\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"LAST_NAME\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"DOMAIN_NAME\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"PHONE_NUMBER\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"FIRST_NAME\",\n },\n },\n MinLikelihood = \"UNLIKELY\",\n RuleSets = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n ExclusionRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs\n {\n Regex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs\n {\n Pattern = \".+@example.com\",\n },\n MatchingType = \"MATCHING_TYPE_FULL_MATCH\",\n },\n },\n },\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"DOMAIN_NAME\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"PHONE_NUMBER\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"PERSON_NAME\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"FIRST_NAME\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n ExclusionRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs\n {\n Dictionary = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryArgs\n {\n WordList = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryWordListArgs\n {\n Words = new[]\n {\n \"TEST\",\n },\n },\n },\n MatchingType = \"MATCHING_TYPE_PARTIAL_MATCH\",\n },\n },\n },\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"PERSON_NAME\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n HotwordRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs\n {\n HotwordRegex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs\n {\n Pattern = \"patient\",\n },\n Proximity = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs\n {\n WindowBefore = 50,\n },\n LikelihoodAdjustment = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs\n {\n FixedLikelihood = \"VERY_LIKELY\",\n },\n },\n },\n },\n },\n },\n Limits = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsArgs\n {\n MaxFindingsPerItem = 10,\n MaxFindingsPerRequest = 50,\n MaxFindingsPerInfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs\n {\n MaxFindings = 75,\n InfoType = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs\n {\n Name = \"PERSON_NAME\",\n },\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs\n {\n MaxFindings = 80,\n InfoType = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs\n {\n Name = \"LAST_NAME\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/dataloss\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataloss.NewPreventionInspectTemplate(ctx, \"basic\", \u0026dataloss.PreventionInspectTemplateArgs{\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tDescription: pulumi.String(\"My description\"),\n\t\t\tDisplayName: pulumi.String(\"display_name\"),\n\t\t\tInspectConfig: \u0026dataloss.PreventionInspectTemplateInspectConfigArgs{\n\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigInfoTypeArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"PERSON_NAME\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"LAST_NAME\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"DOMAIN_NAME\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"PHONE_NUMBER\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"FIRST_NAME\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMinLikelihood: pulumi.String(\"UNLIKELY\"),\n\t\t\t\tRuleSets: dataloss.PreventionInspectTemplateInspectConfigRuleSetArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tExclusionRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs{\n\t\t\t\t\t\t\t\t\tRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs{\n\t\t\t\t\t\t\t\t\t\tPattern: pulumi.String(\".+@example.com\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tMatchingType: pulumi.String(\"MATCHING_TYPE_FULL_MATCH\"),\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\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"DOMAIN_NAME\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"PHONE_NUMBER\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"PERSON_NAME\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"FIRST_NAME\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tExclusionRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs{\n\t\t\t\t\t\t\t\t\tDictionary: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryArgs{\n\t\t\t\t\t\t\t\t\t\tWordList: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryWordListArgs{\n\t\t\t\t\t\t\t\t\t\t\tWords: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"TEST\"),\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\tMatchingType: pulumi.String(\"MATCHING_TYPE_PARTIAL_MATCH\"),\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\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"PERSON_NAME\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tHotwordRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs{\n\t\t\t\t\t\t\t\t\tHotwordRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs{\n\t\t\t\t\t\t\t\t\t\tPattern: pulumi.String(\"patient\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tProximity: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs{\n\t\t\t\t\t\t\t\t\t\tWindowBefore: pulumi.Int(50),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tLikelihoodAdjustment: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs{\n\t\t\t\t\t\t\t\t\t\tFixedLikelihood: pulumi.String(\"VERY_LIKELY\"),\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\tLimits: \u0026dataloss.PreventionInspectTemplateInspectConfigLimitsArgs{\n\t\t\t\t\tMaxFindingsPerItem: pulumi.Int(10),\n\t\t\t\t\tMaxFindingsPerRequest: pulumi.Int(50),\n\t\t\t\t\tMaxFindingsPerInfoTypes: dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArray{\n\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs{\n\t\t\t\t\t\t\tMaxFindings: pulumi.Int(75),\n\t\t\t\t\t\t\tInfoType: \u0026dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"PERSON_NAME\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs{\n\t\t\t\t\t\t\tMaxFindings: pulumi.Int(80),\n\t\t\t\t\t\t\tInfoType: \u0026dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"LAST_NAME\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataloss.PreventionInspectTemplate;\nimport com.pulumi.gcp.dataloss.PreventionInspectTemplateArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigLimitsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 PreventionInspectTemplate(\"basic\", PreventionInspectTemplateArgs.builder()\n .parent(\"projects/my-project-name\")\n .description(\"My description\")\n .displayName(\"display_name\")\n .inspectConfig(PreventionInspectTemplateInspectConfigArgs.builder()\n .infoTypes( \n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build(),\n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"PERSON_NAME\")\n .build(),\n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"LAST_NAME\")\n .build(),\n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"DOMAIN_NAME\")\n .build(),\n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"PHONE_NUMBER\")\n .build(),\n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"FIRST_NAME\")\n .build())\n .minLikelihood(\"UNLIKELY\")\n .ruleSets( \n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes(PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .exclusionRule(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs.builder()\n .regex(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs.builder()\n .pattern(\".+@example.com\")\n .build())\n .matchingType(\"MATCHING_TYPE_FULL_MATCH\")\n .build())\n .build())\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes( \n PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"DOMAIN_NAME\")\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"PHONE_NUMBER\")\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"PERSON_NAME\")\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"FIRST_NAME\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .exclusionRule(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs.builder()\n .dictionary(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryArgs.builder()\n .wordList(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleDictionaryWordListArgs.builder()\n .words(\"TEST\")\n .build())\n .build())\n .matchingType(\"MATCHING_TYPE_PARTIAL_MATCH\")\n .build())\n .build())\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes(PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"PERSON_NAME\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .hotwordRule(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs.builder()\n .hotwordRegex(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs.builder()\n .pattern(\"patient\")\n .build())\n .proximity(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs.builder()\n .windowBefore(50)\n .build())\n .likelihoodAdjustment(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs.builder()\n .fixedLikelihood(\"VERY_LIKELY\")\n .build())\n .build())\n .build())\n .build())\n .limits(PreventionInspectTemplateInspectConfigLimitsArgs.builder()\n .maxFindingsPerItem(10)\n .maxFindingsPerRequest(50)\n .maxFindingsPerInfoTypes( \n PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.builder()\n .maxFindings(\"75\")\n .infoType(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs.builder()\n .name(\"PERSON_NAME\")\n .build())\n .build(),\n PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.builder()\n .maxFindings(\"80\")\n .infoType(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs.builder()\n .name(\"LAST_NAME\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:dataloss:PreventionInspectTemplate\n properties:\n parent: projects/my-project-name\n description: My description\n displayName: display_name\n inspectConfig:\n infoTypes:\n - name: EMAIL_ADDRESS\n - name: PERSON_NAME\n - name: LAST_NAME\n - name: DOMAIN_NAME\n - name: PHONE_NUMBER\n - name: FIRST_NAME\n minLikelihood: UNLIKELY\n ruleSets:\n - infoTypes:\n - name: EMAIL_ADDRESS\n rules:\n - exclusionRule:\n regex:\n pattern: .+@example.com\n matchingType: MATCHING_TYPE_FULL_MATCH\n - infoTypes:\n - name: EMAIL_ADDRESS\n - name: DOMAIN_NAME\n - name: PHONE_NUMBER\n - name: PERSON_NAME\n - name: FIRST_NAME\n rules:\n - exclusionRule:\n dictionary:\n wordList:\n words:\n - TEST\n matchingType: MATCHING_TYPE_PARTIAL_MATCH\n - infoTypes:\n - name: PERSON_NAME\n rules:\n - hotwordRule:\n hotwordRegex:\n pattern: patient\n proximity:\n windowBefore: 50\n likelihoodAdjustment:\n fixedLikelihood: VERY_LIKELY\n limits:\n maxFindingsPerItem: 10\n maxFindingsPerRequest: 50\n maxFindingsPerInfoTypes:\n - maxFindings: '75'\n infoType:\n name: PERSON_NAME\n - maxFindings: '80'\n infoType:\n name: LAST_NAME\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dlp Inspect Template Custom Type\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst custom = new gcp.dataloss.PreventionInspectTemplate(\"custom\", {\n parent: \"projects/my-project-name\",\n description: \"My description\",\n displayName: \"display_name\",\n inspectConfig: {\n customInfoTypes: [{\n infoType: {\n name: \"MY_CUSTOM_TYPE\",\n },\n likelihood: \"UNLIKELY\",\n regex: {\n pattern: \"test*\",\n },\n }],\n infoTypes: [{\n name: \"EMAIL_ADDRESS\",\n }],\n minLikelihood: \"UNLIKELY\",\n ruleSets: [\n {\n infoTypes: [{\n name: \"EMAIL_ADDRESS\",\n }],\n rules: [{\n exclusionRule: {\n regex: {\n pattern: \".+@example.com\",\n },\n matchingType: \"MATCHING_TYPE_FULL_MATCH\",\n },\n }],\n },\n {\n infoTypes: [{\n name: \"MY_CUSTOM_TYPE\",\n }],\n rules: [{\n hotwordRule: {\n hotwordRegex: {\n pattern: \"example*\",\n },\n proximity: {\n windowBefore: 50,\n },\n likelihoodAdjustment: {\n fixedLikelihood: \"VERY_LIKELY\",\n },\n },\n }],\n },\n ],\n limits: {\n maxFindingsPerItem: 10,\n maxFindingsPerRequest: 50,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom = gcp.dataloss.PreventionInspectTemplate(\"custom\",\n parent=\"projects/my-project-name\",\n description=\"My description\",\n display_name=\"display_name\",\n inspect_config=gcp.dataloss.PreventionInspectTemplateInspectConfigArgs(\n custom_info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeArgs(\n info_type=gcp.dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs(\n name=\"MY_CUSTOM_TYPE\",\n ),\n likelihood=\"UNLIKELY\",\n regex=gcp.dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeRegexArgs(\n pattern=\"test*\",\n ),\n )],\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n )],\n min_likelihood=\"UNLIKELY\",\n rule_sets=[\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n )],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n exclusion_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs(\n regex=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs(\n pattern=\".+@example.com\",\n ),\n matching_type=\"MATCHING_TYPE_FULL_MATCH\",\n ),\n )],\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"MY_CUSTOM_TYPE\",\n )],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n hotword_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs(\n hotword_regex=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs(\n pattern=\"example*\",\n ),\n proximity=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs(\n window_before=50,\n ),\n likelihood_adjustment=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs(\n fixed_likelihood=\"VERY_LIKELY\",\n ),\n ),\n )],\n ),\n ],\n limits=gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsArgs(\n max_findings_per_item=10,\n max_findings_per_request=50,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var custom = new Gcp.DataLoss.PreventionInspectTemplate(\"custom\", new()\n {\n Parent = \"projects/my-project-name\",\n Description = \"My description\",\n DisplayName = \"display_name\",\n InspectConfig = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigArgs\n {\n CustomInfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigCustomInfoTypeArgs\n {\n InfoType = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs\n {\n Name = \"MY_CUSTOM_TYPE\",\n },\n Likelihood = \"UNLIKELY\",\n Regex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigCustomInfoTypeRegexArgs\n {\n Pattern = \"test*\",\n },\n },\n },\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n },\n MinLikelihood = \"UNLIKELY\",\n RuleSets = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n ExclusionRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs\n {\n Regex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs\n {\n Pattern = \".+@example.com\",\n },\n MatchingType = \"MATCHING_TYPE_FULL_MATCH\",\n },\n },\n },\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"MY_CUSTOM_TYPE\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n HotwordRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs\n {\n HotwordRegex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs\n {\n Pattern = \"example*\",\n },\n Proximity = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs\n {\n WindowBefore = 50,\n },\n LikelihoodAdjustment = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs\n {\n FixedLikelihood = \"VERY_LIKELY\",\n },\n },\n },\n },\n },\n },\n Limits = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsArgs\n {\n MaxFindingsPerItem = 10,\n MaxFindingsPerRequest = 50,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/dataloss\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataloss.NewPreventionInspectTemplate(ctx, \"custom\", \u0026dataloss.PreventionInspectTemplateArgs{\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tDescription: pulumi.String(\"My description\"),\n\t\t\tDisplayName: pulumi.String(\"display_name\"),\n\t\t\tInspectConfig: \u0026dataloss.PreventionInspectTemplateInspectConfigArgs{\n\t\t\t\tCustomInfoTypes: dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeArgs{\n\t\t\t\t\t\tInfoType: \u0026dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"MY_CUSTOM_TYPE\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLikelihood: pulumi.String(\"UNLIKELY\"),\n\t\t\t\t\t\tRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeRegexArgs{\n\t\t\t\t\t\t\tPattern: 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\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigInfoTypeArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMinLikelihood: pulumi.String(\"UNLIKELY\"),\n\t\t\t\tRuleSets: dataloss.PreventionInspectTemplateInspectConfigRuleSetArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tExclusionRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs{\n\t\t\t\t\t\t\t\t\tRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs{\n\t\t\t\t\t\t\t\t\t\tPattern: pulumi.String(\".+@example.com\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tMatchingType: pulumi.String(\"MATCHING_TYPE_FULL_MATCH\"),\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\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"MY_CUSTOM_TYPE\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tHotwordRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs{\n\t\t\t\t\t\t\t\t\tHotwordRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs{\n\t\t\t\t\t\t\t\t\t\tPattern: pulumi.String(\"example*\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tProximity: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs{\n\t\t\t\t\t\t\t\t\t\tWindowBefore: pulumi.Int(50),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tLikelihoodAdjustment: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs{\n\t\t\t\t\t\t\t\t\t\tFixedLikelihood: pulumi.String(\"VERY_LIKELY\"),\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\tLimits: \u0026dataloss.PreventionInspectTemplateInspectConfigLimitsArgs{\n\t\t\t\t\tMaxFindingsPerItem: pulumi.Int(10),\n\t\t\t\t\tMaxFindingsPerRequest: pulumi.Int(50),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataloss.PreventionInspectTemplate;\nimport com.pulumi.gcp.dataloss.PreventionInspectTemplateArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigLimitsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var custom = new PreventionInspectTemplate(\"custom\", PreventionInspectTemplateArgs.builder()\n .parent(\"projects/my-project-name\")\n .description(\"My description\")\n .displayName(\"display_name\")\n .inspectConfig(PreventionInspectTemplateInspectConfigArgs.builder()\n .customInfoTypes(PreventionInspectTemplateInspectConfigCustomInfoTypeArgs.builder()\n .infoType(PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs.builder()\n .name(\"MY_CUSTOM_TYPE\")\n .build())\n .likelihood(\"UNLIKELY\")\n .regex(PreventionInspectTemplateInspectConfigCustomInfoTypeRegexArgs.builder()\n .pattern(\"test*\")\n .build())\n .build())\n .infoTypes(PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build())\n .minLikelihood(\"UNLIKELY\")\n .ruleSets( \n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes(PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .exclusionRule(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs.builder()\n .regex(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs.builder()\n .pattern(\".+@example.com\")\n .build())\n .matchingType(\"MATCHING_TYPE_FULL_MATCH\")\n .build())\n .build())\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes(PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"MY_CUSTOM_TYPE\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .hotwordRule(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs.builder()\n .hotwordRegex(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs.builder()\n .pattern(\"example*\")\n .build())\n .proximity(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs.builder()\n .windowBefore(50)\n .build())\n .likelihoodAdjustment(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs.builder()\n .fixedLikelihood(\"VERY_LIKELY\")\n .build())\n .build())\n .build())\n .build())\n .limits(PreventionInspectTemplateInspectConfigLimitsArgs.builder()\n .maxFindingsPerItem(10)\n .maxFindingsPerRequest(50)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n custom:\n type: gcp:dataloss:PreventionInspectTemplate\n properties:\n parent: projects/my-project-name\n description: My description\n displayName: display_name\n inspectConfig:\n customInfoTypes:\n - infoType:\n name: MY_CUSTOM_TYPE\n likelihood: UNLIKELY\n regex:\n pattern: test*\n infoTypes:\n - name: EMAIL_ADDRESS\n minLikelihood: UNLIKELY\n ruleSets:\n - infoTypes:\n - name: EMAIL_ADDRESS\n rules:\n - exclusionRule:\n regex:\n pattern: .+@example.com\n matchingType: MATCHING_TYPE_FULL_MATCH\n - infoTypes:\n - name: MY_CUSTOM_TYPE\n rules:\n - hotwordRule:\n hotwordRegex:\n pattern: example*\n proximity:\n windowBefore: 50\n likelihoodAdjustment:\n fixedLikelihood: VERY_LIKELY\n limits:\n maxFindingsPerItem: 10\n maxFindingsPerRequest: 50\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dlp Inspect Template Custom Type Surrogate\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customTypeSurrogate = new gcp.dataloss.PreventionInspectTemplate(\"custom_type_surrogate\", {\n parent: \"projects/my-project-name\",\n description: \"My description\",\n displayName: \"display_name\",\n inspectConfig: {\n customInfoTypes: [{\n infoType: {\n name: \"MY_CUSTOM_TYPE\",\n },\n likelihood: \"UNLIKELY\",\n surrogateType: {},\n }],\n infoTypes: [{\n name: \"EMAIL_ADDRESS\",\n }],\n minLikelihood: \"UNLIKELY\",\n ruleSets: [\n {\n infoTypes: [{\n name: \"EMAIL_ADDRESS\",\n }],\n rules: [{\n exclusionRule: {\n regex: {\n pattern: \".+@example.com\",\n },\n matchingType: \"MATCHING_TYPE_FULL_MATCH\",\n },\n }],\n },\n {\n infoTypes: [{\n name: \"MY_CUSTOM_TYPE\",\n }],\n rules: [{\n hotwordRule: {\n hotwordRegex: {\n pattern: \"example*\",\n },\n proximity: {\n windowBefore: 50,\n },\n likelihoodAdjustment: {\n fixedLikelihood: \"VERY_LIKELY\",\n },\n },\n }],\n },\n ],\n limits: {\n maxFindingsPerItem: 10,\n maxFindingsPerRequest: 50,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom_type_surrogate = gcp.dataloss.PreventionInspectTemplate(\"custom_type_surrogate\",\n parent=\"projects/my-project-name\",\n description=\"My description\",\n display_name=\"display_name\",\n inspect_config=gcp.dataloss.PreventionInspectTemplateInspectConfigArgs(\n custom_info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeArgs(\n info_type=gcp.dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs(\n name=\"MY_CUSTOM_TYPE\",\n ),\n likelihood=\"UNLIKELY\",\n surrogate_type=gcp.dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeSurrogateTypeArgs(),\n )],\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n )],\n min_likelihood=\"UNLIKELY\",\n rule_sets=[\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n )],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n exclusion_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs(\n regex=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs(\n pattern=\".+@example.com\",\n ),\n matching_type=\"MATCHING_TYPE_FULL_MATCH\",\n ),\n )],\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs(\n info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs(\n name=\"MY_CUSTOM_TYPE\",\n )],\n rules=[gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs(\n hotword_rule=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs(\n hotword_regex=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs(\n pattern=\"example*\",\n ),\n proximity=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs(\n window_before=50,\n ),\n likelihood_adjustment=gcp.dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs(\n fixed_likelihood=\"VERY_LIKELY\",\n ),\n ),\n )],\n ),\n ],\n limits=gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsArgs(\n max_findings_per_item=10,\n max_findings_per_request=50,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customTypeSurrogate = new Gcp.DataLoss.PreventionInspectTemplate(\"custom_type_surrogate\", new()\n {\n Parent = \"projects/my-project-name\",\n Description = \"My description\",\n DisplayName = \"display_name\",\n InspectConfig = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigArgs\n {\n CustomInfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigCustomInfoTypeArgs\n {\n InfoType = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs\n {\n Name = \"MY_CUSTOM_TYPE\",\n },\n Likelihood = \"UNLIKELY\",\n SurrogateType = null,\n },\n },\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n },\n MinLikelihood = \"UNLIKELY\",\n RuleSets = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n ExclusionRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs\n {\n Regex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs\n {\n Pattern = \".+@example.com\",\n },\n MatchingType = \"MATCHING_TYPE_FULL_MATCH\",\n },\n },\n },\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs\n {\n Name = \"MY_CUSTOM_TYPE\",\n },\n },\n Rules = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleArgs\n {\n HotwordRule = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs\n {\n HotwordRegex = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs\n {\n Pattern = \"example*\",\n },\n Proximity = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs\n {\n WindowBefore = 50,\n },\n LikelihoodAdjustment = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs\n {\n FixedLikelihood = \"VERY_LIKELY\",\n },\n },\n },\n },\n },\n },\n Limits = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsArgs\n {\n MaxFindingsPerItem = 10,\n MaxFindingsPerRequest = 50,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/dataloss\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataloss.NewPreventionInspectTemplate(ctx, \"custom_type_surrogate\", \u0026dataloss.PreventionInspectTemplateArgs{\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tDescription: pulumi.String(\"My description\"),\n\t\t\tDisplayName: pulumi.String(\"display_name\"),\n\t\t\tInspectConfig: \u0026dataloss.PreventionInspectTemplateInspectConfigArgs{\n\t\t\t\tCustomInfoTypes: dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeArgs{\n\t\t\t\t\t\tInfoType: \u0026dataloss.PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"MY_CUSTOM_TYPE\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLikelihood: pulumi.String(\"UNLIKELY\"),\n\t\t\t\t\t\tSurrogateType: nil,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigInfoTypeArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMinLikelihood: pulumi.String(\"UNLIKELY\"),\n\t\t\t\tRuleSets: dataloss.PreventionInspectTemplateInspectConfigRuleSetArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tExclusionRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs{\n\t\t\t\t\t\t\t\t\tRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs{\n\t\t\t\t\t\t\t\t\t\tPattern: pulumi.String(\".+@example.com\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tMatchingType: pulumi.String(\"MATCHING_TYPE_FULL_MATCH\"),\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\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetArgs{\n\t\t\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"MY_CUSTOM_TYPE\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRules: dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArray{\n\t\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleArgs{\n\t\t\t\t\t\t\t\tHotwordRule: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs{\n\t\t\t\t\t\t\t\t\tHotwordRegex: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs{\n\t\t\t\t\t\t\t\t\t\tPattern: pulumi.String(\"example*\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tProximity: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs{\n\t\t\t\t\t\t\t\t\t\tWindowBefore: pulumi.Int(50),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tLikelihoodAdjustment: \u0026dataloss.PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs{\n\t\t\t\t\t\t\t\t\t\tFixedLikelihood: pulumi.String(\"VERY_LIKELY\"),\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\tLimits: \u0026dataloss.PreventionInspectTemplateInspectConfigLimitsArgs{\n\t\t\t\t\tMaxFindingsPerItem: pulumi.Int(10),\n\t\t\t\t\tMaxFindingsPerRequest: pulumi.Int(50),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataloss.PreventionInspectTemplate;\nimport com.pulumi.gcp.dataloss.PreventionInspectTemplateArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigLimitsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var customTypeSurrogate = new PreventionInspectTemplate(\"customTypeSurrogate\", PreventionInspectTemplateArgs.builder()\n .parent(\"projects/my-project-name\")\n .description(\"My description\")\n .displayName(\"display_name\")\n .inspectConfig(PreventionInspectTemplateInspectConfigArgs.builder()\n .customInfoTypes(PreventionInspectTemplateInspectConfigCustomInfoTypeArgs.builder()\n .infoType(PreventionInspectTemplateInspectConfigCustomInfoTypeInfoTypeArgs.builder()\n .name(\"MY_CUSTOM_TYPE\")\n .build())\n .likelihood(\"UNLIKELY\")\n .surrogateType()\n .build())\n .infoTypes(PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build())\n .minLikelihood(\"UNLIKELY\")\n .ruleSets( \n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes(PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .exclusionRule(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleArgs.builder()\n .regex(PreventionInspectTemplateInspectConfigRuleSetRuleExclusionRuleRegexArgs.builder()\n .pattern(\".+@example.com\")\n .build())\n .matchingType(\"MATCHING_TYPE_FULL_MATCH\")\n .build())\n .build())\n .build(),\n PreventionInspectTemplateInspectConfigRuleSetArgs.builder()\n .infoTypes(PreventionInspectTemplateInspectConfigRuleSetInfoTypeArgs.builder()\n .name(\"MY_CUSTOM_TYPE\")\n .build())\n .rules(PreventionInspectTemplateInspectConfigRuleSetRuleArgs.builder()\n .hotwordRule(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleArgs.builder()\n .hotwordRegex(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleHotwordRegexArgs.builder()\n .pattern(\"example*\")\n .build())\n .proximity(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleProximityArgs.builder()\n .windowBefore(50)\n .build())\n .likelihoodAdjustment(PreventionInspectTemplateInspectConfigRuleSetRuleHotwordRuleLikelihoodAdjustmentArgs.builder()\n .fixedLikelihood(\"VERY_LIKELY\")\n .build())\n .build())\n .build())\n .build())\n .limits(PreventionInspectTemplateInspectConfigLimitsArgs.builder()\n .maxFindingsPerItem(10)\n .maxFindingsPerRequest(50)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customTypeSurrogate:\n type: gcp:dataloss:PreventionInspectTemplate\n name: custom_type_surrogate\n properties:\n parent: projects/my-project-name\n description: My description\n displayName: display_name\n inspectConfig:\n customInfoTypes:\n - infoType:\n name: MY_CUSTOM_TYPE\n likelihood: UNLIKELY\n surrogateType: {}\n infoTypes:\n - name: EMAIL_ADDRESS\n minLikelihood: UNLIKELY\n ruleSets:\n - infoTypes:\n - name: EMAIL_ADDRESS\n rules:\n - exclusionRule:\n regex:\n pattern: .+@example.com\n matchingType: MATCHING_TYPE_FULL_MATCH\n - infoTypes:\n - name: MY_CUSTOM_TYPE\n rules:\n - hotwordRule:\n hotwordRegex:\n pattern: example*\n proximity:\n windowBefore: 50\n likelihoodAdjustment:\n fixedLikelihood: VERY_LIKELY\n limits:\n maxFindingsPerItem: 10\n maxFindingsPerRequest: 50\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dlp Inspect Template Max Infotype Per Finding Default\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst maxInfotypePerFindingDefault = new gcp.dataloss.PreventionInspectTemplate(\"max_infotype_per_finding_default\", {\n parent: \"projects/my-project-name\",\n inspectConfig: {\n infoTypes: [\n {\n name: \"EMAIL_ADDRESS\",\n },\n {\n name: \"PERSON_NAME\",\n },\n ],\n minLikelihood: \"UNLIKELY\",\n limits: {\n maxFindingsPerRequest: 333,\n maxFindingsPerItem: 222,\n maxFindingsPerInfoTypes: [{\n maxFindings: 111,\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmax_infotype_per_finding_default = gcp.dataloss.PreventionInspectTemplate(\"max_infotype_per_finding_default\",\n parent=\"projects/my-project-name\",\n inspect_config=gcp.dataloss.PreventionInspectTemplateInspectConfigArgs(\n info_types=[\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"EMAIL_ADDRESS\",\n ),\n gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs(\n name=\"PERSON_NAME\",\n ),\n ],\n min_likelihood=\"UNLIKELY\",\n limits=gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsArgs(\n max_findings_per_request=333,\n max_findings_per_item=222,\n max_findings_per_info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs(\n max_findings=111,\n )],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var maxInfotypePerFindingDefault = new Gcp.DataLoss.PreventionInspectTemplate(\"max_infotype_per_finding_default\", new()\n {\n Parent = \"projects/my-project-name\",\n InspectConfig = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigArgs\n {\n InfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"EMAIL_ADDRESS\",\n },\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs\n {\n Name = \"PERSON_NAME\",\n },\n },\n MinLikelihood = \"UNLIKELY\",\n Limits = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsArgs\n {\n MaxFindingsPerRequest = 333,\n MaxFindingsPerItem = 222,\n MaxFindingsPerInfoTypes = new[]\n {\n new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs\n {\n MaxFindings = 111,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/dataloss\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataloss.NewPreventionInspectTemplate(ctx, \"max_infotype_per_finding_default\", \u0026dataloss.PreventionInspectTemplateArgs{\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tInspectConfig: \u0026dataloss.PreventionInspectTemplateInspectConfigArgs{\n\t\t\t\tInfoTypes: dataloss.PreventionInspectTemplateInspectConfigInfoTypeArray{\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"EMAIL_ADDRESS\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"PERSON_NAME\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMinLikelihood: pulumi.String(\"UNLIKELY\"),\n\t\t\t\tLimits: \u0026dataloss.PreventionInspectTemplateInspectConfigLimitsArgs{\n\t\t\t\t\tMaxFindingsPerRequest: pulumi.Int(333),\n\t\t\t\t\tMaxFindingsPerItem: pulumi.Int(222),\n\t\t\t\t\tMaxFindingsPerInfoTypes: dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArray{\n\t\t\t\t\t\t\u0026dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs{\n\t\t\t\t\t\t\tMaxFindings: pulumi.Int(111),\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.dataloss.PreventionInspectTemplate;\nimport com.pulumi.gcp.dataloss.PreventionInspectTemplateArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigArgs;\nimport com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigLimitsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var maxInfotypePerFindingDefault = new PreventionInspectTemplate(\"maxInfotypePerFindingDefault\", PreventionInspectTemplateArgs.builder()\n .parent(\"projects/my-project-name\")\n .inspectConfig(PreventionInspectTemplateInspectConfigArgs.builder()\n .infoTypes( \n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"EMAIL_ADDRESS\")\n .build(),\n PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()\n .name(\"PERSON_NAME\")\n .build())\n .minLikelihood(\"UNLIKELY\")\n .limits(PreventionInspectTemplateInspectConfigLimitsArgs.builder()\n .maxFindingsPerRequest(333)\n .maxFindingsPerItem(222)\n .maxFindingsPerInfoTypes(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.builder()\n .maxFindings(111)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n maxInfotypePerFindingDefault:\n type: gcp:dataloss:PreventionInspectTemplate\n name: max_infotype_per_finding_default\n properties:\n parent: projects/my-project-name\n inspectConfig:\n infoTypes:\n - name: EMAIL_ADDRESS\n - name: PERSON_NAME\n minLikelihood: UNLIKELY\n limits:\n maxFindingsPerRequest: 333\n maxFindingsPerItem: 222\n maxFindingsPerInfoTypes:\n - maxFindings: 111\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInspectTemplate can be imported using any of these accepted formats:\n\n* `{{parent}}/inspectTemplates/{{name}}`\n\n* `{{parent}}/{{name}}`\n\nWhen using the `pulumi import` command, InspectTemplate can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:dataloss/preventionInspectTemplate:PreventionInspectTemplate default {{parent}}/inspectTemplates/{{name}}\n```\n\n```sh\n$ pulumi import gcp:dataloss/preventionInspectTemplate:PreventionInspectTemplate default {{parent}}/{{name}}\n```\n\n", "properties": { "description": { "type": "string", @@ -190784,7 +192143,7 @@ } }, "gcp:gkebackup/backupPlan:BackupPlan": { - "description": "Represents a Backup Plan instance.\n\n\nTo get more information about BackupPlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.backupPlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Backupplan Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"basic-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"basic-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"basic-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"basic-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"basic-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"basic-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"basic-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"basic-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"basic-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"true\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"basic-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: basic-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: 'true'\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: basic-plan\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Autopilot\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"autopilot-cluster\",\n location: \"us-central1\",\n enableAutopilot: true,\n ipAllocationPolicy: {},\n releaseChannel: {\n channel: \"RAPID\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst autopilot = new gcp.gkebackup.BackupPlan(\"autopilot\", {\n name: \"autopilot-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"autopilot-cluster\",\n location=\"us-central1\",\n enable_autopilot=True,\n ip_allocation_policy=gcp.container.ClusterIpAllocationPolicyArgs(),\n release_channel=gcp.container.ClusterReleaseChannelArgs(\n channel=\"RAPID\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nautopilot = gcp.gkebackup.BackupPlan(\"autopilot\",\n name=\"autopilot-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"autopilot-cluster\",\n Location = \"us-central1\",\n EnableAutopilot = true,\n IpAllocationPolicy = null,\n ReleaseChannel = new Gcp.Container.Inputs.ClusterReleaseChannelArgs\n {\n Channel = \"RAPID\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var autopilot = new Gcp.GkeBackup.BackupPlan(\"autopilot\", new()\n {\n Name = \"autopilot-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"autopilot-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tEnableAutopilot: pulumi.Bool(true),\n\t\t\tIpAllocationPolicy: nil,\n\t\t\tReleaseChannel: \u0026container.ClusterReleaseChannelArgs{\n\t\t\t\tChannel: pulumi.String(\"RAPID\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"autopilot\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"autopilot-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterIpAllocationPolicyArgs;\nimport com.pulumi.gcp.container.inputs.ClusterReleaseChannelArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"autopilot-cluster\")\n .location(\"us-central1\")\n .enableAutopilot(true)\n .ipAllocationPolicy()\n .releaseChannel(ClusterReleaseChannelArgs.builder()\n .channel(\"RAPID\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"true\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var autopilot = new BackupPlan(\"autopilot\", BackupPlanArgs.builder()\n .name(\"autopilot-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: autopilot-cluster\n location: us-central1\n enableAutopilot: true\n ipAllocationPolicy: {}\n releaseChannel:\n channel: RAPID\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: 'true'\n network: default\n subnetwork: default\n autopilot:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: autopilot-plan\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"cmek-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst keyRing = new gcp.kms.KeyRing(\"key_ring\", {\n name: \"backup-key\",\n location: \"us-central1\",\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"crypto_key\", {\n name: \"backup-key\",\n keyRing: keyRing.id,\n});\nconst cmek = new gcp.gkebackup.BackupPlan(\"cmek\", {\n name: \"cmek-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n selectedNamespaces: {\n namespaces: [\n \"default\",\n \"test\",\n ],\n },\n encryptionKey: {\n gcpKmsEncryptionKey: cryptoKey.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"cmek-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nkey_ring = gcp.kms.KeyRing(\"key_ring\",\n name=\"backup-key\",\n location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"crypto_key\",\n name=\"backup-key\",\n key_ring=key_ring.id)\ncmek = gcp.gkebackup.BackupPlan(\"cmek\",\n name=\"cmek-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n selected_namespaces=gcp.gkebackup.BackupPlanBackupConfigSelectedNamespacesArgs(\n namespaces=[\n \"default\",\n \"test\",\n ],\n ),\n encryption_key=gcp.gkebackup.BackupPlanBackupConfigEncryptionKeyArgs(\n gcp_kms_encryption_key=crypto_key.id,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"cmek-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var keyRing = new Gcp.Kms.KeyRing(\"key_ring\", new()\n {\n Name = \"backup-key\",\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"crypto_key\", new()\n {\n Name = \"backup-key\",\n KeyRing = keyRing.Id,\n });\n\n var cmek = new Gcp.GkeBackup.BackupPlan(\"cmek\", new()\n {\n Name = \"cmek-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"default\",\n \"test\",\n },\n },\n EncryptionKey = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigEncryptionKeyArgs\n {\n GcpKmsEncryptionKey = cryptoKey.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"cmek-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyRing, err := kms.NewKeyRing(ctx, \"key_ring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"backup-key\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"crypto_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"backup-key\"),\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"cmek\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"cmek-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.BackupPlanBackupConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"default\"),\n\t\t\t\t\t\tpulumi.String(\"test\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEncryptionKey: \u0026gkebackup.BackupPlanBackupConfigEncryptionKeyArgs{\n\t\t\t\t\tGcpKmsEncryptionKey: cryptoKey.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigEncryptionKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"cmek-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"true\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder()\n .name(\"backup-key\")\n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder()\n .name(\"backup-key\")\n .keyRing(keyRing.id())\n .build());\n\n var cmek = new BackupPlan(\"cmek\", BackupPlanArgs.builder()\n .name(\"cmek-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .selectedNamespaces(BackupPlanBackupConfigSelectedNamespacesArgs.builder()\n .namespaces( \n \"default\",\n \"test\")\n .build())\n .encryptionKey(BackupPlanBackupConfigEncryptionKeyArgs.builder()\n .gcpKmsEncryptionKey(cryptoKey.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: cmek-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: 'true'\n network: default\n subnetwork: default\n cmek:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: cmek-plan\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n selectedNamespaces:\n namespaces:\n - default\n - test\n encryptionKey:\n gcpKmsEncryptionKey: ${cryptoKey.id}\n cryptoKey:\n type: gcp:kms:CryptoKey\n name: crypto_key\n properties:\n name: backup-key\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n name: key_ring\n properties:\n name: backup-key\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"full-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst full = new gcp.gkebackup.BackupPlan(\"full\", {\n name: \"full-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n cronSchedule: \"0 9 * * 1\",\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n selectedApplications: {\n namespacedNames: [\n {\n name: \"app1\",\n namespace: \"ns1\",\n },\n {\n name: \"app2\",\n namespace: \"ns2\",\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"full-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nfull = gcp.gkebackup.BackupPlan(\"full\",\n name=\"full-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy=gcp.gkebackup.BackupPlanRetentionPolicyArgs(\n backup_delete_lock_days=30,\n backup_retain_days=180,\n ),\n backup_schedule=gcp.gkebackup.BackupPlanBackupScheduleArgs(\n cron_schedule=\"0 9 * * 1\",\n ),\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n selected_applications=gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsArgs(\n namespaced_names=[\n gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs(\n name=\"app1\",\n namespace=\"ns1\",\n ),\n gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs(\n name=\"app2\",\n namespace=\"ns2\",\n ),\n ],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"full-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var full = new Gcp.GkeBackup.BackupPlan(\"full\", new()\n {\n Name = \"full-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n CronSchedule = \"0 9 * * 1\",\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n SelectedApplications = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app1\",\n Namespace = \"ns1\",\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app2\",\n Namespace = \"ns2\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"full-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"full\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"full-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tCronSchedule: pulumi.String(\"0 9 * * 1\"),\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tSelectedApplications: \u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app1\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app2\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedApplicationsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"full-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"true\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var full = new BackupPlan(\"full\", BackupPlanArgs.builder()\n .name(\"full-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .cronSchedule(\"0 9 * * 1\")\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .selectedApplications(BackupPlanBackupConfigSelectedApplicationsArgs.builder()\n .namespacedNames( \n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app1\")\n .namespace(\"ns1\")\n .build(),\n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app2\")\n .namespace(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: full-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: 'true'\n network: default\n subnetwork: default\n full:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: full-plan\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n cronSchedule: 0 9 * * 1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n selectedApplications:\n namespacedNames:\n - name: app1\n namespace: ns1\n - name: app2\n namespace: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Rpo Daily Window\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rpo-daily-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst rpoDailyWindow = new gcp.gkebackup.BackupPlan(\"rpo_daily_window\", {\n name: \"rpo-daily-window\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n paused: true,\n rpoConfig: {\n targetRpoMinutes: 1440,\n exclusionWindows: [\n {\n startTime: {\n hours: 12,\n },\n duration: \"7200s\",\n daily: true,\n },\n {\n startTime: {\n hours: 8,\n minutes: 40,\n seconds: 1,\n nanos: 100,\n },\n duration: \"3600s\",\n singleOccurrenceDate: {\n year: 2024,\n month: 3,\n day: 16,\n },\n },\n ],\n },\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rpo-daily-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nrpo_daily_window = gcp.gkebackup.BackupPlan(\"rpo_daily_window\",\n name=\"rpo-daily-window\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy=gcp.gkebackup.BackupPlanRetentionPolicyArgs(\n backup_delete_lock_days=30,\n backup_retain_days=180,\n ),\n backup_schedule=gcp.gkebackup.BackupPlanBackupScheduleArgs(\n paused=True,\n rpo_config=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigArgs(\n target_rpo_minutes=1440,\n exclusion_windows=[\n gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs(\n start_time=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs(\n hours=12,\n ),\n duration=\"7200s\",\n daily=True,\n ),\n gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs(\n start_time=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs(\n hours=8,\n minutes=40,\n seconds=1,\n nanos=100,\n ),\n duration=\"3600s\",\n single_occurrence_date=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs(\n year=2024,\n month=3,\n day=16,\n ),\n ),\n ],\n ),\n ),\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rpo-daily-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var rpoDailyWindow = new Gcp.GkeBackup.BackupPlan(\"rpo_daily_window\", new()\n {\n Name = \"rpo-daily-window\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n Paused = true,\n RpoConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigArgs\n {\n TargetRpoMinutes = 1440,\n ExclusionWindows = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 12,\n },\n Duration = \"7200s\",\n Daily = true,\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 8,\n Minutes = 40,\n Seconds = 1,\n Nanos = 100,\n },\n Duration = \"3600s\",\n SingleOccurrenceDate = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs\n {\n Year = 2024,\n Month = 3,\n Day = 16,\n },\n },\n },\n },\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rpo-daily-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"rpo_daily_window\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rpo-daily-window\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tPaused: pulumi.Bool(true),\n\t\t\t\tRpoConfig: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigArgs{\n\t\t\t\t\tTargetRpoMinutes: pulumi.Int(1440),\n\t\t\t\t\tExclusionWindows: gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(12),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"7200s\"),\n\t\t\t\t\t\t\tDaily: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(8),\n\t\t\t\t\t\t\t\tMinutes: pulumi.Int(40),\n\t\t\t\t\t\t\t\tSeconds: pulumi.Int(1),\n\t\t\t\t\t\t\t\tNanos: pulumi.Int(100),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"3600s\"),\n\t\t\t\t\t\t\tSingleOccurrenceDate: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs{\n\t\t\t\t\t\t\t\tYear: pulumi.Int(2024),\n\t\t\t\t\t\t\t\tMonth: pulumi.Int(3),\n\t\t\t\t\t\t\t\tDay: pulumi.Int(16),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleRpoConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rpo-daily-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"true\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var rpoDailyWindow = new BackupPlan(\"rpoDailyWindow\", BackupPlanArgs.builder()\n .name(\"rpo-daily-window\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .paused(true)\n .rpoConfig(BackupPlanBackupScheduleRpoConfigArgs.builder()\n .targetRpoMinutes(1440)\n .exclusionWindows( \n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(12)\n .build())\n .duration(\"7200s\")\n .daily(true)\n .build(),\n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(8)\n .minutes(40)\n .seconds(1)\n .nanos(100)\n .build())\n .duration(\"3600s\")\n .singleOccurrenceDate(BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs.builder()\n .year(2024)\n .month(3)\n .day(16)\n .build())\n .build())\n .build())\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rpo-daily-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: 'true'\n network: default\n subnetwork: default\n rpoDailyWindow:\n type: gcp:gkebackup:BackupPlan\n name: rpo_daily_window\n properties:\n name: rpo-daily-window\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n paused: true\n rpoConfig:\n targetRpoMinutes: 1440\n exclusionWindows:\n - startTime:\n hours: 12\n duration: 7200s\n daily: true\n - startTime:\n hours: 8\n minutes: 40\n seconds: 1\n nanos: 100\n duration: 3600s\n singleOccurrenceDate:\n year: 2024\n month: 3\n day: 16\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Rpo Weekly Window\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rpo-weekly-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst rpoWeeklyWindow = new gcp.gkebackup.BackupPlan(\"rpo_weekly_window\", {\n name: \"rpo-weekly-window\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n paused: true,\n rpoConfig: {\n targetRpoMinutes: 1440,\n exclusionWindows: [\n {\n startTime: {\n hours: 1,\n minutes: 23,\n },\n duration: \"1800s\",\n daysOfWeek: {\n daysOfWeeks: [\n \"MONDAY\",\n \"THURSDAY\",\n ],\n },\n },\n {\n startTime: {\n hours: 12,\n },\n duration: \"3600s\",\n singleOccurrenceDate: {\n year: 2024,\n month: 3,\n day: 17,\n },\n },\n {\n startTime: {\n hours: 8,\n minutes: 40,\n },\n duration: \"600s\",\n singleOccurrenceDate: {\n year: 2024,\n month: 3,\n day: 18,\n },\n },\n ],\n },\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rpo-weekly-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nrpo_weekly_window = gcp.gkebackup.BackupPlan(\"rpo_weekly_window\",\n name=\"rpo-weekly-window\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy=gcp.gkebackup.BackupPlanRetentionPolicyArgs(\n backup_delete_lock_days=30,\n backup_retain_days=180,\n ),\n backup_schedule=gcp.gkebackup.BackupPlanBackupScheduleArgs(\n paused=True,\n rpo_config=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigArgs(\n target_rpo_minutes=1440,\n exclusion_windows=[\n gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs(\n start_time=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs(\n hours=1,\n minutes=23,\n ),\n duration=\"1800s\",\n days_of_week=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs(\n days_of_weeks=[\n \"MONDAY\",\n \"THURSDAY\",\n ],\n ),\n ),\n gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs(\n start_time=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs(\n hours=12,\n ),\n duration=\"3600s\",\n single_occurrence_date=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs(\n year=2024,\n month=3,\n day=17,\n ),\n ),\n gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs(\n start_time=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs(\n hours=8,\n minutes=40,\n ),\n duration=\"600s\",\n single_occurrence_date=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs(\n year=2024,\n month=3,\n day=18,\n ),\n ),\n ],\n ),\n ),\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rpo-weekly-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var rpoWeeklyWindow = new Gcp.GkeBackup.BackupPlan(\"rpo_weekly_window\", new()\n {\n Name = \"rpo-weekly-window\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n Paused = true,\n RpoConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigArgs\n {\n TargetRpoMinutes = 1440,\n ExclusionWindows = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 23,\n },\n Duration = \"1800s\",\n DaysOfWeek = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs\n {\n DaysOfWeeks = new[]\n {\n \"MONDAY\",\n \"THURSDAY\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 12,\n },\n Duration = \"3600s\",\n SingleOccurrenceDate = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs\n {\n Year = 2024,\n Month = 3,\n Day = 17,\n },\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 8,\n Minutes = 40,\n },\n Duration = \"600s\",\n SingleOccurrenceDate = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs\n {\n Year = 2024,\n Month = 3,\n Day = 18,\n },\n },\n },\n },\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rpo-weekly-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"rpo_weekly_window\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rpo-weekly-window\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tPaused: pulumi.Bool(true),\n\t\t\t\tRpoConfig: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigArgs{\n\t\t\t\t\tTargetRpoMinutes: pulumi.Int(1440),\n\t\t\t\t\tExclusionWindows: gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\t\tMinutes: pulumi.Int(23),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"1800s\"),\n\t\t\t\t\t\t\tDaysOfWeek: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs{\n\t\t\t\t\t\t\t\tDaysOfWeeks: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"MONDAY\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"THURSDAY\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(12),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"3600s\"),\n\t\t\t\t\t\t\tSingleOccurrenceDate: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs{\n\t\t\t\t\t\t\t\tYear: pulumi.Int(2024),\n\t\t\t\t\t\t\t\tMonth: pulumi.Int(3),\n\t\t\t\t\t\t\t\tDay: pulumi.Int(17),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(8),\n\t\t\t\t\t\t\t\tMinutes: pulumi.Int(40),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"600s\"),\n\t\t\t\t\t\t\tSingleOccurrenceDate: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs{\n\t\t\t\t\t\t\t\tYear: pulumi.Int(2024),\n\t\t\t\t\t\t\t\tMonth: pulumi.Int(3),\n\t\t\t\t\t\t\t\tDay: pulumi.Int(18),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleRpoConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rpo-weekly-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"true\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var rpoWeeklyWindow = new BackupPlan(\"rpoWeeklyWindow\", BackupPlanArgs.builder()\n .name(\"rpo-weekly-window\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .paused(true)\n .rpoConfig(BackupPlanBackupScheduleRpoConfigArgs.builder()\n .targetRpoMinutes(1440)\n .exclusionWindows( \n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(23)\n .build())\n .duration(\"1800s\")\n .daysOfWeek(BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs.builder()\n .daysOfWeeks( \n \"MONDAY\",\n \"THURSDAY\")\n .build())\n .build(),\n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(12)\n .build())\n .duration(\"3600s\")\n .singleOccurrenceDate(BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs.builder()\n .year(2024)\n .month(3)\n .day(17)\n .build())\n .build(),\n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(8)\n .minutes(40)\n .build())\n .duration(\"600s\")\n .singleOccurrenceDate(BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs.builder()\n .year(2024)\n .month(3)\n .day(18)\n .build())\n .build())\n .build())\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rpo-weekly-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: 'true'\n network: default\n subnetwork: default\n rpoWeeklyWindow:\n type: gcp:gkebackup:BackupPlan\n name: rpo_weekly_window\n properties:\n name: rpo-weekly-window\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n paused: true\n rpoConfig:\n targetRpoMinutes: 1440\n exclusionWindows:\n - startTime:\n hours: 1\n minutes: 23\n duration: 1800s\n daysOfWeek:\n daysOfWeeks:\n - MONDAY\n - THURSDAY\n - startTime:\n hours: 12\n duration: 3600s\n singleOccurrenceDate:\n year: 2024\n month: 3\n day: 17\n - startTime:\n hours: 8\n minutes: 40\n duration: 600s\n singleOccurrenceDate:\n year: 2024\n month: 3\n day: 18\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBackupPlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/backupPlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, BackupPlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlan:BackupPlan default projects/{{project}}/locations/{{location}}/backupPlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlan:BackupPlan default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlan:BackupPlan default {{location}}/{{name}}\n```\n\n", + "description": "Represents a Backup Plan instance.\n\n\nTo get more information about BackupPlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.backupPlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Backupplan Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"basic-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"basic-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"basic-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"basic-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"basic-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"basic-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"basic-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"basic-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"basic-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"true\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"basic-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: basic-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: 'true'\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: basic-plan\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Autopilot\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"autopilot-cluster\",\n location: \"us-central1\",\n enableAutopilot: true,\n ipAllocationPolicy: {},\n releaseChannel: {\n channel: \"RAPID\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst autopilot = new gcp.gkebackup.BackupPlan(\"autopilot\", {\n name: \"autopilot-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"autopilot-cluster\",\n location=\"us-central1\",\n enable_autopilot=True,\n ip_allocation_policy=gcp.container.ClusterIpAllocationPolicyArgs(),\n release_channel=gcp.container.ClusterReleaseChannelArgs(\n channel=\"RAPID\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nautopilot = gcp.gkebackup.BackupPlan(\"autopilot\",\n name=\"autopilot-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"autopilot-cluster\",\n Location = \"us-central1\",\n EnableAutopilot = true,\n IpAllocationPolicy = null,\n ReleaseChannel = new Gcp.Container.Inputs.ClusterReleaseChannelArgs\n {\n Channel = \"RAPID\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var autopilot = new Gcp.GkeBackup.BackupPlan(\"autopilot\", new()\n {\n Name = \"autopilot-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"autopilot-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tEnableAutopilot: pulumi.Bool(true),\n\t\t\tIpAllocationPolicy: nil,\n\t\t\tReleaseChannel: \u0026container.ClusterReleaseChannelArgs{\n\t\t\t\tChannel: pulumi.String(\"RAPID\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"autopilot\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"autopilot-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterIpAllocationPolicyArgs;\nimport com.pulumi.gcp.container.inputs.ClusterReleaseChannelArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"autopilot-cluster\")\n .location(\"us-central1\")\n .enableAutopilot(true)\n .ipAllocationPolicy()\n .releaseChannel(ClusterReleaseChannelArgs.builder()\n .channel(\"RAPID\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"true\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var autopilot = new BackupPlan(\"autopilot\", BackupPlanArgs.builder()\n .name(\"autopilot-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: autopilot-cluster\n location: us-central1\n enableAutopilot: true\n ipAllocationPolicy: {}\n releaseChannel:\n channel: RAPID\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: 'true'\n network: default\n subnetwork: default\n autopilot:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: autopilot-plan\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"cmek-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst keyRing = new gcp.kms.KeyRing(\"key_ring\", {\n name: \"backup-key\",\n location: \"us-central1\",\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"crypto_key\", {\n name: \"backup-key\",\n keyRing: keyRing.id,\n});\nconst cmek = new gcp.gkebackup.BackupPlan(\"cmek\", {\n name: \"cmek-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n selectedNamespaces: {\n namespaces: [\n \"default\",\n \"test\",\n ],\n },\n encryptionKey: {\n gcpKmsEncryptionKey: cryptoKey.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"cmek-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nkey_ring = gcp.kms.KeyRing(\"key_ring\",\n name=\"backup-key\",\n location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"crypto_key\",\n name=\"backup-key\",\n key_ring=key_ring.id)\ncmek = gcp.gkebackup.BackupPlan(\"cmek\",\n name=\"cmek-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n selected_namespaces=gcp.gkebackup.BackupPlanBackupConfigSelectedNamespacesArgs(\n namespaces=[\n \"default\",\n \"test\",\n ],\n ),\n encryption_key=gcp.gkebackup.BackupPlanBackupConfigEncryptionKeyArgs(\n gcp_kms_encryption_key=crypto_key.id,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"cmek-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var keyRing = new Gcp.Kms.KeyRing(\"key_ring\", new()\n {\n Name = \"backup-key\",\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"crypto_key\", new()\n {\n Name = \"backup-key\",\n KeyRing = keyRing.Id,\n });\n\n var cmek = new Gcp.GkeBackup.BackupPlan(\"cmek\", new()\n {\n Name = \"cmek-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"default\",\n \"test\",\n },\n },\n EncryptionKey = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigEncryptionKeyArgs\n {\n GcpKmsEncryptionKey = cryptoKey.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"cmek-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyRing, err := kms.NewKeyRing(ctx, \"key_ring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"backup-key\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"crypto_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"backup-key\"),\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"cmek\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"cmek-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.BackupPlanBackupConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"default\"),\n\t\t\t\t\t\tpulumi.String(\"test\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEncryptionKey: \u0026gkebackup.BackupPlanBackupConfigEncryptionKeyArgs{\n\t\t\t\t\tGcpKmsEncryptionKey: cryptoKey.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigEncryptionKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"cmek-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"true\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder()\n .name(\"backup-key\")\n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder()\n .name(\"backup-key\")\n .keyRing(keyRing.id())\n .build());\n\n var cmek = new BackupPlan(\"cmek\", BackupPlanArgs.builder()\n .name(\"cmek-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .selectedNamespaces(BackupPlanBackupConfigSelectedNamespacesArgs.builder()\n .namespaces( \n \"default\",\n \"test\")\n .build())\n .encryptionKey(BackupPlanBackupConfigEncryptionKeyArgs.builder()\n .gcpKmsEncryptionKey(cryptoKey.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: cmek-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: 'true'\n network: default\n subnetwork: default\n cmek:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: cmek-plan\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n selectedNamespaces:\n namespaces:\n - default\n - test\n encryptionKey:\n gcpKmsEncryptionKey: ${cryptoKey.id}\n cryptoKey:\n type: gcp:kms:CryptoKey\n name: crypto_key\n properties:\n name: backup-key\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n name: key_ring\n properties:\n name: backup-key\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"full-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst full = new gcp.gkebackup.BackupPlan(\"full\", {\n name: \"full-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n cronSchedule: \"0 9 * * 1\",\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n selectedApplications: {\n namespacedNames: [\n {\n name: \"app1\",\n namespace: \"ns1\",\n },\n {\n name: \"app2\",\n namespace: \"ns2\",\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"full-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nfull = gcp.gkebackup.BackupPlan(\"full\",\n name=\"full-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy=gcp.gkebackup.BackupPlanRetentionPolicyArgs(\n backup_delete_lock_days=30,\n backup_retain_days=180,\n ),\n backup_schedule=gcp.gkebackup.BackupPlanBackupScheduleArgs(\n cron_schedule=\"0 9 * * 1\",\n ),\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n selected_applications=gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsArgs(\n namespaced_names=[\n gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs(\n name=\"app1\",\n namespace=\"ns1\",\n ),\n gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs(\n name=\"app2\",\n namespace=\"ns2\",\n ),\n ],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"full-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var full = new Gcp.GkeBackup.BackupPlan(\"full\", new()\n {\n Name = \"full-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n CronSchedule = \"0 9 * * 1\",\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n SelectedApplications = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app1\",\n Namespace = \"ns1\",\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app2\",\n Namespace = \"ns2\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"full-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"full\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"full-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tCronSchedule: pulumi.String(\"0 9 * * 1\"),\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tSelectedApplications: \u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app1\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app2\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedApplicationsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"full-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"true\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var full = new BackupPlan(\"full\", BackupPlanArgs.builder()\n .name(\"full-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .cronSchedule(\"0 9 * * 1\")\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .selectedApplications(BackupPlanBackupConfigSelectedApplicationsArgs.builder()\n .namespacedNames( \n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app1\")\n .namespace(\"ns1\")\n .build(),\n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app2\")\n .namespace(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: full-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: 'true'\n network: default\n subnetwork: default\n full:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: full-plan\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n cronSchedule: 0 9 * * 1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n selectedApplications:\n namespacedNames:\n - name: app1\n namespace: ns1\n - name: app2\n namespace: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Permissive\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"permissive-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst permissive = new gcp.gkebackup.BackupPlan(\"permissive\", {\n name: \"permissive-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n cronSchedule: \"0 9 * * 1\",\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n permissiveMode: true,\n selectedApplications: {\n namespacedNames: [\n {\n name: \"app1\",\n namespace: \"ns1\",\n },\n {\n name: \"app2\",\n namespace: \"ns2\",\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"permissive-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\npermissive = gcp.gkebackup.BackupPlan(\"permissive\",\n name=\"permissive-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy=gcp.gkebackup.BackupPlanRetentionPolicyArgs(\n backup_delete_lock_days=30,\n backup_retain_days=180,\n ),\n backup_schedule=gcp.gkebackup.BackupPlanBackupScheduleArgs(\n cron_schedule=\"0 9 * * 1\",\n ),\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n permissive_mode=True,\n selected_applications=gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsArgs(\n namespaced_names=[\n gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs(\n name=\"app1\",\n namespace=\"ns1\",\n ),\n gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs(\n name=\"app2\",\n namespace=\"ns2\",\n ),\n ],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"permissive-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var permissive = new Gcp.GkeBackup.BackupPlan(\"permissive\", new()\n {\n Name = \"permissive-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n CronSchedule = \"0 9 * * 1\",\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n PermissiveMode = true,\n SelectedApplications = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app1\",\n Namespace = \"ns1\",\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app2\",\n Namespace = \"ns2\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"permissive-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"permissive\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"permissive-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tCronSchedule: pulumi.String(\"0 9 * * 1\"),\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tPermissiveMode: pulumi.Bool(true),\n\t\t\t\tSelectedApplications: \u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app1\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app2\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedApplicationsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"permissive-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"true\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var permissive = new BackupPlan(\"permissive\", BackupPlanArgs.builder()\n .name(\"permissive-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .cronSchedule(\"0 9 * * 1\")\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .permissiveMode(true)\n .selectedApplications(BackupPlanBackupConfigSelectedApplicationsArgs.builder()\n .namespacedNames( \n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app1\")\n .namespace(\"ns1\")\n .build(),\n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app2\")\n .namespace(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: permissive-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: 'true'\n network: default\n subnetwork: default\n permissive:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: permissive-plan\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n cronSchedule: 0 9 * * 1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n permissiveMode: true\n selectedApplications:\n namespacedNames:\n - name: app1\n namespace: ns1\n - name: app2\n namespace: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Rpo Daily Window\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rpo-daily-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst rpoDailyWindow = new gcp.gkebackup.BackupPlan(\"rpo_daily_window\", {\n name: \"rpo-daily-window\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n paused: true,\n rpoConfig: {\n targetRpoMinutes: 1440,\n exclusionWindows: [\n {\n startTime: {\n hours: 12,\n },\n duration: \"7200s\",\n daily: true,\n },\n {\n startTime: {\n hours: 8,\n minutes: 40,\n seconds: 1,\n nanos: 100,\n },\n duration: \"3600s\",\n singleOccurrenceDate: {\n year: 2024,\n month: 3,\n day: 16,\n },\n },\n ],\n },\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rpo-daily-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nrpo_daily_window = gcp.gkebackup.BackupPlan(\"rpo_daily_window\",\n name=\"rpo-daily-window\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy=gcp.gkebackup.BackupPlanRetentionPolicyArgs(\n backup_delete_lock_days=30,\n backup_retain_days=180,\n ),\n backup_schedule=gcp.gkebackup.BackupPlanBackupScheduleArgs(\n paused=True,\n rpo_config=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigArgs(\n target_rpo_minutes=1440,\n exclusion_windows=[\n gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs(\n start_time=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs(\n hours=12,\n ),\n duration=\"7200s\",\n daily=True,\n ),\n gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs(\n start_time=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs(\n hours=8,\n minutes=40,\n seconds=1,\n nanos=100,\n ),\n duration=\"3600s\",\n single_occurrence_date=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs(\n year=2024,\n month=3,\n day=16,\n ),\n ),\n ],\n ),\n ),\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rpo-daily-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var rpoDailyWindow = new Gcp.GkeBackup.BackupPlan(\"rpo_daily_window\", new()\n {\n Name = \"rpo-daily-window\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n Paused = true,\n RpoConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigArgs\n {\n TargetRpoMinutes = 1440,\n ExclusionWindows = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 12,\n },\n Duration = \"7200s\",\n Daily = true,\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 8,\n Minutes = 40,\n Seconds = 1,\n Nanos = 100,\n },\n Duration = \"3600s\",\n SingleOccurrenceDate = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs\n {\n Year = 2024,\n Month = 3,\n Day = 16,\n },\n },\n },\n },\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rpo-daily-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"rpo_daily_window\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rpo-daily-window\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tPaused: pulumi.Bool(true),\n\t\t\t\tRpoConfig: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigArgs{\n\t\t\t\t\tTargetRpoMinutes: pulumi.Int(1440),\n\t\t\t\t\tExclusionWindows: gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(12),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"7200s\"),\n\t\t\t\t\t\t\tDaily: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(8),\n\t\t\t\t\t\t\t\tMinutes: pulumi.Int(40),\n\t\t\t\t\t\t\t\tSeconds: pulumi.Int(1),\n\t\t\t\t\t\t\t\tNanos: pulumi.Int(100),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"3600s\"),\n\t\t\t\t\t\t\tSingleOccurrenceDate: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs{\n\t\t\t\t\t\t\t\tYear: pulumi.Int(2024),\n\t\t\t\t\t\t\t\tMonth: pulumi.Int(3),\n\t\t\t\t\t\t\t\tDay: pulumi.Int(16),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleRpoConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rpo-daily-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"true\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var rpoDailyWindow = new BackupPlan(\"rpoDailyWindow\", BackupPlanArgs.builder()\n .name(\"rpo-daily-window\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .paused(true)\n .rpoConfig(BackupPlanBackupScheduleRpoConfigArgs.builder()\n .targetRpoMinutes(1440)\n .exclusionWindows( \n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(12)\n .build())\n .duration(\"7200s\")\n .daily(true)\n .build(),\n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(8)\n .minutes(40)\n .seconds(1)\n .nanos(100)\n .build())\n .duration(\"3600s\")\n .singleOccurrenceDate(BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs.builder()\n .year(2024)\n .month(3)\n .day(16)\n .build())\n .build())\n .build())\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rpo-daily-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: 'true'\n network: default\n subnetwork: default\n rpoDailyWindow:\n type: gcp:gkebackup:BackupPlan\n name: rpo_daily_window\n properties:\n name: rpo-daily-window\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n paused: true\n rpoConfig:\n targetRpoMinutes: 1440\n exclusionWindows:\n - startTime:\n hours: 12\n duration: 7200s\n daily: true\n - startTime:\n hours: 8\n minutes: 40\n seconds: 1\n nanos: 100\n duration: 3600s\n singleOccurrenceDate:\n year: 2024\n month: 3\n day: 16\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Rpo Weekly Window\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rpo-weekly-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst rpoWeeklyWindow = new gcp.gkebackup.BackupPlan(\"rpo_weekly_window\", {\n name: \"rpo-weekly-window\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n paused: true,\n rpoConfig: {\n targetRpoMinutes: 1440,\n exclusionWindows: [\n {\n startTime: {\n hours: 1,\n minutes: 23,\n },\n duration: \"1800s\",\n daysOfWeek: {\n daysOfWeeks: [\n \"MONDAY\",\n \"THURSDAY\",\n ],\n },\n },\n {\n startTime: {\n hours: 12,\n },\n duration: \"3600s\",\n singleOccurrenceDate: {\n year: 2024,\n month: 3,\n day: 17,\n },\n },\n {\n startTime: {\n hours: 8,\n minutes: 40,\n },\n duration: \"600s\",\n singleOccurrenceDate: {\n year: 2024,\n month: 3,\n day: 18,\n },\n },\n ],\n },\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rpo-weekly-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nrpo_weekly_window = gcp.gkebackup.BackupPlan(\"rpo_weekly_window\",\n name=\"rpo-weekly-window\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy=gcp.gkebackup.BackupPlanRetentionPolicyArgs(\n backup_delete_lock_days=30,\n backup_retain_days=180,\n ),\n backup_schedule=gcp.gkebackup.BackupPlanBackupScheduleArgs(\n paused=True,\n rpo_config=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigArgs(\n target_rpo_minutes=1440,\n exclusion_windows=[\n gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs(\n start_time=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs(\n hours=1,\n minutes=23,\n ),\n duration=\"1800s\",\n days_of_week=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs(\n days_of_weeks=[\n \"MONDAY\",\n \"THURSDAY\",\n ],\n ),\n ),\n gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs(\n start_time=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs(\n hours=12,\n ),\n duration=\"3600s\",\n single_occurrence_date=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs(\n year=2024,\n month=3,\n day=17,\n ),\n ),\n gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs(\n start_time=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs(\n hours=8,\n minutes=40,\n ),\n duration=\"600s\",\n single_occurrence_date=gcp.gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs(\n year=2024,\n month=3,\n day=18,\n ),\n ),\n ],\n ),\n ),\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rpo-weekly-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var rpoWeeklyWindow = new Gcp.GkeBackup.BackupPlan(\"rpo_weekly_window\", new()\n {\n Name = \"rpo-weekly-window\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n Paused = true,\n RpoConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigArgs\n {\n TargetRpoMinutes = 1440,\n ExclusionWindows = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 23,\n },\n Duration = \"1800s\",\n DaysOfWeek = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs\n {\n DaysOfWeeks = new[]\n {\n \"MONDAY\",\n \"THURSDAY\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 12,\n },\n Duration = \"3600s\",\n SingleOccurrenceDate = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs\n {\n Year = 2024,\n Month = 3,\n Day = 17,\n },\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 8,\n Minutes = 40,\n },\n Duration = \"600s\",\n SingleOccurrenceDate = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs\n {\n Year = 2024,\n Month = 3,\n Day = 18,\n },\n },\n },\n },\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rpo-weekly-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"rpo_weekly_window\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rpo-weekly-window\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tPaused: pulumi.Bool(true),\n\t\t\t\tRpoConfig: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigArgs{\n\t\t\t\t\tTargetRpoMinutes: pulumi.Int(1440),\n\t\t\t\t\tExclusionWindows: gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\t\tMinutes: pulumi.Int(23),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"1800s\"),\n\t\t\t\t\t\t\tDaysOfWeek: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs{\n\t\t\t\t\t\t\t\tDaysOfWeeks: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"MONDAY\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"THURSDAY\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(12),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"3600s\"),\n\t\t\t\t\t\t\tSingleOccurrenceDate: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs{\n\t\t\t\t\t\t\t\tYear: pulumi.Int(2024),\n\t\t\t\t\t\t\t\tMonth: pulumi.Int(3),\n\t\t\t\t\t\t\t\tDay: pulumi.Int(17),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(8),\n\t\t\t\t\t\t\t\tMinutes: pulumi.Int(40),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"600s\"),\n\t\t\t\t\t\t\tSingleOccurrenceDate: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs{\n\t\t\t\t\t\t\t\tYear: pulumi.Int(2024),\n\t\t\t\t\t\t\t\tMonth: pulumi.Int(3),\n\t\t\t\t\t\t\t\tDay: pulumi.Int(18),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleRpoConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rpo-weekly-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"true\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var rpoWeeklyWindow = new BackupPlan(\"rpoWeeklyWindow\", BackupPlanArgs.builder()\n .name(\"rpo-weekly-window\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .paused(true)\n .rpoConfig(BackupPlanBackupScheduleRpoConfigArgs.builder()\n .targetRpoMinutes(1440)\n .exclusionWindows( \n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(23)\n .build())\n .duration(\"1800s\")\n .daysOfWeek(BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs.builder()\n .daysOfWeeks( \n \"MONDAY\",\n \"THURSDAY\")\n .build())\n .build(),\n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(12)\n .build())\n .duration(\"3600s\")\n .singleOccurrenceDate(BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs.builder()\n .year(2024)\n .month(3)\n .day(17)\n .build())\n .build(),\n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(8)\n .minutes(40)\n .build())\n .duration(\"600s\")\n .singleOccurrenceDate(BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs.builder()\n .year(2024)\n .month(3)\n .day(18)\n .build())\n .build())\n .build())\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rpo-weekly-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: 'true'\n network: default\n subnetwork: default\n rpoWeeklyWindow:\n type: gcp:gkebackup:BackupPlan\n name: rpo_weekly_window\n properties:\n name: rpo-weekly-window\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n paused: true\n rpoConfig:\n targetRpoMinutes: 1440\n exclusionWindows:\n - startTime:\n hours: 1\n minutes: 23\n duration: 1800s\n daysOfWeek:\n daysOfWeeks:\n - MONDAY\n - THURSDAY\n - startTime:\n hours: 12\n duration: 3600s\n singleOccurrenceDate:\n year: 2024\n month: 3\n day: 17\n - startTime:\n hours: 8\n minutes: 40\n duration: 600s\n singleOccurrenceDate:\n year: 2024\n month: 3\n day: 18\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBackupPlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/backupPlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, BackupPlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlan:BackupPlan default projects/{{project}}/locations/{{location}}/backupPlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlan:BackupPlan default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlan:BackupPlan default {{location}}/{{name}}\n```\n\n", "properties": { "backupConfig": { "$ref": "#/types/gcp:gkebackup/BackupPlanBackupConfig:BackupPlanBackupConfig", @@ -191344,7 +192703,7 @@ } }, "gcp:gkebackup/restorePlan:RestorePlan": { - "description": "Represents a Restore Plan instance.\n\n\nTo get more information about RestorePlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.restorePlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Restoreplan All Namespaces\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-all-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-all-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allNs = new gcp.gkebackup.RestorePlan(\"all_ns\", {\n name: \"restore-all-ns\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-all-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-all-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_ns = gcp.gkebackup.RestorePlan(\"all_ns\",\n name=\"restore-all-ns\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-all-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-all-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allNs = new Gcp.GkeBackup.RestorePlan(\"all_ns\", new()\n {\n Name = \"restore-all-ns\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-all-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-all-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allNs = new RestorePlan(\"allNs\", RestorePlanArgs.builder()\n .name(\"restore-all-ns\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-all-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-all-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allNs:\n type: gcp:gkebackup:RestorePlan\n name: all_ns\n properties:\n name: restore-all-ns\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rollback Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackNs = new gcp.gkebackup.RestorePlan(\"rollback_ns\", {\n name: \"rollback-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n selectedGroupKinds: [\n {\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n },\n {\n resourceGroup: \"storage.k8s.io\",\n resourceKind: \"StorageClass\",\n },\n ],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_ns = gcp.gkebackup.RestorePlan(\"rollback_ns\",\n name=\"rollback-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n selected_group_kinds=[\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n ),\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"storage.k8s.io\",\n resource_kind=\"StorageClass\",\n ),\n ],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackNs = new Gcp.GkeBackup.RestorePlan(\"rollback_ns\", new()\n {\n Name = \"rollback-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n SelectedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"storage.k8s.io\",\n ResourceKind = \"StorageClass\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tSelectedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"storage.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"StorageClass\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackNs = new RestorePlan(\"rollbackNs\", RestorePlanArgs.builder()\n .name(\"rollback-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .selectedGroupKinds( \n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build(),\n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"storage.k8s.io\")\n .resourceKind(\"StorageClass\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackNs:\n type: gcp:gkebackup:RestorePlan\n name: rollback_ns\n properties:\n name: rollback-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n selectedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n - resourceGroup: storage.k8s.io\n resourceKind: StorageClass\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Protected Application\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-app-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-app\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackApp = new gcp.gkebackup.RestorePlan(\"rollback_app\", {\n name: \"rollback-app-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedApplications: {\n namespacedNames: [{\n name: \"my-app\",\n namespace: \"my-ns\",\n }],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-app-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-app\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_app = gcp.gkebackup.RestorePlan(\"rollback_app\",\n name=\"rollback-app-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_applications=gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs(\n namespaced_names=[gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs(\n name=\"my-app\",\n namespace=\"my-ns\",\n )],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-app-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-app\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackApp = new Gcp.GkeBackup.RestorePlan(\"rollback_app\", new()\n {\n Name = \"rollback-app-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedApplications = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"my-app\",\n Namespace = \"my-ns\",\n },\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-app-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_app\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedApplications: \u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"my-app\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"my-ns\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedApplicationsArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-app-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-app\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackApp = new RestorePlan(\"rollbackApp\", RestorePlanArgs.builder()\n .name(\"rollback-app-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedApplications(RestorePlanRestoreConfigSelectedApplicationsArgs.builder()\n .namespacedNames(RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"my-app\")\n .namespace(\"my-ns\")\n .build())\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-app-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-app\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackApp:\n type: gcp:gkebackup:RestorePlan\n name: rollback_app\n properties:\n name: rollback-app-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedApplications:\n namespacedNames:\n - name: my-app\n namespace: my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan All Cluster Resources\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"all-groupkinds-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"all-groupkinds\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allClusterResources = new gcp.gkebackup.RestorePlan(\"all_cluster_resources\", {\n name: \"all-groupkinds-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n noNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"all-groupkinds-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"all-groupkinds\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_cluster_resources = gcp.gkebackup.RestorePlan(\"all_cluster_resources\",\n name=\"all-groupkinds-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n no_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"all-groupkinds-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"all-groupkinds\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allClusterResources = new Gcp.GkeBackup.RestorePlan(\"all_cluster_resources\", new()\n {\n Name = \"all-groupkinds-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n NoNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_cluster_resources\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tNoNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"all-groupkinds-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"all-groupkinds\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allClusterResources = new RestorePlan(\"allClusterResources\", RestorePlanArgs.builder()\n .name(\"all-groupkinds-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .noNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: all-groupkinds-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: all-groupkinds\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allClusterResources:\n type: gcp:gkebackup:RestorePlan\n name: all_cluster_resources\n properties:\n name: all-groupkinds-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n noNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rename Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rename-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rename-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst renameNs = new gcp.gkebackup.RestorePlan(\"rename_ns\", {\n name: \"rename-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"ns1\"],\n },\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n transformationRules: [\n {\n description: \"rename namespace from ns1 to ns2\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Namespace\",\n }],\n jsonPath: \".metadata[?(@.name == 'ns1')]\",\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/name\",\n value: \"ns2\",\n }],\n },\n {\n description: \"move all resources from ns1 to ns2\",\n resourceFilter: {\n namespaces: [\"ns1\"],\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/namespace\",\n value: \"ns2\",\n }],\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rename-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rename-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrename_ns = gcp.gkebackup.RestorePlan(\"rename_ns\",\n name=\"rename-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"ns1\"],\n ),\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n transformation_rules=[\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"rename namespace from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Namespace\",\n )],\n json_path=\".metadata[?(@.name == 'ns1')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/name\",\n value=\"ns2\",\n )],\n ),\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"move all resources from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n namespaces=[\"ns1\"],\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/namespace\",\n value=\"ns2\",\n )],\n ),\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rename-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rename-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var renameNs = new Gcp.GkeBackup.RestorePlan(\"rename_ns\", new()\n {\n Name = \"rename-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"rename namespace from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Namespace\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'ns1')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/name\",\n Value = \"ns2\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"move all resources from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/namespace\",\n Value = \"ns2\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rename-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rename_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"rename namespace from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Namespace\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'ns1')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/name\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"move all resources from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/namespace\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rename-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rename-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var renameNs = new RestorePlan(\"renameNs\", RestorePlanArgs.builder()\n .name(\"rename-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .transformationRules( \n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"rename namespace from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Namespace\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'ns1')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/name\")\n .value(\"ns2\")\n .build())\n .build(),\n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"move all resources from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/namespace\")\n .value(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rename-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rename-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n renameNs:\n type: gcp:gkebackup:RestorePlan\n name: rename_ns\n properties:\n name: rename-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - ns1\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n transformationRules:\n - description: rename namespace from ns1 to ns2\n resourceFilter:\n groupKinds:\n - resourceKind: Namespace\n jsonPath: .metadata[?(@.name == 'ns1')]\n fieldActions:\n - op: REPLACE\n path: /metadata/name\n value: ns2\n - description: move all resources from ns1 to ns2\n resourceFilter:\n namespaces:\n - ns1\n fieldActions:\n - op: REPLACE\n path: /metadata/namespace\n value: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Second Transformation\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"transform-rule-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"transform-rule\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst transformRule = new gcp.gkebackup.RestorePlan(\"transform_rule\", {\n name: \"transform-rule-rp\",\n description: \"copy nginx env variables\",\n labels: {\n app: \"nginx\",\n },\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n excludedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n excludedGroupKinds: [{\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n }],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n transformationRules: [{\n description: \"Copy environment variables from the nginx container to the install init container.\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Pod\",\n resourceGroup: \"\",\n }],\n jsonPath: \".metadata[?(@.name == 'nginx')]\",\n },\n fieldActions: [{\n op: \"COPY\",\n path: \"/spec/initContainers/0/env\",\n fromPath: \"/spec/containers/0/env\",\n }],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"transform-rule-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"transform-rule\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\ntransform_rule = gcp.gkebackup.RestorePlan(\"transform_rule\",\n name=\"transform-rule-rp\",\n description=\"copy nginx env variables\",\n labels={\n \"app\": \"nginx\",\n },\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n excluded_namespaces=gcp.gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n excluded_group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n )],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n transformation_rules=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"Copy environment variables from the nginx container to the install init container.\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Pod\",\n resource_group=\"\",\n )],\n json_path=\".metadata[?(@.name == 'nginx')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"COPY\",\n path=\"/spec/initContainers/0/env\",\n from_path=\"/spec/containers/0/env\",\n )],\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"transform-rule-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"transform-rule\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var transformRule = new Gcp.GkeBackup.RestorePlan(\"transform_rule\", new()\n {\n Name = \"transform-rule-rp\",\n Description = \"copy nginx env variables\",\n Labels = \n {\n { \"app\", \"nginx\" },\n },\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n ExcludedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigExcludedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n ExcludedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"Copy environment variables from the nginx container to the install init container.\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Pod\",\n ResourceGroup = \"\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'nginx')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"COPY\",\n Path = \"/spec/initContainers/0/env\",\n FromPath = \"/spec/containers/0/env\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"transform-rule-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"transform_rule\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule-rp\"),\n\t\t\tDescription: pulumi.String(\"copy nginx env variables\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"app\": pulumi.String(\"nginx\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tExcludedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tExcludedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"Copy environment variables from the nginx container to the install init container.\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Pod\"),\n\t\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'nginx')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/spec/initContainers/0/env\"),\n\t\t\t\t\t\t\t\tFromPath: pulumi.String(\"/spec/containers/0/env\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigExcludedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"transform-rule-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"transform-rule\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var transformRule = new RestorePlan(\"transformRule\", RestorePlanArgs.builder()\n .name(\"transform-rule-rp\")\n .description(\"copy nginx env variables\")\n .labels(Map.of(\"app\", \"nginx\"))\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .excludedNamespaces(RestorePlanRestoreConfigExcludedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .excludedGroupKinds(RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .transformationRules(RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"Copy environment variables from the nginx container to the install init container.\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Pod\")\n .resourceGroup(\"\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'nginx')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"COPY\")\n .path(\"/spec/initContainers/0/env\")\n .fromPath(\"/spec/containers/0/env\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: transform-rule-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: transform-rule\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n transformRule:\n type: gcp:gkebackup:RestorePlan\n name: transform_rule\n properties:\n name: transform-rule-rp\n description: copy nginx env variables\n labels:\n app: nginx\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n excludedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n excludedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n transformationRules:\n - description: Copy environment variables from the nginx container to the install init container.\n resourceFilter:\n groupKinds:\n - resourceKind: Pod\n resourceGroup:\n jsonPath: .metadata[?(@.name == 'nginx')]\n fieldActions:\n - op: COPY\n path: /spec/initContainers/0/env\n fromPath: /spec/containers/0/env\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRestorePlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/restorePlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, RestorePlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlan:RestorePlan default projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlan:RestorePlan default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlan:RestorePlan default {{location}}/{{name}}\n```\n\n", + "description": "Represents a Restore Plan instance.\n\n\nTo get more information about RestorePlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.restorePlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Restoreplan All Namespaces\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-all-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-all-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allNs = new gcp.gkebackup.RestorePlan(\"all_ns\", {\n name: \"restore-all-ns\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-all-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-all-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_ns = gcp.gkebackup.RestorePlan(\"all_ns\",\n name=\"restore-all-ns\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-all-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-all-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allNs = new Gcp.GkeBackup.RestorePlan(\"all_ns\", new()\n {\n Name = \"restore-all-ns\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-all-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-all-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allNs = new RestorePlan(\"allNs\", RestorePlanArgs.builder()\n .name(\"restore-all-ns\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-all-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-all-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allNs:\n type: gcp:gkebackup:RestorePlan\n name: all_ns\n properties:\n name: restore-all-ns\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rollback Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackNs = new gcp.gkebackup.RestorePlan(\"rollback_ns\", {\n name: \"rollback-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n selectedGroupKinds: [\n {\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n },\n {\n resourceGroup: \"storage.k8s.io\",\n resourceKind: \"StorageClass\",\n },\n ],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_ns = gcp.gkebackup.RestorePlan(\"rollback_ns\",\n name=\"rollback-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n selected_group_kinds=[\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n ),\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"storage.k8s.io\",\n resource_kind=\"StorageClass\",\n ),\n ],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackNs = new Gcp.GkeBackup.RestorePlan(\"rollback_ns\", new()\n {\n Name = \"rollback-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n SelectedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"storage.k8s.io\",\n ResourceKind = \"StorageClass\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tSelectedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"storage.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"StorageClass\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackNs = new RestorePlan(\"rollbackNs\", RestorePlanArgs.builder()\n .name(\"rollback-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .selectedGroupKinds( \n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build(),\n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"storage.k8s.io\")\n .resourceKind(\"StorageClass\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackNs:\n type: gcp:gkebackup:RestorePlan\n name: rollback_ns\n properties:\n name: rollback-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n selectedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n - resourceGroup: storage.k8s.io\n resourceKind: StorageClass\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Protected Application\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-app-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-app\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackApp = new gcp.gkebackup.RestorePlan(\"rollback_app\", {\n name: \"rollback-app-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedApplications: {\n namespacedNames: [{\n name: \"my-app\",\n namespace: \"my-ns\",\n }],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-app-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-app\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_app = gcp.gkebackup.RestorePlan(\"rollback_app\",\n name=\"rollback-app-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_applications=gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs(\n namespaced_names=[gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs(\n name=\"my-app\",\n namespace=\"my-ns\",\n )],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-app-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-app\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackApp = new Gcp.GkeBackup.RestorePlan(\"rollback_app\", new()\n {\n Name = \"rollback-app-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedApplications = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"my-app\",\n Namespace = \"my-ns\",\n },\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-app-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_app\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedApplications: \u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"my-app\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"my-ns\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedApplicationsArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-app-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-app\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackApp = new RestorePlan(\"rollbackApp\", RestorePlanArgs.builder()\n .name(\"rollback-app-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedApplications(RestorePlanRestoreConfigSelectedApplicationsArgs.builder()\n .namespacedNames(RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"my-app\")\n .namespace(\"my-ns\")\n .build())\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-app-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-app\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackApp:\n type: gcp:gkebackup:RestorePlan\n name: rollback_app\n properties:\n name: rollback-app-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedApplications:\n namespacedNames:\n - name: my-app\n namespace: my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan All Cluster Resources\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"all-groupkinds-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"all-groupkinds\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allClusterResources = new gcp.gkebackup.RestorePlan(\"all_cluster_resources\", {\n name: \"all-groupkinds-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n noNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"all-groupkinds-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"all-groupkinds\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_cluster_resources = gcp.gkebackup.RestorePlan(\"all_cluster_resources\",\n name=\"all-groupkinds-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n no_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"all-groupkinds-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"all-groupkinds\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allClusterResources = new Gcp.GkeBackup.RestorePlan(\"all_cluster_resources\", new()\n {\n Name = \"all-groupkinds-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n NoNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_cluster_resources\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tNoNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"all-groupkinds-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"all-groupkinds\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allClusterResources = new RestorePlan(\"allClusterResources\", RestorePlanArgs.builder()\n .name(\"all-groupkinds-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .noNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: all-groupkinds-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: all-groupkinds\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allClusterResources:\n type: gcp:gkebackup:RestorePlan\n name: all_cluster_resources\n properties:\n name: all-groupkinds-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n noNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rename Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rename-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rename-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst renameNs = new gcp.gkebackup.RestorePlan(\"rename_ns\", {\n name: \"rename-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"ns1\"],\n },\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n transformationRules: [\n {\n description: \"rename namespace from ns1 to ns2\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Namespace\",\n }],\n jsonPath: \".metadata[?(@.name == 'ns1')]\",\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/name\",\n value: \"ns2\",\n }],\n },\n {\n description: \"move all resources from ns1 to ns2\",\n resourceFilter: {\n namespaces: [\"ns1\"],\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/namespace\",\n value: \"ns2\",\n }],\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rename-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rename-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrename_ns = gcp.gkebackup.RestorePlan(\"rename_ns\",\n name=\"rename-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"ns1\"],\n ),\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n transformation_rules=[\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"rename namespace from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Namespace\",\n )],\n json_path=\".metadata[?(@.name == 'ns1')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/name\",\n value=\"ns2\",\n )],\n ),\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"move all resources from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n namespaces=[\"ns1\"],\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/namespace\",\n value=\"ns2\",\n )],\n ),\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rename-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rename-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var renameNs = new Gcp.GkeBackup.RestorePlan(\"rename_ns\", new()\n {\n Name = \"rename-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"rename namespace from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Namespace\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'ns1')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/name\",\n Value = \"ns2\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"move all resources from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/namespace\",\n Value = \"ns2\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rename-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rename_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"rename namespace from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Namespace\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'ns1')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/name\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"move all resources from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/namespace\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rename-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rename-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var renameNs = new RestorePlan(\"renameNs\", RestorePlanArgs.builder()\n .name(\"rename-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .transformationRules( \n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"rename namespace from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Namespace\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'ns1')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/name\")\n .value(\"ns2\")\n .build())\n .build(),\n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"move all resources from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/namespace\")\n .value(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rename-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rename-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n renameNs:\n type: gcp:gkebackup:RestorePlan\n name: rename_ns\n properties:\n name: rename-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - ns1\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n transformationRules:\n - description: rename namespace from ns1 to ns2\n resourceFilter:\n groupKinds:\n - resourceKind: Namespace\n jsonPath: .metadata[?(@.name == 'ns1')]\n fieldActions:\n - op: REPLACE\n path: /metadata/name\n value: ns2\n - description: move all resources from ns1 to ns2\n resourceFilter:\n namespaces:\n - ns1\n fieldActions:\n - op: REPLACE\n path: /metadata/namespace\n value: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Second Transformation\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"transform-rule-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"transform-rule\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst transformRule = new gcp.gkebackup.RestorePlan(\"transform_rule\", {\n name: \"transform-rule-rp\",\n description: \"copy nginx env variables\",\n labels: {\n app: \"nginx\",\n },\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n excludedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n excludedGroupKinds: [{\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n }],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n transformationRules: [{\n description: \"Copy environment variables from the nginx container to the install init container.\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Pod\",\n resourceGroup: \"\",\n }],\n jsonPath: \".metadata[?(@.name == 'nginx')]\",\n },\n fieldActions: [{\n op: \"COPY\",\n path: \"/spec/initContainers/0/env\",\n fromPath: \"/spec/containers/0/env\",\n }],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"transform-rule-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"transform-rule\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\ntransform_rule = gcp.gkebackup.RestorePlan(\"transform_rule\",\n name=\"transform-rule-rp\",\n description=\"copy nginx env variables\",\n labels={\n \"app\": \"nginx\",\n },\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n excluded_namespaces=gcp.gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n excluded_group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n )],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n transformation_rules=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"Copy environment variables from the nginx container to the install init container.\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Pod\",\n resource_group=\"\",\n )],\n json_path=\".metadata[?(@.name == 'nginx')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"COPY\",\n path=\"/spec/initContainers/0/env\",\n from_path=\"/spec/containers/0/env\",\n )],\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"transform-rule-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"transform-rule\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var transformRule = new Gcp.GkeBackup.RestorePlan(\"transform_rule\", new()\n {\n Name = \"transform-rule-rp\",\n Description = \"copy nginx env variables\",\n Labels = \n {\n { \"app\", \"nginx\" },\n },\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n ExcludedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigExcludedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n ExcludedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"Copy environment variables from the nginx container to the install init container.\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Pod\",\n ResourceGroup = \"\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'nginx')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"COPY\",\n Path = \"/spec/initContainers/0/env\",\n FromPath = \"/spec/containers/0/env\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"transform-rule-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"transform_rule\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule-rp\"),\n\t\t\tDescription: pulumi.String(\"copy nginx env variables\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"app\": pulumi.String(\"nginx\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tExcludedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tExcludedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"Copy environment variables from the nginx container to the install init container.\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Pod\"),\n\t\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'nginx')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/spec/initContainers/0/env\"),\n\t\t\t\t\t\t\t\tFromPath: pulumi.String(\"/spec/containers/0/env\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigExcludedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"transform-rule-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"transform-rule\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var transformRule = new RestorePlan(\"transformRule\", RestorePlanArgs.builder()\n .name(\"transform-rule-rp\")\n .description(\"copy nginx env variables\")\n .labels(Map.of(\"app\", \"nginx\"))\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .excludedNamespaces(RestorePlanRestoreConfigExcludedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .excludedGroupKinds(RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .transformationRules(RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"Copy environment variables from the nginx container to the install init container.\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Pod\")\n .resourceGroup(\"\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'nginx')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"COPY\")\n .path(\"/spec/initContainers/0/env\")\n .fromPath(\"/spec/containers/0/env\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: transform-rule-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: transform-rule\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n transformRule:\n type: gcp:gkebackup:RestorePlan\n name: transform_rule\n properties:\n name: transform-rule-rp\n description: copy nginx env variables\n labels:\n app: nginx\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n excludedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n excludedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n transformationRules:\n - description: Copy environment variables from the nginx container to the install init container.\n resourceFilter:\n groupKinds:\n - resourceKind: Pod\n resourceGroup:\n jsonPath: .metadata[?(@.name == 'nginx')]\n fieldActions:\n - op: COPY\n path: /spec/initContainers/0/env\n fromPath: /spec/containers/0/env\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Gitops Mode\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"gitops-mode-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"gitops-mode\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst gitopsMode = new gcp.gkebackup.RestorePlan(\"gitops_mode\", {\n name: \"gitops-mode\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"MERGE_SKIP_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"gitops-mode-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"gitops-mode\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\ngitops_mode = gcp.gkebackup.RestorePlan(\"gitops_mode\",\n name=\"gitops-mode\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"MERGE_SKIP_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"gitops-mode-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"gitops-mode\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var gitopsMode = new Gcp.GkeBackup.RestorePlan(\"gitops_mode\", new()\n {\n Name = \"gitops-mode\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"MERGE_SKIP_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"gitops-mode-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"gitops-mode\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"gitops_mode\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"gitops-mode\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"MERGE_SKIP_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"gitops-mode-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"gitops-mode\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var gitopsMode = new RestorePlan(\"gitopsMode\", RestorePlanArgs.builder()\n .name(\"gitops-mode\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"MERGE_SKIP_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: gitops-mode-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: gitops-mode\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n gitopsMode:\n type: gcp:gkebackup:RestorePlan\n name: gitops_mode\n properties:\n name: gitops-mode\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: MERGE_SKIP_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Restore Order\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-order-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-order\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst restoreOrder = new gcp.gkebackup.RestorePlan(\"restore_order\", {\n name: \"restore-order\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n restoreOrder: {\n groupKindDependencies: [\n {\n satisfying: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindA\",\n },\n requiring: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindB\",\n },\n },\n {\n satisfying: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindB\",\n },\n requiring: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindC\",\n },\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-order-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-order\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrestore_order = gcp.gkebackup.RestorePlan(\"restore_order\",\n name=\"restore-order\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n restore_order=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderArgs(\n group_kind_dependencies=[\n gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs(\n satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindA\",\n ),\n requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindB\",\n ),\n ),\n gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs(\n satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindB\",\n ),\n requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindC\",\n ),\n ),\n ],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-order-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-order\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var restoreOrder = new Gcp.GkeBackup.RestorePlan(\"restore_order\", new()\n {\n Name = \"restore-order\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n RestoreOrder = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderArgs\n {\n GroupKindDependencies = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs\n {\n Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindA\",\n },\n Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindB\",\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs\n {\n Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindB\",\n },\n Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindC\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-order-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-order\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"restore_order\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-order\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tRestoreOrder: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderArgs{\n\t\t\t\t\tGroupKindDependencies: gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{\n\t\t\t\t\t\t\tSatisfying: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindA\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequiring: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindB\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{\n\t\t\t\t\t\t\tSatisfying: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindB\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequiring: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindC\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-order-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-order\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var restoreOrder = new RestorePlan(\"restoreOrder\", RestorePlanArgs.builder()\n .name(\"restore-order\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .restoreOrder(RestorePlanRestoreConfigRestoreOrderArgs.builder()\n .groupKindDependencies( \n RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()\n .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindA\")\n .build())\n .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindB\")\n .build())\n .build(),\n RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()\n .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindB\")\n .build())\n .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindC\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-order-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-order\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n restoreOrder:\n type: gcp:gkebackup:RestorePlan\n name: restore_order\n properties:\n name: restore-order\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n restoreOrder:\n groupKindDependencies:\n - satisfying:\n resourceGroup: stable.example.com\n resourceKind: kindA\n requiring:\n resourceGroup: stable.example.com\n resourceKind: kindB\n - satisfying:\n resourceGroup: stable.example.com\n resourceKind: kindB\n requiring:\n resourceGroup: stable.example.com\n resourceKind: kindC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Volume Res\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"volume-res-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"volume-res\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst volumeRes = new gcp.gkebackup.RestorePlan(\"volume_res\", {\n name: \"volume-res\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"NO_VOLUME_DATA_RESTORATION\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n volumeDataRestorePolicyBindings: [{\n policy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n volumeType: \"GCE_PERSISTENT_DISK\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"volume-res-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"volume-res\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nvolume_res = gcp.gkebackup.RestorePlan(\"volume_res\",\n name=\"volume-res\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"NO_VOLUME_DATA_RESTORATION\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n volume_data_restore_policy_bindings=[gcp.gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs(\n policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n volume_type=\"GCE_PERSISTENT_DISK\",\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"volume-res-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"volume-res\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var volumeRes = new Gcp.GkeBackup.RestorePlan(\"volume_res\", new()\n {\n Name = \"volume-res\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"NO_VOLUME_DATA_RESTORATION\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n VolumeDataRestorePolicyBindings = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs\n {\n Policy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n VolumeType = \"GCE_PERSISTENT_DISK\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"volume-res-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"volume-res\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"volume_res\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"volume-res\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"NO_VOLUME_DATA_RESTORATION\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tVolumeDataRestorePolicyBindings: gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs{\n\t\t\t\t\t\tPolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\t\t\tVolumeType: pulumi.String(\"GCE_PERSISTENT_DISK\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"volume-res-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"volume-res\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var volumeRes = new RestorePlan(\"volumeRes\", RestorePlanArgs.builder()\n .name(\"volume-res\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"NO_VOLUME_DATA_RESTORATION\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .volumeDataRestorePolicyBindings(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.builder()\n .policy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .volumeType(\"GCE_PERSISTENT_DISK\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: volume-res-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: volume-res\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n volumeRes:\n type: gcp:gkebackup:RestorePlan\n name: volume_res\n properties:\n name: volume-res\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: NO_VOLUME_DATA_RESTORATION\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n volumeDataRestorePolicyBindings:\n - policy: RESTORE_VOLUME_DATA_FROM_BACKUP\n volumeType: GCE_PERSISTENT_DISK\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRestorePlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/restorePlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, RestorePlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlan:RestorePlan default projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlan:RestorePlan default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlan:RestorePlan default {{location}}/{{name}}\n```\n\n", "properties": { "backupPlan": { "type": "string", @@ -191544,7 +192903,7 @@ } }, "gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding": { - "description": "Represents a Restore Plan instance.\n\n\nTo get more information about RestorePlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.restorePlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Restoreplan All Namespaces\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-all-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-all-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allNs = new gcp.gkebackup.RestorePlan(\"all_ns\", {\n name: \"restore-all-ns\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-all-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-all-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_ns = gcp.gkebackup.RestorePlan(\"all_ns\",\n name=\"restore-all-ns\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-all-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-all-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allNs = new Gcp.GkeBackup.RestorePlan(\"all_ns\", new()\n {\n Name = \"restore-all-ns\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-all-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-all-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allNs = new RestorePlan(\"allNs\", RestorePlanArgs.builder()\n .name(\"restore-all-ns\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-all-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-all-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allNs:\n type: gcp:gkebackup:RestorePlan\n name: all_ns\n properties:\n name: restore-all-ns\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rollback Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackNs = new gcp.gkebackup.RestorePlan(\"rollback_ns\", {\n name: \"rollback-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n selectedGroupKinds: [\n {\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n },\n {\n resourceGroup: \"storage.k8s.io\",\n resourceKind: \"StorageClass\",\n },\n ],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_ns = gcp.gkebackup.RestorePlan(\"rollback_ns\",\n name=\"rollback-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n selected_group_kinds=[\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n ),\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"storage.k8s.io\",\n resource_kind=\"StorageClass\",\n ),\n ],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackNs = new Gcp.GkeBackup.RestorePlan(\"rollback_ns\", new()\n {\n Name = \"rollback-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n SelectedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"storage.k8s.io\",\n ResourceKind = \"StorageClass\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tSelectedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"storage.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"StorageClass\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackNs = new RestorePlan(\"rollbackNs\", RestorePlanArgs.builder()\n .name(\"rollback-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .selectedGroupKinds( \n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build(),\n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"storage.k8s.io\")\n .resourceKind(\"StorageClass\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackNs:\n type: gcp:gkebackup:RestorePlan\n name: rollback_ns\n properties:\n name: rollback-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n selectedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n - resourceGroup: storage.k8s.io\n resourceKind: StorageClass\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Protected Application\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-app-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-app\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackApp = new gcp.gkebackup.RestorePlan(\"rollback_app\", {\n name: \"rollback-app-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedApplications: {\n namespacedNames: [{\n name: \"my-app\",\n namespace: \"my-ns\",\n }],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-app-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-app\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_app = gcp.gkebackup.RestorePlan(\"rollback_app\",\n name=\"rollback-app-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_applications=gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs(\n namespaced_names=[gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs(\n name=\"my-app\",\n namespace=\"my-ns\",\n )],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-app-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-app\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackApp = new Gcp.GkeBackup.RestorePlan(\"rollback_app\", new()\n {\n Name = \"rollback-app-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedApplications = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"my-app\",\n Namespace = \"my-ns\",\n },\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-app-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_app\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedApplications: \u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"my-app\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"my-ns\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedApplicationsArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-app-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-app\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackApp = new RestorePlan(\"rollbackApp\", RestorePlanArgs.builder()\n .name(\"rollback-app-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedApplications(RestorePlanRestoreConfigSelectedApplicationsArgs.builder()\n .namespacedNames(RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"my-app\")\n .namespace(\"my-ns\")\n .build())\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-app-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-app\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackApp:\n type: gcp:gkebackup:RestorePlan\n name: rollback_app\n properties:\n name: rollback-app-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedApplications:\n namespacedNames:\n - name: my-app\n namespace: my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan All Cluster Resources\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"all-groupkinds-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"all-groupkinds\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allClusterResources = new gcp.gkebackup.RestorePlan(\"all_cluster_resources\", {\n name: \"all-groupkinds-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n noNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"all-groupkinds-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"all-groupkinds\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_cluster_resources = gcp.gkebackup.RestorePlan(\"all_cluster_resources\",\n name=\"all-groupkinds-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n no_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"all-groupkinds-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"all-groupkinds\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allClusterResources = new Gcp.GkeBackup.RestorePlan(\"all_cluster_resources\", new()\n {\n Name = \"all-groupkinds-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n NoNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_cluster_resources\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tNoNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"all-groupkinds-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"all-groupkinds\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allClusterResources = new RestorePlan(\"allClusterResources\", RestorePlanArgs.builder()\n .name(\"all-groupkinds-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .noNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: all-groupkinds-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: all-groupkinds\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allClusterResources:\n type: gcp:gkebackup:RestorePlan\n name: all_cluster_resources\n properties:\n name: all-groupkinds-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n noNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rename Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rename-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rename-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst renameNs = new gcp.gkebackup.RestorePlan(\"rename_ns\", {\n name: \"rename-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"ns1\"],\n },\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n transformationRules: [\n {\n description: \"rename namespace from ns1 to ns2\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Namespace\",\n }],\n jsonPath: \".metadata[?(@.name == 'ns1')]\",\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/name\",\n value: \"ns2\",\n }],\n },\n {\n description: \"move all resources from ns1 to ns2\",\n resourceFilter: {\n namespaces: [\"ns1\"],\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/namespace\",\n value: \"ns2\",\n }],\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rename-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rename-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrename_ns = gcp.gkebackup.RestorePlan(\"rename_ns\",\n name=\"rename-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"ns1\"],\n ),\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n transformation_rules=[\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"rename namespace from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Namespace\",\n )],\n json_path=\".metadata[?(@.name == 'ns1')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/name\",\n value=\"ns2\",\n )],\n ),\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"move all resources from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n namespaces=[\"ns1\"],\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/namespace\",\n value=\"ns2\",\n )],\n ),\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rename-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rename-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var renameNs = new Gcp.GkeBackup.RestorePlan(\"rename_ns\", new()\n {\n Name = \"rename-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"rename namespace from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Namespace\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'ns1')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/name\",\n Value = \"ns2\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"move all resources from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/namespace\",\n Value = \"ns2\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rename-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rename_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"rename namespace from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Namespace\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'ns1')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/name\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"move all resources from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/namespace\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rename-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rename-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var renameNs = new RestorePlan(\"renameNs\", RestorePlanArgs.builder()\n .name(\"rename-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .transformationRules( \n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"rename namespace from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Namespace\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'ns1')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/name\")\n .value(\"ns2\")\n .build())\n .build(),\n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"move all resources from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/namespace\")\n .value(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rename-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rename-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n renameNs:\n type: gcp:gkebackup:RestorePlan\n name: rename_ns\n properties:\n name: rename-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - ns1\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n transformationRules:\n - description: rename namespace from ns1 to ns2\n resourceFilter:\n groupKinds:\n - resourceKind: Namespace\n jsonPath: .metadata[?(@.name == 'ns1')]\n fieldActions:\n - op: REPLACE\n path: /metadata/name\n value: ns2\n - description: move all resources from ns1 to ns2\n resourceFilter:\n namespaces:\n - ns1\n fieldActions:\n - op: REPLACE\n path: /metadata/namespace\n value: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Second Transformation\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"transform-rule-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"transform-rule\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst transformRule = new gcp.gkebackup.RestorePlan(\"transform_rule\", {\n name: \"transform-rule-rp\",\n description: \"copy nginx env variables\",\n labels: {\n app: \"nginx\",\n },\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n excludedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n excludedGroupKinds: [{\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n }],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n transformationRules: [{\n description: \"Copy environment variables from the nginx container to the install init container.\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Pod\",\n resourceGroup: \"\",\n }],\n jsonPath: \".metadata[?(@.name == 'nginx')]\",\n },\n fieldActions: [{\n op: \"COPY\",\n path: \"/spec/initContainers/0/env\",\n fromPath: \"/spec/containers/0/env\",\n }],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"transform-rule-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"transform-rule\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\ntransform_rule = gcp.gkebackup.RestorePlan(\"transform_rule\",\n name=\"transform-rule-rp\",\n description=\"copy nginx env variables\",\n labels={\n \"app\": \"nginx\",\n },\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n excluded_namespaces=gcp.gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n excluded_group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n )],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n transformation_rules=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"Copy environment variables from the nginx container to the install init container.\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Pod\",\n resource_group=\"\",\n )],\n json_path=\".metadata[?(@.name == 'nginx')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"COPY\",\n path=\"/spec/initContainers/0/env\",\n from_path=\"/spec/containers/0/env\",\n )],\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"transform-rule-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"transform-rule\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var transformRule = new Gcp.GkeBackup.RestorePlan(\"transform_rule\", new()\n {\n Name = \"transform-rule-rp\",\n Description = \"copy nginx env variables\",\n Labels = \n {\n { \"app\", \"nginx\" },\n },\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n ExcludedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigExcludedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n ExcludedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"Copy environment variables from the nginx container to the install init container.\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Pod\",\n ResourceGroup = \"\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'nginx')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"COPY\",\n Path = \"/spec/initContainers/0/env\",\n FromPath = \"/spec/containers/0/env\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"transform-rule-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"transform_rule\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule-rp\"),\n\t\t\tDescription: pulumi.String(\"copy nginx env variables\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"app\": pulumi.String(\"nginx\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tExcludedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tExcludedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"Copy environment variables from the nginx container to the install init container.\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Pod\"),\n\t\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'nginx')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/spec/initContainers/0/env\"),\n\t\t\t\t\t\t\t\tFromPath: pulumi.String(\"/spec/containers/0/env\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigExcludedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"transform-rule-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"transform-rule\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var transformRule = new RestorePlan(\"transformRule\", RestorePlanArgs.builder()\n .name(\"transform-rule-rp\")\n .description(\"copy nginx env variables\")\n .labels(Map.of(\"app\", \"nginx\"))\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .excludedNamespaces(RestorePlanRestoreConfigExcludedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .excludedGroupKinds(RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .transformationRules(RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"Copy environment variables from the nginx container to the install init container.\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Pod\")\n .resourceGroup(\"\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'nginx')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"COPY\")\n .path(\"/spec/initContainers/0/env\")\n .fromPath(\"/spec/containers/0/env\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: transform-rule-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: transform-rule\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n transformRule:\n type: gcp:gkebackup:RestorePlan\n name: transform_rule\n properties:\n name: transform-rule-rp\n description: copy nginx env variables\n labels:\n app: nginx\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n excludedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n excludedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n transformationRules:\n - description: Copy environment variables from the nginx container to the install init container.\n resourceFilter:\n groupKinds:\n - resourceKind: Pod\n resourceGroup:\n jsonPath: .metadata[?(@.name == 'nginx')]\n fieldActions:\n - op: COPY\n path: /spec/initContainers/0/env\n fromPath: /spec/containers/0/env\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRestorePlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/restorePlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, RestorePlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding default projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding default {{location}}/{{name}}\n```\n\n", + "description": "Represents a Restore Plan instance.\n\n\nTo get more information about RestorePlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.restorePlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Restoreplan All Namespaces\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-all-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-all-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allNs = new gcp.gkebackup.RestorePlan(\"all_ns\", {\n name: \"restore-all-ns\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-all-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-all-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_ns = gcp.gkebackup.RestorePlan(\"all_ns\",\n name=\"restore-all-ns\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-all-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-all-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allNs = new Gcp.GkeBackup.RestorePlan(\"all_ns\", new()\n {\n Name = \"restore-all-ns\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-all-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-all-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allNs = new RestorePlan(\"allNs\", RestorePlanArgs.builder()\n .name(\"restore-all-ns\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-all-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-all-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allNs:\n type: gcp:gkebackup:RestorePlan\n name: all_ns\n properties:\n name: restore-all-ns\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rollback Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackNs = new gcp.gkebackup.RestorePlan(\"rollback_ns\", {\n name: \"rollback-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n selectedGroupKinds: [\n {\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n },\n {\n resourceGroup: \"storage.k8s.io\",\n resourceKind: \"StorageClass\",\n },\n ],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_ns = gcp.gkebackup.RestorePlan(\"rollback_ns\",\n name=\"rollback-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n selected_group_kinds=[\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n ),\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"storage.k8s.io\",\n resource_kind=\"StorageClass\",\n ),\n ],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackNs = new Gcp.GkeBackup.RestorePlan(\"rollback_ns\", new()\n {\n Name = \"rollback-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n SelectedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"storage.k8s.io\",\n ResourceKind = \"StorageClass\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tSelectedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"storage.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"StorageClass\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackNs = new RestorePlan(\"rollbackNs\", RestorePlanArgs.builder()\n .name(\"rollback-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .selectedGroupKinds( \n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build(),\n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"storage.k8s.io\")\n .resourceKind(\"StorageClass\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackNs:\n type: gcp:gkebackup:RestorePlan\n name: rollback_ns\n properties:\n name: rollback-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n selectedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n - resourceGroup: storage.k8s.io\n resourceKind: StorageClass\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Protected Application\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-app-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-app\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackApp = new gcp.gkebackup.RestorePlan(\"rollback_app\", {\n name: \"rollback-app-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedApplications: {\n namespacedNames: [{\n name: \"my-app\",\n namespace: \"my-ns\",\n }],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-app-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-app\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_app = gcp.gkebackup.RestorePlan(\"rollback_app\",\n name=\"rollback-app-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_applications=gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs(\n namespaced_names=[gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs(\n name=\"my-app\",\n namespace=\"my-ns\",\n )],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-app-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-app\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackApp = new Gcp.GkeBackup.RestorePlan(\"rollback_app\", new()\n {\n Name = \"rollback-app-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedApplications = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"my-app\",\n Namespace = \"my-ns\",\n },\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-app-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_app\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedApplications: \u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"my-app\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"my-ns\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedApplicationsArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-app-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-app\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackApp = new RestorePlan(\"rollbackApp\", RestorePlanArgs.builder()\n .name(\"rollback-app-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedApplications(RestorePlanRestoreConfigSelectedApplicationsArgs.builder()\n .namespacedNames(RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"my-app\")\n .namespace(\"my-ns\")\n .build())\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-app-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-app\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackApp:\n type: gcp:gkebackup:RestorePlan\n name: rollback_app\n properties:\n name: rollback-app-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedApplications:\n namespacedNames:\n - name: my-app\n namespace: my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan All Cluster Resources\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"all-groupkinds-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"all-groupkinds\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allClusterResources = new gcp.gkebackup.RestorePlan(\"all_cluster_resources\", {\n name: \"all-groupkinds-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n noNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"all-groupkinds-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"all-groupkinds\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_cluster_resources = gcp.gkebackup.RestorePlan(\"all_cluster_resources\",\n name=\"all-groupkinds-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n no_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"all-groupkinds-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"all-groupkinds\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allClusterResources = new Gcp.GkeBackup.RestorePlan(\"all_cluster_resources\", new()\n {\n Name = \"all-groupkinds-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n NoNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_cluster_resources\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tNoNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"all-groupkinds-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"all-groupkinds\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allClusterResources = new RestorePlan(\"allClusterResources\", RestorePlanArgs.builder()\n .name(\"all-groupkinds-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .noNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: all-groupkinds-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: all-groupkinds\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allClusterResources:\n type: gcp:gkebackup:RestorePlan\n name: all_cluster_resources\n properties:\n name: all-groupkinds-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n noNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rename Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rename-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rename-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst renameNs = new gcp.gkebackup.RestorePlan(\"rename_ns\", {\n name: \"rename-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"ns1\"],\n },\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n transformationRules: [\n {\n description: \"rename namespace from ns1 to ns2\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Namespace\",\n }],\n jsonPath: \".metadata[?(@.name == 'ns1')]\",\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/name\",\n value: \"ns2\",\n }],\n },\n {\n description: \"move all resources from ns1 to ns2\",\n resourceFilter: {\n namespaces: [\"ns1\"],\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/namespace\",\n value: \"ns2\",\n }],\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rename-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rename-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrename_ns = gcp.gkebackup.RestorePlan(\"rename_ns\",\n name=\"rename-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"ns1\"],\n ),\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n transformation_rules=[\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"rename namespace from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Namespace\",\n )],\n json_path=\".metadata[?(@.name == 'ns1')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/name\",\n value=\"ns2\",\n )],\n ),\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"move all resources from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n namespaces=[\"ns1\"],\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/namespace\",\n value=\"ns2\",\n )],\n ),\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rename-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rename-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var renameNs = new Gcp.GkeBackup.RestorePlan(\"rename_ns\", new()\n {\n Name = \"rename-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"rename namespace from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Namespace\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'ns1')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/name\",\n Value = \"ns2\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"move all resources from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/namespace\",\n Value = \"ns2\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rename-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rename_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"rename namespace from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Namespace\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'ns1')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/name\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"move all resources from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/namespace\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rename-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rename-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var renameNs = new RestorePlan(\"renameNs\", RestorePlanArgs.builder()\n .name(\"rename-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .transformationRules( \n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"rename namespace from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Namespace\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'ns1')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/name\")\n .value(\"ns2\")\n .build())\n .build(),\n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"move all resources from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/namespace\")\n .value(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rename-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rename-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n renameNs:\n type: gcp:gkebackup:RestorePlan\n name: rename_ns\n properties:\n name: rename-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - ns1\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n transformationRules:\n - description: rename namespace from ns1 to ns2\n resourceFilter:\n groupKinds:\n - resourceKind: Namespace\n jsonPath: .metadata[?(@.name == 'ns1')]\n fieldActions:\n - op: REPLACE\n path: /metadata/name\n value: ns2\n - description: move all resources from ns1 to ns2\n resourceFilter:\n namespaces:\n - ns1\n fieldActions:\n - op: REPLACE\n path: /metadata/namespace\n value: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Second Transformation\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"transform-rule-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"transform-rule\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst transformRule = new gcp.gkebackup.RestorePlan(\"transform_rule\", {\n name: \"transform-rule-rp\",\n description: \"copy nginx env variables\",\n labels: {\n app: \"nginx\",\n },\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n excludedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n excludedGroupKinds: [{\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n }],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n transformationRules: [{\n description: \"Copy environment variables from the nginx container to the install init container.\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Pod\",\n resourceGroup: \"\",\n }],\n jsonPath: \".metadata[?(@.name == 'nginx')]\",\n },\n fieldActions: [{\n op: \"COPY\",\n path: \"/spec/initContainers/0/env\",\n fromPath: \"/spec/containers/0/env\",\n }],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"transform-rule-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"transform-rule\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\ntransform_rule = gcp.gkebackup.RestorePlan(\"transform_rule\",\n name=\"transform-rule-rp\",\n description=\"copy nginx env variables\",\n labels={\n \"app\": \"nginx\",\n },\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n excluded_namespaces=gcp.gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n excluded_group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n )],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n transformation_rules=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"Copy environment variables from the nginx container to the install init container.\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Pod\",\n resource_group=\"\",\n )],\n json_path=\".metadata[?(@.name == 'nginx')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"COPY\",\n path=\"/spec/initContainers/0/env\",\n from_path=\"/spec/containers/0/env\",\n )],\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"transform-rule-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"transform-rule\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var transformRule = new Gcp.GkeBackup.RestorePlan(\"transform_rule\", new()\n {\n Name = \"transform-rule-rp\",\n Description = \"copy nginx env variables\",\n Labels = \n {\n { \"app\", \"nginx\" },\n },\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n ExcludedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigExcludedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n ExcludedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"Copy environment variables from the nginx container to the install init container.\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Pod\",\n ResourceGroup = \"\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'nginx')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"COPY\",\n Path = \"/spec/initContainers/0/env\",\n FromPath = \"/spec/containers/0/env\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"transform-rule-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"transform_rule\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule-rp\"),\n\t\t\tDescription: pulumi.String(\"copy nginx env variables\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"app\": pulumi.String(\"nginx\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tExcludedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tExcludedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"Copy environment variables from the nginx container to the install init container.\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Pod\"),\n\t\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'nginx')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/spec/initContainers/0/env\"),\n\t\t\t\t\t\t\t\tFromPath: pulumi.String(\"/spec/containers/0/env\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigExcludedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"transform-rule-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"transform-rule\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var transformRule = new RestorePlan(\"transformRule\", RestorePlanArgs.builder()\n .name(\"transform-rule-rp\")\n .description(\"copy nginx env variables\")\n .labels(Map.of(\"app\", \"nginx\"))\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .excludedNamespaces(RestorePlanRestoreConfigExcludedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .excludedGroupKinds(RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .transformationRules(RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"Copy environment variables from the nginx container to the install init container.\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Pod\")\n .resourceGroup(\"\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'nginx')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"COPY\")\n .path(\"/spec/initContainers/0/env\")\n .fromPath(\"/spec/containers/0/env\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: transform-rule-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: transform-rule\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n transformRule:\n type: gcp:gkebackup:RestorePlan\n name: transform_rule\n properties:\n name: transform-rule-rp\n description: copy nginx env variables\n labels:\n app: nginx\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n excludedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n excludedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n transformationRules:\n - description: Copy environment variables from the nginx container to the install init container.\n resourceFilter:\n groupKinds:\n - resourceKind: Pod\n resourceGroup:\n jsonPath: .metadata[?(@.name == 'nginx')]\n fieldActions:\n - op: COPY\n path: /spec/initContainers/0/env\n fromPath: /spec/containers/0/env\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Gitops Mode\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"gitops-mode-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"gitops-mode\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst gitopsMode = new gcp.gkebackup.RestorePlan(\"gitops_mode\", {\n name: \"gitops-mode\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"MERGE_SKIP_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"gitops-mode-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"gitops-mode\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\ngitops_mode = gcp.gkebackup.RestorePlan(\"gitops_mode\",\n name=\"gitops-mode\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"MERGE_SKIP_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"gitops-mode-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"gitops-mode\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var gitopsMode = new Gcp.GkeBackup.RestorePlan(\"gitops_mode\", new()\n {\n Name = \"gitops-mode\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"MERGE_SKIP_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"gitops-mode-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"gitops-mode\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"gitops_mode\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"gitops-mode\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"MERGE_SKIP_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"gitops-mode-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"gitops-mode\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var gitopsMode = new RestorePlan(\"gitopsMode\", RestorePlanArgs.builder()\n .name(\"gitops-mode\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"MERGE_SKIP_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: gitops-mode-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: gitops-mode\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n gitopsMode:\n type: gcp:gkebackup:RestorePlan\n name: gitops_mode\n properties:\n name: gitops-mode\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: MERGE_SKIP_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Restore Order\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-order-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-order\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst restoreOrder = new gcp.gkebackup.RestorePlan(\"restore_order\", {\n name: \"restore-order\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n restoreOrder: {\n groupKindDependencies: [\n {\n satisfying: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindA\",\n },\n requiring: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindB\",\n },\n },\n {\n satisfying: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindB\",\n },\n requiring: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindC\",\n },\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-order-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-order\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrestore_order = gcp.gkebackup.RestorePlan(\"restore_order\",\n name=\"restore-order\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n restore_order=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderArgs(\n group_kind_dependencies=[\n gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs(\n satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindA\",\n ),\n requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindB\",\n ),\n ),\n gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs(\n satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindB\",\n ),\n requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindC\",\n ),\n ),\n ],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-order-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-order\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var restoreOrder = new Gcp.GkeBackup.RestorePlan(\"restore_order\", new()\n {\n Name = \"restore-order\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n RestoreOrder = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderArgs\n {\n GroupKindDependencies = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs\n {\n Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindA\",\n },\n Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindB\",\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs\n {\n Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindB\",\n },\n Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindC\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-order-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-order\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"restore_order\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-order\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tRestoreOrder: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderArgs{\n\t\t\t\t\tGroupKindDependencies: gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{\n\t\t\t\t\t\t\tSatisfying: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindA\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequiring: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindB\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{\n\t\t\t\t\t\t\tSatisfying: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindB\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequiring: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindC\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-order-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-order\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var restoreOrder = new RestorePlan(\"restoreOrder\", RestorePlanArgs.builder()\n .name(\"restore-order\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .restoreOrder(RestorePlanRestoreConfigRestoreOrderArgs.builder()\n .groupKindDependencies( \n RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()\n .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindA\")\n .build())\n .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindB\")\n .build())\n .build(),\n RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()\n .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindB\")\n .build())\n .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindC\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-order-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-order\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n restoreOrder:\n type: gcp:gkebackup:RestorePlan\n name: restore_order\n properties:\n name: restore-order\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n restoreOrder:\n groupKindDependencies:\n - satisfying:\n resourceGroup: stable.example.com\n resourceKind: kindA\n requiring:\n resourceGroup: stable.example.com\n resourceKind: kindB\n - satisfying:\n resourceGroup: stable.example.com\n resourceKind: kindB\n requiring:\n resourceGroup: stable.example.com\n resourceKind: kindC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Volume Res\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"volume-res-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"volume-res\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst volumeRes = new gcp.gkebackup.RestorePlan(\"volume_res\", {\n name: \"volume-res\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"NO_VOLUME_DATA_RESTORATION\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n volumeDataRestorePolicyBindings: [{\n policy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n volumeType: \"GCE_PERSISTENT_DISK\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"volume-res-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"volume-res\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nvolume_res = gcp.gkebackup.RestorePlan(\"volume_res\",\n name=\"volume-res\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"NO_VOLUME_DATA_RESTORATION\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n volume_data_restore_policy_bindings=[gcp.gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs(\n policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n volume_type=\"GCE_PERSISTENT_DISK\",\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"volume-res-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"volume-res\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var volumeRes = new Gcp.GkeBackup.RestorePlan(\"volume_res\", new()\n {\n Name = \"volume-res\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"NO_VOLUME_DATA_RESTORATION\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n VolumeDataRestorePolicyBindings = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs\n {\n Policy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n VolumeType = \"GCE_PERSISTENT_DISK\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"volume-res-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"volume-res\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"volume_res\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"volume-res\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"NO_VOLUME_DATA_RESTORATION\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tVolumeDataRestorePolicyBindings: gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs{\n\t\t\t\t\t\tPolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\t\t\tVolumeType: pulumi.String(\"GCE_PERSISTENT_DISK\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"volume-res-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"volume-res\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var volumeRes = new RestorePlan(\"volumeRes\", RestorePlanArgs.builder()\n .name(\"volume-res\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"NO_VOLUME_DATA_RESTORATION\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .volumeDataRestorePolicyBindings(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.builder()\n .policy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .volumeType(\"GCE_PERSISTENT_DISK\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: volume-res-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: volume-res\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n volumeRes:\n type: gcp:gkebackup:RestorePlan\n name: volume_res\n properties:\n name: volume-res\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: NO_VOLUME_DATA_RESTORATION\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n volumeDataRestorePolicyBindings:\n - policy: RESTORE_VOLUME_DATA_FROM_BACKUP\n volumeType: GCE_PERSISTENT_DISK\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRestorePlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/restorePlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, RestorePlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding default projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding default {{location}}/{{name}}\n```\n\n", "properties": { "condition": { "$ref": "#/types/gcp:gkebackup/RestorePlanIamBindingCondition:RestorePlanIamBindingCondition" @@ -191654,7 +193013,7 @@ } }, "gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember": { - "description": "Represents a Restore Plan instance.\n\n\nTo get more information about RestorePlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.restorePlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Restoreplan All Namespaces\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-all-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-all-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allNs = new gcp.gkebackup.RestorePlan(\"all_ns\", {\n name: \"restore-all-ns\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-all-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-all-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_ns = gcp.gkebackup.RestorePlan(\"all_ns\",\n name=\"restore-all-ns\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-all-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-all-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allNs = new Gcp.GkeBackup.RestorePlan(\"all_ns\", new()\n {\n Name = \"restore-all-ns\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-all-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-all-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allNs = new RestorePlan(\"allNs\", RestorePlanArgs.builder()\n .name(\"restore-all-ns\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-all-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-all-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allNs:\n type: gcp:gkebackup:RestorePlan\n name: all_ns\n properties:\n name: restore-all-ns\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rollback Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackNs = new gcp.gkebackup.RestorePlan(\"rollback_ns\", {\n name: \"rollback-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n selectedGroupKinds: [\n {\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n },\n {\n resourceGroup: \"storage.k8s.io\",\n resourceKind: \"StorageClass\",\n },\n ],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_ns = gcp.gkebackup.RestorePlan(\"rollback_ns\",\n name=\"rollback-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n selected_group_kinds=[\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n ),\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"storage.k8s.io\",\n resource_kind=\"StorageClass\",\n ),\n ],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackNs = new Gcp.GkeBackup.RestorePlan(\"rollback_ns\", new()\n {\n Name = \"rollback-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n SelectedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"storage.k8s.io\",\n ResourceKind = \"StorageClass\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tSelectedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"storage.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"StorageClass\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackNs = new RestorePlan(\"rollbackNs\", RestorePlanArgs.builder()\n .name(\"rollback-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .selectedGroupKinds( \n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build(),\n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"storage.k8s.io\")\n .resourceKind(\"StorageClass\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackNs:\n type: gcp:gkebackup:RestorePlan\n name: rollback_ns\n properties:\n name: rollback-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n selectedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n - resourceGroup: storage.k8s.io\n resourceKind: StorageClass\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Protected Application\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-app-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-app\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackApp = new gcp.gkebackup.RestorePlan(\"rollback_app\", {\n name: \"rollback-app-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedApplications: {\n namespacedNames: [{\n name: \"my-app\",\n namespace: \"my-ns\",\n }],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-app-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-app\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_app = gcp.gkebackup.RestorePlan(\"rollback_app\",\n name=\"rollback-app-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_applications=gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs(\n namespaced_names=[gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs(\n name=\"my-app\",\n namespace=\"my-ns\",\n )],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-app-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-app\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackApp = new Gcp.GkeBackup.RestorePlan(\"rollback_app\", new()\n {\n Name = \"rollback-app-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedApplications = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"my-app\",\n Namespace = \"my-ns\",\n },\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-app-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_app\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedApplications: \u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"my-app\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"my-ns\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedApplicationsArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-app-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-app\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackApp = new RestorePlan(\"rollbackApp\", RestorePlanArgs.builder()\n .name(\"rollback-app-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedApplications(RestorePlanRestoreConfigSelectedApplicationsArgs.builder()\n .namespacedNames(RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"my-app\")\n .namespace(\"my-ns\")\n .build())\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-app-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-app\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackApp:\n type: gcp:gkebackup:RestorePlan\n name: rollback_app\n properties:\n name: rollback-app-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedApplications:\n namespacedNames:\n - name: my-app\n namespace: my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan All Cluster Resources\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"all-groupkinds-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"all-groupkinds\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allClusterResources = new gcp.gkebackup.RestorePlan(\"all_cluster_resources\", {\n name: \"all-groupkinds-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n noNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"all-groupkinds-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"all-groupkinds\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_cluster_resources = gcp.gkebackup.RestorePlan(\"all_cluster_resources\",\n name=\"all-groupkinds-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n no_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"all-groupkinds-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"all-groupkinds\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allClusterResources = new Gcp.GkeBackup.RestorePlan(\"all_cluster_resources\", new()\n {\n Name = \"all-groupkinds-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n NoNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_cluster_resources\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tNoNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"all-groupkinds-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"all-groupkinds\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allClusterResources = new RestorePlan(\"allClusterResources\", RestorePlanArgs.builder()\n .name(\"all-groupkinds-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .noNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: all-groupkinds-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: all-groupkinds\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allClusterResources:\n type: gcp:gkebackup:RestorePlan\n name: all_cluster_resources\n properties:\n name: all-groupkinds-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n noNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rename Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rename-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rename-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst renameNs = new gcp.gkebackup.RestorePlan(\"rename_ns\", {\n name: \"rename-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"ns1\"],\n },\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n transformationRules: [\n {\n description: \"rename namespace from ns1 to ns2\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Namespace\",\n }],\n jsonPath: \".metadata[?(@.name == 'ns1')]\",\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/name\",\n value: \"ns2\",\n }],\n },\n {\n description: \"move all resources from ns1 to ns2\",\n resourceFilter: {\n namespaces: [\"ns1\"],\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/namespace\",\n value: \"ns2\",\n }],\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rename-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rename-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrename_ns = gcp.gkebackup.RestorePlan(\"rename_ns\",\n name=\"rename-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"ns1\"],\n ),\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n transformation_rules=[\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"rename namespace from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Namespace\",\n )],\n json_path=\".metadata[?(@.name == 'ns1')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/name\",\n value=\"ns2\",\n )],\n ),\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"move all resources from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n namespaces=[\"ns1\"],\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/namespace\",\n value=\"ns2\",\n )],\n ),\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rename-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rename-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var renameNs = new Gcp.GkeBackup.RestorePlan(\"rename_ns\", new()\n {\n Name = \"rename-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"rename namespace from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Namespace\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'ns1')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/name\",\n Value = \"ns2\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"move all resources from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/namespace\",\n Value = \"ns2\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rename-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rename_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"rename namespace from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Namespace\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'ns1')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/name\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"move all resources from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/namespace\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rename-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rename-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var renameNs = new RestorePlan(\"renameNs\", RestorePlanArgs.builder()\n .name(\"rename-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .transformationRules( \n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"rename namespace from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Namespace\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'ns1')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/name\")\n .value(\"ns2\")\n .build())\n .build(),\n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"move all resources from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/namespace\")\n .value(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rename-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rename-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n renameNs:\n type: gcp:gkebackup:RestorePlan\n name: rename_ns\n properties:\n name: rename-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - ns1\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n transformationRules:\n - description: rename namespace from ns1 to ns2\n resourceFilter:\n groupKinds:\n - resourceKind: Namespace\n jsonPath: .metadata[?(@.name == 'ns1')]\n fieldActions:\n - op: REPLACE\n path: /metadata/name\n value: ns2\n - description: move all resources from ns1 to ns2\n resourceFilter:\n namespaces:\n - ns1\n fieldActions:\n - op: REPLACE\n path: /metadata/namespace\n value: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Second Transformation\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"transform-rule-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"transform-rule\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst transformRule = new gcp.gkebackup.RestorePlan(\"transform_rule\", {\n name: \"transform-rule-rp\",\n description: \"copy nginx env variables\",\n labels: {\n app: \"nginx\",\n },\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n excludedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n excludedGroupKinds: [{\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n }],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n transformationRules: [{\n description: \"Copy environment variables from the nginx container to the install init container.\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Pod\",\n resourceGroup: \"\",\n }],\n jsonPath: \".metadata[?(@.name == 'nginx')]\",\n },\n fieldActions: [{\n op: \"COPY\",\n path: \"/spec/initContainers/0/env\",\n fromPath: \"/spec/containers/0/env\",\n }],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"transform-rule-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"transform-rule\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\ntransform_rule = gcp.gkebackup.RestorePlan(\"transform_rule\",\n name=\"transform-rule-rp\",\n description=\"copy nginx env variables\",\n labels={\n \"app\": \"nginx\",\n },\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n excluded_namespaces=gcp.gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n excluded_group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n )],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n transformation_rules=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"Copy environment variables from the nginx container to the install init container.\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Pod\",\n resource_group=\"\",\n )],\n json_path=\".metadata[?(@.name == 'nginx')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"COPY\",\n path=\"/spec/initContainers/0/env\",\n from_path=\"/spec/containers/0/env\",\n )],\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"transform-rule-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"transform-rule\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var transformRule = new Gcp.GkeBackup.RestorePlan(\"transform_rule\", new()\n {\n Name = \"transform-rule-rp\",\n Description = \"copy nginx env variables\",\n Labels = \n {\n { \"app\", \"nginx\" },\n },\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n ExcludedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigExcludedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n ExcludedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"Copy environment variables from the nginx container to the install init container.\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Pod\",\n ResourceGroup = \"\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'nginx')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"COPY\",\n Path = \"/spec/initContainers/0/env\",\n FromPath = \"/spec/containers/0/env\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"transform-rule-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"transform_rule\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule-rp\"),\n\t\t\tDescription: pulumi.String(\"copy nginx env variables\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"app\": pulumi.String(\"nginx\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tExcludedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tExcludedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"Copy environment variables from the nginx container to the install init container.\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Pod\"),\n\t\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'nginx')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/spec/initContainers/0/env\"),\n\t\t\t\t\t\t\t\tFromPath: pulumi.String(\"/spec/containers/0/env\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigExcludedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"transform-rule-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"transform-rule\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var transformRule = new RestorePlan(\"transformRule\", RestorePlanArgs.builder()\n .name(\"transform-rule-rp\")\n .description(\"copy nginx env variables\")\n .labels(Map.of(\"app\", \"nginx\"))\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .excludedNamespaces(RestorePlanRestoreConfigExcludedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .excludedGroupKinds(RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .transformationRules(RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"Copy environment variables from the nginx container to the install init container.\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Pod\")\n .resourceGroup(\"\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'nginx')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"COPY\")\n .path(\"/spec/initContainers/0/env\")\n .fromPath(\"/spec/containers/0/env\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: transform-rule-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: transform-rule\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n transformRule:\n type: gcp:gkebackup:RestorePlan\n name: transform_rule\n properties:\n name: transform-rule-rp\n description: copy nginx env variables\n labels:\n app: nginx\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n excludedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n excludedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n transformationRules:\n - description: Copy environment variables from the nginx container to the install init container.\n resourceFilter:\n groupKinds:\n - resourceKind: Pod\n resourceGroup:\n jsonPath: .metadata[?(@.name == 'nginx')]\n fieldActions:\n - op: COPY\n path: /spec/initContainers/0/env\n fromPath: /spec/containers/0/env\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRestorePlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/restorePlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, RestorePlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember default projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember default {{location}}/{{name}}\n```\n\n", + "description": "Represents a Restore Plan instance.\n\n\nTo get more information about RestorePlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.restorePlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Restoreplan All Namespaces\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-all-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-all-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allNs = new gcp.gkebackup.RestorePlan(\"all_ns\", {\n name: \"restore-all-ns\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-all-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-all-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_ns = gcp.gkebackup.RestorePlan(\"all_ns\",\n name=\"restore-all-ns\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-all-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-all-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allNs = new Gcp.GkeBackup.RestorePlan(\"all_ns\", new()\n {\n Name = \"restore-all-ns\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-all-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-all-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allNs = new RestorePlan(\"allNs\", RestorePlanArgs.builder()\n .name(\"restore-all-ns\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-all-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-all-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allNs:\n type: gcp:gkebackup:RestorePlan\n name: all_ns\n properties:\n name: restore-all-ns\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rollback Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackNs = new gcp.gkebackup.RestorePlan(\"rollback_ns\", {\n name: \"rollback-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n selectedGroupKinds: [\n {\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n },\n {\n resourceGroup: \"storage.k8s.io\",\n resourceKind: \"StorageClass\",\n },\n ],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_ns = gcp.gkebackup.RestorePlan(\"rollback_ns\",\n name=\"rollback-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n selected_group_kinds=[\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n ),\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"storage.k8s.io\",\n resource_kind=\"StorageClass\",\n ),\n ],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackNs = new Gcp.GkeBackup.RestorePlan(\"rollback_ns\", new()\n {\n Name = \"rollback-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n SelectedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"storage.k8s.io\",\n ResourceKind = \"StorageClass\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tSelectedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"storage.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"StorageClass\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackNs = new RestorePlan(\"rollbackNs\", RestorePlanArgs.builder()\n .name(\"rollback-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .selectedGroupKinds( \n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build(),\n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"storage.k8s.io\")\n .resourceKind(\"StorageClass\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackNs:\n type: gcp:gkebackup:RestorePlan\n name: rollback_ns\n properties:\n name: rollback-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n selectedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n - resourceGroup: storage.k8s.io\n resourceKind: StorageClass\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Protected Application\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-app-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-app\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackApp = new gcp.gkebackup.RestorePlan(\"rollback_app\", {\n name: \"rollback-app-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedApplications: {\n namespacedNames: [{\n name: \"my-app\",\n namespace: \"my-ns\",\n }],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-app-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-app\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_app = gcp.gkebackup.RestorePlan(\"rollback_app\",\n name=\"rollback-app-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_applications=gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs(\n namespaced_names=[gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs(\n name=\"my-app\",\n namespace=\"my-ns\",\n )],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-app-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-app\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackApp = new Gcp.GkeBackup.RestorePlan(\"rollback_app\", new()\n {\n Name = \"rollback-app-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedApplications = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"my-app\",\n Namespace = \"my-ns\",\n },\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-app-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_app\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedApplications: \u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"my-app\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"my-ns\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedApplicationsArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-app-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-app\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackApp = new RestorePlan(\"rollbackApp\", RestorePlanArgs.builder()\n .name(\"rollback-app-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedApplications(RestorePlanRestoreConfigSelectedApplicationsArgs.builder()\n .namespacedNames(RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"my-app\")\n .namespace(\"my-ns\")\n .build())\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-app-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-app\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackApp:\n type: gcp:gkebackup:RestorePlan\n name: rollback_app\n properties:\n name: rollback-app-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedApplications:\n namespacedNames:\n - name: my-app\n namespace: my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan All Cluster Resources\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"all-groupkinds-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"all-groupkinds\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allClusterResources = new gcp.gkebackup.RestorePlan(\"all_cluster_resources\", {\n name: \"all-groupkinds-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n noNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"all-groupkinds-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"all-groupkinds\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_cluster_resources = gcp.gkebackup.RestorePlan(\"all_cluster_resources\",\n name=\"all-groupkinds-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n no_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"all-groupkinds-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"all-groupkinds\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allClusterResources = new Gcp.GkeBackup.RestorePlan(\"all_cluster_resources\", new()\n {\n Name = \"all-groupkinds-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n NoNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_cluster_resources\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tNoNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"all-groupkinds-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"all-groupkinds\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allClusterResources = new RestorePlan(\"allClusterResources\", RestorePlanArgs.builder()\n .name(\"all-groupkinds-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .noNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: all-groupkinds-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: all-groupkinds\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allClusterResources:\n type: gcp:gkebackup:RestorePlan\n name: all_cluster_resources\n properties:\n name: all-groupkinds-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n noNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rename Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rename-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rename-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst renameNs = new gcp.gkebackup.RestorePlan(\"rename_ns\", {\n name: \"rename-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"ns1\"],\n },\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n transformationRules: [\n {\n description: \"rename namespace from ns1 to ns2\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Namespace\",\n }],\n jsonPath: \".metadata[?(@.name == 'ns1')]\",\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/name\",\n value: \"ns2\",\n }],\n },\n {\n description: \"move all resources from ns1 to ns2\",\n resourceFilter: {\n namespaces: [\"ns1\"],\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/namespace\",\n value: \"ns2\",\n }],\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rename-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rename-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrename_ns = gcp.gkebackup.RestorePlan(\"rename_ns\",\n name=\"rename-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"ns1\"],\n ),\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n transformation_rules=[\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"rename namespace from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Namespace\",\n )],\n json_path=\".metadata[?(@.name == 'ns1')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/name\",\n value=\"ns2\",\n )],\n ),\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"move all resources from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n namespaces=[\"ns1\"],\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/namespace\",\n value=\"ns2\",\n )],\n ),\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rename-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rename-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var renameNs = new Gcp.GkeBackup.RestorePlan(\"rename_ns\", new()\n {\n Name = \"rename-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"rename namespace from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Namespace\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'ns1')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/name\",\n Value = \"ns2\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"move all resources from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/namespace\",\n Value = \"ns2\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rename-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rename_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"rename namespace from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Namespace\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'ns1')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/name\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"move all resources from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/namespace\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rename-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rename-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var renameNs = new RestorePlan(\"renameNs\", RestorePlanArgs.builder()\n .name(\"rename-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .transformationRules( \n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"rename namespace from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Namespace\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'ns1')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/name\")\n .value(\"ns2\")\n .build())\n .build(),\n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"move all resources from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/namespace\")\n .value(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rename-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rename-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n renameNs:\n type: gcp:gkebackup:RestorePlan\n name: rename_ns\n properties:\n name: rename-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - ns1\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n transformationRules:\n - description: rename namespace from ns1 to ns2\n resourceFilter:\n groupKinds:\n - resourceKind: Namespace\n jsonPath: .metadata[?(@.name == 'ns1')]\n fieldActions:\n - op: REPLACE\n path: /metadata/name\n value: ns2\n - description: move all resources from ns1 to ns2\n resourceFilter:\n namespaces:\n - ns1\n fieldActions:\n - op: REPLACE\n path: /metadata/namespace\n value: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Second Transformation\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"transform-rule-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"transform-rule\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst transformRule = new gcp.gkebackup.RestorePlan(\"transform_rule\", {\n name: \"transform-rule-rp\",\n description: \"copy nginx env variables\",\n labels: {\n app: \"nginx\",\n },\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n excludedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n excludedGroupKinds: [{\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n }],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n transformationRules: [{\n description: \"Copy environment variables from the nginx container to the install init container.\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Pod\",\n resourceGroup: \"\",\n }],\n jsonPath: \".metadata[?(@.name == 'nginx')]\",\n },\n fieldActions: [{\n op: \"COPY\",\n path: \"/spec/initContainers/0/env\",\n fromPath: \"/spec/containers/0/env\",\n }],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"transform-rule-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"transform-rule\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\ntransform_rule = gcp.gkebackup.RestorePlan(\"transform_rule\",\n name=\"transform-rule-rp\",\n description=\"copy nginx env variables\",\n labels={\n \"app\": \"nginx\",\n },\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n excluded_namespaces=gcp.gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n excluded_group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n )],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n transformation_rules=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"Copy environment variables from the nginx container to the install init container.\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Pod\",\n resource_group=\"\",\n )],\n json_path=\".metadata[?(@.name == 'nginx')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"COPY\",\n path=\"/spec/initContainers/0/env\",\n from_path=\"/spec/containers/0/env\",\n )],\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"transform-rule-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"transform-rule\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var transformRule = new Gcp.GkeBackup.RestorePlan(\"transform_rule\", new()\n {\n Name = \"transform-rule-rp\",\n Description = \"copy nginx env variables\",\n Labels = \n {\n { \"app\", \"nginx\" },\n },\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n ExcludedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigExcludedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n ExcludedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"Copy environment variables from the nginx container to the install init container.\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Pod\",\n ResourceGroup = \"\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'nginx')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"COPY\",\n Path = \"/spec/initContainers/0/env\",\n FromPath = \"/spec/containers/0/env\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"transform-rule-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"transform_rule\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule-rp\"),\n\t\t\tDescription: pulumi.String(\"copy nginx env variables\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"app\": pulumi.String(\"nginx\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tExcludedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tExcludedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"Copy environment variables from the nginx container to the install init container.\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Pod\"),\n\t\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'nginx')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/spec/initContainers/0/env\"),\n\t\t\t\t\t\t\t\tFromPath: pulumi.String(\"/spec/containers/0/env\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigExcludedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"transform-rule-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"transform-rule\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var transformRule = new RestorePlan(\"transformRule\", RestorePlanArgs.builder()\n .name(\"transform-rule-rp\")\n .description(\"copy nginx env variables\")\n .labels(Map.of(\"app\", \"nginx\"))\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .excludedNamespaces(RestorePlanRestoreConfigExcludedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .excludedGroupKinds(RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .transformationRules(RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"Copy environment variables from the nginx container to the install init container.\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Pod\")\n .resourceGroup(\"\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'nginx')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"COPY\")\n .path(\"/spec/initContainers/0/env\")\n .fromPath(\"/spec/containers/0/env\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: transform-rule-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: transform-rule\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n transformRule:\n type: gcp:gkebackup:RestorePlan\n name: transform_rule\n properties:\n name: transform-rule-rp\n description: copy nginx env variables\n labels:\n app: nginx\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n excludedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n excludedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n transformationRules:\n - description: Copy environment variables from the nginx container to the install init container.\n resourceFilter:\n groupKinds:\n - resourceKind: Pod\n resourceGroup:\n jsonPath: .metadata[?(@.name == 'nginx')]\n fieldActions:\n - op: COPY\n path: /spec/initContainers/0/env\n fromPath: /spec/containers/0/env\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Gitops Mode\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"gitops-mode-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"gitops-mode\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst gitopsMode = new gcp.gkebackup.RestorePlan(\"gitops_mode\", {\n name: \"gitops-mode\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"MERGE_SKIP_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"gitops-mode-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"gitops-mode\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\ngitops_mode = gcp.gkebackup.RestorePlan(\"gitops_mode\",\n name=\"gitops-mode\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"MERGE_SKIP_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"gitops-mode-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"gitops-mode\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var gitopsMode = new Gcp.GkeBackup.RestorePlan(\"gitops_mode\", new()\n {\n Name = \"gitops-mode\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"MERGE_SKIP_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"gitops-mode-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"gitops-mode\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"gitops_mode\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"gitops-mode\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"MERGE_SKIP_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"gitops-mode-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"gitops-mode\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var gitopsMode = new RestorePlan(\"gitopsMode\", RestorePlanArgs.builder()\n .name(\"gitops-mode\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"MERGE_SKIP_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: gitops-mode-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: gitops-mode\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n gitopsMode:\n type: gcp:gkebackup:RestorePlan\n name: gitops_mode\n properties:\n name: gitops-mode\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: MERGE_SKIP_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Restore Order\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-order-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-order\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst restoreOrder = new gcp.gkebackup.RestorePlan(\"restore_order\", {\n name: \"restore-order\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n restoreOrder: {\n groupKindDependencies: [\n {\n satisfying: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindA\",\n },\n requiring: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindB\",\n },\n },\n {\n satisfying: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindB\",\n },\n requiring: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindC\",\n },\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-order-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-order\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrestore_order = gcp.gkebackup.RestorePlan(\"restore_order\",\n name=\"restore-order\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n restore_order=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderArgs(\n group_kind_dependencies=[\n gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs(\n satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindA\",\n ),\n requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindB\",\n ),\n ),\n gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs(\n satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindB\",\n ),\n requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindC\",\n ),\n ),\n ],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-order-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-order\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var restoreOrder = new Gcp.GkeBackup.RestorePlan(\"restore_order\", new()\n {\n Name = \"restore-order\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n RestoreOrder = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderArgs\n {\n GroupKindDependencies = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs\n {\n Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindA\",\n },\n Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindB\",\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs\n {\n Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindB\",\n },\n Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindC\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-order-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-order\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"restore_order\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-order\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tRestoreOrder: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderArgs{\n\t\t\t\t\tGroupKindDependencies: gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{\n\t\t\t\t\t\t\tSatisfying: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindA\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequiring: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindB\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{\n\t\t\t\t\t\t\tSatisfying: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindB\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequiring: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindC\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-order-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-order\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var restoreOrder = new RestorePlan(\"restoreOrder\", RestorePlanArgs.builder()\n .name(\"restore-order\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .restoreOrder(RestorePlanRestoreConfigRestoreOrderArgs.builder()\n .groupKindDependencies( \n RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()\n .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindA\")\n .build())\n .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindB\")\n .build())\n .build(),\n RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()\n .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindB\")\n .build())\n .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindC\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-order-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-order\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n restoreOrder:\n type: gcp:gkebackup:RestorePlan\n name: restore_order\n properties:\n name: restore-order\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n restoreOrder:\n groupKindDependencies:\n - satisfying:\n resourceGroup: stable.example.com\n resourceKind: kindA\n requiring:\n resourceGroup: stable.example.com\n resourceKind: kindB\n - satisfying:\n resourceGroup: stable.example.com\n resourceKind: kindB\n requiring:\n resourceGroup: stable.example.com\n resourceKind: kindC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Volume Res\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"volume-res-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"volume-res\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst volumeRes = new gcp.gkebackup.RestorePlan(\"volume_res\", {\n name: \"volume-res\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"NO_VOLUME_DATA_RESTORATION\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n volumeDataRestorePolicyBindings: [{\n policy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n volumeType: \"GCE_PERSISTENT_DISK\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"volume-res-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"volume-res\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nvolume_res = gcp.gkebackup.RestorePlan(\"volume_res\",\n name=\"volume-res\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"NO_VOLUME_DATA_RESTORATION\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n volume_data_restore_policy_bindings=[gcp.gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs(\n policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n volume_type=\"GCE_PERSISTENT_DISK\",\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"volume-res-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"volume-res\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var volumeRes = new Gcp.GkeBackup.RestorePlan(\"volume_res\", new()\n {\n Name = \"volume-res\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"NO_VOLUME_DATA_RESTORATION\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n VolumeDataRestorePolicyBindings = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs\n {\n Policy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n VolumeType = \"GCE_PERSISTENT_DISK\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"volume-res-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"volume-res\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"volume_res\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"volume-res\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"NO_VOLUME_DATA_RESTORATION\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tVolumeDataRestorePolicyBindings: gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs{\n\t\t\t\t\t\tPolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\t\t\tVolumeType: pulumi.String(\"GCE_PERSISTENT_DISK\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"volume-res-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"volume-res\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var volumeRes = new RestorePlan(\"volumeRes\", RestorePlanArgs.builder()\n .name(\"volume-res\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"NO_VOLUME_DATA_RESTORATION\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .volumeDataRestorePolicyBindings(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.builder()\n .policy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .volumeType(\"GCE_PERSISTENT_DISK\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: volume-res-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: volume-res\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n volumeRes:\n type: gcp:gkebackup:RestorePlan\n name: volume_res\n properties:\n name: volume-res\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: NO_VOLUME_DATA_RESTORATION\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n volumeDataRestorePolicyBindings:\n - policy: RESTORE_VOLUME_DATA_FROM_BACKUP\n volumeType: GCE_PERSISTENT_DISK\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRestorePlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/restorePlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, RestorePlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember default projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember default {{location}}/{{name}}\n```\n\n", "properties": { "condition": { "$ref": "#/types/gcp:gkebackup/RestorePlanIamMemberCondition:RestorePlanIamMemberCondition" @@ -191757,7 +193116,7 @@ } }, "gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy": { - "description": "Represents a Restore Plan instance.\n\n\nTo get more information about RestorePlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.restorePlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Restoreplan All Namespaces\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-all-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-all-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allNs = new gcp.gkebackup.RestorePlan(\"all_ns\", {\n name: \"restore-all-ns\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-all-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-all-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_ns = gcp.gkebackup.RestorePlan(\"all_ns\",\n name=\"restore-all-ns\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-all-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-all-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allNs = new Gcp.GkeBackup.RestorePlan(\"all_ns\", new()\n {\n Name = \"restore-all-ns\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-all-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-all-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allNs = new RestorePlan(\"allNs\", RestorePlanArgs.builder()\n .name(\"restore-all-ns\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-all-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-all-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allNs:\n type: gcp:gkebackup:RestorePlan\n name: all_ns\n properties:\n name: restore-all-ns\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rollback Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackNs = new gcp.gkebackup.RestorePlan(\"rollback_ns\", {\n name: \"rollback-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n selectedGroupKinds: [\n {\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n },\n {\n resourceGroup: \"storage.k8s.io\",\n resourceKind: \"StorageClass\",\n },\n ],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_ns = gcp.gkebackup.RestorePlan(\"rollback_ns\",\n name=\"rollback-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n selected_group_kinds=[\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n ),\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"storage.k8s.io\",\n resource_kind=\"StorageClass\",\n ),\n ],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackNs = new Gcp.GkeBackup.RestorePlan(\"rollback_ns\", new()\n {\n Name = \"rollback-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n SelectedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"storage.k8s.io\",\n ResourceKind = \"StorageClass\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tSelectedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"storage.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"StorageClass\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackNs = new RestorePlan(\"rollbackNs\", RestorePlanArgs.builder()\n .name(\"rollback-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .selectedGroupKinds( \n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build(),\n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"storage.k8s.io\")\n .resourceKind(\"StorageClass\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackNs:\n type: gcp:gkebackup:RestorePlan\n name: rollback_ns\n properties:\n name: rollback-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n selectedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n - resourceGroup: storage.k8s.io\n resourceKind: StorageClass\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Protected Application\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-app-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-app\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackApp = new gcp.gkebackup.RestorePlan(\"rollback_app\", {\n name: \"rollback-app-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedApplications: {\n namespacedNames: [{\n name: \"my-app\",\n namespace: \"my-ns\",\n }],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-app-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-app\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_app = gcp.gkebackup.RestorePlan(\"rollback_app\",\n name=\"rollback-app-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_applications=gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs(\n namespaced_names=[gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs(\n name=\"my-app\",\n namespace=\"my-ns\",\n )],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-app-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-app\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackApp = new Gcp.GkeBackup.RestorePlan(\"rollback_app\", new()\n {\n Name = \"rollback-app-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedApplications = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"my-app\",\n Namespace = \"my-ns\",\n },\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-app-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_app\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedApplications: \u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"my-app\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"my-ns\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedApplicationsArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-app-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-app\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackApp = new RestorePlan(\"rollbackApp\", RestorePlanArgs.builder()\n .name(\"rollback-app-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedApplications(RestorePlanRestoreConfigSelectedApplicationsArgs.builder()\n .namespacedNames(RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"my-app\")\n .namespace(\"my-ns\")\n .build())\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-app-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-app\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackApp:\n type: gcp:gkebackup:RestorePlan\n name: rollback_app\n properties:\n name: rollback-app-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedApplications:\n namespacedNames:\n - name: my-app\n namespace: my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan All Cluster Resources\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"all-groupkinds-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"all-groupkinds\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allClusterResources = new gcp.gkebackup.RestorePlan(\"all_cluster_resources\", {\n name: \"all-groupkinds-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n noNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"all-groupkinds-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"all-groupkinds\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_cluster_resources = gcp.gkebackup.RestorePlan(\"all_cluster_resources\",\n name=\"all-groupkinds-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n no_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"all-groupkinds-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"all-groupkinds\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allClusterResources = new Gcp.GkeBackup.RestorePlan(\"all_cluster_resources\", new()\n {\n Name = \"all-groupkinds-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n NoNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_cluster_resources\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tNoNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"all-groupkinds-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"all-groupkinds\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allClusterResources = new RestorePlan(\"allClusterResources\", RestorePlanArgs.builder()\n .name(\"all-groupkinds-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .noNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: all-groupkinds-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: all-groupkinds\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allClusterResources:\n type: gcp:gkebackup:RestorePlan\n name: all_cluster_resources\n properties:\n name: all-groupkinds-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n noNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rename Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rename-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rename-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst renameNs = new gcp.gkebackup.RestorePlan(\"rename_ns\", {\n name: \"rename-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"ns1\"],\n },\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n transformationRules: [\n {\n description: \"rename namespace from ns1 to ns2\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Namespace\",\n }],\n jsonPath: \".metadata[?(@.name == 'ns1')]\",\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/name\",\n value: \"ns2\",\n }],\n },\n {\n description: \"move all resources from ns1 to ns2\",\n resourceFilter: {\n namespaces: [\"ns1\"],\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/namespace\",\n value: \"ns2\",\n }],\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rename-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rename-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrename_ns = gcp.gkebackup.RestorePlan(\"rename_ns\",\n name=\"rename-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"ns1\"],\n ),\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n transformation_rules=[\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"rename namespace from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Namespace\",\n )],\n json_path=\".metadata[?(@.name == 'ns1')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/name\",\n value=\"ns2\",\n )],\n ),\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"move all resources from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n namespaces=[\"ns1\"],\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/namespace\",\n value=\"ns2\",\n )],\n ),\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rename-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rename-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var renameNs = new Gcp.GkeBackup.RestorePlan(\"rename_ns\", new()\n {\n Name = \"rename-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"rename namespace from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Namespace\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'ns1')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/name\",\n Value = \"ns2\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"move all resources from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/namespace\",\n Value = \"ns2\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rename-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rename_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"rename namespace from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Namespace\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'ns1')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/name\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"move all resources from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/namespace\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rename-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rename-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var renameNs = new RestorePlan(\"renameNs\", RestorePlanArgs.builder()\n .name(\"rename-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .transformationRules( \n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"rename namespace from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Namespace\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'ns1')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/name\")\n .value(\"ns2\")\n .build())\n .build(),\n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"move all resources from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/namespace\")\n .value(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rename-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rename-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n renameNs:\n type: gcp:gkebackup:RestorePlan\n name: rename_ns\n properties:\n name: rename-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - ns1\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n transformationRules:\n - description: rename namespace from ns1 to ns2\n resourceFilter:\n groupKinds:\n - resourceKind: Namespace\n jsonPath: .metadata[?(@.name == 'ns1')]\n fieldActions:\n - op: REPLACE\n path: /metadata/name\n value: ns2\n - description: move all resources from ns1 to ns2\n resourceFilter:\n namespaces:\n - ns1\n fieldActions:\n - op: REPLACE\n path: /metadata/namespace\n value: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Second Transformation\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"transform-rule-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"transform-rule\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst transformRule = new gcp.gkebackup.RestorePlan(\"transform_rule\", {\n name: \"transform-rule-rp\",\n description: \"copy nginx env variables\",\n labels: {\n app: \"nginx\",\n },\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n excludedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n excludedGroupKinds: [{\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n }],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n transformationRules: [{\n description: \"Copy environment variables from the nginx container to the install init container.\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Pod\",\n resourceGroup: \"\",\n }],\n jsonPath: \".metadata[?(@.name == 'nginx')]\",\n },\n fieldActions: [{\n op: \"COPY\",\n path: \"/spec/initContainers/0/env\",\n fromPath: \"/spec/containers/0/env\",\n }],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"transform-rule-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"transform-rule\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\ntransform_rule = gcp.gkebackup.RestorePlan(\"transform_rule\",\n name=\"transform-rule-rp\",\n description=\"copy nginx env variables\",\n labels={\n \"app\": \"nginx\",\n },\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n excluded_namespaces=gcp.gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n excluded_group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n )],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n transformation_rules=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"Copy environment variables from the nginx container to the install init container.\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Pod\",\n resource_group=\"\",\n )],\n json_path=\".metadata[?(@.name == 'nginx')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"COPY\",\n path=\"/spec/initContainers/0/env\",\n from_path=\"/spec/containers/0/env\",\n )],\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"transform-rule-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"transform-rule\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var transformRule = new Gcp.GkeBackup.RestorePlan(\"transform_rule\", new()\n {\n Name = \"transform-rule-rp\",\n Description = \"copy nginx env variables\",\n Labels = \n {\n { \"app\", \"nginx\" },\n },\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n ExcludedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigExcludedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n ExcludedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"Copy environment variables from the nginx container to the install init container.\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Pod\",\n ResourceGroup = \"\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'nginx')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"COPY\",\n Path = \"/spec/initContainers/0/env\",\n FromPath = \"/spec/containers/0/env\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"transform-rule-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"transform_rule\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule-rp\"),\n\t\t\tDescription: pulumi.String(\"copy nginx env variables\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"app\": pulumi.String(\"nginx\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tExcludedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tExcludedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"Copy environment variables from the nginx container to the install init container.\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Pod\"),\n\t\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'nginx')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/spec/initContainers/0/env\"),\n\t\t\t\t\t\t\t\tFromPath: pulumi.String(\"/spec/containers/0/env\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigExcludedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"transform-rule-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"transform-rule\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var transformRule = new RestorePlan(\"transformRule\", RestorePlanArgs.builder()\n .name(\"transform-rule-rp\")\n .description(\"copy nginx env variables\")\n .labels(Map.of(\"app\", \"nginx\"))\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .excludedNamespaces(RestorePlanRestoreConfigExcludedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .excludedGroupKinds(RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .transformationRules(RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"Copy environment variables from the nginx container to the install init container.\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Pod\")\n .resourceGroup(\"\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'nginx')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"COPY\")\n .path(\"/spec/initContainers/0/env\")\n .fromPath(\"/spec/containers/0/env\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: transform-rule-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: transform-rule\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n transformRule:\n type: gcp:gkebackup:RestorePlan\n name: transform_rule\n properties:\n name: transform-rule-rp\n description: copy nginx env variables\n labels:\n app: nginx\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n excludedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n excludedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n transformationRules:\n - description: Copy environment variables from the nginx container to the install init container.\n resourceFilter:\n groupKinds:\n - resourceKind: Pod\n resourceGroup:\n jsonPath: .metadata[?(@.name == 'nginx')]\n fieldActions:\n - op: COPY\n path: /spec/initContainers/0/env\n fromPath: /spec/containers/0/env\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRestorePlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/restorePlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, RestorePlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy default projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy default {{location}}/{{name}}\n```\n\n", + "description": "Represents a Restore Plan instance.\n\n\nTo get more information about RestorePlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.restorePlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Restoreplan All Namespaces\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-all-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-all-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allNs = new gcp.gkebackup.RestorePlan(\"all_ns\", {\n name: \"restore-all-ns\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-all-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-all-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_ns = gcp.gkebackup.RestorePlan(\"all_ns\",\n name=\"restore-all-ns\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-all-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-all-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allNs = new Gcp.GkeBackup.RestorePlan(\"all_ns\", new()\n {\n Name = \"restore-all-ns\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-all-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-all-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allNs = new RestorePlan(\"allNs\", RestorePlanArgs.builder()\n .name(\"restore-all-ns\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-all-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-all-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allNs:\n type: gcp:gkebackup:RestorePlan\n name: all_ns\n properties:\n name: restore-all-ns\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rollback Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackNs = new gcp.gkebackup.RestorePlan(\"rollback_ns\", {\n name: \"rollback-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n selectedGroupKinds: [\n {\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n },\n {\n resourceGroup: \"storage.k8s.io\",\n resourceKind: \"StorageClass\",\n },\n ],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_ns = gcp.gkebackup.RestorePlan(\"rollback_ns\",\n name=\"rollback-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n selected_group_kinds=[\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n ),\n gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs(\n resource_group=\"storage.k8s.io\",\n resource_kind=\"StorageClass\",\n ),\n ],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackNs = new Gcp.GkeBackup.RestorePlan(\"rollback_ns\", new()\n {\n Name = \"rollback-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n SelectedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"storage.k8s.io\",\n ResourceKind = \"StorageClass\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tSelectedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"storage.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"StorageClass\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackNs = new RestorePlan(\"rollbackNs\", RestorePlanArgs.builder()\n .name(\"rollback-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .selectedGroupKinds( \n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build(),\n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"storage.k8s.io\")\n .resourceKind(\"StorageClass\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackNs:\n type: gcp:gkebackup:RestorePlan\n name: rollback_ns\n properties:\n name: rollback-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n selectedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n - resourceGroup: storage.k8s.io\n resourceKind: StorageClass\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Protected Application\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-app-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-app\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackApp = new gcp.gkebackup.RestorePlan(\"rollback_app\", {\n name: \"rollback-app-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedApplications: {\n namespacedNames: [{\n name: \"my-app\",\n namespace: \"my-ns\",\n }],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-app-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-app\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrollback_app = gcp.gkebackup.RestorePlan(\"rollback_app\",\n name=\"rollback-app-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_applications=gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs(\n namespaced_names=[gcp.gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs(\n name=\"my-app\",\n namespace=\"my-ns\",\n )],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-app-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-app\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackApp = new Gcp.GkeBackup.RestorePlan(\"rollback_app\", new()\n {\n Name = \"rollback-app-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedApplications = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"my-app\",\n Namespace = \"my-ns\",\n },\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-app-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_app\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedApplications: \u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"my-app\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"my-ns\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedApplicationsArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-app-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-app\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackApp = new RestorePlan(\"rollbackApp\", RestorePlanArgs.builder()\n .name(\"rollback-app-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedApplications(RestorePlanRestoreConfigSelectedApplicationsArgs.builder()\n .namespacedNames(RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"my-app\")\n .namespace(\"my-ns\")\n .build())\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-app-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-app\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackApp:\n type: gcp:gkebackup:RestorePlan\n name: rollback_app\n properties:\n name: rollback-app-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedApplications:\n namespacedNames:\n - name: my-app\n namespace: my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan All Cluster Resources\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"all-groupkinds-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"all-groupkinds\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allClusterResources = new gcp.gkebackup.RestorePlan(\"all_cluster_resources\", {\n name: \"all-groupkinds-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n noNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"all-groupkinds-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"all-groupkinds\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nall_cluster_resources = gcp.gkebackup.RestorePlan(\"all_cluster_resources\",\n name=\"all-groupkinds-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n no_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"all-groupkinds-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"all-groupkinds\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allClusterResources = new Gcp.GkeBackup.RestorePlan(\"all_cluster_resources\", new()\n {\n Name = \"all-groupkinds-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n NoNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_cluster_resources\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tNoNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"all-groupkinds-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"all-groupkinds\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allClusterResources = new RestorePlan(\"allClusterResources\", RestorePlanArgs.builder()\n .name(\"all-groupkinds-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .noNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: all-groupkinds-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: all-groupkinds\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allClusterResources:\n type: gcp:gkebackup:RestorePlan\n name: all_cluster_resources\n properties:\n name: all-groupkinds-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n noNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rename Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rename-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rename-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst renameNs = new gcp.gkebackup.RestorePlan(\"rename_ns\", {\n name: \"rename-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"ns1\"],\n },\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n transformationRules: [\n {\n description: \"rename namespace from ns1 to ns2\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Namespace\",\n }],\n jsonPath: \".metadata[?(@.name == 'ns1')]\",\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/name\",\n value: \"ns2\",\n }],\n },\n {\n description: \"move all resources from ns1 to ns2\",\n resourceFilter: {\n namespaces: [\"ns1\"],\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/namespace\",\n value: \"ns2\",\n }],\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rename-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rename-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrename_ns = gcp.gkebackup.RestorePlan(\"rename_ns\",\n name=\"rename-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n selected_namespaces=gcp.gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs(\n namespaces=[\"ns1\"],\n ),\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n no_group_kinds=True,\n ),\n transformation_rules=[\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"rename namespace from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Namespace\",\n )],\n json_path=\".metadata[?(@.name == 'ns1')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/name\",\n value=\"ns2\",\n )],\n ),\n gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"move all resources from ns1 to ns2\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n namespaces=[\"ns1\"],\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"REPLACE\",\n path=\"/metadata/namespace\",\n value=\"ns2\",\n )],\n ),\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rename-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rename-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var renameNs = new Gcp.GkeBackup.RestorePlan(\"rename_ns\", new()\n {\n Name = \"rename-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"rename namespace from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Namespace\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'ns1')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/name\",\n Value = \"ns2\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"move all resources from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/namespace\",\n Value = \"ns2\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rename-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rename_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"rename namespace from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Namespace\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'ns1')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/name\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"move all resources from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/namespace\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rename-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rename-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var renameNs = new RestorePlan(\"renameNs\", RestorePlanArgs.builder()\n .name(\"rename-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .transformationRules( \n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"rename namespace from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Namespace\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'ns1')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/name\")\n .value(\"ns2\")\n .build())\n .build(),\n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"move all resources from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/namespace\")\n .value(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rename-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rename-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n renameNs:\n type: gcp:gkebackup:RestorePlan\n name: rename_ns\n properties:\n name: rename-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - ns1\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n transformationRules:\n - description: rename namespace from ns1 to ns2\n resourceFilter:\n groupKinds:\n - resourceKind: Namespace\n jsonPath: .metadata[?(@.name == 'ns1')]\n fieldActions:\n - op: REPLACE\n path: /metadata/name\n value: ns2\n - description: move all resources from ns1 to ns2\n resourceFilter:\n namespaces:\n - ns1\n fieldActions:\n - op: REPLACE\n path: /metadata/namespace\n value: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Second Transformation\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"transform-rule-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"transform-rule\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst transformRule = new gcp.gkebackup.RestorePlan(\"transform_rule\", {\n name: \"transform-rule-rp\",\n description: \"copy nginx env variables\",\n labels: {\n app: \"nginx\",\n },\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n excludedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n excludedGroupKinds: [{\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n }],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n transformationRules: [{\n description: \"Copy environment variables from the nginx container to the install init container.\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Pod\",\n resourceGroup: \"\",\n }],\n jsonPath: \".metadata[?(@.name == 'nginx')]\",\n },\n fieldActions: [{\n op: \"COPY\",\n path: \"/spec/initContainers/0/env\",\n fromPath: \"/spec/containers/0/env\",\n }],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"transform-rule-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"transform-rule\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\ntransform_rule = gcp.gkebackup.RestorePlan(\"transform_rule\",\n name=\"transform-rule-rp\",\n description=\"copy nginx env variables\",\n labels={\n \"app\": \"nginx\",\n },\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n excluded_namespaces=gcp.gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs(\n namespaces=[\"my-ns\"],\n ),\n namespaced_resource_restore_mode=\"DELETE_AND_RESTORE\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n excluded_group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs(\n resource_group=\"apiextension.k8s.io\",\n resource_kind=\"CustomResourceDefinition\",\n )],\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n transformation_rules=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleArgs(\n description=\"Copy environment variables from the nginx container to the install init container.\",\n resource_filter=gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs(\n group_kinds=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs(\n resource_kind=\"Pod\",\n resource_group=\"\",\n )],\n json_path=\".metadata[?(@.name == 'nginx')]\",\n ),\n field_actions=[gcp.gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs(\n op=\"COPY\",\n path=\"/spec/initContainers/0/env\",\n from_path=\"/spec/containers/0/env\",\n )],\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"transform-rule-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"transform-rule\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var transformRule = new Gcp.GkeBackup.RestorePlan(\"transform_rule\", new()\n {\n Name = \"transform-rule-rp\",\n Description = \"copy nginx env variables\",\n Labels = \n {\n { \"app\", \"nginx\" },\n },\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n ExcludedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigExcludedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n ExcludedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"Copy environment variables from the nginx container to the install init container.\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Pod\",\n ResourceGroup = \"\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'nginx')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"COPY\",\n Path = \"/spec/initContainers/0/env\",\n FromPath = \"/spec/containers/0/env\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"transform-rule-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"transform_rule\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule-rp\"),\n\t\t\tDescription: pulumi.String(\"copy nginx env variables\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"app\": pulumi.String(\"nginx\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tExcludedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tExcludedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"Copy environment variables from the nginx container to the install init container.\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Pod\"),\n\t\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'nginx')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/spec/initContainers/0/env\"),\n\t\t\t\t\t\t\t\tFromPath: pulumi.String(\"/spec/containers/0/env\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigExcludedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"transform-rule-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"transform-rule\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var transformRule = new RestorePlan(\"transformRule\", RestorePlanArgs.builder()\n .name(\"transform-rule-rp\")\n .description(\"copy nginx env variables\")\n .labels(Map.of(\"app\", \"nginx\"))\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .excludedNamespaces(RestorePlanRestoreConfigExcludedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .excludedGroupKinds(RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .transformationRules(RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"Copy environment variables from the nginx container to the install init container.\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Pod\")\n .resourceGroup(\"\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'nginx')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"COPY\")\n .path(\"/spec/initContainers/0/env\")\n .fromPath(\"/spec/containers/0/env\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: transform-rule-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: transform-rule\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n transformRule:\n type: gcp:gkebackup:RestorePlan\n name: transform_rule\n properties:\n name: transform-rule-rp\n description: copy nginx env variables\n labels:\n app: nginx\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n excludedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n excludedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n transformationRules:\n - description: Copy environment variables from the nginx container to the install init container.\n resourceFilter:\n groupKinds:\n - resourceKind: Pod\n resourceGroup:\n jsonPath: .metadata[?(@.name == 'nginx')]\n fieldActions:\n - op: COPY\n path: /spec/initContainers/0/env\n fromPath: /spec/containers/0/env\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Gitops Mode\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"gitops-mode-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"gitops-mode\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst gitopsMode = new gcp.gkebackup.RestorePlan(\"gitops_mode\", {\n name: \"gitops-mode\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"MERGE_SKIP_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"gitops-mode-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"gitops-mode\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\ngitops_mode = gcp.gkebackup.RestorePlan(\"gitops_mode\",\n name=\"gitops-mode\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"MERGE_SKIP_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"gitops-mode-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"gitops-mode\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var gitopsMode = new Gcp.GkeBackup.RestorePlan(\"gitops_mode\", new()\n {\n Name = \"gitops-mode\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"MERGE_SKIP_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"gitops-mode-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"gitops-mode\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"gitops_mode\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"gitops-mode\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"MERGE_SKIP_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"gitops-mode-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"gitops-mode\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var gitopsMode = new RestorePlan(\"gitopsMode\", RestorePlanArgs.builder()\n .name(\"gitops-mode\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"MERGE_SKIP_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: gitops-mode-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: gitops-mode\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n gitopsMode:\n type: gcp:gkebackup:RestorePlan\n name: gitops_mode\n properties:\n name: gitops-mode\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: MERGE_SKIP_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Restore Order\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-order-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-order\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst restoreOrder = new gcp.gkebackup.RestorePlan(\"restore_order\", {\n name: \"restore-order\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n restoreOrder: {\n groupKindDependencies: [\n {\n satisfying: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindA\",\n },\n requiring: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindB\",\n },\n },\n {\n satisfying: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindB\",\n },\n requiring: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindC\",\n },\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-order-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-order\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nrestore_order = gcp.gkebackup.RestorePlan(\"restore_order\",\n name=\"restore-order\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n restore_order=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderArgs(\n group_kind_dependencies=[\n gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs(\n satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindA\",\n ),\n requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindB\",\n ),\n ),\n gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs(\n satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindB\",\n ),\n requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs(\n resource_group=\"stable.example.com\",\n resource_kind=\"kindC\",\n ),\n ),\n ],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-order-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-order\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var restoreOrder = new Gcp.GkeBackup.RestorePlan(\"restore_order\", new()\n {\n Name = \"restore-order\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n RestoreOrder = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderArgs\n {\n GroupKindDependencies = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs\n {\n Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindA\",\n },\n Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindB\",\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs\n {\n Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindB\",\n },\n Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindC\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-order-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-order\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"restore_order\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-order\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tRestoreOrder: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderArgs{\n\t\t\t\t\tGroupKindDependencies: gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{\n\t\t\t\t\t\t\tSatisfying: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindA\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequiring: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindB\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{\n\t\t\t\t\t\t\tSatisfying: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindB\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequiring: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindC\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-order-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-order\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var restoreOrder = new RestorePlan(\"restoreOrder\", RestorePlanArgs.builder()\n .name(\"restore-order\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .restoreOrder(RestorePlanRestoreConfigRestoreOrderArgs.builder()\n .groupKindDependencies( \n RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()\n .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindA\")\n .build())\n .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindB\")\n .build())\n .build(),\n RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()\n .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindB\")\n .build())\n .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindC\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-order-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-order\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n restoreOrder:\n type: gcp:gkebackup:RestorePlan\n name: restore_order\n properties:\n name: restore-order\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n restoreOrder:\n groupKindDependencies:\n - satisfying:\n resourceGroup: stable.example.com\n resourceKind: kindA\n requiring:\n resourceGroup: stable.example.com\n resourceKind: kindB\n - satisfying:\n resourceGroup: stable.example.com\n resourceKind: kindB\n requiring:\n resourceGroup: stable.example.com\n resourceKind: kindC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Volume Res\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"volume-res-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: \"\",\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"volume-res\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst volumeRes = new gcp.gkebackup.RestorePlan(\"volume_res\", {\n name: \"volume-res\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"NO_VOLUME_DATA_RESTORATION\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n volumeDataRestorePolicyBindings: [{\n policy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n volumeType: \"GCE_PERSISTENT_DISK\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"volume-res-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs(\n workload_pool=\"my-project-name.svc.id.goog\",\n ),\n addons_config=gcp.container.ClusterAddonsConfigArgs(\n gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs(\n enabled=True,\n ),\n ),\n deletion_protection=\"\",\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"volume-res\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs(\n include_volume_data=True,\n include_secrets=True,\n all_namespaces=True,\n ))\nvolume_res = gcp.gkebackup.RestorePlan(\"volume_res\",\n name=\"volume-res\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs(\n all_namespaces=True,\n namespaced_resource_restore_mode=\"FAIL_ON_CONFLICT\",\n volume_data_restore_policy=\"NO_VOLUME_DATA_RESTORATION\",\n cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs(\n all_group_kinds=True,\n ),\n cluster_resource_conflict_policy=\"USE_EXISTING_VERSION\",\n volume_data_restore_policy_bindings=[gcp.gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs(\n policy=\"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n volume_type=\"GCE_PERSISTENT_DISK\",\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"volume-res-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = \"\",\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"volume-res\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var volumeRes = new Gcp.GkeBackup.RestorePlan(\"volume_res\", new()\n {\n Name = \"volume-res\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"NO_VOLUME_DATA_RESTORATION\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n VolumeDataRestorePolicyBindings = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs\n {\n Policy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n VolumeType = \"GCE_PERSISTENT_DISK\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"volume-res-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(\"\"),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"volume-res\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"volume_res\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"volume-res\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"NO_VOLUME_DATA_RESTORATION\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tVolumeDataRestorePolicyBindings: gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs{\n\t\t\t\t\t\tPolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\t\t\tVolumeType: pulumi.String(\"GCE_PERSISTENT_DISK\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"volume-res-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(\"\")\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"volume-res\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var volumeRes = new RestorePlan(\"volumeRes\", RestorePlanArgs.builder()\n .name(\"volume-res\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"NO_VOLUME_DATA_RESTORATION\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .volumeDataRestorePolicyBindings(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.builder()\n .policy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .volumeType(\"GCE_PERSISTENT_DISK\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: volume-res-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection:\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: volume-res\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n volumeRes:\n type: gcp:gkebackup:RestorePlan\n name: volume_res\n properties:\n name: volume-res\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: NO_VOLUME_DATA_RESTORATION\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n volumeDataRestorePolicyBindings:\n - policy: RESTORE_VOLUME_DATA_FROM_BACKUP\n volumeType: GCE_PERSISTENT_DISK\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRestorePlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/restorePlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, RestorePlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy default projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy default {{location}}/{{name}}\n```\n\n", "properties": { "etag": { "type": "string" @@ -196730,7 +198089,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\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## Example Usage\n\n### Healthcare Dicom Store Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {name: \"dicom-notifications\"});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {\n name: \"example-dataset\",\n location: \"us-central1\",\n});\nconst _default = new gcp.healthcare.DicomStore(\"default\", {\n name: \"example-dicom-store\",\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\", name=\"dicom-notifications\")\ndataset = gcp.healthcare.Dataset(\"dataset\",\n name=\"example-dataset\",\n location=\"us-central1\")\ndefault = gcp.healthcare.DicomStore(\"default\",\n name=\"example-dicom-store\",\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 System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\", new()\n {\n Name = \"dicom-notifications\",\n });\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Name = \"example-dataset\",\n Location = \"us-central1\",\n });\n\n var @default = new Gcp.Healthcare.DicomStore(\"default\", new()\n {\n Name = \"example-dicom-store\",\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/v7/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"dicom-notifications\"),\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\tName: pulumi.String(\"example-dataset\"),\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\tName: pulumi.String(\"example-dicom-store\"),\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.pubsub.TopicArgs;\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\", TopicArgs.builder()\n .name(\"dicom-notifications\")\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder()\n .name(\"example-dataset\")\n .location(\"us-central1\")\n .build());\n\n var default_ = new DicomStore(\"default\", DicomStoreArgs.builder()\n .name(\"example-dicom-store\")\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 name: example-dicom-store\n dataset: ${dataset.id}\n notificationConfig:\n pubsubTopic: ${topic.id}\n labels:\n label1: labelvalue1\n topic:\n type: gcp:pubsub:Topic\n properties:\n name: dicom-notifications\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n name: example-dataset\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Healthcare Dicom Store Bq Stream\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {name: \"dicom-notifications\"});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {\n name: \"example-dataset\",\n location: \"us-central1\",\n});\nconst bqDataset = new gcp.bigquery.Dataset(\"bq_dataset\", {\n datasetId: \"dicom_bq_ds\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n deleteContentsOnDestroy: true,\n});\nconst bqTable = new gcp.bigquery.Table(\"bq_table\", {\n deletionProtection: false,\n datasetId: bqDataset.datasetId,\n tableId: \"dicom_bq_tb\",\n});\nconst _default = new gcp.healthcare.DicomStore(\"default\", {\n name: \"example-dicom-store\",\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```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\", name=\"dicom-notifications\")\ndataset = gcp.healthcare.Dataset(\"dataset\",\n name=\"example-dataset\",\n location=\"us-central1\")\nbq_dataset = gcp.bigquery.Dataset(\"bq_dataset\",\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)\nbq_table = gcp.bigquery.Table(\"bq_table\",\n deletion_protection=False,\n dataset_id=bq_dataset.dataset_id,\n table_id=\"dicom_bq_tb\")\ndefault = gcp.healthcare.DicomStore(\"default\",\n name=\"example-dicom-store\",\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```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\", new()\n {\n Name = \"dicom-notifications\",\n });\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Name = \"example-dataset\",\n Location = \"us-central1\",\n });\n\n var bqDataset = new Gcp.BigQuery.Dataset(\"bq_dataset\", new()\n {\n DatasetId = \"dicom_bq_ds\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n DeleteContentsOnDestroy = true,\n });\n\n var bqTable = new Gcp.BigQuery.Table(\"bq_table\", new()\n {\n DeletionProtection = false,\n DatasetId = bqDataset.DatasetId,\n TableId = \"dicom_bq_tb\",\n });\n\n var @default = new Gcp.Healthcare.DicomStore(\"default\", new()\n {\n Name = \"example-dicom-store\",\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 });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"dicom-notifications\"),\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\tName: pulumi.String(\"example-dataset\"),\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, \"bq_dataset\", \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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqTable, err := bigquery.NewTable(ctx, \"bq_table\", \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})\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\tName: pulumi.String(\"example-dicom-store\"),\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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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.builder()\n .name(\"dicom-notifications\")\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder()\n .name(\"example-dataset\")\n .location(\"us-central1\")\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());\n\n var bqTable = new Table(\"bqTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(bqDataset.datasetId())\n .tableId(\"dicom_bq_tb\")\n .build());\n\n var default_ = new DicomStore(\"default\", DicomStoreArgs.builder()\n .name(\"example-dicom-store\")\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());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:DicomStore\n properties:\n name: example-dicom-store\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 topic:\n type: gcp:pubsub:Topic\n properties:\n name: dicom-notifications\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n name: example-dataset\n location: us-central1\n bqDataset:\n type: gcp:bigquery:Dataset\n name: bq_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 bqTable:\n type: gcp:bigquery:Table\n name: bq_table\n properties:\n deletionProtection: false\n datasetId: ${bqDataset.datasetId}\n tableId: dicom_bq_tb\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDicomStore can be imported using any of these accepted formats:\n\n* `{{dataset}}/dicomStores/{{name}}`\n\n* `{{dataset}}/{{name}}`\n\nWhen using the `pulumi import` command, DicomStore can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:healthcare/dicomStore:DicomStore default {{dataset}}/dicomStores/{{name}}\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## Example Usage\n\n### Healthcare Dicom Store Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {name: \"dicom-notifications\"});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {\n name: \"example-dataset\",\n location: \"us-central1\",\n});\nconst _default = new gcp.healthcare.DicomStore(\"default\", {\n name: \"example-dicom-store\",\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\", name=\"dicom-notifications\")\ndataset = gcp.healthcare.Dataset(\"dataset\",\n name=\"example-dataset\",\n location=\"us-central1\")\ndefault = gcp.healthcare.DicomStore(\"default\",\n name=\"example-dicom-store\",\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 System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\", new()\n {\n Name = \"dicom-notifications\",\n });\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Name = \"example-dataset\",\n Location = \"us-central1\",\n });\n\n var @default = new Gcp.Healthcare.DicomStore(\"default\", new()\n {\n Name = \"example-dicom-store\",\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/v7/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"dicom-notifications\"),\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\tName: pulumi.String(\"example-dataset\"),\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\tName: pulumi.String(\"example-dicom-store\"),\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.pubsub.TopicArgs;\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\", TopicArgs.builder()\n .name(\"dicom-notifications\")\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder()\n .name(\"example-dataset\")\n .location(\"us-central1\")\n .build());\n\n var default_ = new DicomStore(\"default\", DicomStoreArgs.builder()\n .name(\"example-dicom-store\")\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 name: example-dicom-store\n dataset: ${dataset.id}\n notificationConfig:\n pubsubTopic: ${topic.id}\n labels:\n label1: labelvalue1\n topic:\n type: gcp:pubsub:Topic\n properties:\n name: dicom-notifications\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n name: example-dataset\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Healthcare Dicom Store Bq Stream\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {name: \"dicom-notifications\"});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {\n name: \"example-dataset\",\n location: \"us-central1\",\n});\nconst bqDataset = new gcp.bigquery.Dataset(\"bq_dataset\", {\n datasetId: \"dicom_bq_ds\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n deleteContentsOnDestroy: true,\n});\nconst bqTable = new gcp.bigquery.Table(\"bq_table\", {\n deletionProtection: false,\n datasetId: bqDataset.datasetId,\n tableId: \"dicom_bq_tb\",\n});\nconst _default = new gcp.healthcare.DicomStore(\"default\", {\n name: \"example-dicom-store\",\n dataset: dataset.id,\n notificationConfig: {\n pubsubTopic: topic.id,\n sendForBulkImport: true,\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```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\", name=\"dicom-notifications\")\ndataset = gcp.healthcare.Dataset(\"dataset\",\n name=\"example-dataset\",\n location=\"us-central1\")\nbq_dataset = gcp.bigquery.Dataset(\"bq_dataset\",\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)\nbq_table = gcp.bigquery.Table(\"bq_table\",\n deletion_protection=False,\n dataset_id=bq_dataset.dataset_id,\n table_id=\"dicom_bq_tb\")\ndefault = gcp.healthcare.DicomStore(\"default\",\n name=\"example-dicom-store\",\n dataset=dataset.id,\n notification_config=gcp.healthcare.DicomStoreNotificationConfigArgs(\n pubsub_topic=topic.id,\n send_for_bulk_import=True,\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```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\", new()\n {\n Name = \"dicom-notifications\",\n });\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Name = \"example-dataset\",\n Location = \"us-central1\",\n });\n\n var bqDataset = new Gcp.BigQuery.Dataset(\"bq_dataset\", new()\n {\n DatasetId = \"dicom_bq_ds\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n DeleteContentsOnDestroy = true,\n });\n\n var bqTable = new Gcp.BigQuery.Table(\"bq_table\", new()\n {\n DeletionProtection = false,\n DatasetId = bqDataset.DatasetId,\n TableId = \"dicom_bq_tb\",\n });\n\n var @default = new Gcp.Healthcare.DicomStore(\"default\", new()\n {\n Name = \"example-dicom-store\",\n Dataset = dataset.Id,\n NotificationConfig = new Gcp.Healthcare.Inputs.DicomStoreNotificationConfigArgs\n {\n PubsubTopic = topic.Id,\n SendForBulkImport = true,\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 });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"dicom-notifications\"),\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\tName: pulumi.String(\"example-dataset\"),\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, \"bq_dataset\", \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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqTable, err := bigquery.NewTable(ctx, \"bq_table\", \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})\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\tName: pulumi.String(\"example-dicom-store\"),\n\t\t\tDataset: dataset.ID(),\n\t\t\tNotificationConfig: \u0026healthcare.DicomStoreNotificationConfigArgs{\n\t\t\t\tPubsubTopic: topic.ID(),\n\t\t\t\tSendForBulkImport: pulumi.Bool(true),\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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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.builder()\n .name(\"dicom-notifications\")\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder()\n .name(\"example-dataset\")\n .location(\"us-central1\")\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());\n\n var bqTable = new Table(\"bqTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(bqDataset.datasetId())\n .tableId(\"dicom_bq_tb\")\n .build());\n\n var default_ = new DicomStore(\"default\", DicomStoreArgs.builder()\n .name(\"example-dicom-store\")\n .dataset(dataset.id())\n .notificationConfig(DicomStoreNotificationConfigArgs.builder()\n .pubsubTopic(topic.id())\n .sendForBulkImport(true)\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());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:DicomStore\n properties:\n name: example-dicom-store\n dataset: ${dataset.id}\n notificationConfig:\n pubsubTopic: ${topic.id}\n sendForBulkImport: true\n labels:\n label1: labelvalue1\n streamConfigs:\n - bigqueryDestination:\n tableUri: bq://${bqDataset.project}.${bqDataset.datasetId}.${bqTable.tableId}\n topic:\n type: gcp:pubsub:Topic\n properties:\n name: dicom-notifications\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n name: example-dataset\n location: us-central1\n bqDataset:\n type: gcp:bigquery:Dataset\n name: bq_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 bqTable:\n type: gcp:bigquery:Table\n name: bq_table\n properties:\n deletionProtection: false\n datasetId: ${bqDataset.datasetId}\n tableId: dicom_bq_tb\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDicomStore can be imported using any of these accepted formats:\n\n* `{{dataset}}/dicomStores/{{name}}`\n\n* `{{dataset}}/{{name}}`\n\nWhen using the `pulumi import` command, DicomStore can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:healthcare/dicomStore:DicomStore default {{dataset}}/dicomStores/{{name}}\n```\n\n```sh\n$ pulumi import gcp:healthcare/dicomStore:DicomStore default {{dataset}}/{{name}}\n```\n\n", "properties": { "dataset": { "type": "string", @@ -197108,7 +198467,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\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## Example Usage\n\n### Healthcare Fhir Store Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {name: \"fhir-notifications\"});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {\n name: \"example-dataset\",\n location: \"us-central1\",\n});\nconst _default = new gcp.healthcare.FhirStore(\"default\", {\n name: \"example-fhir-store\",\n dataset: dataset.id,\n version: \"R4\",\n complexDataTypeReferenceParsing: \"DISABLED\",\n enableUpdateCreate: false,\n disableReferentialIntegrity: false,\n disableResourceVersioning: false,\n enableHistoryImport: false,\n defaultSearchHandlingStrict: 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\", name=\"fhir-notifications\")\ndataset = gcp.healthcare.Dataset(\"dataset\",\n name=\"example-dataset\",\n location=\"us-central1\")\ndefault = gcp.healthcare.FhirStore(\"default\",\n name=\"example-fhir-store\",\n dataset=dataset.id,\n version=\"R4\",\n complex_data_type_reference_parsing=\"DISABLED\",\n enable_update_create=False,\n disable_referential_integrity=False,\n disable_resource_versioning=False,\n enable_history_import=False,\n default_search_handling_strict=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 System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\", new()\n {\n Name = \"fhir-notifications\",\n });\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Name = \"example-dataset\",\n Location = \"us-central1\",\n });\n\n var @default = new Gcp.Healthcare.FhirStore(\"default\", new()\n {\n Name = \"example-fhir-store\",\n Dataset = dataset.Id,\n Version = \"R4\",\n ComplexDataTypeReferenceParsing = \"DISABLED\",\n EnableUpdateCreate = false,\n DisableReferentialIntegrity = false,\n DisableResourceVersioning = false,\n EnableHistoryImport = false,\n DefaultSearchHandlingStrict = 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/v7/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"fhir-notifications\"),\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\tName: pulumi.String(\"example-dataset\"),\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\tName: pulumi.String(\"example-fhir-store\"),\n\t\t\tDataset: dataset.ID(),\n\t\t\tVersion: pulumi.String(\"R4\"),\n\t\t\tComplexDataTypeReferenceParsing: pulumi.String(\"DISABLED\"),\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\tDefaultSearchHandlingStrict: 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.pubsub.TopicArgs;\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\", TopicArgs.builder()\n .name(\"fhir-notifications\")\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder()\n .name(\"example-dataset\")\n .location(\"us-central1\")\n .build());\n\n var default_ = new FhirStore(\"default\", FhirStoreArgs.builder()\n .name(\"example-fhir-store\")\n .dataset(dataset.id())\n .version(\"R4\")\n .complexDataTypeReferenceParsing(\"DISABLED\")\n .enableUpdateCreate(false)\n .disableReferentialIntegrity(false)\n .disableResourceVersioning(false)\n .enableHistoryImport(false)\n .defaultSearchHandlingStrict(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 name: example-fhir-store\n dataset: ${dataset.id}\n version: R4\n complexDataTypeReferenceParsing: DISABLED\n enableUpdateCreate: false\n disableReferentialIntegrity: false\n disableResourceVersioning: false\n enableHistoryImport: false\n defaultSearchHandlingStrict: false\n notificationConfig:\n pubsubTopic: ${topic.id}\n labels:\n label1: labelvalue1\n topic:\n type: gcp:pubsub:Topic\n properties:\n name: fhir-notifications\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n name: example-dataset\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Healthcare Fhir Store Streaming Config\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {\n name: \"example-dataset\",\n location: \"us-central1\",\n});\nconst bqDataset = new gcp.bigquery.Dataset(\"bq_dataset\", {\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 name: \"example-fhir-store\",\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 lastUpdatedPartitionConfig: {\n type: \"HOUR\",\n expirationMs: \"1000000\",\n },\n },\n },\n }],\n});\nconst topic = new gcp.pubsub.Topic(\"topic\", {name: \"fhir-notifications\"});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.Dataset(\"dataset\",\n name=\"example-dataset\",\n location=\"us-central1\")\nbq_dataset = gcp.bigquery.Dataset(\"bq_dataset\",\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 name=\"example-fhir-store\",\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 last_updated_partition_config=gcp.healthcare.FhirStoreStreamConfigBigqueryDestinationSchemaConfigLastUpdatedPartitionConfigArgs(\n type=\"HOUR\",\n expiration_ms=\"1000000\",\n ),\n ),\n ),\n )])\ntopic = gcp.pubsub.Topic(\"topic\", name=\"fhir-notifications\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Name = \"example-dataset\",\n Location = \"us-central1\",\n });\n\n var bqDataset = new Gcp.BigQuery.Dataset(\"bq_dataset\", 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 Name = \"example-fhir-store\",\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 LastUpdatedPartitionConfig = new Gcp.Healthcare.Inputs.FhirStoreStreamConfigBigqueryDestinationSchemaConfigLastUpdatedPartitionConfigArgs\n {\n Type = \"HOUR\",\n ExpirationMs = \"1000000\",\n },\n },\n },\n },\n },\n });\n\n var topic = new Gcp.PubSub.Topic(\"topic\", new()\n {\n Name = \"fhir-notifications\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\tName: pulumi.String(\"example-dataset\"),\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, \"bq_dataset\", \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\tName: pulumi.String(\"example-fhir-store\"),\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\tLastUpdatedPartitionConfig: \u0026healthcare.FhirStoreStreamConfigBigqueryDestinationSchemaConfigLastUpdatedPartitionConfigArgs{\n\t\t\t\t\t\t\t\tType: pulumi.String(\"HOUR\"),\n\t\t\t\t\t\t\t\tExpirationMs: pulumi.String(\"1000000\"),\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\t_, err = pubsub.NewTopic(ctx, \"topic\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"fhir-notifications\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.healthcare.inputs.FhirStoreStreamConfigBigqueryDestinationSchemaConfigLastUpdatedPartitionConfigArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .name(\"example-dataset\")\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 .name(\"example-fhir-store\")\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 .lastUpdatedPartitionConfig(FhirStoreStreamConfigBigqueryDestinationSchemaConfigLastUpdatedPartitionConfigArgs.builder()\n .type(\"HOUR\")\n .expirationMs(1000000)\n .build())\n .build())\n .build())\n .build())\n .build());\n\n var topic = new Topic(\"topic\", TopicArgs.builder()\n .name(\"fhir-notifications\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:FhirStore\n properties:\n name: example-fhir-store\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 lastUpdatedPartitionConfig:\n type: HOUR\n expirationMs: 1e+06\n topic:\n type: gcp:pubsub:Topic\n properties:\n name: fhir-notifications\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n name: example-dataset\n location: us-central1\n bqDataset:\n type: gcp:bigquery:Dataset\n name: bq_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\u003c!--End PulumiCodeChooser --\u003e\n### Healthcare Fhir Store Notification Config\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {name: \"fhir-notifications\"});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {\n name: \"example-dataset\",\n location: \"us-central1\",\n});\nconst _default = new gcp.healthcare.FhirStore(\"default\", {\n name: \"example-fhir-store\",\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 notificationConfig: {\n pubsubTopic: topic.id,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\", name=\"fhir-notifications\")\ndataset = gcp.healthcare.Dataset(\"dataset\",\n name=\"example-dataset\",\n location=\"us-central1\")\ndefault = gcp.healthcare.FhirStore(\"default\",\n name=\"example-fhir-store\",\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_config=gcp.healthcare.FhirStoreNotificationConfigArgs(\n pubsub_topic=topic.id,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\", new()\n {\n Name = \"fhir-notifications\",\n });\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Name = \"example-dataset\",\n Location = \"us-central1\",\n });\n\n var @default = new Gcp.Healthcare.FhirStore(\"default\", new()\n {\n Name = \"example-fhir-store\",\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 NotificationConfig = new Gcp.Healthcare.Inputs.FhirStoreNotificationConfigArgs\n {\n PubsubTopic = topic.Id,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"fhir-notifications\"),\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\tName: pulumi.String(\"example-dataset\"),\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\tName: pulumi.String(\"example-fhir-store\"),\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\tNotificationConfig: \u0026healthcare.FhirStoreNotificationConfigArgs{\n\t\t\t\tPubsubTopic: topic.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.pubsub.TopicArgs;\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\", TopicArgs.builder()\n .name(\"fhir-notifications\")\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder()\n .name(\"example-dataset\")\n .location(\"us-central1\")\n .build());\n\n var default_ = new FhirStore(\"default\", FhirStoreArgs.builder()\n .name(\"example-fhir-store\")\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 .notificationConfig(FhirStoreNotificationConfigArgs.builder()\n .pubsubTopic(topic.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:FhirStore\n properties:\n name: example-fhir-store\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 notificationConfig:\n pubsubTopic: ${topic.id}\n topic:\n type: gcp:pubsub:Topic\n properties:\n name: fhir-notifications\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n name: example-dataset\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Healthcare Fhir Store Notification Configs\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {name: \"fhir-notifications\"});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {\n name: \"example-dataset\",\n location: \"us-central1\",\n});\nconst _default = new gcp.healthcare.FhirStore(\"default\", {\n name: \"example-fhir-store\",\n dataset: dataset.id,\n version: \"R4\",\n enableUpdateCreate: false,\n disableReferentialIntegrity: false,\n disableResourceVersioning: false,\n enableHistoryImport: false,\n enableHistoryModifications: false,\n labels: {\n label1: \"labelvalue1\",\n },\n notificationConfigs: [{\n pubsubTopic: topic.id,\n sendFullResource: true,\n sendPreviousResourceOnDelete: true,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\", name=\"fhir-notifications\")\ndataset = gcp.healthcare.Dataset(\"dataset\",\n name=\"example-dataset\",\n location=\"us-central1\")\ndefault = gcp.healthcare.FhirStore(\"default\",\n name=\"example-fhir-store\",\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 enable_history_modifications=False,\n labels={\n \"label1\": \"labelvalue1\",\n },\n notification_configs=[gcp.healthcare.FhirStoreNotificationConfigArgs(\n pubsub_topic=topic.id,\n send_full_resource=True,\n send_previous_resource_on_delete=True,\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\", new()\n {\n Name = \"fhir-notifications\",\n });\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Name = \"example-dataset\",\n Location = \"us-central1\",\n });\n\n var @default = new Gcp.Healthcare.FhirStore(\"default\", new()\n {\n Name = \"example-fhir-store\",\n Dataset = dataset.Id,\n Version = \"R4\",\n EnableUpdateCreate = false,\n DisableReferentialIntegrity = false,\n DisableResourceVersioning = false,\n EnableHistoryImport = false,\n EnableHistoryModifications = 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 SendPreviousResourceOnDelete = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"fhir-notifications\"),\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\tName: pulumi.String(\"example-dataset\"),\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\tName: pulumi.String(\"example-fhir-store\"),\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\tEnableHistoryModifications: 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\tSendPreviousResourceOnDelete: 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.pubsub.TopicArgs;\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\", TopicArgs.builder()\n .name(\"fhir-notifications\")\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder()\n .name(\"example-dataset\")\n .location(\"us-central1\")\n .build());\n\n var default_ = new FhirStore(\"default\", FhirStoreArgs.builder()\n .name(\"example-fhir-store\")\n .dataset(dataset.id())\n .version(\"R4\")\n .enableUpdateCreate(false)\n .disableReferentialIntegrity(false)\n .disableResourceVersioning(false)\n .enableHistoryImport(false)\n .enableHistoryModifications(false)\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .notificationConfigs(FhirStoreNotificationConfigArgs.builder()\n .pubsubTopic(topic.id())\n .sendFullResource(true)\n .sendPreviousResourceOnDelete(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:FhirStore\n properties:\n name: example-fhir-store\n dataset: ${dataset.id}\n version: R4\n enableUpdateCreate: false\n disableReferentialIntegrity: false\n disableResourceVersioning: false\n enableHistoryImport: false\n enableHistoryModifications: false\n labels:\n label1: labelvalue1\n notificationConfigs:\n - pubsubTopic: ${topic.id}\n sendFullResource: true\n sendPreviousResourceOnDelete: true\n topic:\n type: gcp:pubsub:Topic\n properties:\n name: fhir-notifications\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n name: example-dataset\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFhirStore can be imported using any of these accepted formats:\n\n* `{{dataset}}/fhirStores/{{name}}`\n\n* `{{dataset}}/{{name}}`\n\nWhen using the `pulumi import` command, FhirStore can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:healthcare/fhirStore:FhirStore default {{dataset}}/fhirStores/{{name}}\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## Example Usage\n\n### Healthcare Fhir Store Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {name: \"fhir-notifications\"});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {\n name: \"example-dataset\",\n location: \"us-central1\",\n});\nconst _default = new gcp.healthcare.FhirStore(\"default\", {\n name: \"example-fhir-store\",\n dataset: dataset.id,\n version: \"R4\",\n complexDataTypeReferenceParsing: \"DISABLED\",\n enableUpdateCreate: false,\n disableReferentialIntegrity: false,\n disableResourceVersioning: false,\n enableHistoryImport: false,\n defaultSearchHandlingStrict: false,\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\", name=\"fhir-notifications\")\ndataset = gcp.healthcare.Dataset(\"dataset\",\n name=\"example-dataset\",\n location=\"us-central1\")\ndefault = gcp.healthcare.FhirStore(\"default\",\n name=\"example-fhir-store\",\n dataset=dataset.id,\n version=\"R4\",\n complex_data_type_reference_parsing=\"DISABLED\",\n enable_update_create=False,\n disable_referential_integrity=False,\n disable_resource_versioning=False,\n enable_history_import=False,\n default_search_handling_strict=False,\n notification_configs=[gcp.healthcare.FhirStoreNotificationConfigArgs(\n pubsub_topic=topic.id,\n )],\n labels={\n \"label1\": \"labelvalue1\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\", new()\n {\n Name = \"fhir-notifications\",\n });\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Name = \"example-dataset\",\n Location = \"us-central1\",\n });\n\n var @default = new Gcp.Healthcare.FhirStore(\"default\", new()\n {\n Name = \"example-fhir-store\",\n Dataset = dataset.Id,\n Version = \"R4\",\n ComplexDataTypeReferenceParsing = \"DISABLED\",\n EnableUpdateCreate = false,\n DisableReferentialIntegrity = false,\n DisableResourceVersioning = false,\n EnableHistoryImport = false,\n DefaultSearchHandlingStrict = false,\n NotificationConfigs = new[]\n {\n new Gcp.Healthcare.Inputs.FhirStoreNotificationConfigArgs\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/v7/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"fhir-notifications\"),\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\tName: pulumi.String(\"example-dataset\"),\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\tName: pulumi.String(\"example-fhir-store\"),\n\t\t\tDataset: dataset.ID(),\n\t\t\tVersion: pulumi.String(\"R4\"),\n\t\t\tComplexDataTypeReferenceParsing: pulumi.String(\"DISABLED\"),\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\tDefaultSearchHandlingStrict: pulumi.Bool(false),\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},\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.pubsub.TopicArgs;\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\", TopicArgs.builder()\n .name(\"fhir-notifications\")\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder()\n .name(\"example-dataset\")\n .location(\"us-central1\")\n .build());\n\n var default_ = new FhirStore(\"default\", FhirStoreArgs.builder()\n .name(\"example-fhir-store\")\n .dataset(dataset.id())\n .version(\"R4\")\n .complexDataTypeReferenceParsing(\"DISABLED\")\n .enableUpdateCreate(false)\n .disableReferentialIntegrity(false)\n .disableResourceVersioning(false)\n .enableHistoryImport(false)\n .defaultSearchHandlingStrict(false)\n .notificationConfigs(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 name: example-fhir-store\n dataset: ${dataset.id}\n version: R4\n complexDataTypeReferenceParsing: DISABLED\n enableUpdateCreate: false\n disableReferentialIntegrity: false\n disableResourceVersioning: false\n enableHistoryImport: false\n defaultSearchHandlingStrict: false\n notificationConfigs:\n - pubsubTopic: ${topic.id}\n labels:\n label1: labelvalue1\n topic:\n type: gcp:pubsub:Topic\n properties:\n name: fhir-notifications\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n name: example-dataset\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Healthcare Fhir Store Streaming Config\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {\n name: \"example-dataset\",\n location: \"us-central1\",\n});\nconst bqDataset = new gcp.bigquery.Dataset(\"bq_dataset\", {\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 name: \"example-fhir-store\",\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 lastUpdatedPartitionConfig: {\n type: \"HOUR\",\n expirationMs: \"1000000\",\n },\n },\n },\n }],\n});\nconst topic = new gcp.pubsub.Topic(\"topic\", {name: \"fhir-notifications\"});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.Dataset(\"dataset\",\n name=\"example-dataset\",\n location=\"us-central1\")\nbq_dataset = gcp.bigquery.Dataset(\"bq_dataset\",\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 name=\"example-fhir-store\",\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 last_updated_partition_config=gcp.healthcare.FhirStoreStreamConfigBigqueryDestinationSchemaConfigLastUpdatedPartitionConfigArgs(\n type=\"HOUR\",\n expiration_ms=\"1000000\",\n ),\n ),\n ),\n )])\ntopic = gcp.pubsub.Topic(\"topic\", name=\"fhir-notifications\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Name = \"example-dataset\",\n Location = \"us-central1\",\n });\n\n var bqDataset = new Gcp.BigQuery.Dataset(\"bq_dataset\", 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 Name = \"example-fhir-store\",\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 LastUpdatedPartitionConfig = new Gcp.Healthcare.Inputs.FhirStoreStreamConfigBigqueryDestinationSchemaConfigLastUpdatedPartitionConfigArgs\n {\n Type = \"HOUR\",\n ExpirationMs = \"1000000\",\n },\n },\n },\n },\n },\n });\n\n var topic = new Gcp.PubSub.Topic(\"topic\", new()\n {\n Name = \"fhir-notifications\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\tName: pulumi.String(\"example-dataset\"),\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, \"bq_dataset\", \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\tName: pulumi.String(\"example-fhir-store\"),\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\tLastUpdatedPartitionConfig: \u0026healthcare.FhirStoreStreamConfigBigqueryDestinationSchemaConfigLastUpdatedPartitionConfigArgs{\n\t\t\t\t\t\t\t\tType: pulumi.String(\"HOUR\"),\n\t\t\t\t\t\t\t\tExpirationMs: pulumi.String(\"1000000\"),\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\t_, err = pubsub.NewTopic(ctx, \"topic\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"fhir-notifications\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.healthcare.inputs.FhirStoreStreamConfigBigqueryDestinationSchemaConfigLastUpdatedPartitionConfigArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .name(\"example-dataset\")\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 .name(\"example-fhir-store\")\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 .lastUpdatedPartitionConfig(FhirStoreStreamConfigBigqueryDestinationSchemaConfigLastUpdatedPartitionConfigArgs.builder()\n .type(\"HOUR\")\n .expirationMs(1000000)\n .build())\n .build())\n .build())\n .build())\n .build());\n\n var topic = new Topic(\"topic\", TopicArgs.builder()\n .name(\"fhir-notifications\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:FhirStore\n properties:\n name: example-fhir-store\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 lastUpdatedPartitionConfig:\n type: HOUR\n expirationMs: 1e+06\n topic:\n type: gcp:pubsub:Topic\n properties:\n name: fhir-notifications\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n name: example-dataset\n location: us-central1\n bqDataset:\n type: gcp:bigquery:Dataset\n name: bq_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\u003c!--End PulumiCodeChooser --\u003e\n### Healthcare Fhir Store Notification Configs\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {name: \"fhir-notifications\"});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {\n name: \"example-dataset\",\n location: \"us-central1\",\n});\nconst _default = new gcp.healthcare.FhirStore(\"default\", {\n name: \"example-fhir-store\",\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 sendPreviousResourceOnDelete: true,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\", name=\"fhir-notifications\")\ndataset = gcp.healthcare.Dataset(\"dataset\",\n name=\"example-dataset\",\n location=\"us-central1\")\ndefault = gcp.healthcare.FhirStore(\"default\",\n name=\"example-fhir-store\",\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 send_previous_resource_on_delete=True,\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\", new()\n {\n Name = \"fhir-notifications\",\n });\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Name = \"example-dataset\",\n Location = \"us-central1\",\n });\n\n var @default = new Gcp.Healthcare.FhirStore(\"default\", new()\n {\n Name = \"example-fhir-store\",\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 SendPreviousResourceOnDelete = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"fhir-notifications\"),\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\tName: pulumi.String(\"example-dataset\"),\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\tName: pulumi.String(\"example-fhir-store\"),\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\tSendPreviousResourceOnDelete: 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.pubsub.TopicArgs;\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\", TopicArgs.builder()\n .name(\"fhir-notifications\")\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder()\n .name(\"example-dataset\")\n .location(\"us-central1\")\n .build());\n\n var default_ = new FhirStore(\"default\", FhirStoreArgs.builder()\n .name(\"example-fhir-store\")\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 .sendPreviousResourceOnDelete(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:FhirStore\n properties:\n name: example-fhir-store\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 sendPreviousResourceOnDelete: true\n topic:\n type: gcp:pubsub:Topic\n properties:\n name: fhir-notifications\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n name: example-dataset\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFhirStore can be imported using any of these accepted formats:\n\n* `{{dataset}}/fhirStores/{{name}}`\n\n* `{{dataset}}/{{name}}`\n\nWhen using the `pulumi import` command, FhirStore can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:healthcare/fhirStore:FhirStore default {{dataset}}/fhirStores/{{name}}\n```\n\n```sh\n$ pulumi import gcp:healthcare/fhirStore:FhirStore default {{dataset}}/{{name}}\n```\n\n", "properties": { "complexDataTypeReferenceParsing": { "type": "string", @@ -197163,7 +198522,8 @@ }, "notificationConfig": { "$ref": "#/types/gcp:healthcare/FhirStoreNotificationConfig:FhirStoreNotificationConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "(Optional, Deprecated)\nA nested object resource\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", + "deprecationMessage": "`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead." }, "notificationConfigs": { "type": "array", @@ -197255,7 +198615,8 @@ }, "notificationConfig": { "$ref": "#/types/gcp:healthcare/FhirStoreNotificationConfig:FhirStoreNotificationConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "(Optional, Deprecated)\nA nested object resource\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", + "deprecationMessage": "`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead." }, "notificationConfigs": { "type": "array", @@ -197341,7 +198702,8 @@ }, "notificationConfig": { "$ref": "#/types/gcp:healthcare/FhirStoreNotificationConfig:FhirStoreNotificationConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "(Optional, Deprecated)\nA nested object resource\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", + "deprecationMessage": "`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead." }, "notificationConfigs": { "type": "array", @@ -203427,6 +204789,10 @@ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", "secret": true }, + "endpointGlobalAccess": { + "type": "boolean", + "description": "Enable global access for endpoint attachment.\n" + }, "endpointIp": { "type": "string", "description": "The Private Service Connect connection endpoint ip.\n" @@ -203483,6 +204849,10 @@ "type": "string", "description": "Description of the resource.\n" }, + "endpointGlobalAccess": { + "type": "boolean", + "description": "Enable global access for endpoint attachment.\n" + }, "labels": { "type": "object", "additionalProperties": { @@ -203534,6 +204904,10 @@ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", "secret": true }, + "endpointGlobalAccess": { + "type": "boolean", + "description": "Enable global access for endpoint attachment.\n" + }, "endpointIp": { "type": "string", "description": "The Private Service Connect connection endpoint ip.\n" @@ -203863,7 +205237,7 @@ }, "skipInitialVersionCreation": { "type": "boolean", - "description": "If set to true, the request will create a CryptoKey without any CryptoKeyVersions.\nYou must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion.\n" + "description": "If set to true, the request will create a CryptoKey without any CryptoKeyVersions.\nYou must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion\nor `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion.\n" }, "versionTemplate": { "$ref": "#/types/gcp:kms/CryptoKeyVersionTemplate:CryptoKeyVersionTemplate", @@ -203925,7 +205299,7 @@ }, "skipInitialVersionCreation": { "type": "boolean", - "description": "If set to true, the request will create a CryptoKey without any CryptoKeyVersions.\nYou must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion.\n", + "description": "If set to true, the request will create a CryptoKey without any CryptoKeyVersions.\nYou must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion\nor `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion.\n", "willReplaceOnChanges": true }, "versionTemplate": { @@ -204005,7 +205379,7 @@ }, "skipInitialVersionCreation": { "type": "boolean", - "description": "If set to true, the request will create a CryptoKey without any CryptoKeyVersions.\nYou must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion.\n", + "description": "If set to true, the request will create a CryptoKey without any CryptoKeyVersions.\nYou must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion\nor `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion.\n", "willReplaceOnChanges": true }, "versionTemplate": { @@ -211229,6 +212603,10 @@ "type": "string", "description": "Reports the resource name of the Active Directory policy being used. Inherited from storage pool.\n" }, + "backupConfig": { + "$ref": "#/types/gcp:netapp/VolumeBackupConfig:VolumeBackupConfig", + "description": "Backup configuration for the volume.\nStructure is documented below.\n" + }, "capacityGib": { "type": "string", "description": "Capacity of the volume (in GiB).\n" @@ -211412,6 +212790,10 @@ "usedGib" ], "inputProperties": { + "backupConfig": { + "$ref": "#/types/gcp:netapp/VolumeBackupConfig:VolumeBackupConfig", + "description": "Backup configuration for the volume.\nStructure is documented below.\n" + }, "capacityGib": { "type": "string", "description": "Capacity of the volume (in GiB).\n" @@ -211523,6 +212905,10 @@ "type": "string", "description": "Reports the resource name of the Active Directory policy being used. Inherited from storage pool.\n" }, + "backupConfig": { + "$ref": "#/types/gcp:netapp/VolumeBackupConfig:VolumeBackupConfig", + "description": "Backup configuration for the volume.\nStructure is documented below.\n" + }, "capacityGib": { "type": "string", "description": "Capacity of the volume (in GiB).\n" @@ -218345,6 +219731,186 @@ "type": "object" } }, + "gcp:networkservices/serviceLbPolicies:ServiceLbPolicies": { + "description": "## Example Usage\n\n### Network Services Service Lb Policies Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.networkservices.ServiceLbPolicies(\"default\", {\n name: \"my-lb-policy\",\n location: \"global\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.networkservices.ServiceLbPolicies(\"default\",\n name=\"my-lb-policy\",\n location=\"global\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.NetworkServices.ServiceLbPolicies(\"default\", new()\n {\n Name = \"my-lb-policy\",\n Location = \"global\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networkservices.NewServiceLbPolicies(ctx, \"default\", \u0026networkservices.ServiceLbPoliciesArgs{\n\t\t\tName: pulumi.String(\"my-lb-policy\"),\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.networkservices.ServiceLbPolicies;\nimport com.pulumi.gcp.networkservices.ServiceLbPoliciesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ServiceLbPolicies(\"default\", ServiceLbPoliciesArgs.builder()\n .name(\"my-lb-policy\")\n .location(\"global\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:networkservices:ServiceLbPolicies\n properties:\n name: my-lb-policy\n location: global\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Services Service Lb Policies Advanced\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.networkservices.ServiceLbPolicies(\"default\", {\n name: \"my-lb-policy\",\n location: \"global\",\n description: \"my description\",\n loadBalancingAlgorithm: \"SPRAY_TO_REGION\",\n autoCapacityDrain: {\n enable: true,\n },\n failoverConfig: {\n failoverHealthThreshold: 70,\n },\n labels: {\n foo: \"bar\",\n },\n});\nconst defaultBackendService = new gcp.compute.BackendService(\"default\", {\n name: \"my-lb-backend\",\n description: \"my description\",\n loadBalancingScheme: \"INTERNAL_SELF_MANAGED\",\n protocol: \"HTTP\",\n serviceLbPolicy: pulumi.interpolate`//networkservices.googleapis.com/${_default.id}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.networkservices.ServiceLbPolicies(\"default\",\n name=\"my-lb-policy\",\n location=\"global\",\n description=\"my description\",\n load_balancing_algorithm=\"SPRAY_TO_REGION\",\n auto_capacity_drain=gcp.networkservices.ServiceLbPoliciesAutoCapacityDrainArgs(\n enable=True,\n ),\n failover_config=gcp.networkservices.ServiceLbPoliciesFailoverConfigArgs(\n failover_health_threshold=70,\n ),\n labels={\n \"foo\": \"bar\",\n })\ndefault_backend_service = gcp.compute.BackendService(\"default\",\n name=\"my-lb-backend\",\n description=\"my description\",\n load_balancing_scheme=\"INTERNAL_SELF_MANAGED\",\n protocol=\"HTTP\",\n service_lb_policy=default.id.apply(lambda id: f\"//networkservices.googleapis.com/{id}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.NetworkServices.ServiceLbPolicies(\"default\", new()\n {\n Name = \"my-lb-policy\",\n Location = \"global\",\n Description = \"my description\",\n LoadBalancingAlgorithm = \"SPRAY_TO_REGION\",\n AutoCapacityDrain = new Gcp.NetworkServices.Inputs.ServiceLbPoliciesAutoCapacityDrainArgs\n {\n Enable = true,\n },\n FailoverConfig = new Gcp.NetworkServices.Inputs.ServiceLbPoliciesFailoverConfigArgs\n {\n FailoverHealthThreshold = 70,\n },\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n var defaultBackendService = new Gcp.Compute.BackendService(\"default\", new()\n {\n Name = \"my-lb-backend\",\n Description = \"my description\",\n LoadBalancingScheme = \"INTERNAL_SELF_MANAGED\",\n Protocol = \"HTTP\",\n ServiceLbPolicy = @default.Id.Apply(id =\u003e $\"//networkservices.googleapis.com/{id}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networkservices.NewServiceLbPolicies(ctx, \"default\", \u0026networkservices.ServiceLbPoliciesArgs{\n\t\t\tName: pulumi.String(\"my-lb-policy\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tLoadBalancingAlgorithm: pulumi.String(\"SPRAY_TO_REGION\"),\n\t\t\tAutoCapacityDrain: \u0026networkservices.ServiceLbPoliciesAutoCapacityDrainArgs{\n\t\t\t\tEnable: pulumi.Bool(true),\n\t\t\t},\n\t\t\tFailoverConfig: \u0026networkservices.ServiceLbPoliciesFailoverConfigArgs{\n\t\t\t\tFailoverHealthThreshold: pulumi.Int(70),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"default\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"my-lb-backend\"),\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_SELF_MANAGED\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tServiceLbPolicy: _default.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"//networkservices.googleapis.com/%v\", id), 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.networkservices.ServiceLbPolicies;\nimport com.pulumi.gcp.networkservices.ServiceLbPoliciesArgs;\nimport com.pulumi.gcp.networkservices.inputs.ServiceLbPoliciesAutoCapacityDrainArgs;\nimport com.pulumi.gcp.networkservices.inputs.ServiceLbPoliciesFailoverConfigArgs;\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 default_ = new ServiceLbPolicies(\"default\", ServiceLbPoliciesArgs.builder()\n .name(\"my-lb-policy\")\n .location(\"global\")\n .description(\"my description\")\n .loadBalancingAlgorithm(\"SPRAY_TO_REGION\")\n .autoCapacityDrain(ServiceLbPoliciesAutoCapacityDrainArgs.builder()\n .enable(true)\n .build())\n .failoverConfig(ServiceLbPoliciesFailoverConfigArgs.builder()\n .failoverHealthThreshold(70)\n .build())\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder()\n .name(\"my-lb-backend\")\n .description(\"my description\")\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .protocol(\"HTTP\")\n .serviceLbPolicy(default_.id().applyValue(id -\u003e String.format(\"//networkservices.googleapis.com/%s\", id)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:networkservices:ServiceLbPolicies\n properties:\n name: my-lb-policy\n location: global\n description: my description\n loadBalancingAlgorithm: SPRAY_TO_REGION\n autoCapacityDrain:\n enable: true\n failoverConfig:\n failoverHealthThreshold: 70\n labels:\n foo: bar\n defaultBackendService:\n type: gcp:compute:BackendService\n name: default\n properties:\n name: my-lb-backend\n description: my description\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n protocol: HTTP\n serviceLbPolicy: //networkservices.googleapis.com/${default.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nServiceLbPolicies can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, ServiceLbPolicies can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{location}}/{{name}}\n```\n\n", + "properties": { + "autoCapacityDrain": { + "$ref": "#/types/gcp:networkservices/ServiceLbPoliciesAutoCapacityDrain:ServiceLbPoliciesAutoCapacityDrain", + "description": "Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing.\nStructure is documented below.\n" + }, + "createTime": { + "type": "string", + "description": "Time the ServiceLbPolicy was created in UTC.\n" + }, + "description": { + "type": "string", + "description": "A free-text description of the resource. Max length 1024 characters.\n" + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "failoverConfig": { + "$ref": "#/types/gcp:networkservices/ServiceLbPoliciesFailoverConfig:ServiceLbPoliciesFailoverConfig", + "description": "Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy.\nStructure is documented below.\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Set of label tags associated with the ServiceLbPolicy resource.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "loadBalancingAlgorithm": { + "type": "string", + "description": "The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION.\nPossible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`.\n" + }, + "location": { + "type": "string", + "description": "The location of the service lb policy.\n\n\n- - -\n" + }, + "name": { + "type": "string", + "description": "Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`.\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n" + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "updateTime": { + "type": "string", + "description": "Time the ServiceLbPolicy was updated in UTC.\n" + } + }, + "required": [ + "createTime", + "effectiveLabels", + "location", + "name", + "project", + "pulumiLabels", + "updateTime" + ], + "inputProperties": { + "autoCapacityDrain": { + "$ref": "#/types/gcp:networkservices/ServiceLbPoliciesAutoCapacityDrain:ServiceLbPoliciesAutoCapacityDrain", + "description": "Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing.\nStructure is documented below.\n" + }, + "description": { + "type": "string", + "description": "A free-text description of the resource. Max length 1024 characters.\n" + }, + "failoverConfig": { + "$ref": "#/types/gcp:networkservices/ServiceLbPoliciesFailoverConfig:ServiceLbPoliciesFailoverConfig", + "description": "Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy.\nStructure is documented below.\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Set of label tags associated with the ServiceLbPolicy resource.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "loadBalancingAlgorithm": { + "type": "string", + "description": "The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION.\nPossible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`.\n" + }, + "location": { + "type": "string", + "description": "The location of the service lb policy.\n\n\n- - -\n" + }, + "name": { + "type": "string", + "description": "Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`.\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 + } + }, + "requiredInputs": [ + "location" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering ServiceLbPolicies resources.\n", + "properties": { + "autoCapacityDrain": { + "$ref": "#/types/gcp:networkservices/ServiceLbPoliciesAutoCapacityDrain:ServiceLbPoliciesAutoCapacityDrain", + "description": "Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing.\nStructure is documented below.\n" + }, + "createTime": { + "type": "string", + "description": "Time the ServiceLbPolicy was created in UTC.\n" + }, + "description": { + "type": "string", + "description": "A free-text description of the resource. Max length 1024 characters.\n" + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "failoverConfig": { + "$ref": "#/types/gcp:networkservices/ServiceLbPoliciesFailoverConfig:ServiceLbPoliciesFailoverConfig", + "description": "Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy.\nStructure is documented below.\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Set of label tags associated with the ServiceLbPolicy resource.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "loadBalancingAlgorithm": { + "type": "string", + "description": "The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION.\nPossible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`.\n" + }, + "location": { + "type": "string", + "description": "The location of the service lb policy.\n\n\n- - -\n" + }, + "name": { + "type": "string", + "description": "Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`.\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "updateTime": { + "type": "string", + "description": "Time the ServiceLbPolicy was updated in UTC.\n" + } + }, + "type": "object" + } + }, "gcp:networkservices/tcpRoute:TcpRoute": { "description": "## Example Usage\n\n### Network Services Tcp Route Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultHttpHealthCheck = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"backend-service-health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst _default = new gcp.compute.BackendService(\"default\", {\n name: \"my-backend-service\",\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst defaultTcpRoute = new gcp.networkservices.TcpRoute(\"default\", {\n name: \"my-tcp-route\",\n labels: {\n foo: \"bar\",\n },\n description: \"my description\",\n rules: [{\n matches: [{\n address: \"10.0.0.1/32\",\n port: \"8081\",\n }],\n action: {\n destinations: [{\n serviceName: _default.id,\n weight: 1,\n }],\n originalDestination: false,\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_http_health_check = gcp.compute.HttpHealthCheck(\"default\",\n name=\"backend-service-health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\ndefault = gcp.compute.BackendService(\"default\",\n name=\"my-backend-service\",\n health_checks=default_http_health_check.id)\ndefault_tcp_route = gcp.networkservices.TcpRoute(\"default\",\n name=\"my-tcp-route\",\n labels={\n \"foo\": \"bar\",\n },\n description=\"my description\",\n rules=[gcp.networkservices.TcpRouteRuleArgs(\n matches=[gcp.networkservices.TcpRouteRuleMatchArgs(\n address=\"10.0.0.1/32\",\n port=\"8081\",\n )],\n action=gcp.networkservices.TcpRouteRuleActionArgs(\n destinations=[gcp.networkservices.TcpRouteRuleActionDestinationArgs(\n service_name=default.id,\n weight=1,\n )],\n original_destination=False,\n ),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultHttpHealthCheck = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"backend-service-health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n Name = \"my-backend-service\",\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var defaultTcpRoute = new Gcp.NetworkServices.TcpRoute(\"default\", new()\n {\n Name = \"my-tcp-route\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Description = \"my description\",\n Rules = new[]\n {\n new Gcp.NetworkServices.Inputs.TcpRouteRuleArgs\n {\n Matches = new[]\n {\n new Gcp.NetworkServices.Inputs.TcpRouteRuleMatchArgs\n {\n Address = \"10.0.0.1/32\",\n Port = \"8081\",\n },\n },\n Action = new Gcp.NetworkServices.Inputs.TcpRouteRuleActionArgs\n {\n Destinations = new[]\n {\n new Gcp.NetworkServices.Inputs.TcpRouteRuleActionDestinationArgs\n {\n ServiceName = @default.Id,\n Weight = 1,\n },\n },\n OriginalDestination = false,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultHttpHealthCheck, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"backend-service-health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"default\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"my-backend-service\"),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkservices.NewTcpRoute(ctx, \"default\", \u0026networkservices.TcpRouteArgs{\n\t\t\tName: pulumi.String(\"my-tcp-route\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tRules: networkservices.TcpRouteRuleArray{\n\t\t\t\t\u0026networkservices.TcpRouteRuleArgs{\n\t\t\t\t\tMatches: networkservices.TcpRouteRuleMatchArray{\n\t\t\t\t\t\t\u0026networkservices.TcpRouteRuleMatchArgs{\n\t\t\t\t\t\t\tAddress: pulumi.String(\"10.0.0.1/32\"),\n\t\t\t\t\t\t\tPort: pulumi.String(\"8081\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tAction: \u0026networkservices.TcpRouteRuleActionArgs{\n\t\t\t\t\t\tDestinations: networkservices.TcpRouteRuleActionDestinationArray{\n\t\t\t\t\t\t\t\u0026networkservices.TcpRouteRuleActionDestinationArgs{\n\t\t\t\t\t\t\t\tServiceName: _default.ID(),\n\t\t\t\t\t\t\t\tWeight: pulumi.Int(1),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tOriginalDestination: pulumi.Bool(false),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.networkservices.TcpRoute;\nimport com.pulumi.gcp.networkservices.TcpRouteArgs;\nimport com.pulumi.gcp.networkservices.inputs.TcpRouteRuleArgs;\nimport com.pulumi.gcp.networkservices.inputs.TcpRouteRuleActionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder()\n .name(\"backend-service-health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder()\n .name(\"my-backend-service\")\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var defaultTcpRoute = new TcpRoute(\"defaultTcpRoute\", TcpRouteArgs.builder()\n .name(\"my-tcp-route\")\n .labels(Map.of(\"foo\", \"bar\"))\n .description(\"my description\")\n .rules(TcpRouteRuleArgs.builder()\n .matches(TcpRouteRuleMatchArgs.builder()\n .address(\"10.0.0.1/32\")\n .port(\"8081\")\n .build())\n .action(TcpRouteRuleActionArgs.builder()\n .destinations(TcpRouteRuleActionDestinationArgs.builder()\n .serviceName(default_.id())\n .weight(1)\n .build())\n .originalDestination(false)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:BackendService\n properties:\n name: my-backend-service\n healthChecks: ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n name: default\n properties:\n name: backend-service-health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n defaultTcpRoute:\n type: gcp:networkservices:TcpRoute\n name: default\n properties:\n name: my-tcp-route\n labels:\n foo: bar\n description: my description\n rules:\n - matches:\n - address: 10.0.0.1/32\n port: '8081'\n action:\n destinations:\n - serviceName: ${default.id}\n weight: 1\n originalDestination: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Services Tcp Route Actions\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultHttpHealthCheck = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"backend-service-health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst _default = new gcp.compute.BackendService(\"default\", {\n name: \"my-backend-service\",\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst defaultTcpRoute = new gcp.networkservices.TcpRoute(\"default\", {\n name: \"my-tcp-route\",\n labels: {\n foo: \"bar\",\n },\n description: \"my description\",\n rules: [{\n action: {\n destinations: [{\n serviceName: _default.id,\n weight: 1,\n }],\n originalDestination: false,\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_http_health_check = gcp.compute.HttpHealthCheck(\"default\",\n name=\"backend-service-health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\ndefault = gcp.compute.BackendService(\"default\",\n name=\"my-backend-service\",\n health_checks=default_http_health_check.id)\ndefault_tcp_route = gcp.networkservices.TcpRoute(\"default\",\n name=\"my-tcp-route\",\n labels={\n \"foo\": \"bar\",\n },\n description=\"my description\",\n rules=[gcp.networkservices.TcpRouteRuleArgs(\n action=gcp.networkservices.TcpRouteRuleActionArgs(\n destinations=[gcp.networkservices.TcpRouteRuleActionDestinationArgs(\n service_name=default.id,\n weight=1,\n )],\n original_destination=False,\n ),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultHttpHealthCheck = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"backend-service-health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n Name = \"my-backend-service\",\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var defaultTcpRoute = new Gcp.NetworkServices.TcpRoute(\"default\", new()\n {\n Name = \"my-tcp-route\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Description = \"my description\",\n Rules = new[]\n {\n new Gcp.NetworkServices.Inputs.TcpRouteRuleArgs\n {\n Action = new Gcp.NetworkServices.Inputs.TcpRouteRuleActionArgs\n {\n Destinations = new[]\n {\n new Gcp.NetworkServices.Inputs.TcpRouteRuleActionDestinationArgs\n {\n ServiceName = @default.Id,\n Weight = 1,\n },\n },\n OriginalDestination = false,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultHttpHealthCheck, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"backend-service-health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"default\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"my-backend-service\"),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkservices.NewTcpRoute(ctx, \"default\", \u0026networkservices.TcpRouteArgs{\n\t\t\tName: pulumi.String(\"my-tcp-route\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tRules: networkservices.TcpRouteRuleArray{\n\t\t\t\t\u0026networkservices.TcpRouteRuleArgs{\n\t\t\t\t\tAction: \u0026networkservices.TcpRouteRuleActionArgs{\n\t\t\t\t\t\tDestinations: networkservices.TcpRouteRuleActionDestinationArray{\n\t\t\t\t\t\t\t\u0026networkservices.TcpRouteRuleActionDestinationArgs{\n\t\t\t\t\t\t\t\tServiceName: _default.ID(),\n\t\t\t\t\t\t\t\tWeight: pulumi.Int(1),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tOriginalDestination: pulumi.Bool(false),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.networkservices.TcpRoute;\nimport com.pulumi.gcp.networkservices.TcpRouteArgs;\nimport com.pulumi.gcp.networkservices.inputs.TcpRouteRuleArgs;\nimport com.pulumi.gcp.networkservices.inputs.TcpRouteRuleActionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder()\n .name(\"backend-service-health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder()\n .name(\"my-backend-service\")\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var defaultTcpRoute = new TcpRoute(\"defaultTcpRoute\", TcpRouteArgs.builder()\n .name(\"my-tcp-route\")\n .labels(Map.of(\"foo\", \"bar\"))\n .description(\"my description\")\n .rules(TcpRouteRuleArgs.builder()\n .action(TcpRouteRuleActionArgs.builder()\n .destinations(TcpRouteRuleActionDestinationArgs.builder()\n .serviceName(default_.id())\n .weight(1)\n .build())\n .originalDestination(false)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:BackendService\n properties:\n name: my-backend-service\n healthChecks: ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n name: default\n properties:\n name: backend-service-health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n defaultTcpRoute:\n type: gcp:networkservices:TcpRoute\n name: default\n properties:\n name: my-tcp-route\n labels:\n foo: bar\n description: my description\n rules:\n - action:\n destinations:\n - serviceName: ${default.id}\n weight: 1\n originalDestination: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Services Tcp Route Mesh Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultHttpHealthCheck = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"backend-service-health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst _default = new gcp.compute.BackendService(\"default\", {\n name: \"my-backend-service\",\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst defaultMesh = new gcp.networkservices.Mesh(\"default\", {\n name: \"my-tcp-route\",\n labels: {\n foo: \"bar\",\n },\n description: \"my description\",\n});\nconst defaultTcpRoute = new gcp.networkservices.TcpRoute(\"default\", {\n name: \"my-tcp-route\",\n labels: {\n foo: \"bar\",\n },\n description: \"my description\",\n meshes: [defaultMesh.id],\n rules: [{\n matches: [{\n address: \"10.0.0.1/32\",\n port: \"8081\",\n }],\n action: {\n destinations: [{\n serviceName: _default.id,\n weight: 1,\n }],\n originalDestination: false,\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_http_health_check = gcp.compute.HttpHealthCheck(\"default\",\n name=\"backend-service-health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\ndefault = gcp.compute.BackendService(\"default\",\n name=\"my-backend-service\",\n health_checks=default_http_health_check.id)\ndefault_mesh = gcp.networkservices.Mesh(\"default\",\n name=\"my-tcp-route\",\n labels={\n \"foo\": \"bar\",\n },\n description=\"my description\")\ndefault_tcp_route = gcp.networkservices.TcpRoute(\"default\",\n name=\"my-tcp-route\",\n labels={\n \"foo\": \"bar\",\n },\n description=\"my description\",\n meshes=[default_mesh.id],\n rules=[gcp.networkservices.TcpRouteRuleArgs(\n matches=[gcp.networkservices.TcpRouteRuleMatchArgs(\n address=\"10.0.0.1/32\",\n port=\"8081\",\n )],\n action=gcp.networkservices.TcpRouteRuleActionArgs(\n destinations=[gcp.networkservices.TcpRouteRuleActionDestinationArgs(\n service_name=default.id,\n weight=1,\n )],\n original_destination=False,\n ),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultHttpHealthCheck = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"backend-service-health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n Name = \"my-backend-service\",\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var defaultMesh = new Gcp.NetworkServices.Mesh(\"default\", new()\n {\n Name = \"my-tcp-route\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Description = \"my description\",\n });\n\n var defaultTcpRoute = new Gcp.NetworkServices.TcpRoute(\"default\", new()\n {\n Name = \"my-tcp-route\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Description = \"my description\",\n Meshes = new[]\n {\n defaultMesh.Id,\n },\n Rules = new[]\n {\n new Gcp.NetworkServices.Inputs.TcpRouteRuleArgs\n {\n Matches = new[]\n {\n new Gcp.NetworkServices.Inputs.TcpRouteRuleMatchArgs\n {\n Address = \"10.0.0.1/32\",\n Port = \"8081\",\n },\n },\n Action = new Gcp.NetworkServices.Inputs.TcpRouteRuleActionArgs\n {\n Destinations = new[]\n {\n new Gcp.NetworkServices.Inputs.TcpRouteRuleActionDestinationArgs\n {\n ServiceName = @default.Id,\n Weight = 1,\n },\n },\n OriginalDestination = false,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultHttpHealthCheck, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"backend-service-health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"default\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"my-backend-service\"),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultMesh, err := networkservices.NewMesh(ctx, \"default\", \u0026networkservices.MeshArgs{\n\t\t\tName: pulumi.String(\"my-tcp-route\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkservices.NewTcpRoute(ctx, \"default\", \u0026networkservices.TcpRouteArgs{\n\t\t\tName: pulumi.String(\"my-tcp-route\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tMeshes: pulumi.StringArray{\n\t\t\t\tdefaultMesh.ID(),\n\t\t\t},\n\t\t\tRules: networkservices.TcpRouteRuleArray{\n\t\t\t\t\u0026networkservices.TcpRouteRuleArgs{\n\t\t\t\t\tMatches: networkservices.TcpRouteRuleMatchArray{\n\t\t\t\t\t\t\u0026networkservices.TcpRouteRuleMatchArgs{\n\t\t\t\t\t\t\tAddress: pulumi.String(\"10.0.0.1/32\"),\n\t\t\t\t\t\t\tPort: pulumi.String(\"8081\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tAction: \u0026networkservices.TcpRouteRuleActionArgs{\n\t\t\t\t\t\tDestinations: networkservices.TcpRouteRuleActionDestinationArray{\n\t\t\t\t\t\t\t\u0026networkservices.TcpRouteRuleActionDestinationArgs{\n\t\t\t\t\t\t\t\tServiceName: _default.ID(),\n\t\t\t\t\t\t\t\tWeight: pulumi.Int(1),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tOriginalDestination: pulumi.Bool(false),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.networkservices.Mesh;\nimport com.pulumi.gcp.networkservices.MeshArgs;\nimport com.pulumi.gcp.networkservices.TcpRoute;\nimport com.pulumi.gcp.networkservices.TcpRouteArgs;\nimport com.pulumi.gcp.networkservices.inputs.TcpRouteRuleArgs;\nimport com.pulumi.gcp.networkservices.inputs.TcpRouteRuleActionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder()\n .name(\"backend-service-health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder()\n .name(\"my-backend-service\")\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var defaultMesh = new Mesh(\"defaultMesh\", MeshArgs.builder()\n .name(\"my-tcp-route\")\n .labels(Map.of(\"foo\", \"bar\"))\n .description(\"my description\")\n .build());\n\n var defaultTcpRoute = new TcpRoute(\"defaultTcpRoute\", TcpRouteArgs.builder()\n .name(\"my-tcp-route\")\n .labels(Map.of(\"foo\", \"bar\"))\n .description(\"my description\")\n .meshes(defaultMesh.id())\n .rules(TcpRouteRuleArgs.builder()\n .matches(TcpRouteRuleMatchArgs.builder()\n .address(\"10.0.0.1/32\")\n .port(\"8081\")\n .build())\n .action(TcpRouteRuleActionArgs.builder()\n .destinations(TcpRouteRuleActionDestinationArgs.builder()\n .serviceName(default_.id())\n .weight(1)\n .build())\n .originalDestination(false)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:BackendService\n properties:\n name: my-backend-service\n healthChecks: ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n name: default\n properties:\n name: backend-service-health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n defaultMesh:\n type: gcp:networkservices:Mesh\n name: default\n properties:\n name: my-tcp-route\n labels:\n foo: bar\n description: my description\n defaultTcpRoute:\n type: gcp:networkservices:TcpRoute\n name: default\n properties:\n name: my-tcp-route\n labels:\n foo: bar\n description: my description\n meshes:\n - ${defaultMesh.id}\n rules:\n - matches:\n - address: 10.0.0.1/32\n port: '8081'\n action:\n destinations:\n - serviceName: ${default.id}\n weight: 1\n originalDestination: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Services Tcp Route Gateway Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultHttpHealthCheck = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"backend-service-health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst _default = new gcp.compute.BackendService(\"default\", {\n name: \"my-backend-service\",\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst defaultGateway = new gcp.networkservices.Gateway(\"default\", {\n name: \"my-tcp-route\",\n labels: {\n foo: \"bar\",\n },\n description: \"my description\",\n scope: \"my-scope\",\n type: \"OPEN_MESH\",\n ports: [443],\n});\nconst defaultTcpRoute = new gcp.networkservices.TcpRoute(\"default\", {\n name: \"my-tcp-route\",\n labels: {\n foo: \"bar\",\n },\n description: \"my description\",\n gateways: [defaultGateway.id],\n rules: [{\n matches: [{\n address: \"10.0.0.1/32\",\n port: \"8081\",\n }],\n action: {\n destinations: [{\n serviceName: _default.id,\n weight: 1,\n }],\n originalDestination: false,\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_http_health_check = gcp.compute.HttpHealthCheck(\"default\",\n name=\"backend-service-health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\ndefault = gcp.compute.BackendService(\"default\",\n name=\"my-backend-service\",\n health_checks=default_http_health_check.id)\ndefault_gateway = gcp.networkservices.Gateway(\"default\",\n name=\"my-tcp-route\",\n labels={\n \"foo\": \"bar\",\n },\n description=\"my description\",\n scope=\"my-scope\",\n type=\"OPEN_MESH\",\n ports=[443])\ndefault_tcp_route = gcp.networkservices.TcpRoute(\"default\",\n name=\"my-tcp-route\",\n labels={\n \"foo\": \"bar\",\n },\n description=\"my description\",\n gateways=[default_gateway.id],\n rules=[gcp.networkservices.TcpRouteRuleArgs(\n matches=[gcp.networkservices.TcpRouteRuleMatchArgs(\n address=\"10.0.0.1/32\",\n port=\"8081\",\n )],\n action=gcp.networkservices.TcpRouteRuleActionArgs(\n destinations=[gcp.networkservices.TcpRouteRuleActionDestinationArgs(\n service_name=default.id,\n weight=1,\n )],\n original_destination=False,\n ),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultHttpHealthCheck = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"backend-service-health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n Name = \"my-backend-service\",\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var defaultGateway = new Gcp.NetworkServices.Gateway(\"default\", new()\n {\n Name = \"my-tcp-route\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Description = \"my description\",\n Scope = \"my-scope\",\n Type = \"OPEN_MESH\",\n Ports = new[]\n {\n 443,\n },\n });\n\n var defaultTcpRoute = new Gcp.NetworkServices.TcpRoute(\"default\", new()\n {\n Name = \"my-tcp-route\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Description = \"my description\",\n Gateways = new[]\n {\n defaultGateway.Id,\n },\n Rules = new[]\n {\n new Gcp.NetworkServices.Inputs.TcpRouteRuleArgs\n {\n Matches = new[]\n {\n new Gcp.NetworkServices.Inputs.TcpRouteRuleMatchArgs\n {\n Address = \"10.0.0.1/32\",\n Port = \"8081\",\n },\n },\n Action = new Gcp.NetworkServices.Inputs.TcpRouteRuleActionArgs\n {\n Destinations = new[]\n {\n new Gcp.NetworkServices.Inputs.TcpRouteRuleActionDestinationArgs\n {\n ServiceName = @default.Id,\n Weight = 1,\n },\n },\n OriginalDestination = false,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultHttpHealthCheck, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"backend-service-health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"default\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"my-backend-service\"),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultGateway, err := networkservices.NewGateway(ctx, \"default\", \u0026networkservices.GatewayArgs{\n\t\t\tName: pulumi.String(\"my-tcp-route\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tScope: pulumi.String(\"my-scope\"),\n\t\t\tType: pulumi.String(\"OPEN_MESH\"),\n\t\t\tPorts: pulumi.IntArray{\n\t\t\t\tpulumi.Int(443),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkservices.NewTcpRoute(ctx, \"default\", \u0026networkservices.TcpRouteArgs{\n\t\t\tName: pulumi.String(\"my-tcp-route\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tGateways: pulumi.StringArray{\n\t\t\t\tdefaultGateway.ID(),\n\t\t\t},\n\t\t\tRules: networkservices.TcpRouteRuleArray{\n\t\t\t\t\u0026networkservices.TcpRouteRuleArgs{\n\t\t\t\t\tMatches: networkservices.TcpRouteRuleMatchArray{\n\t\t\t\t\t\t\u0026networkservices.TcpRouteRuleMatchArgs{\n\t\t\t\t\t\t\tAddress: pulumi.String(\"10.0.0.1/32\"),\n\t\t\t\t\t\t\tPort: pulumi.String(\"8081\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tAction: \u0026networkservices.TcpRouteRuleActionArgs{\n\t\t\t\t\t\tDestinations: networkservices.TcpRouteRuleActionDestinationArray{\n\t\t\t\t\t\t\t\u0026networkservices.TcpRouteRuleActionDestinationArgs{\n\t\t\t\t\t\t\t\tServiceName: _default.ID(),\n\t\t\t\t\t\t\t\tWeight: pulumi.Int(1),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tOriginalDestination: pulumi.Bool(false),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.networkservices.Gateway;\nimport com.pulumi.gcp.networkservices.GatewayArgs;\nimport com.pulumi.gcp.networkservices.TcpRoute;\nimport com.pulumi.gcp.networkservices.TcpRouteArgs;\nimport com.pulumi.gcp.networkservices.inputs.TcpRouteRuleArgs;\nimport com.pulumi.gcp.networkservices.inputs.TcpRouteRuleActionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder()\n .name(\"backend-service-health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder()\n .name(\"my-backend-service\")\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var defaultGateway = new Gateway(\"defaultGateway\", GatewayArgs.builder()\n .name(\"my-tcp-route\")\n .labels(Map.of(\"foo\", \"bar\"))\n .description(\"my description\")\n .scope(\"my-scope\")\n .type(\"OPEN_MESH\")\n .ports(443)\n .build());\n\n var defaultTcpRoute = new TcpRoute(\"defaultTcpRoute\", TcpRouteArgs.builder()\n .name(\"my-tcp-route\")\n .labels(Map.of(\"foo\", \"bar\"))\n .description(\"my description\")\n .gateways(defaultGateway.id())\n .rules(TcpRouteRuleArgs.builder()\n .matches(TcpRouteRuleMatchArgs.builder()\n .address(\"10.0.0.1/32\")\n .port(\"8081\")\n .build())\n .action(TcpRouteRuleActionArgs.builder()\n .destinations(TcpRouteRuleActionDestinationArgs.builder()\n .serviceName(default_.id())\n .weight(1)\n .build())\n .originalDestination(false)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:BackendService\n properties:\n name: my-backend-service\n healthChecks: ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n name: default\n properties:\n name: backend-service-health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n defaultGateway:\n type: gcp:networkservices:Gateway\n name: default\n properties:\n name: my-tcp-route\n labels:\n foo: bar\n description: my description\n scope: my-scope\n type: OPEN_MESH\n ports:\n - 443\n defaultTcpRoute:\n type: gcp:networkservices:TcpRoute\n name: default\n properties:\n name: my-tcp-route\n labels:\n foo: bar\n description: my description\n gateways:\n - ${defaultGateway.id}\n rules:\n - matches:\n - address: 10.0.0.1/32\n port: '8081'\n action:\n destinations:\n - serviceName: ${default.id}\n weight: 1\n originalDestination: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nTcpRoute can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/tcpRoutes/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, TcpRoute can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networkservices/tcpRoute:TcpRoute default projects/{{project}}/locations/global/tcpRoutes/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkservices/tcpRoute:TcpRoute default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkservices/tcpRoute:TcpRoute default {{name}}\n```\n\n", "properties": { @@ -225486,7 +227052,7 @@ } }, "gcp:redis/cluster:Cluster": { - "description": "A Google Cloud Redis Cluster instance.\n\n\nTo get more information about Cluster, see:\n\n* [API documentation](https://cloud.google.com/memorystore/docs/cluster/reference/rest/v1/projects.locations.clusters)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/memorystore/docs/cluster/)\n\n## Example Usage\n\n### Redis Cluster Ha\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"mynetwork\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"mysubnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"mypolicy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore-redis\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst cluster_ha = new gcp.redis.Cluster(\"cluster-ha\", {\n name: \"ha-cluster\",\n shardCount: 3,\n pscConfigs: [{\n network: producerNet.id,\n }],\n region: \"us-central1\",\n replicaCount: 1,\n nodeType: \"REDIS_SHARED_CORE_NANO\",\n transitEncryptionMode: \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorizationMode: \"AUTH_MODE_DISABLED\",\n redisConfigs: {\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"mynetwork\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"mysubnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"mypolicy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore-redis\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config=gcp.networkconnectivity.ServiceConnectionPolicyPscConfigArgs(\n subnetworks=[producer_subnet.id],\n ))\ncluster_ha = gcp.redis.Cluster(\"cluster-ha\",\n name=\"ha-cluster\",\n shard_count=3,\n psc_configs=[gcp.redis.ClusterPscConfigArgs(\n network=producer_net.id,\n )],\n region=\"us-central1\",\n replica_count=1,\n node_type=\"REDIS_SHARED_CORE_NANO\",\n transit_encryption_mode=\"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorization_mode=\"AUTH_MODE_DISABLED\",\n redis_configs={\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n opts=pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"mynetwork\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"mysubnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"mypolicy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore-redis\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var cluster_ha = new Gcp.Redis.Cluster(\"cluster-ha\", new()\n {\n Name = \"ha-cluster\",\n ShardCount = 3,\n PscConfigs = new[]\n {\n new Gcp.Redis.Inputs.ClusterPscConfigArgs\n {\n Network = producerNet.Id,\n },\n },\n Region = \"us-central1\",\n ReplicaCount = 1,\n NodeType = \"REDIS_SHARED_CORE_NANO\",\n TransitEncryptionMode = \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n AuthorizationMode = \"AUTH_MODE_DISABLED\",\n RedisConfigs = \n {\n { \"maxmemory-policy\", \"volatile-ttl\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"mynetwork\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"mysubnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"mypolicy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore-redis\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewCluster(ctx, \"cluster-ha\", \u0026redis.ClusterArgs{\n\t\t\tName: pulumi.String(\"ha-cluster\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tPscConfigs: redis.ClusterPscConfigArray{\n\t\t\t\t\u0026redis.ClusterPscConfigArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tReplicaCount: pulumi.Int(1),\n\t\t\tNodeType: pulumi.String(\"REDIS_SHARED_CORE_NANO\"),\n\t\t\tTransitEncryptionMode: pulumi.String(\"TRANSIT_ENCRYPTION_MODE_DISABLED\"),\n\t\t\tAuthorizationMode: pulumi.String(\"AUTH_MODE_DISABLED\"),\n\t\t\tRedisConfigs: pulumi.StringMap{\n\t\t\t\t\"maxmemory-policy\": pulumi.String(\"volatile-ttl\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"mynetwork\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"mysubnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"mypolicy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore-redis\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n var cluster_ha = new Cluster(\"cluster-ha\", ClusterArgs.builder()\n .name(\"ha-cluster\")\n .shardCount(3)\n .pscConfigs(ClusterPscConfigArgs.builder()\n .network(producerNet.id())\n .build())\n .region(\"us-central1\")\n .replicaCount(1)\n .nodeType(\"REDIS_SHARED_CORE_NANO\")\n .transitEncryptionMode(\"TRANSIT_ENCRYPTION_MODE_DISABLED\")\n .authorizationMode(\"AUTH_MODE_DISABLED\")\n .redisConfigs(Map.of(\"maxmemory-policy\", \"volatile-ttl\"))\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cluster-ha:\n type: gcp:redis:Cluster\n properties:\n name: ha-cluster\n shardCount: 3\n pscConfigs:\n - network: ${producerNet.id}\n region: us-central1\n replicaCount: 1\n nodeType: REDIS_SHARED_CORE_NANO\n transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED\n authorizationMode: AUTH_MODE_DISABLED\n redisConfigs:\n maxmemory-policy: volatile-ttl\n options:\n dependson:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: mypolicy\n location: us-central1\n serviceClass: gcp-memorystore-redis\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: mysubnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: mynetwork\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nCluster can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/clusters/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Cluster can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default projects/{{project}}/locations/{{region}}/clusters/{{name}}\n```\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default {{name}}\n```\n\n", + "description": "A Google Cloud Redis Cluster instance.\n\n\nTo get more information about Cluster, see:\n\n* [API documentation](https://cloud.google.com/memorystore/docs/cluster/reference/rest/v1/projects.locations.clusters)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/memorystore/docs/cluster/)\n\n## Example Usage\n\n### Redis Cluster Ha\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"mynetwork\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"mysubnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"mypolicy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore-redis\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst cluster_ha = new gcp.redis.Cluster(\"cluster-ha\", {\n name: \"ha-cluster\",\n shardCount: 3,\n pscConfigs: [{\n network: producerNet.id,\n }],\n region: \"us-central1\",\n replicaCount: 1,\n nodeType: \"REDIS_SHARED_CORE_NANO\",\n transitEncryptionMode: \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorizationMode: \"AUTH_MODE_DISABLED\",\n redisConfigs: {\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n zoneDistributionConfig: {\n mode: \"MULTI_ZONE\",\n },\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"mynetwork\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"mysubnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"mypolicy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore-redis\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config=gcp.networkconnectivity.ServiceConnectionPolicyPscConfigArgs(\n subnetworks=[producer_subnet.id],\n ))\ncluster_ha = gcp.redis.Cluster(\"cluster-ha\",\n name=\"ha-cluster\",\n shard_count=3,\n psc_configs=[gcp.redis.ClusterPscConfigArgs(\n network=producer_net.id,\n )],\n region=\"us-central1\",\n replica_count=1,\n node_type=\"REDIS_SHARED_CORE_NANO\",\n transit_encryption_mode=\"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorization_mode=\"AUTH_MODE_DISABLED\",\n redis_configs={\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n zone_distribution_config=gcp.redis.ClusterZoneDistributionConfigArgs(\n mode=\"MULTI_ZONE\",\n ),\n opts=pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"mynetwork\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"mysubnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"mypolicy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore-redis\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var cluster_ha = new Gcp.Redis.Cluster(\"cluster-ha\", new()\n {\n Name = \"ha-cluster\",\n ShardCount = 3,\n PscConfigs = new[]\n {\n new Gcp.Redis.Inputs.ClusterPscConfigArgs\n {\n Network = producerNet.Id,\n },\n },\n Region = \"us-central1\",\n ReplicaCount = 1,\n NodeType = \"REDIS_SHARED_CORE_NANO\",\n TransitEncryptionMode = \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n AuthorizationMode = \"AUTH_MODE_DISABLED\",\n RedisConfigs = \n {\n { \"maxmemory-policy\", \"volatile-ttl\" },\n },\n ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs\n {\n Mode = \"MULTI_ZONE\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"mynetwork\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"mysubnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"mypolicy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore-redis\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewCluster(ctx, \"cluster-ha\", \u0026redis.ClusterArgs{\n\t\t\tName: pulumi.String(\"ha-cluster\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tPscConfigs: redis.ClusterPscConfigArray{\n\t\t\t\t\u0026redis.ClusterPscConfigArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tReplicaCount: pulumi.Int(1),\n\t\t\tNodeType: pulumi.String(\"REDIS_SHARED_CORE_NANO\"),\n\t\t\tTransitEncryptionMode: pulumi.String(\"TRANSIT_ENCRYPTION_MODE_DISABLED\"),\n\t\t\tAuthorizationMode: pulumi.String(\"AUTH_MODE_DISABLED\"),\n\t\t\tRedisConfigs: pulumi.StringMap{\n\t\t\t\t\"maxmemory-policy\": pulumi.String(\"volatile-ttl\"),\n\t\t\t},\n\t\t\tZoneDistributionConfig: \u0026redis.ClusterZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"MULTI_ZONE\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"mynetwork\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"mysubnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"mypolicy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore-redis\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n var cluster_ha = new Cluster(\"cluster-ha\", ClusterArgs.builder()\n .name(\"ha-cluster\")\n .shardCount(3)\n .pscConfigs(ClusterPscConfigArgs.builder()\n .network(producerNet.id())\n .build())\n .region(\"us-central1\")\n .replicaCount(1)\n .nodeType(\"REDIS_SHARED_CORE_NANO\")\n .transitEncryptionMode(\"TRANSIT_ENCRYPTION_MODE_DISABLED\")\n .authorizationMode(\"AUTH_MODE_DISABLED\")\n .redisConfigs(Map.of(\"maxmemory-policy\", \"volatile-ttl\"))\n .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()\n .mode(\"MULTI_ZONE\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cluster-ha:\n type: gcp:redis:Cluster\n properties:\n name: ha-cluster\n shardCount: 3\n pscConfigs:\n - network: ${producerNet.id}\n region: us-central1\n replicaCount: 1\n nodeType: REDIS_SHARED_CORE_NANO\n transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED\n authorizationMode: AUTH_MODE_DISABLED\n redisConfigs:\n maxmemory-policy: volatile-ttl\n zoneDistributionConfig:\n mode: MULTI_ZONE\n options:\n dependson:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: mypolicy\n location: us-central1\n serviceClass: gcp-memorystore-redis\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: mysubnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: mynetwork\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Redis Cluster Ha Single Zone\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"mynetwork\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"mysubnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"mypolicy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore-redis\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst cluster_ha_single_zone = new gcp.redis.Cluster(\"cluster-ha-single-zone\", {\n name: \"ha-cluster-single-zone\",\n shardCount: 3,\n pscConfigs: [{\n network: producerNet.id,\n }],\n region: \"us-central1\",\n zoneDistributionConfig: {\n mode: \"SINGLE_ZONE\",\n zone: \"us-central1-f\",\n },\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"mynetwork\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"mysubnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"mypolicy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore-redis\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config=gcp.networkconnectivity.ServiceConnectionPolicyPscConfigArgs(\n subnetworks=[producer_subnet.id],\n ))\ncluster_ha_single_zone = gcp.redis.Cluster(\"cluster-ha-single-zone\",\n name=\"ha-cluster-single-zone\",\n shard_count=3,\n psc_configs=[gcp.redis.ClusterPscConfigArgs(\n network=producer_net.id,\n )],\n region=\"us-central1\",\n zone_distribution_config=gcp.redis.ClusterZoneDistributionConfigArgs(\n mode=\"SINGLE_ZONE\",\n zone=\"us-central1-f\",\n ),\n opts=pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"mynetwork\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"mysubnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"mypolicy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore-redis\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var cluster_ha_single_zone = new Gcp.Redis.Cluster(\"cluster-ha-single-zone\", new()\n {\n Name = \"ha-cluster-single-zone\",\n ShardCount = 3,\n PscConfigs = new[]\n {\n new Gcp.Redis.Inputs.ClusterPscConfigArgs\n {\n Network = producerNet.Id,\n },\n },\n Region = \"us-central1\",\n ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs\n {\n Mode = \"SINGLE_ZONE\",\n Zone = \"us-central1-f\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"mynetwork\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"mysubnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"mypolicy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore-redis\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewCluster(ctx, \"cluster-ha-single-zone\", \u0026redis.ClusterArgs{\n\t\t\tName: pulumi.String(\"ha-cluster-single-zone\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tPscConfigs: redis.ClusterPscConfigArray{\n\t\t\t\t\u0026redis.ClusterPscConfigArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tZoneDistributionConfig: \u0026redis.ClusterZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"SINGLE_ZONE\"),\n\t\t\t\tZone: pulumi.String(\"us-central1-f\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"mynetwork\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"mysubnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"mypolicy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore-redis\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n var cluster_ha_single_zone = new Cluster(\"cluster-ha-single-zone\", ClusterArgs.builder()\n .name(\"ha-cluster-single-zone\")\n .shardCount(3)\n .pscConfigs(ClusterPscConfigArgs.builder()\n .network(producerNet.id())\n .build())\n .region(\"us-central1\")\n .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()\n .mode(\"SINGLE_ZONE\")\n .zone(\"us-central1-f\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cluster-ha-single-zone:\n type: gcp:redis:Cluster\n properties:\n name: ha-cluster-single-zone\n shardCount: 3\n pscConfigs:\n - network: ${producerNet.id}\n region: us-central1\n zoneDistributionConfig:\n mode: SINGLE_ZONE\n zone: us-central1-f\n options:\n dependson:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: mypolicy\n location: us-central1\n serviceClass: gcp-memorystore-redis\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: mysubnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: mynetwork\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nCluster can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/clusters/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Cluster can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default projects/{{project}}/locations/{{region}}/clusters/{{name}}\n```\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default {{name}}\n```\n\n", "properties": { "authorizationMode": { "type": "string", @@ -225573,6 +227139,10 @@ "uid": { "type": "string", "description": "System assigned, unique identifier for the cluster.\n" + }, + "zoneDistributionConfig": { + "$ref": "#/types/gcp:redis/ClusterZoneDistributionConfig:ClusterZoneDistributionConfig", + "description": "Immutable. Zone distribution config for Memorystore Redis cluster.\n" } }, "required": [ @@ -225642,6 +227212,11 @@ "type": "string", "description": "Optional. The in-transit encryption for the Redis cluster. If not provided, encryption is disabled for the cluster.\nDefault value: \"TRANSIT_ENCRYPTION_MODE_DISABLED\" Possible values: [\"TRANSIT_ENCRYPTION_MODE_UNSPECIFIED\",\n\"TRANSIT_ENCRYPTION_MODE_DISABLED\", \"TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION\"]\n", "willReplaceOnChanges": true + }, + "zoneDistributionConfig": { + "$ref": "#/types/gcp:redis/ClusterZoneDistributionConfig:ClusterZoneDistributionConfig", + "description": "Immutable. Zone distribution config for Memorystore Redis cluster.\n", + "willReplaceOnChanges": true } }, "requiredInputs": [ @@ -225742,6 +227317,11 @@ "uid": { "type": "string", "description": "System assigned, unique identifier for the cluster.\n" + }, + "zoneDistributionConfig": { + "$ref": "#/types/gcp:redis/ClusterZoneDistributionConfig:ClusterZoneDistributionConfig", + "description": "Immutable. Zone distribution config for Memorystore Redis cluster.\n", + "willReplaceOnChanges": true } }, "type": "object" @@ -227037,10 +228617,11 @@ } }, "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\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.secretmanager.SecretIamPolicy`: Retrieves the IAM policy for the secret\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## gcp.secretmanager.SecretIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/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 = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## gcp.secretmanager.SecretIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/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 = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/secrets/{{secret_id}}\n\n* {{project}}/{{secret_id}}\n\n* {{secret_id}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nSecret Manager secret IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:secretmanager/secretIamBinding:SecretIamBinding editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:secretmanager/secretIamBinding:SecretIamBinding editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor\"\n```\n\nIAM 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\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n", + "description": "Three different resources help you manage your IAM policy for 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\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.secretmanager.SecretIamPolicy`: Retrieves the IAM policy for the secret\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\u003e **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.\n\n\n## gcp.secretmanager.SecretIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/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 = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\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.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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 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.secretmanager.SecretIamPolicy(\"policy\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/secretmanager.secretAccessor\",\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.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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 .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 SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder()\n .project(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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 condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.secretmanager.SecretIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.secretmanager.SecretIamBinding(\"binding\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"],\n condition=gcp.secretmanager.SecretIamBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n Role = \"roles/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.SecretManager.Inputs.SecretIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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\tCondition: \u0026secretmanager.SecretIamBindingConditionArgs{\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.secretmanager.SecretIamBinding;\nimport com.pulumi.gcp.secretmanager.SecretIamBindingArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretIamBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(secret_basic.project())\n .secretId(secret_basic.secretId())\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .condition(SecretIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:secretmanager:SecretIamBinding\n properties:\n project: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.secretmanager.SecretIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\n role: \"roles/secretmanager.secretAccessor\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.secretmanager.SecretIamMember(\"member\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\",\n condition=gcp.secretmanager.SecretIamMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.SecretManager.Inputs.SecretIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026secretmanager.SecretIamMemberConditionArgs{\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.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretIamMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(secret_basic.project())\n .secretId(secret_basic.secretId())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(\"user:jane@example.com\")\n .condition(SecretIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:secretmanager:SecretIamMember\n properties:\n project: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/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 = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\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.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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 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.secretmanager.SecretIamPolicy(\"policy\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/secretmanager.secretAccessor\",\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.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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 .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 SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder()\n .project(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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 condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.secretmanager.SecretIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.secretmanager.SecretIamBinding(\"binding\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"],\n condition=gcp.secretmanager.SecretIamBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n Role = \"roles/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.SecretManager.Inputs.SecretIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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\tCondition: \u0026secretmanager.SecretIamBindingConditionArgs{\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.secretmanager.SecretIamBinding;\nimport com.pulumi.gcp.secretmanager.SecretIamBindingArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretIamBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(secret_basic.project())\n .secretId(secret_basic.secretId())\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .condition(SecretIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:secretmanager:SecretIamBinding\n properties:\n project: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.secretmanager.SecretIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\n role: \"roles/secretmanager.secretAccessor\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.secretmanager.SecretIamMember(\"member\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\",\n condition=gcp.secretmanager.SecretIamMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.SecretManager.Inputs.SecretIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026secretmanager.SecretIamMemberConditionArgs{\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.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretIamMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(secret_basic.project())\n .secretId(secret_basic.secretId())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(\"user:jane@example.com\")\n .condition(SecretIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:secretmanager:SecretIamMember\n properties:\n project: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/secrets/{{secret_id}}\n\n* {{project}}/{{secret_id}}\n\n* {{secret_id}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nSecret Manager secret IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:secretmanager/secretIamBinding:SecretIamBinding editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:secretmanager/secretIamBinding:SecretIamBinding editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor\"\n```\n\nIAM 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\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n", "properties": { "condition": { - "$ref": "#/types/gcp:secretmanager/SecretIamBindingCondition:SecretIamBindingCondition" + "$ref": "#/types/gcp:secretmanager/SecretIamBindingCondition:SecretIamBindingCondition", + "description": "An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding.\nStructure is documented below.\n" }, "etag": { "type": "string", @@ -227075,6 +228656,7 @@ "inputProperties": { "condition": { "$ref": "#/types/gcp:secretmanager/SecretIamBindingCondition:SecretIamBindingCondition", + "description": "An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "members": { @@ -227109,6 +228691,7 @@ "properties": { "condition": { "$ref": "#/types/gcp:secretmanager/SecretIamBindingCondition:SecretIamBindingCondition", + "description": "An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "etag": { @@ -227141,10 +228724,11 @@ } }, "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\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.secretmanager.SecretIamPolicy`: Retrieves the IAM policy for the secret\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## gcp.secretmanager.SecretIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/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 = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## gcp.secretmanager.SecretIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/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 = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/secrets/{{secret_id}}\n\n* {{project}}/{{secret_id}}\n\n* {{secret_id}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nSecret Manager secret IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:secretmanager/secretIamMember:SecretIamMember editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:secretmanager/secretIamMember:SecretIamMember editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor\"\n```\n\nIAM 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\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n", + "description": "Three different resources help you manage your IAM policy for 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\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.secretmanager.SecretIamPolicy`: Retrieves the IAM policy for the secret\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\u003e **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.\n\n\n## gcp.secretmanager.SecretIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/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 = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\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.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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 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.secretmanager.SecretIamPolicy(\"policy\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/secretmanager.secretAccessor\",\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.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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 .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 SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder()\n .project(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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 condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.secretmanager.SecretIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.secretmanager.SecretIamBinding(\"binding\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"],\n condition=gcp.secretmanager.SecretIamBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n Role = \"roles/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.SecretManager.Inputs.SecretIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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\tCondition: \u0026secretmanager.SecretIamBindingConditionArgs{\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.secretmanager.SecretIamBinding;\nimport com.pulumi.gcp.secretmanager.SecretIamBindingArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretIamBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(secret_basic.project())\n .secretId(secret_basic.secretId())\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .condition(SecretIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:secretmanager:SecretIamBinding\n properties:\n project: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.secretmanager.SecretIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\n role: \"roles/secretmanager.secretAccessor\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.secretmanager.SecretIamMember(\"member\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\",\n condition=gcp.secretmanager.SecretIamMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.SecretManager.Inputs.SecretIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026secretmanager.SecretIamMemberConditionArgs{\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.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretIamMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(secret_basic.project())\n .secretId(secret_basic.secretId())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(\"user:jane@example.com\")\n .condition(SecretIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:secretmanager:SecretIamMember\n properties:\n project: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/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 = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\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.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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 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.secretmanager.SecretIamPolicy(\"policy\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/secretmanager.secretAccessor\",\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.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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 .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 SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder()\n .project(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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 condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.secretmanager.SecretIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.secretmanager.SecretIamBinding(\"binding\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"],\n condition=gcp.secretmanager.SecretIamBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n Role = \"roles/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.SecretManager.Inputs.SecretIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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\tCondition: \u0026secretmanager.SecretIamBindingConditionArgs{\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.secretmanager.SecretIamBinding;\nimport com.pulumi.gcp.secretmanager.SecretIamBindingArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretIamBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(secret_basic.project())\n .secretId(secret_basic.secretId())\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .condition(SecretIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:secretmanager:SecretIamBinding\n properties:\n project: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.secretmanager.SecretIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\n role: \"roles/secretmanager.secretAccessor\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.secretmanager.SecretIamMember(\"member\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\",\n condition=gcp.secretmanager.SecretIamMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.SecretManager.Inputs.SecretIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026secretmanager.SecretIamMemberConditionArgs{\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.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretIamMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(secret_basic.project())\n .secretId(secret_basic.secretId())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(\"user:jane@example.com\")\n .condition(SecretIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:secretmanager:SecretIamMember\n properties:\n project: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/secrets/{{secret_id}}\n\n* {{project}}/{{secret_id}}\n\n* {{secret_id}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nSecret Manager secret IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:secretmanager/secretIamMember:SecretIamMember editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:secretmanager/secretIamMember:SecretIamMember editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor\"\n```\n\nIAM 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\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n", "properties": { "condition": { - "$ref": "#/types/gcp:secretmanager/SecretIamMemberCondition:SecretIamMemberCondition" + "$ref": "#/types/gcp:secretmanager/SecretIamMemberCondition:SecretIamMemberCondition", + "description": "An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding.\nStructure is documented below.\n" }, "etag": { "type": "string", @@ -227176,6 +228760,7 @@ "inputProperties": { "condition": { "$ref": "#/types/gcp:secretmanager/SecretIamMemberCondition:SecretIamMemberCondition", + "description": "An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "member": { @@ -227208,6 +228793,7 @@ "properties": { "condition": { "$ref": "#/types/gcp:secretmanager/SecretIamMemberCondition:SecretIamMemberCondition", + "description": "An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "etag": { @@ -227238,7 +228824,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\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.secretmanager.SecretIamPolicy`: Retrieves the IAM policy for the secret\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## gcp.secretmanager.SecretIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/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 = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## gcp.secretmanager.SecretIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/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 = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/secrets/{{secret_id}}\n\n* {{project}}/{{secret_id}}\n\n* {{secret_id}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nSecret Manager secret IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:secretmanager/secretIamPolicy:SecretIamPolicy editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:secretmanager/secretIamPolicy:SecretIamPolicy editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor\"\n```\n\nIAM 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\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n", + "description": "Three different resources help you manage your IAM policy for 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\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.secretmanager.SecretIamPolicy`: Retrieves the IAM policy for the secret\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\u003e **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.\n\n\n## gcp.secretmanager.SecretIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/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 = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\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.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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 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.secretmanager.SecretIamPolicy(\"policy\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/secretmanager.secretAccessor\",\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.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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 .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 SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder()\n .project(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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 condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.secretmanager.SecretIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.secretmanager.SecretIamBinding(\"binding\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"],\n condition=gcp.secretmanager.SecretIamBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n Role = \"roles/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.SecretManager.Inputs.SecretIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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\tCondition: \u0026secretmanager.SecretIamBindingConditionArgs{\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.secretmanager.SecretIamBinding;\nimport com.pulumi.gcp.secretmanager.SecretIamBindingArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretIamBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(secret_basic.project())\n .secretId(secret_basic.secretId())\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .condition(SecretIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:secretmanager:SecretIamBinding\n properties:\n project: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.secretmanager.SecretIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\n role: \"roles/secretmanager.secretAccessor\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.secretmanager.SecretIamMember(\"member\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\",\n condition=gcp.secretmanager.SecretIamMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.SecretManager.Inputs.SecretIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026secretmanager.SecretIamMemberConditionArgs{\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.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretIamMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(secret_basic.project())\n .secretId(secret_basic.secretId())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(\"user:jane@example.com\")\n .condition(SecretIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:secretmanager:SecretIamMember\n properties:\n project: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.secretmanager.SecretIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/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 = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\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.secretmanager.SecretIamPolicy(\"policy\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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 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.secretmanager.SecretIamPolicy(\"policy\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/secretmanager.secretAccessor\",\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.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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 .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 SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder()\n .project(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\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 condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.secretmanager.SecretIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.secretmanager.SecretIamBinding(\"binding\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"],\n condition=gcp.secretmanager.SecretIamBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n Role = \"roles/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.SecretManager.Inputs.SecretIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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\tCondition: \u0026secretmanager.SecretIamBindingConditionArgs{\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.secretmanager.SecretIamBinding;\nimport com.pulumi.gcp.secretmanager.SecretIamBindingArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretIamBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(secret_basic.project())\n .secretId(secret_basic.secretId())\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .condition(SecretIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:secretmanager:SecretIamBinding\n properties:\n project: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.secretmanager.SecretIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\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=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\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/v7/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\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(secret_basic.project())\n .secretId(secret_basic.secretId())\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: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: secret_basic.project,\n secretId: secret_basic.secretId,\n role: \"roles/secretmanager.secretAccessor\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.secretmanager.SecretIamMember(\"member\",\n project=secret_basic[\"project\"],\n secret_id=secret_basic[\"secretId\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\",\n condition=gcp.secretmanager.SecretIamMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = secret_basic.Project,\n SecretId = secret_basic.SecretId,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.SecretManager.Inputs.SecretIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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(secret_basic.Project),\n\t\t\tSecretId: pulumi.Any(secret_basic.SecretId),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026secretmanager.SecretIamMemberConditionArgs{\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.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretIamMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(secret_basic.project())\n .secretId(secret_basic.secretId())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(\"user:jane@example.com\")\n .condition(SecretIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:secretmanager:SecretIamMember\n properties:\n project: ${[\"secret-basic\"].project}\n secretId: ${[\"secret-basic\"].secretId}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/secrets/{{secret_id}}\n\n* {{project}}/{{secret_id}}\n\n* {{secret_id}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nSecret Manager secret IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:secretmanager/secretIamPolicy:SecretIamPolicy editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:secretmanager/secretIamPolicy:SecretIamPolicy editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor\"\n```\n\nIAM 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\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n", "properties": { "etag": { "type": "string", @@ -228439,6 +230025,130 @@ "type": "object" } }, + "gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule": { + "description": "Represents an instance of an Event Threat Detection custom module, including\nits full module name, display name, enablement state, and last updated time.\nYou can create a custom module at the organization level only.\n\n\nTo get more information about OrganizationEventThreatDetectionCustomModule, see:\n\n* [API documentation](https://cloud.google.com/security-command-center/docs/reference/security-center-management/rest/v1/organizations.locations.eventThreatDetectionCustomModules)\n* How-to Guides\n * [Overview of custom modules for Event Threat Detection](https://cloud.google.com/security-command-center/docs/custom-modules-etd-overview)\n\n## Example Usage\n\n### Scc Management Organization Event Threat Detection Custom Module\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```yaml\nresources:\n example:\n type: gcp:securitycenter:ManagementOrganizationEventThreatDetectionCustomModule\n properties:\n organization: '123456789'\n location: global\n displayName: basic_custom_module\n enablementState: ENABLED\n type: CONFIGURABLE_BAD_IP\n description: My Event Threat Detection Custom Module\n config:\n fn::toJSON:\n metadata:\n severity: LOW\n description: Flagged by Forcepoint as malicious\n recommendation: Contact the owner of the relevant project.\n ips:\n - 192.0.2.1\n - 192.0.2.0/24\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nOrganizationEventThreatDetectionCustomModule can be imported using any of these accepted formats:\n\n* `organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}}`\n\n* `{{organization}}/{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, OrganizationEventThreatDetectionCustomModule can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}}\n```\n\n```sh\n$ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default {{organization}}/{{location}}/{{name}}\n```\n\n", + "properties": { + "config": { + "type": "string", + "description": "Config for the module. For the resident module, its config value is defined at this level.\nFor the inherited module, its config value is inherited from the ancestor module.\n" + }, + "displayName": { + "type": "string", + "description": "The human readable name to be displayed for the module.\n" + }, + "enablementState": { + "type": "string", + "description": "The state of enablement for the module at the given level of the hierarchy.\nPossible values are: `ENABLED`, `DISABLED`.\n" + }, + "lastEditor": { + "type": "string", + "description": "The editor that last updated the custom module\n" + }, + "location": { + "type": "string", + "description": "Location ID of the parent organization. Only global is supported at the moment.\n" + }, + "name": { + "type": "string", + "description": "The resource name of the Event Threat Detection custom module.\nIts format is \"organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}\".\n" + }, + "organization": { + "type": "string", + "description": "Numerical ID of the parent organization.\n\n\n- - -\n" + }, + "type": { + "type": "string", + "description": "Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP.\n" + }, + "updateTime": { + "type": "string", + "description": "The time at which the custom module was last updated.\nA timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and\nup to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n" + } + }, + "required": [ + "lastEditor", + "name", + "organization", + "updateTime" + ], + "inputProperties": { + "config": { + "type": "string", + "description": "Config for the module. For the resident module, its config value is defined at this level.\nFor the inherited module, its config value is inherited from the ancestor module.\n" + }, + "displayName": { + "type": "string", + "description": "The human readable name to be displayed for the module.\n" + }, + "enablementState": { + "type": "string", + "description": "The state of enablement for the module at the given level of the hierarchy.\nPossible values are: `ENABLED`, `DISABLED`.\n" + }, + "location": { + "type": "string", + "description": "Location ID of the parent organization. Only global is supported at the moment.\n", + "willReplaceOnChanges": true + }, + "organization": { + "type": "string", + "description": "Numerical ID of the parent organization.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "type": { + "type": "string", + "description": "Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "organization" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering ManagementOrganizationEventThreatDetectionCustomModule resources.\n", + "properties": { + "config": { + "type": "string", + "description": "Config for the module. For the resident module, its config value is defined at this level.\nFor the inherited module, its config value is inherited from the ancestor module.\n" + }, + "displayName": { + "type": "string", + "description": "The human readable name to be displayed for the module.\n" + }, + "enablementState": { + "type": "string", + "description": "The state of enablement for the module at the given level of the hierarchy.\nPossible values are: `ENABLED`, `DISABLED`.\n" + }, + "lastEditor": { + "type": "string", + "description": "The editor that last updated the custom module\n" + }, + "location": { + "type": "string", + "description": "Location ID of the parent organization. Only global is supported at the moment.\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The resource name of the Event Threat Detection custom module.\nIts format is \"organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}\".\n" + }, + "organization": { + "type": "string", + "description": "Numerical ID of the parent organization.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "type": { + "type": "string", + "description": "Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP.\n", + "willReplaceOnChanges": true + }, + "updateTime": { + "type": "string", + "description": "The time at which the custom module was last updated.\nA timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and\nup to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n" + } + }, + "type": "object" + } + }, "gcp:securitycenter/muteConfig:MuteConfig": { "description": "Mute Findings is a volume management feature in Security Command Center\nthat lets you manually or programmatically hide irrelevant findings,\nand create filters to automatically silence existing and future\nfindings based on criteria you specify.\n\n\nTo get more information about MuteConfig, see:\n\n* [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v1/organizations.muteConfigs)\n\n## Example Usage\n\n### Scc Mute Config\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.securitycenter.MuteConfig(\"default\", {\n muteConfigId: \"my-config\",\n parent: \"organizations/123456789\",\n filter: \"category: \\\"OS_VULNERABILITY\\\"\",\n description: \"My Mute Config\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.securitycenter.MuteConfig(\"default\",\n mute_config_id=\"my-config\",\n parent=\"organizations/123456789\",\n filter=\"category: \\\"OS_VULNERABILITY\\\"\",\n description=\"My Mute Config\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.SecurityCenter.MuteConfig(\"default\", new()\n {\n MuteConfigId = \"my-config\",\n Parent = \"organizations/123456789\",\n Filter = \"category: \\\"OS_VULNERABILITY\\\"\",\n Description = \"My Mute Config\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewMuteConfig(ctx, \"default\", \u0026securitycenter.MuteConfigArgs{\n\t\t\tMuteConfigId: pulumi.String(\"my-config\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tFilter: pulumi.String(\"category: \\\"OS_VULNERABILITY\\\"\"),\n\t\t\tDescription: pulumi.String(\"My Mute Config\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.securitycenter.MuteConfig;\nimport com.pulumi.gcp.securitycenter.MuteConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 MuteConfig(\"default\", MuteConfigArgs.builder()\n .muteConfigId(\"my-config\")\n .parent(\"organizations/123456789\")\n .filter(\"category: \\\"OS_VULNERABILITY\\\"\")\n .description(\"My Mute Config\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:securitycenter:MuteConfig\n properties:\n muteConfigId: my-config\n parent: organizations/123456789\n filter: 'category: \"OS_VULNERABILITY\"'\n description: My Mute Config\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMuteConfig can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, MuteConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securitycenter/muteConfig:MuteConfig default {{name}}\n```\n\n", "properties": { @@ -232263,6 +233973,168 @@ "type": "object" } }, + "gcp:spanner/instanceConfig:InstanceConfig": { + "description": "A possible configuration for a Cloud Spanner instance. Configurations\ndefine the geographic placement of nodes and their replication.\n\n\nTo get more information about InstanceConfig, see:\n\n* [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instanceConfigs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/spanner/)\n\n## Example Usage\n\n## Import\n\nInstanceConfig can be imported using any of these accepted formats:\n\n* `projects/{{project}}/instanceConfigs/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, InstanceConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:spanner/instanceConfig:InstanceConfig default projects/{{project}}/instanceConfigs/{{name}}\n```\n\n```sh\n$ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{name}}\n```\n\n", + "properties": { + "baseConfig": { + "type": "string", + "description": "Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed\nconfigurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this\nconfiguration.\n" + }, + "configType": { + "type": "string", + "description": "Output only. Whether this instance config is a Google or User Managed Configuration.\n" + }, + "displayName": { + "type": "string", + "description": "The name of this instance configuration as it appears in UIs.\n" + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer\nto the field 'effective_labels' for all of the labels present on the resource.\n" + }, + "name": { + "type": "string", + "description": "A unique identifier for the instance configuration. Values are of the\nform projects/\u003cproject\u003e/instanceConfigs/[a-z][-a-z0-9]*\n" + }, + "project": { + "type": "string" + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "replicas": { + "type": "array", + "items": { + "$ref": "#/types/gcp:spanner/InstanceConfigReplica:InstanceConfigReplica" + }, + "description": "The geographic placement of nodes in this instance configuration and their replication properties.\nStructure is documented below.\n" + } + }, + "required": [ + "baseConfig", + "configType", + "displayName", + "effectiveLabels", + "name", + "project", + "replicas", + "pulumiLabels" + ], + "inputProperties": { + "baseConfig": { + "type": "string", + "description": "Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed\nconfigurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this\nconfiguration.\n", + "willReplaceOnChanges": true + }, + "displayName": { + "type": "string", + "description": "The name of this instance configuration as it appears in UIs.\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer\nto the field 'effective_labels' for all of the labels present on the resource.\n" + }, + "name": { + "type": "string", + "description": "A unique identifier for the instance configuration. Values are of the\nform projects/\u003cproject\u003e/instanceConfigs/[a-z][-a-z0-9]*\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "willReplaceOnChanges": true + }, + "replicas": { + "type": "array", + "items": { + "$ref": "#/types/gcp:spanner/InstanceConfigReplica:InstanceConfigReplica" + }, + "description": "The geographic placement of nodes in this instance configuration and their replication properties.\nStructure is documented below.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "displayName", + "replicas" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering InstanceConfig resources.\n", + "properties": { + "baseConfig": { + "type": "string", + "description": "Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed\nconfigurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this\nconfiguration.\n", + "willReplaceOnChanges": true + }, + "configType": { + "type": "string", + "description": "Output only. Whether this instance config is a Google or User Managed Configuration.\n" + }, + "displayName": { + "type": "string", + "description": "The name of this instance configuration as it appears in UIs.\n" + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "An object containing a list of \"key\": value pairs. Example: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer\nto the field 'effective_labels' for all of the labels present on the resource.\n" + }, + "name": { + "type": "string", + "description": "A unique identifier for the instance configuration. Values are of the\nform projects/\u003cproject\u003e/instanceConfigs/[a-z][-a-z0-9]*\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "willReplaceOnChanges": true + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "replicas": { + "type": "array", + "items": { + "$ref": "#/types/gcp:spanner/InstanceConfigReplica:InstanceConfigReplica" + }, + "description": "The geographic placement of nodes in this instance configuration and their replication properties.\nStructure is documented below.\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + } + }, "gcp:spanner/instanceIAMBinding:InstanceIAMBinding": { "description": "Three different resources help you manage your IAM policy for a Spanner instance. Each of these resources serves a different use case:\n\n* `gcp.spanner.InstanceIAMPolicy`: Authoritative. Sets the IAM policy for the instance and replaces any existing policy already attached.\n\n\u003e **Warning:** It's entirely possibly to lock yourself out of your instance using `gcp.spanner.InstanceIAMPolicy`. Any permissions granted by default will be removed unless you include them in your config.\n\n* `gcp.spanner.InstanceIAMBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the instance are preserved.\n* `gcp.spanner.InstanceIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the instance are preserved.\n\n\u003e **Note:** `gcp.spanner.InstanceIAMPolicy` **cannot** be used in conjunction with `gcp.spanner.InstanceIAMBinding` and `gcp.spanner.InstanceIAMMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.spanner.InstanceIAMBinding` resources **can be** used in conjunction with `gcp.spanner.InstanceIAMMember` resources **only if** they do not grant privilege to the same role.\n\n## gcp.spanner.InstanceIAMPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst instance = new gcp.spanner.InstanceIAMPolicy(\"instance\", {\n instance: \"your-instance-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/editor\",\n members=[\"user:jane@example.com\"],\n)])\ninstance = gcp.spanner.InstanceIAMPolicy(\"instance\",\n instance=\"your-instance-name\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var instance = new Gcp.Spanner.InstanceIAMPolicy(\"instance\", new()\n {\n Instance = \"your-instance-name\",\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\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 = spanner.NewInstanceIAMPolicy(ctx, \"instance\", \u0026spanner.InstanceIAMPolicyArgs{\n\t\t\tInstance: pulumi.String(\"your-instance-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.spanner.InstanceIAMPolicy;\nimport com.pulumi.gcp.spanner.InstanceIAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\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 instance = new InstanceIAMPolicy(\"instance\", InstanceIAMPolicyArgs.builder()\n .instance(\"your-instance-name\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:spanner:InstanceIAMPolicy\n properties:\n instance: your-instance-name\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\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.spanner.InstanceIAMBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.spanner.InstanceIAMBinding(\"instance\", {\n instance: \"your-instance-name\",\n role: \"roles/spanner.databaseAdmin\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.spanner.InstanceIAMBinding(\"instance\",\n instance=\"your-instance-name\",\n role=\"roles/spanner.databaseAdmin\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Spanner.InstanceIAMBinding(\"instance\", new()\n {\n Instance = \"your-instance-name\",\n Role = \"roles/spanner.databaseAdmin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := spanner.NewInstanceIAMBinding(ctx, \"instance\", \u0026spanner.InstanceIAMBindingArgs{\n\t\t\tInstance: pulumi.String(\"your-instance-name\"),\n\t\t\tRole: pulumi.String(\"roles/spanner.databaseAdmin\"),\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.spanner.InstanceIAMBinding;\nimport com.pulumi.gcp.spanner.InstanceIAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 InstanceIAMBinding(\"instance\", InstanceIAMBindingArgs.builder()\n .instance(\"your-instance-name\")\n .role(\"roles/spanner.databaseAdmin\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:spanner:InstanceIAMBinding\n properties:\n instance: your-instance-name\n role: roles/spanner.databaseAdmin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.spanner.InstanceIAMMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.spanner.InstanceIAMMember(\"instance\", {\n instance: \"your-instance-name\",\n role: \"roles/spanner.databaseAdmin\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.spanner.InstanceIAMMember(\"instance\",\n instance=\"your-instance-name\",\n role=\"roles/spanner.databaseAdmin\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Spanner.InstanceIAMMember(\"instance\", new()\n {\n Instance = \"your-instance-name\",\n Role = \"roles/spanner.databaseAdmin\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := spanner.NewInstanceIAMMember(ctx, \"instance\", \u0026spanner.InstanceIAMMemberArgs{\n\t\t\tInstance: pulumi.String(\"your-instance-name\"),\n\t\t\tRole: pulumi.String(\"roles/spanner.databaseAdmin\"),\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.spanner.InstanceIAMMember;\nimport com.pulumi.gcp.spanner.InstanceIAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 InstanceIAMMember(\"instance\", InstanceIAMMemberArgs.builder()\n .instance(\"your-instance-name\")\n .role(\"roles/spanner.databaseAdmin\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:spanner:InstanceIAMMember\n properties:\n instance: your-instance-name\n role: roles/spanner.databaseAdmin\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.spanner.InstanceIAMPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst instance = new gcp.spanner.InstanceIAMPolicy(\"instance\", {\n instance: \"your-instance-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/editor\",\n members=[\"user:jane@example.com\"],\n)])\ninstance = gcp.spanner.InstanceIAMPolicy(\"instance\",\n instance=\"your-instance-name\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var instance = new Gcp.Spanner.InstanceIAMPolicy(\"instance\", new()\n {\n Instance = \"your-instance-name\",\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\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 = spanner.NewInstanceIAMPolicy(ctx, \"instance\", \u0026spanner.InstanceIAMPolicyArgs{\n\t\t\tInstance: pulumi.String(\"your-instance-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.spanner.InstanceIAMPolicy;\nimport com.pulumi.gcp.spanner.InstanceIAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\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 instance = new InstanceIAMPolicy(\"instance\", InstanceIAMPolicyArgs.builder()\n .instance(\"your-instance-name\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:spanner:InstanceIAMPolicy\n properties:\n instance: your-instance-name\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\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.spanner.InstanceIAMBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.spanner.InstanceIAMBinding(\"instance\", {\n instance: \"your-instance-name\",\n role: \"roles/spanner.databaseAdmin\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.spanner.InstanceIAMBinding(\"instance\",\n instance=\"your-instance-name\",\n role=\"roles/spanner.databaseAdmin\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Spanner.InstanceIAMBinding(\"instance\", new()\n {\n Instance = \"your-instance-name\",\n Role = \"roles/spanner.databaseAdmin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := spanner.NewInstanceIAMBinding(ctx, \"instance\", \u0026spanner.InstanceIAMBindingArgs{\n\t\t\tInstance: pulumi.String(\"your-instance-name\"),\n\t\t\tRole: pulumi.String(\"roles/spanner.databaseAdmin\"),\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.spanner.InstanceIAMBinding;\nimport com.pulumi.gcp.spanner.InstanceIAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 InstanceIAMBinding(\"instance\", InstanceIAMBindingArgs.builder()\n .instance(\"your-instance-name\")\n .role(\"roles/spanner.databaseAdmin\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:spanner:InstanceIAMBinding\n properties:\n instance: your-instance-name\n role: roles/spanner.databaseAdmin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.spanner.InstanceIAMMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.spanner.InstanceIAMMember(\"instance\", {\n instance: \"your-instance-name\",\n role: \"roles/spanner.databaseAdmin\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.spanner.InstanceIAMMember(\"instance\",\n instance=\"your-instance-name\",\n role=\"roles/spanner.databaseAdmin\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Spanner.InstanceIAMMember(\"instance\", new()\n {\n Instance = \"your-instance-name\",\n Role = \"roles/spanner.databaseAdmin\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := spanner.NewInstanceIAMMember(ctx, \"instance\", \u0026spanner.InstanceIAMMemberArgs{\n\t\t\tInstance: pulumi.String(\"your-instance-name\"),\n\t\t\tRole: pulumi.String(\"roles/spanner.databaseAdmin\"),\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.spanner.InstanceIAMMember;\nimport com.pulumi.gcp.spanner.InstanceIAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 InstanceIAMMember(\"instance\", InstanceIAMMemberArgs.builder()\n .instance(\"your-instance-name\")\n .role(\"roles/spanner.databaseAdmin\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:spanner:InstanceIAMMember\n properties:\n instance: your-instance-name\n role: roles/spanner.databaseAdmin\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n### Importing IAM policies\n\nIAM policy imports use the identifier of the Spanner Instances resource . For example:\n\n* `{{project}}/{{instance}}`\n\nAn `import` block (Terraform v1.5.0 and later) can be used to import IAM policies:\n\ntf\n\nimport {\n\n id = {{project}}/{{instance}}\n\n to = google_spanner_instance_iam_policy.default\n\n}\n\nThe `pulumi import` command can also be used:\n\n```sh\n$ pulumi import gcp:spanner/instanceIAMBinding:InstanceIAMBinding default {{project}}/{{instance}}\n```\n\n", "properties": { @@ -243197,7 +245069,7 @@ } }, "gcp:workstations/workstationConfig:WorkstationConfig": { - "description": "## Example Usage\n\n### Workstation Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n idleTimeout: \"600s\",\n runningTimeout: \"21600s\",\n replicaZones: [\n \"us-central1-a\",\n \"us-central1-b\",\n ],\n annotations: {\n \"label-one\": \"value-one\",\n },\n labels: {\n label: \"key\",\n },\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n disableSsh: false,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n idle_timeout=\"600s\",\n running_timeout=\"21600s\",\n replica_zones=[\n \"us-central1-a\",\n \"us-central1-b\",\n ],\n annotations={\n \"label-one\": \"value-one\",\n },\n labels={\n \"label\": \"key\",\n },\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"e2-standard-4\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n disable_ssh=False,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n IdleTimeout = \"600s\",\n RunningTimeout = \"21600s\",\n ReplicaZones = new[]\n {\n \"us-central1-a\",\n \"us-central1-b\",\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n DisableSsh = false,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tIdleTimeout: pulumi.String(\"600s\"),\n\t\t\tRunningTimeout: pulumi.String(\"21600s\"),\n\t\t\tReplicaZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-central1-a\"),\n\t\t\t\tpulumi.String(\"us-central1-b\"),\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\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tDisableSsh: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\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.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .idleTimeout(\"600s\")\n .runningTimeout(\"21600s\")\n .replicaZones( \n \"us-central1-a\",\n \"us-central1-b\")\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .labels(Map.of(\"label\", \"key\"))\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .disableSsh(false)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n idleTimeout: 600s\n runningTimeout: 21600s\n replicaZones:\n - us-central1-a\n - us-central1-b\n annotations:\n label-one: value-one\n labels:\n label: key\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n disableSsh: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Container\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"n1-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n enableNestedVirtualization: true,\n },\n },\n container: {\n image: \"intellij\",\n env: {\n NAME: \"FOO\",\n BABE: \"bar\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"n1-standard-4\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n enable_nested_virtualization=True,\n ),\n ),\n container=gcp.workstations.WorkstationConfigContainerArgs(\n image=\"intellij\",\n env={\n \"NAME\": \"FOO\",\n \"BABE\": \"bar\",\n },\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"n1-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n EnableNestedVirtualization = true,\n },\n },\n Container = new Gcp.Workstations.Inputs.WorkstationConfigContainerArgs\n {\n Image = \"intellij\",\n Env = \n {\n { \"NAME\", \"FOO\" },\n { \"BABE\", \"bar\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tEnableNestedVirtualization: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tContainer: \u0026workstations.WorkstationConfigContainerArgs{\n\t\t\t\tImage: pulumi.String(\"intellij\"),\n\t\t\t\tEnv: pulumi.StringMap{\n\t\t\t\t\t\"NAME\": pulumi.String(\"FOO\"),\n\t\t\t\t\t\"BABE\": 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.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.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigContainerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"n1-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .enableNestedVirtualization(true)\n .build())\n .build())\n .container(WorkstationConfigContainerArgs.builder()\n .image(\"intellij\")\n .env(Map.ofEntries(\n Map.entry(\"NAME\", \"FOO\"),\n Map.entry(\"BABE\", \"bar\")\n ))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: n1-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n enableNestedVirtualization: true\n container:\n image: intellij\n env:\n NAME: FOO\n BABE: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Persistent Directories\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n shieldedInstanceConfig: {\n enableSecureBoot: true,\n enableVtpm: true,\n },\n },\n },\n persistentDirectories: [{\n mountPath: \"/home\",\n gcePd: {\n sizeGb: 200,\n fsType: \"ext4\",\n diskType: \"pd-standard\",\n reclaimPolicy: \"DELETE\",\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"e2-standard-4\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n shielded_instance_config=gcp.workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs(\n enable_secure_boot=True,\n enable_vtpm=True,\n ),\n ),\n ),\n persistent_directories=[gcp.workstations.WorkstationConfigPersistentDirectoryArgs(\n mount_path=\"/home\",\n gce_pd=gcp.workstations.WorkstationConfigPersistentDirectoryGcePdArgs(\n size_gb=200,\n fs_type=\"ext4\",\n disk_type=\"pd-standard\",\n reclaim_policy=\"DELETE\",\n ),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n ShieldedInstanceConfig = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs\n {\n EnableSecureBoot = true,\n EnableVtpm = true,\n },\n },\n },\n PersistentDirectories = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryArgs\n {\n MountPath = \"/home\",\n GcePd = new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryGcePdArgs\n {\n SizeGb = 200,\n FsType = \"ext4\",\n DiskType = \"pd-standard\",\n ReclaimPolicy = \"DELETE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tShieldedInstanceConfig: \u0026workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs{\n\t\t\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t\t\t\tEnableVtpm: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPersistentDirectories: workstations.WorkstationConfigPersistentDirectoryArray{\n\t\t\t\t\u0026workstations.WorkstationConfigPersistentDirectoryArgs{\n\t\t\t\t\tMountPath: pulumi.String(\"/home\"),\n\t\t\t\t\tGcePd: \u0026workstations.WorkstationConfigPersistentDirectoryGcePdArgs{\n\t\t\t\t\t\tSizeGb: pulumi.Int(200),\n\t\t\t\t\t\tFsType: pulumi.String(\"ext4\"),\n\t\t\t\t\t\tDiskType: pulumi.String(\"pd-standard\"),\n\t\t\t\t\t\tReclaimPolicy: pulumi.String(\"DELETE\"),\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.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryGcePdArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .shieldedInstanceConfig(WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs.builder()\n .enableSecureBoot(true)\n .enableVtpm(true)\n .build())\n .build())\n .build())\n .persistentDirectories(WorkstationConfigPersistentDirectoryArgs.builder()\n .mountPath(\"/home\")\n .gcePd(WorkstationConfigPersistentDirectoryGcePdArgs.builder()\n .sizeGb(200)\n .fsType(\"ext4\")\n .diskType(\"pd-standard\")\n .reclaimPolicy(\"DELETE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n shieldedInstanceConfig:\n enableSecureBoot: true\n enableVtpm: true\n persistentDirectories:\n - mountPath: /home\n gcePd:\n sizeGb: 200\n fsType: ext4\n diskType: pd-standard\n reclaimPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Source Snapshot\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst mySourceDisk = new gcp.compute.Disk(\"my_source_disk\", {\n name: \"workstation-config\",\n size: 10,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst mySourceSnapshot = new gcp.compute.Snapshot(\"my_source_snapshot\", {\n name: \"workstation-config\",\n sourceDisk: mySourceDisk.name,\n zone: \"us-central1-a\",\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: defaultWorkstationCluster.location,\n persistentDirectories: [{\n mountPath: \"/home\",\n gcePd: {\n sourceSnapshot: mySourceSnapshot.id,\n reclaimPolicy: \"DELETE\",\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\nmy_source_disk = gcp.compute.Disk(\"my_source_disk\",\n name=\"workstation-config\",\n size=10,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nmy_source_snapshot = gcp.compute.Snapshot(\"my_source_snapshot\",\n name=\"workstation-config\",\n source_disk=my_source_disk.name,\n zone=\"us-central1-a\")\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\")\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=default_workstation_cluster.location,\n persistent_directories=[gcp.workstations.WorkstationConfigPersistentDirectoryArgs(\n mount_path=\"/home\",\n gce_pd=gcp.workstations.WorkstationConfigPersistentDirectoryGcePdArgs(\n source_snapshot=my_source_snapshot.id,\n reclaim_policy=\"DELETE\",\n ),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var mySourceDisk = new Gcp.Compute.Disk(\"my_source_disk\", new()\n {\n Name = \"workstation-config\",\n Size = 10,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var mySourceSnapshot = new Gcp.Compute.Snapshot(\"my_source_snapshot\", new()\n {\n Name = \"workstation-config\",\n SourceDisk = mySourceDisk.Name,\n Zone = \"us-central1-a\",\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = defaultWorkstationCluster.Location,\n PersistentDirectories = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryArgs\n {\n MountPath = \"/home\",\n GcePd = new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryGcePdArgs\n {\n SourceSnapshot = mySourceSnapshot.Id,\n ReclaimPolicy = \"DELETE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmySourceDisk, err := compute.NewDisk(ctx, \"my_source_disk\", \u0026compute.DiskArgs{\n\t\t\tName: pulumi.String(\"workstation-config\"),\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\tmySourceSnapshot, err := compute.NewSnapshot(ctx, \"my_source_snapshot\", \u0026compute.SnapshotArgs{\n\t\t\tName: pulumi.String(\"workstation-config\"),\n\t\t\tSourceDisk: mySourceDisk.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\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\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 = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: defaultWorkstationCluster.Location,\n\t\t\tPersistentDirectories: workstations.WorkstationConfigPersistentDirectoryArray{\n\t\t\t\t\u0026workstations.WorkstationConfigPersistentDirectoryArgs{\n\t\t\t\t\tMountPath: pulumi.String(\"/home\"),\n\t\t\t\t\tGcePd: \u0026workstations.WorkstationConfigPersistentDirectoryGcePdArgs{\n\t\t\t\t\t\tSourceSnapshot: mySourceSnapshot.ID(),\n\t\t\t\t\t\tReclaimPolicy: pulumi.String(\"DELETE\"),\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.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.Snapshot;\nimport com.pulumi.gcp.compute.SnapshotArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryGcePdArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var mySourceDisk = new Disk(\"mySourceDisk\", DiskArgs.builder()\n .name(\"workstation-config\")\n .size(10)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var mySourceSnapshot = new Snapshot(\"mySourceSnapshot\", SnapshotArgs.builder()\n .name(\"workstation-config\")\n .sourceDisk(mySourceDisk.name())\n .zone(\"us-central1-a\")\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(defaultWorkstationCluster.location())\n .persistentDirectories(WorkstationConfigPersistentDirectoryArgs.builder()\n .mountPath(\"/home\")\n .gcePd(WorkstationConfigPersistentDirectoryGcePdArgs.builder()\n .sourceSnapshot(mySourceSnapshot.id())\n .reclaimPolicy(\"DELETE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n mySourceDisk:\n type: gcp:compute:Disk\n name: my_source_disk\n properties:\n name: workstation-config\n size: 10\n type: pd-ssd\n zone: us-central1-a\n mySourceSnapshot:\n type: gcp:compute:Snapshot\n name: my_source_snapshot\n properties:\n name: workstation-config\n sourceDisk: ${mySourceDisk.name}\n zone: us-central1-a\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: ${defaultWorkstationCluster.location}\n persistentDirectories:\n - mountPath: /home\n gcePd:\n sourceSnapshot: ${mySourceSnapshot.id}\n reclaimPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Shielded Instance Config\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n shieldedInstanceConfig: {\n enableSecureBoot: true,\n enableVtpm: true,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"e2-standard-4\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n shielded_instance_config=gcp.workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs(\n enable_secure_boot=True,\n enable_vtpm=True,\n ),\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n ShieldedInstanceConfig = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs\n {\n EnableSecureBoot = true,\n EnableVtpm = true,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tShieldedInstanceConfig: \u0026workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs{\n\t\t\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t\t\t\tEnableVtpm: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.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.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .shieldedInstanceConfig(WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs.builder()\n .enableSecureBoot(true)\n .enableVtpm(true)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n shieldedInstanceConfig:\n enableSecureBoot: true\n enableVtpm: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Accelerators\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"n1-standard-2\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n accelerators: [{\n type: \"nvidia-tesla-t4\",\n count: 1,\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"n1-standard-2\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n accelerators=[gcp.workstations.WorkstationConfigHostGceInstanceAcceleratorArgs(\n type=\"nvidia-tesla-t4\",\n count=1,\n )],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"n1-standard-2\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n Accelerators = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceAcceleratorArgs\n {\n Type = \"nvidia-tesla-t4\",\n Count = 1,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-2\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tAccelerators: workstations.WorkstationConfigHostGceInstanceAcceleratorArray{\n\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceAcceleratorArgs{\n\t\t\t\t\t\t\tType: pulumi.String(\"nvidia-tesla-t4\"),\n\t\t\t\t\t\t\tCount: pulumi.Int(1),\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.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.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"n1-standard-2\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .accelerators(WorkstationConfigHostGceInstanceAcceleratorArgs.builder()\n .type(\"nvidia-tesla-t4\")\n .count(\"1\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: n1-standard-2\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n accelerators:\n - type: nvidia-tesla-t4\n count: '1'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Boost\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n boostConfigs: [\n {\n id: \"boost-1\",\n machineType: \"n1-standard-2\",\n accelerators: [{\n type: \"nvidia-tesla-t4\",\n count: 1,\n }],\n },\n {\n id: \"boost-1\",\n machineType: \"e2-standard-2\",\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"e2-standard-4\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n boost_configs=[\n gcp.workstations.WorkstationConfigHostGceInstanceBoostConfigArgs(\n id=\"boost-1\",\n machine_type=\"n1-standard-2\",\n accelerators=[gcp.workstations.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs(\n type=\"nvidia-tesla-t4\",\n count=1,\n )],\n ),\n gcp.workstations.WorkstationConfigHostGceInstanceBoostConfigArgs(\n id=\"boost-1\",\n machine_type=\"e2-standard-2\",\n ),\n ],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n BoostConfigs = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceBoostConfigArgs\n {\n Id = \"boost-1\",\n MachineType = \"n1-standard-2\",\n Accelerators = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs\n {\n Type = \"nvidia-tesla-t4\",\n Count = 1,\n },\n },\n },\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceBoostConfigArgs\n {\n Id = \"boost-1\",\n MachineType = \"e2-standard-2\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tBoostConfigs: workstations.WorkstationConfigHostGceInstanceBoostConfigArray{\n\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceBoostConfigArgs{\n\t\t\t\t\t\t\tId: pulumi.String(\"boost-1\"),\n\t\t\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-2\"),\n\t\t\t\t\t\t\tAccelerators: workstations.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArray{\n\t\t\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs{\n\t\t\t\t\t\t\t\t\tType: pulumi.String(\"nvidia-tesla-t4\"),\n\t\t\t\t\t\t\t\t\tCount: pulumi.Int(1),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceBoostConfigArgs{\n\t\t\t\t\t\t\tId: pulumi.String(\"boost-1\"),\n\t\t\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.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.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .boostConfigs( \n WorkstationConfigHostGceInstanceBoostConfigArgs.builder()\n .id(\"boost-1\")\n .machineType(\"n1-standard-2\")\n .accelerators(WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs.builder()\n .type(\"nvidia-tesla-t4\")\n .count(\"1\")\n .build())\n .build(),\n WorkstationConfigHostGceInstanceBoostConfigArgs.builder()\n .id(\"boost-1\")\n .machineType(\"e2-standard-2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n boostConfigs:\n - id: boost-1\n machineType: n1-standard-2\n accelerators:\n - type: nvidia-tesla-t4\n count: '1'\n - id: boost-1\n machineType: e2-standard-2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Encryption Key\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultKeyRing = new gcp.kms.KeyRing(\"default\", {\n name: \"workstation-cluster\",\n location: \"us-central1\",\n});\nconst defaultCryptoKey = new gcp.kms.CryptoKey(\"default\", {\n name: \"workstation-cluster\",\n keyRing: defaultKeyRing.id,\n});\nconst defaultAccount = new gcp.serviceaccount.Account(\"default\", {\n accountId: \"my-account\",\n displayName: \"Service Account\",\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n shieldedInstanceConfig: {\n enableSecureBoot: true,\n enableVtpm: true,\n },\n },\n },\n encryptionKey: {\n kmsKey: defaultCryptoKey.id,\n kmsKeyServiceAccount: defaultAccount.email,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_key_ring = gcp.kms.KeyRing(\"default\",\n name=\"workstation-cluster\",\n location=\"us-central1\")\ndefault_crypto_key = gcp.kms.CryptoKey(\"default\",\n name=\"workstation-cluster\",\n key_ring=default_key_ring.id)\ndefault_account = gcp.serviceaccount.Account(\"default\",\n account_id=\"my-account\",\n display_name=\"Service Account\")\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"e2-standard-4\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n shielded_instance_config=gcp.workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs(\n enable_secure_boot=True,\n enable_vtpm=True,\n ),\n ),\n ),\n encryption_key=gcp.workstations.WorkstationConfigEncryptionKeyArgs(\n kms_key=default_crypto_key.id,\n kms_key_service_account=default_account.email,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultKeyRing = new Gcp.Kms.KeyRing(\"default\", new()\n {\n Name = \"workstation-cluster\",\n Location = \"us-central1\",\n });\n\n var defaultCryptoKey = new Gcp.Kms.CryptoKey(\"default\", new()\n {\n Name = \"workstation-cluster\",\n KeyRing = defaultKeyRing.Id,\n });\n\n var defaultAccount = new Gcp.ServiceAccount.Account(\"default\", new()\n {\n AccountId = \"my-account\",\n DisplayName = \"Service Account\",\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n ShieldedInstanceConfig = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs\n {\n EnableSecureBoot = true,\n EnableVtpm = true,\n },\n },\n },\n EncryptionKey = new Gcp.Workstations.Inputs.WorkstationConfigEncryptionKeyArgs\n {\n KmsKey = defaultCryptoKey.Id,\n KmsKeyServiceAccount = defaultAccount.Email,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultKeyRing, err := kms.NewKeyRing(ctx, \"default\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\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\tdefaultCryptoKey, err := kms.NewCryptoKey(ctx, \"default\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tKeyRing: defaultKeyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultAccount, err := serviceaccount.NewAccount(ctx, \"default\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-account\"),\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 = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tShieldedInstanceConfig: \u0026workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs{\n\t\t\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t\t\t\tEnableVtpm: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tEncryptionKey: \u0026workstations.WorkstationConfigEncryptionKeyArgs{\n\t\t\t\tKmsKey: defaultCryptoKey.ID(),\n\t\t\t\tKmsKeyServiceAccount: defaultAccount.Email,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigEncryptionKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultKeyRing = new KeyRing(\"defaultKeyRing\", KeyRingArgs.builder()\n .name(\"workstation-cluster\")\n .location(\"us-central1\")\n .build());\n\n var defaultCryptoKey = new CryptoKey(\"defaultCryptoKey\", CryptoKeyArgs.builder()\n .name(\"workstation-cluster\")\n .keyRing(defaultKeyRing.id())\n .build());\n\n var defaultAccount = new Account(\"defaultAccount\", AccountArgs.builder()\n .accountId(\"my-account\")\n .displayName(\"Service Account\")\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .shieldedInstanceConfig(WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs.builder()\n .enableSecureBoot(true)\n .enableVtpm(true)\n .build())\n .build())\n .build())\n .encryptionKey(WorkstationConfigEncryptionKeyArgs.builder()\n .kmsKey(defaultCryptoKey.id())\n .kmsKeyServiceAccount(defaultAccount.email())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultKeyRing:\n type: gcp:kms:KeyRing\n name: default\n properties:\n name: workstation-cluster\n location: us-central1\n defaultCryptoKey:\n type: gcp:kms:CryptoKey\n name: default\n properties:\n name: workstation-cluster\n keyRing: ${defaultKeyRing.id}\n defaultAccount:\n type: gcp:serviceaccount:Account\n name: default\n properties:\n accountId: my-account\n displayName: Service Account\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n shieldedInstanceConfig:\n enableSecureBoot: true\n enableVtpm: true\n encryptionKey:\n kmsKey: ${defaultCryptoKey.id}\n kmsKeyServiceAccount: ${defaultAccount.email}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nWorkstationConfig can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}}/workstationConfigs/{{workstation_config_id}}`\n\n* `{{project}}/{{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}`\n\n* `{{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}`\n\nWhen using the `pulumi import` command, WorkstationConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:workstations/workstationConfig:WorkstationConfig default projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}}/workstationConfigs/{{workstation_config_id}}\n```\n\n```sh\n$ pulumi import gcp:workstations/workstationConfig:WorkstationConfig default {{project}}/{{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}\n```\n\n```sh\n$ pulumi import gcp:workstations/workstationConfig:WorkstationConfig default {{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}\n```\n\n", + "description": "## Example Usage\n\n### Workstation Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n idleTimeout: \"600s\",\n runningTimeout: \"21600s\",\n replicaZones: [\n \"us-central1-a\",\n \"us-central1-b\",\n ],\n annotations: {\n \"label-one\": \"value-one\",\n },\n labels: {\n label: \"key\",\n },\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n disableSsh: false,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n idle_timeout=\"600s\",\n running_timeout=\"21600s\",\n replica_zones=[\n \"us-central1-a\",\n \"us-central1-b\",\n ],\n annotations={\n \"label-one\": \"value-one\",\n },\n labels={\n \"label\": \"key\",\n },\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"e2-standard-4\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n disable_ssh=False,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n IdleTimeout = \"600s\",\n RunningTimeout = \"21600s\",\n ReplicaZones = new[]\n {\n \"us-central1-a\",\n \"us-central1-b\",\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n DisableSsh = false,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tIdleTimeout: pulumi.String(\"600s\"),\n\t\t\tRunningTimeout: pulumi.String(\"21600s\"),\n\t\t\tReplicaZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-central1-a\"),\n\t\t\t\tpulumi.String(\"us-central1-b\"),\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\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tDisableSsh: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\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.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .idleTimeout(\"600s\")\n .runningTimeout(\"21600s\")\n .replicaZones( \n \"us-central1-a\",\n \"us-central1-b\")\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .labels(Map.of(\"label\", \"key\"))\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .disableSsh(false)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n idleTimeout: 600s\n runningTimeout: 21600s\n replicaZones:\n - us-central1-a\n - us-central1-b\n annotations:\n label-one: value-one\n labels:\n label: key\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n disableSsh: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Container\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"n1-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n enableNestedVirtualization: true,\n },\n },\n container: {\n image: \"intellij\",\n env: {\n NAME: \"FOO\",\n BABE: \"bar\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"n1-standard-4\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n enable_nested_virtualization=True,\n ),\n ),\n container=gcp.workstations.WorkstationConfigContainerArgs(\n image=\"intellij\",\n env={\n \"NAME\": \"FOO\",\n \"BABE\": \"bar\",\n },\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"n1-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n EnableNestedVirtualization = true,\n },\n },\n Container = new Gcp.Workstations.Inputs.WorkstationConfigContainerArgs\n {\n Image = \"intellij\",\n Env = \n {\n { \"NAME\", \"FOO\" },\n { \"BABE\", \"bar\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tEnableNestedVirtualization: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tContainer: \u0026workstations.WorkstationConfigContainerArgs{\n\t\t\t\tImage: pulumi.String(\"intellij\"),\n\t\t\t\tEnv: pulumi.StringMap{\n\t\t\t\t\t\"NAME\": pulumi.String(\"FOO\"),\n\t\t\t\t\t\"BABE\": 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.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.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigContainerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"n1-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .enableNestedVirtualization(true)\n .build())\n .build())\n .container(WorkstationConfigContainerArgs.builder()\n .image(\"intellij\")\n .env(Map.ofEntries(\n Map.entry(\"NAME\", \"FOO\"),\n Map.entry(\"BABE\", \"bar\")\n ))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: n1-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n enableNestedVirtualization: true\n container:\n image: intellij\n env:\n NAME: FOO\n BABE: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Persistent Directories\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n shieldedInstanceConfig: {\n enableSecureBoot: true,\n enableVtpm: true,\n },\n },\n },\n persistentDirectories: [{\n mountPath: \"/home\",\n gcePd: {\n sizeGb: 200,\n fsType: \"ext4\",\n diskType: \"pd-standard\",\n reclaimPolicy: \"DELETE\",\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"e2-standard-4\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n shielded_instance_config=gcp.workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs(\n enable_secure_boot=True,\n enable_vtpm=True,\n ),\n ),\n ),\n persistent_directories=[gcp.workstations.WorkstationConfigPersistentDirectoryArgs(\n mount_path=\"/home\",\n gce_pd=gcp.workstations.WorkstationConfigPersistentDirectoryGcePdArgs(\n size_gb=200,\n fs_type=\"ext4\",\n disk_type=\"pd-standard\",\n reclaim_policy=\"DELETE\",\n ),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n ShieldedInstanceConfig = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs\n {\n EnableSecureBoot = true,\n EnableVtpm = true,\n },\n },\n },\n PersistentDirectories = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryArgs\n {\n MountPath = \"/home\",\n GcePd = new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryGcePdArgs\n {\n SizeGb = 200,\n FsType = \"ext4\",\n DiskType = \"pd-standard\",\n ReclaimPolicy = \"DELETE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tShieldedInstanceConfig: \u0026workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs{\n\t\t\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t\t\t\tEnableVtpm: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPersistentDirectories: workstations.WorkstationConfigPersistentDirectoryArray{\n\t\t\t\t\u0026workstations.WorkstationConfigPersistentDirectoryArgs{\n\t\t\t\t\tMountPath: pulumi.String(\"/home\"),\n\t\t\t\t\tGcePd: \u0026workstations.WorkstationConfigPersistentDirectoryGcePdArgs{\n\t\t\t\t\t\tSizeGb: pulumi.Int(200),\n\t\t\t\t\t\tFsType: pulumi.String(\"ext4\"),\n\t\t\t\t\t\tDiskType: pulumi.String(\"pd-standard\"),\n\t\t\t\t\t\tReclaimPolicy: pulumi.String(\"DELETE\"),\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.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryGcePdArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .shieldedInstanceConfig(WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs.builder()\n .enableSecureBoot(true)\n .enableVtpm(true)\n .build())\n .build())\n .build())\n .persistentDirectories(WorkstationConfigPersistentDirectoryArgs.builder()\n .mountPath(\"/home\")\n .gcePd(WorkstationConfigPersistentDirectoryGcePdArgs.builder()\n .sizeGb(200)\n .fsType(\"ext4\")\n .diskType(\"pd-standard\")\n .reclaimPolicy(\"DELETE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n shieldedInstanceConfig:\n enableSecureBoot: true\n enableVtpm: true\n persistentDirectories:\n - mountPath: /home\n gcePd:\n sizeGb: 200\n fsType: ext4\n diskType: pd-standard\n reclaimPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Source Snapshot\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst mySourceDisk = new gcp.compute.Disk(\"my_source_disk\", {\n name: \"workstation-config\",\n size: 10,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst mySourceSnapshot = new gcp.compute.Snapshot(\"my_source_snapshot\", {\n name: \"workstation-config\",\n sourceDisk: mySourceDisk.name,\n zone: \"us-central1-a\",\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: defaultWorkstationCluster.location,\n persistentDirectories: [{\n mountPath: \"/home\",\n gcePd: {\n sourceSnapshot: mySourceSnapshot.id,\n reclaimPolicy: \"DELETE\",\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\nmy_source_disk = gcp.compute.Disk(\"my_source_disk\",\n name=\"workstation-config\",\n size=10,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nmy_source_snapshot = gcp.compute.Snapshot(\"my_source_snapshot\",\n name=\"workstation-config\",\n source_disk=my_source_disk.name,\n zone=\"us-central1-a\")\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\")\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=default_workstation_cluster.location,\n persistent_directories=[gcp.workstations.WorkstationConfigPersistentDirectoryArgs(\n mount_path=\"/home\",\n gce_pd=gcp.workstations.WorkstationConfigPersistentDirectoryGcePdArgs(\n source_snapshot=my_source_snapshot.id,\n reclaim_policy=\"DELETE\",\n ),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var mySourceDisk = new Gcp.Compute.Disk(\"my_source_disk\", new()\n {\n Name = \"workstation-config\",\n Size = 10,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var mySourceSnapshot = new Gcp.Compute.Snapshot(\"my_source_snapshot\", new()\n {\n Name = \"workstation-config\",\n SourceDisk = mySourceDisk.Name,\n Zone = \"us-central1-a\",\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = defaultWorkstationCluster.Location,\n PersistentDirectories = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryArgs\n {\n MountPath = \"/home\",\n GcePd = new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryGcePdArgs\n {\n SourceSnapshot = mySourceSnapshot.Id,\n ReclaimPolicy = \"DELETE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmySourceDisk, err := compute.NewDisk(ctx, \"my_source_disk\", \u0026compute.DiskArgs{\n\t\t\tName: pulumi.String(\"workstation-config\"),\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\tmySourceSnapshot, err := compute.NewSnapshot(ctx, \"my_source_snapshot\", \u0026compute.SnapshotArgs{\n\t\t\tName: pulumi.String(\"workstation-config\"),\n\t\t\tSourceDisk: mySourceDisk.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\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\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 = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: defaultWorkstationCluster.Location,\n\t\t\tPersistentDirectories: workstations.WorkstationConfigPersistentDirectoryArray{\n\t\t\t\t\u0026workstations.WorkstationConfigPersistentDirectoryArgs{\n\t\t\t\t\tMountPath: pulumi.String(\"/home\"),\n\t\t\t\t\tGcePd: \u0026workstations.WorkstationConfigPersistentDirectoryGcePdArgs{\n\t\t\t\t\t\tSourceSnapshot: mySourceSnapshot.ID(),\n\t\t\t\t\t\tReclaimPolicy: pulumi.String(\"DELETE\"),\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.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.Snapshot;\nimport com.pulumi.gcp.compute.SnapshotArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryGcePdArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var mySourceDisk = new Disk(\"mySourceDisk\", DiskArgs.builder()\n .name(\"workstation-config\")\n .size(10)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var mySourceSnapshot = new Snapshot(\"mySourceSnapshot\", SnapshotArgs.builder()\n .name(\"workstation-config\")\n .sourceDisk(mySourceDisk.name())\n .zone(\"us-central1-a\")\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(defaultWorkstationCluster.location())\n .persistentDirectories(WorkstationConfigPersistentDirectoryArgs.builder()\n .mountPath(\"/home\")\n .gcePd(WorkstationConfigPersistentDirectoryGcePdArgs.builder()\n .sourceSnapshot(mySourceSnapshot.id())\n .reclaimPolicy(\"DELETE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n mySourceDisk:\n type: gcp:compute:Disk\n name: my_source_disk\n properties:\n name: workstation-config\n size: 10\n type: pd-ssd\n zone: us-central1-a\n mySourceSnapshot:\n type: gcp:compute:Snapshot\n name: my_source_snapshot\n properties:\n name: workstation-config\n sourceDisk: ${mySourceDisk.name}\n zone: us-central1-a\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: ${defaultWorkstationCluster.location}\n persistentDirectories:\n - mountPath: /home\n gcePd:\n sourceSnapshot: ${mySourceSnapshot.id}\n reclaimPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Shielded Instance Config\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n shieldedInstanceConfig: {\n enableSecureBoot: true,\n enableVtpm: true,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"e2-standard-4\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n shielded_instance_config=gcp.workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs(\n enable_secure_boot=True,\n enable_vtpm=True,\n ),\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n ShieldedInstanceConfig = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs\n {\n EnableSecureBoot = true,\n EnableVtpm = true,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tShieldedInstanceConfig: \u0026workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs{\n\t\t\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t\t\t\tEnableVtpm: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.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.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .shieldedInstanceConfig(WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs.builder()\n .enableSecureBoot(true)\n .enableVtpm(true)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n shieldedInstanceConfig:\n enableSecureBoot: true\n enableVtpm: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Accelerators\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"n1-standard-2\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n accelerators: [{\n type: \"nvidia-tesla-t4\",\n count: 1,\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"n1-standard-2\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n accelerators=[gcp.workstations.WorkstationConfigHostGceInstanceAcceleratorArgs(\n type=\"nvidia-tesla-t4\",\n count=1,\n )],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"n1-standard-2\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n Accelerators = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceAcceleratorArgs\n {\n Type = \"nvidia-tesla-t4\",\n Count = 1,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-2\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tAccelerators: workstations.WorkstationConfigHostGceInstanceAcceleratorArray{\n\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceAcceleratorArgs{\n\t\t\t\t\t\t\tType: pulumi.String(\"nvidia-tesla-t4\"),\n\t\t\t\t\t\t\tCount: pulumi.Int(1),\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.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.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"n1-standard-2\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .accelerators(WorkstationConfigHostGceInstanceAcceleratorArgs.builder()\n .type(\"nvidia-tesla-t4\")\n .count(\"1\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: n1-standard-2\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n accelerators:\n - type: nvidia-tesla-t4\n count: '1'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Boost\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n boostConfigs: [\n {\n id: \"boost-1\",\n machineType: \"n1-standard-2\",\n accelerators: [{\n type: \"nvidia-tesla-t4\",\n count: 1,\n }],\n },\n {\n id: \"boost-2\",\n machineType: \"n1-standard-2\",\n poolSize: 2,\n bootDiskSizeGb: 30,\n enableNestedVirtualization: true,\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"e2-standard-4\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n boost_configs=[\n gcp.workstations.WorkstationConfigHostGceInstanceBoostConfigArgs(\n id=\"boost-1\",\n machine_type=\"n1-standard-2\",\n accelerators=[gcp.workstations.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs(\n type=\"nvidia-tesla-t4\",\n count=1,\n )],\n ),\n gcp.workstations.WorkstationConfigHostGceInstanceBoostConfigArgs(\n id=\"boost-2\",\n machine_type=\"n1-standard-2\",\n pool_size=2,\n boot_disk_size_gb=30,\n enable_nested_virtualization=True,\n ),\n ],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n BoostConfigs = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceBoostConfigArgs\n {\n Id = \"boost-1\",\n MachineType = \"n1-standard-2\",\n Accelerators = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs\n {\n Type = \"nvidia-tesla-t4\",\n Count = 1,\n },\n },\n },\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceBoostConfigArgs\n {\n Id = \"boost-2\",\n MachineType = \"n1-standard-2\",\n PoolSize = 2,\n BootDiskSizeGb = 30,\n EnableNestedVirtualization = true,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tBoostConfigs: workstations.WorkstationConfigHostGceInstanceBoostConfigArray{\n\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceBoostConfigArgs{\n\t\t\t\t\t\t\tId: pulumi.String(\"boost-1\"),\n\t\t\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-2\"),\n\t\t\t\t\t\t\tAccelerators: workstations.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArray{\n\t\t\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs{\n\t\t\t\t\t\t\t\t\tType: pulumi.String(\"nvidia-tesla-t4\"),\n\t\t\t\t\t\t\t\t\tCount: pulumi.Int(1),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceBoostConfigArgs{\n\t\t\t\t\t\t\tId: pulumi.String(\"boost-2\"),\n\t\t\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-2\"),\n\t\t\t\t\t\t\tPoolSize: pulumi.Int(2),\n\t\t\t\t\t\t\tBootDiskSizeGb: pulumi.Int(30),\n\t\t\t\t\t\t\tEnableNestedVirtualization: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.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.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .boostConfigs( \n WorkstationConfigHostGceInstanceBoostConfigArgs.builder()\n .id(\"boost-1\")\n .machineType(\"n1-standard-2\")\n .accelerators(WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs.builder()\n .type(\"nvidia-tesla-t4\")\n .count(\"1\")\n .build())\n .build(),\n WorkstationConfigHostGceInstanceBoostConfigArgs.builder()\n .id(\"boost-2\")\n .machineType(\"n1-standard-2\")\n .poolSize(2)\n .bootDiskSizeGb(30)\n .enableNestedVirtualization(true)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n boostConfigs:\n - id: boost-1\n machineType: n1-standard-2\n accelerators:\n - type: nvidia-tesla-t4\n count: '1'\n - id: boost-2\n machineType: n1-standard-2\n poolSize: 2\n bootDiskSizeGb: 30\n enableNestedVirtualization: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Encryption Key\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultKeyRing = new gcp.kms.KeyRing(\"default\", {\n name: \"workstation-cluster\",\n location: \"us-central1\",\n});\nconst defaultCryptoKey = new gcp.kms.CryptoKey(\"default\", {\n name: \"workstation-cluster\",\n keyRing: defaultKeyRing.id,\n});\nconst defaultAccount = new gcp.serviceaccount.Account(\"default\", {\n accountId: \"my-account\",\n displayName: \"Service Account\",\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n shieldedInstanceConfig: {\n enableSecureBoot: true,\n enableVtpm: true,\n },\n },\n },\n encryptionKey: {\n kmsKey: defaultCryptoKey.id,\n kmsKeyServiceAccount: defaultAccount.email,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_key_ring = gcp.kms.KeyRing(\"default\",\n name=\"workstation-cluster\",\n location=\"us-central1\")\ndefault_crypto_key = gcp.kms.CryptoKey(\"default\",\n name=\"workstation-cluster\",\n key_ring=default_key_ring.id)\ndefault_account = gcp.serviceaccount.Account(\"default\",\n account_id=\"my-account\",\n display_name=\"Service Account\")\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host=gcp.workstations.WorkstationConfigHostArgs(\n gce_instance=gcp.workstations.WorkstationConfigHostGceInstanceArgs(\n machine_type=\"e2-standard-4\",\n boot_disk_size_gb=35,\n disable_public_ip_addresses=True,\n shielded_instance_config=gcp.workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs(\n enable_secure_boot=True,\n enable_vtpm=True,\n ),\n ),\n ),\n encryption_key=gcp.workstations.WorkstationConfigEncryptionKeyArgs(\n kms_key=default_crypto_key.id,\n kms_key_service_account=default_account.email,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.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 });\n\n var defaultKeyRing = new Gcp.Kms.KeyRing(\"default\", new()\n {\n Name = \"workstation-cluster\",\n Location = \"us-central1\",\n });\n\n var defaultCryptoKey = new Gcp.Kms.CryptoKey(\"default\", new()\n {\n Name = \"workstation-cluster\",\n KeyRing = defaultKeyRing.Id,\n });\n\n var defaultAccount = new Gcp.ServiceAccount.Account(\"default\", new()\n {\n AccountId = \"my-account\",\n DisplayName = \"Service Account\",\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n ShieldedInstanceConfig = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs\n {\n EnableSecureBoot = true,\n EnableVtpm = true,\n },\n },\n },\n EncryptionKey = new Gcp.Workstations.Inputs.WorkstationConfigEncryptionKeyArgs\n {\n KmsKey = defaultCryptoKey.Id,\n KmsKeyServiceAccount = defaultAccount.Email,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultKeyRing, err := kms.NewKeyRing(ctx, \"default\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\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\tdefaultCryptoKey, err := kms.NewCryptoKey(ctx, \"default\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tKeyRing: defaultKeyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultAccount, err := serviceaccount.NewAccount(ctx, \"default\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-account\"),\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 = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tShieldedInstanceConfig: \u0026workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs{\n\t\t\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t\t\t\tEnableVtpm: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tEncryptionKey: \u0026workstations.WorkstationConfigEncryptionKeyArgs{\n\t\t\t\tKmsKey: defaultCryptoKey.ID(),\n\t\t\t\tKmsKeyServiceAccount: defaultAccount.Email,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigEncryptionKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.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());\n\n var defaultKeyRing = new KeyRing(\"defaultKeyRing\", KeyRingArgs.builder()\n .name(\"workstation-cluster\")\n .location(\"us-central1\")\n .build());\n\n var defaultCryptoKey = new CryptoKey(\"defaultCryptoKey\", CryptoKeyArgs.builder()\n .name(\"workstation-cluster\")\n .keyRing(defaultKeyRing.id())\n .build());\n\n var defaultAccount = new Account(\"defaultAccount\", AccountArgs.builder()\n .accountId(\"my-account\")\n .displayName(\"Service Account\")\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .shieldedInstanceConfig(WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs.builder()\n .enableSecureBoot(true)\n .enableVtpm(true)\n .build())\n .build())\n .build())\n .encryptionKey(WorkstationConfigEncryptionKeyArgs.builder()\n .kmsKey(defaultCryptoKey.id())\n .kmsKeyServiceAccount(defaultAccount.email())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultKeyRing:\n type: gcp:kms:KeyRing\n name: default\n properties:\n name: workstation-cluster\n location: us-central1\n defaultCryptoKey:\n type: gcp:kms:CryptoKey\n name: default\n properties:\n name: workstation-cluster\n keyRing: ${defaultKeyRing.id}\n defaultAccount:\n type: gcp:serviceaccount:Account\n name: default\n properties:\n accountId: my-account\n displayName: Service Account\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n shieldedInstanceConfig:\n enableSecureBoot: true\n enableVtpm: true\n encryptionKey:\n kmsKey: ${defaultCryptoKey.id}\n kmsKeyServiceAccount: ${defaultAccount.email}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nWorkstationConfig can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}}/workstationConfigs/{{workstation_config_id}}`\n\n* `{{project}}/{{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}`\n\n* `{{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}`\n\nWhen using the `pulumi import` command, WorkstationConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:workstations/workstationConfig:WorkstationConfig default projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}}/workstationConfigs/{{workstation_config_id}}\n```\n\n```sh\n$ pulumi import gcp:workstations/workstationConfig:WorkstationConfig default {{project}}/{{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}\n```\n\n```sh\n$ pulumi import gcp:workstations/workstationConfig:WorkstationConfig default {{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}\n```\n\n", "properties": { "annotations": { "type": "object", @@ -249450,6 +251322,9 @@ "description": "The URI of the Backend Service.\n", "type": "string" }, + "serviceLbPolicy": { + "type": "string" + }, "sessionAffinity": { "description": "The Backend Service session stickiness configuration.\n", "type": "string" @@ -249488,6 +251363,7 @@ "securityPolicy", "securitySettings", "selfLink", + "serviceLbPolicy", "sessionAffinity", "timeoutSec", "id" @@ -249847,6 +251723,9 @@ "description": "The unique ID of the snapshot used to create this disk. This value\nidentifies the exact snapshot that was used to create this persistent\ndisk. For example, if you created the persistent disk from a snapshot\nthat was later deleted and recreated under the same name, the source\nsnapshot ID would identify the exact version of the snapshot that was\nused.\n", "type": "string" }, + "storagePool": { + "type": "string" + }, "type": { "description": "URL of the disk type resource describing which disk type to use to\ncreate the disk.\n", "type": "string" @@ -249894,6 +251773,7 @@ "sourceImageId", "sourceSnapshotEncryptionKeys", "sourceSnapshotId", + "storagePool", "pulumiLabels", "type", "users", @@ -250987,6 +252867,12 @@ }, "type": "array" }, + "partnerMetadata": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, "project": { "type": "string" }, @@ -251083,6 +252969,7 @@ "networkInterfaces", "networkPerformanceConfigs", "params", + "partnerMetadata", "reservationAffinities", "resourcePolicies", "schedulings", @@ -251273,6 +253160,12 @@ "selfLink": { "type": "string" }, + "standbyPolicies": { + "items": { + "$ref": "#/types/gcp:compute/getInstanceGroupManagerStandbyPolicy:getInstanceGroupManagerStandbyPolicy" + }, + "type": "array" + }, "statefulDisks": { "items": { "$ref": "#/types/gcp:compute/getInstanceGroupManagerStatefulDisk:getInstanceGroupManagerStatefulDisk" @@ -251306,6 +253199,12 @@ "targetSize": { "type": "integer" }, + "targetStoppedSize": { + "type": "integer" + }, + "targetSuspendedSize": { + "type": "integer" + }, "updatePolicies": { "items": { "$ref": "#/types/gcp:compute/getInstanceGroupManagerUpdatePolicy:getInstanceGroupManagerUpdatePolicy" @@ -251341,12 +253240,15 @@ "namedPorts", "operation", "params", + "standbyPolicies", "statefulDisks", "statefulExternalIps", "statefulInternalIps", "statuses", "targetPools", "targetSize", + "targetStoppedSize", + "targetSuspendedSize", "updatePolicies", "versions", "waitForInstances", @@ -251624,6 +253526,12 @@ }, "type": "array" }, + "partnerMetadata": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, "project": { "description": "The ID of the project in which the resource belongs. If it\nis not provided, the provider project is used.\n", "type": "string" @@ -251718,6 +253626,7 @@ "namePrefix", "networkInterfaces", "networkPerformanceConfigs", + "partnerMetadata", "region", "reservationAffinities", "resourceManagerTags", @@ -252747,6 +254656,12 @@ }, "type": "array" }, + "partnerMetadata": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, "project": { "description": "The ID of the project in which the resource belongs. If it\nis not provided, the provider project is used.\n", "type": "string" @@ -252836,6 +254751,7 @@ "namePrefix", "networkInterfaces", "networkPerformanceConfigs", + "partnerMetadata", "reservationAffinities", "resourceManagerTags", "resourcePolicies", @@ -253633,6 +255549,89 @@ "type": "object" } }, + "gcp:compute/getSecurityPolicy:getSecurityPolicy": { + "description": "To get more information about Google Compute Security Policy, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sp1 = gcp.compute.getSecurityPolicy({\n name: \"my-policy\",\n project: \"my-project\",\n});\nconst sp2 = gcp.compute.getSecurityPolicy({\n selfLink: \"https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsp1 = gcp.compute.get_security_policy(name=\"my-policy\",\n project=\"my-project\")\nsp2 = gcp.compute.get_security_policy(self_link=\"https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sp1 = Gcp.Compute.GetSecurityPolicy.Invoke(new()\n {\n Name = \"my-policy\",\n Project = \"my-project\",\n });\n\n var sp2 = Gcp.Compute.GetSecurityPolicy.Invoke(new()\n {\n SelfLink = \"https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.LookupSecurityPolicy(ctx, \u0026compute.LookupSecurityPolicyArgs{\n\t\t\tName: pulumi.StringRef(\"my-policy\"),\n\t\t\tProject: pulumi.StringRef(\"my-project\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.LookupSecurityPolicy(ctx, \u0026compute.LookupSecurityPolicyArgs{\n\t\t\tSelfLink: pulumi.StringRef(\"https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy\"),\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.GetSecurityPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var sp1 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()\n .name(\"my-policy\")\n .project(\"my-project\")\n .build());\n\n final var sp2 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()\n .selfLink(\"https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n sp1:\n fn::invoke:\n Function: gcp:compute:getSecurityPolicy\n Arguments:\n name: my-policy\n project: my-project\n sp2:\n fn::invoke:\n Function: gcp:compute:getSecurityPolicy\n Arguments:\n selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "inputs": { + "description": "A collection of arguments for invoking getSecurityPolicy.\n", + "properties": { + "name": { + "type": "string", + "description": "The name of the security policy. Provide either this or a `self_link`.\n" + }, + "project": { + "type": "string", + "description": "The project in which the resource belongs. If it is not provided, the provider project is used.\n" + }, + "selfLink": { + "type": "string", + "description": "The self_link of the security policy. Provide either this or a `name`\n" + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getSecurityPolicy.\n", + "properties": { + "adaptiveProtectionConfigs": { + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyAdaptiveProtectionConfig:getSecurityPolicyAdaptiveProtectionConfig" + }, + "type": "array" + }, + "advancedOptionsConfigs": { + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyAdvancedOptionsConfig:getSecurityPolicyAdvancedOptionsConfig" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "fingerprint": { + "type": "string" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "name": { + "type": "string" + }, + "project": { + "type": "string" + }, + "recaptchaOptionsConfigs": { + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRecaptchaOptionsConfig:getSecurityPolicyRecaptchaOptionsConfig" + }, + "type": "array" + }, + "rules": { + "items": { + "$ref": "#/types/gcp:compute/getSecurityPolicyRule:getSecurityPolicyRule" + }, + "type": "array" + }, + "selfLink": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "adaptiveProtectionConfigs", + "advancedOptionsConfigs", + "description", + "fingerprint", + "recaptchaOptionsConfigs", + "rules", + "type", + "id" + ], + "type": "object" + } + }, "gcp:compute/getSnapshot:getSnapshot": { "description": "To 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## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\n//by name \nconst snapshot = gcp.compute.getSnapshot({\n name: \"my-snapshot\",\n});\n// using a filter\nconst latest-snapshot = gcp.compute.getSnapshot({\n filter: \"name != my-snapshot\",\n mostRecent: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\n#by name \nsnapshot = gcp.compute.get_snapshot(name=\"my-snapshot\")\n# using a filter\nlatest_snapshot = gcp.compute.get_snapshot(filter=\"name != my-snapshot\",\n most_recent=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n //by name \n var snapshot = Gcp.Compute.GetSnapshot.Invoke(new()\n {\n Name = \"my-snapshot\",\n });\n\n // using a filter\n var latest_snapshot = Gcp.Compute.GetSnapshot.Invoke(new()\n {\n Filter = \"name != my-snapshot\",\n MostRecent = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// by name\n\t\t_, err := compute.LookupSnapshot(ctx, \u0026compute.LookupSnapshotArgs{\n\t\t\tName: pulumi.StringRef(\"my-snapshot\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// using a filter\n\t\t_, err = compute.LookupSnapshot(ctx, \u0026compute.LookupSnapshotArgs{\n\t\t\tFilter: pulumi.StringRef(\"name != my-snapshot\"),\n\t\t\tMostRecent: pulumi.BoolRef(true),\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.GetSnapshotArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n //by name \n final var snapshot = ComputeFunctions.getSnapshot(GetSnapshotArgs.builder()\n .name(\"my-snapshot\")\n .build());\n\n // using a filter\n final var latest-snapshot = ComputeFunctions.getSnapshot(GetSnapshotArgs.builder()\n .filter(\"name != my-snapshot\")\n .mostRecent(true)\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n #by name\n snapshot:\n fn::invoke:\n Function: gcp:compute:getSnapshot\n Arguments:\n name: my-snapshot\n # using a filter\n latest-snapshot:\n fn::invoke:\n Function: gcp:compute:getSnapshot\n Arguments:\n filter: name != my-snapshot\n mostRecent: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", "inputs": { @@ -254767,6 +256766,12 @@ }, "type": "array" }, + "secretManagerConfigs": { + "items": { + "$ref": "#/types/gcp:container/getClusterSecretManagerConfig:getClusterSecretManagerConfig" + }, + "type": "array" + }, "securityPostureConfigs": { "items": { "$ref": "#/types/gcp:container/getClusterSecurityPostureConfig:getClusterSecurityPostureConfig" @@ -254881,6 +256886,7 @@ "removeDefaultNodePool", "resourceLabels", "resourceUsageExportConfigs", + "secretManagerConfigs", "securityPostureConfigs", "selfLink", "serviceExternalIpsConfigs", diff --git a/provider/go.mod b/provider/go.mod index c48314d63d..21efabdd97 100644 --- a/provider/go.mod +++ b/provider/go.mod @@ -41,7 +41,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect github.com/BurntSushi/toml v1.2.1 // indirect - github.com/GoogleCloudPlatform/declarative-resource-client-library v1.66.0 // indirect + github.com/GoogleCloudPlatform/declarative-resource-client-library v1.67.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect @@ -241,6 +241,7 @@ require ( go.opentelemetry.io/otel/metric v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/atomic v1.9.0 // indirect + go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect gocloud.dev v0.37.0 // indirect gocloud.dev/secrets/hashivault v0.37.0 // indirect golang.org/x/crypto v0.23.0 // indirect diff --git a/provider/go.sum b/provider/go.sum index 6d97c3c3f3..cf52ee1d45 100644 --- a/provider/go.sum +++ b/provider/go.sum @@ -1175,8 +1175,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/GoogleCloudPlatform/declarative-resource-client-library v1.66.0 h1:9C++tMcDcwgT8QTaq2bRtuAB5Tg4o4I4CkDQD57i914= -github.com/GoogleCloudPlatform/declarative-resource-client-library v1.66.0/go.mod h1:pL2Qt5HT+x6xrTd806oMiM3awW6kNIXB/iiuClz6m6k= +github.com/GoogleCloudPlatform/declarative-resource-client-library v1.67.0 h1:FBKsgWIOEdtpx2YuF+aBH33K0Ih25D3xuKyp9peH4jc= +github.com/GoogleCloudPlatform/declarative-resource-client-library v1.67.0/go.mod h1:pL2Qt5HT+x6xrTd806oMiM3awW6kNIXB/iiuClz6m6k= github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= @@ -2149,6 +2149,8 @@ go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M= +go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= gocloud.dev v0.37.0 h1:XF1rN6R0qZI/9DYjN16Uy0durAmSlf58DHOcb28GPro= gocloud.dev v0.37.0/go.mod h1:7/O4kqdInCNsc6LqgmuFnS0GRew4XNNYWpA44yQnwco= gocloud.dev/secrets/hashivault v0.37.0 h1:5ehGtUBP29DFAgAs6bPw7fVSgqQ3TxaoK2xVcLp1x+c= diff --git a/sdk/dotnet/AppEngine/FlexibleAppVersion.cs b/sdk/dotnet/AppEngine/FlexibleAppVersion.cs index 2312eeca57..08d28c11a8 100644 --- a/sdk/dotnet/AppEngine/FlexibleAppVersion.cs +++ b/sdk/dotnet/AppEngine/FlexibleAppVersion.cs @@ -242,6 +242,12 @@ public partial class FlexibleAppVersion : global::Pulumi.CustomResource [Output("envVariables")] public Output?> EnvVariables { get; private set; } = null!; + /// + /// Runtime settings for App Engine flexible environment. + /// + [Output("flexibleRuntimeSettings")] + public Output FlexibleRuntimeSettings { get; private set; } = null!; + /// /// 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. @@ -487,6 +493,12 @@ public InputMap EnvVariables set => _envVariables = value; } + /// + /// Runtime settings for App Engine flexible environment. + /// + [Input("flexibleRuntimeSettings")] + public Input? FlexibleRuntimeSettings { get; set; } + [Input("handlers")] private InputList? _handlers; @@ -700,6 +712,12 @@ public InputMap EnvVariables set => _envVariables = value; } + /// + /// Runtime settings for App Engine flexible environment. + /// + [Input("flexibleRuntimeSettings")] + public Input? FlexibleRuntimeSettings { get; set; } + [Input("handlers")] private InputList? _handlers; diff --git a/sdk/dotnet/AppEngine/Inputs/FlexibleAppVersionFlexibleRuntimeSettingsArgs.cs b/sdk/dotnet/AppEngine/Inputs/FlexibleAppVersionFlexibleRuntimeSettingsArgs.cs new file mode 100644 index 0000000000..abc75cb1a6 --- /dev/null +++ b/sdk/dotnet/AppEngine/Inputs/FlexibleAppVersionFlexibleRuntimeSettingsArgs.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.AppEngine.Inputs +{ + + public sealed class FlexibleAppVersionFlexibleRuntimeSettingsArgs : global::Pulumi.ResourceArgs + { + /// + /// Operating System of the application runtime. + /// + [Input("operatingSystem")] + public Input? OperatingSystem { get; set; } + + /// + /// The runtime version of an App Engine flexible application. + /// + [Input("runtimeVersion")] + public Input? RuntimeVersion { get; set; } + + public FlexibleAppVersionFlexibleRuntimeSettingsArgs() + { + } + public static new FlexibleAppVersionFlexibleRuntimeSettingsArgs Empty => new FlexibleAppVersionFlexibleRuntimeSettingsArgs(); + } +} diff --git a/sdk/dotnet/AppEngine/Inputs/FlexibleAppVersionFlexibleRuntimeSettingsGetArgs.cs b/sdk/dotnet/AppEngine/Inputs/FlexibleAppVersionFlexibleRuntimeSettingsGetArgs.cs new file mode 100644 index 0000000000..0558c9ead9 --- /dev/null +++ b/sdk/dotnet/AppEngine/Inputs/FlexibleAppVersionFlexibleRuntimeSettingsGetArgs.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.AppEngine.Inputs +{ + + public sealed class FlexibleAppVersionFlexibleRuntimeSettingsGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Operating System of the application runtime. + /// + [Input("operatingSystem")] + public Input? OperatingSystem { get; set; } + + /// + /// The runtime version of an App Engine flexible application. + /// + [Input("runtimeVersion")] + public Input? RuntimeVersion { get; set; } + + public FlexibleAppVersionFlexibleRuntimeSettingsGetArgs() + { + } + public static new FlexibleAppVersionFlexibleRuntimeSettingsGetArgs Empty => new FlexibleAppVersionFlexibleRuntimeSettingsGetArgs(); + } +} diff --git a/sdk/dotnet/AppEngine/Outputs/FlexibleAppVersionFlexibleRuntimeSettings.cs b/sdk/dotnet/AppEngine/Outputs/FlexibleAppVersionFlexibleRuntimeSettings.cs new file mode 100644 index 0000000000..b0ff7c7975 --- /dev/null +++ b/sdk/dotnet/AppEngine/Outputs/FlexibleAppVersionFlexibleRuntimeSettings.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.AppEngine.Outputs +{ + + [OutputType] + public sealed class FlexibleAppVersionFlexibleRuntimeSettings + { + /// + /// Operating System of the application runtime. + /// + public readonly string? OperatingSystem; + /// + /// The runtime version of an App Engine flexible application. + /// + public readonly string? RuntimeVersion; + + [OutputConstructor] + private FlexibleAppVersionFlexibleRuntimeSettings( + string? operatingSystem, + + string? runtimeVersion) + { + OperatingSystem = operatingSystem; + RuntimeVersion = runtimeVersion; + } + } +} diff --git a/sdk/dotnet/BigTable/Instance.cs b/sdk/dotnet/BigTable/Instance.cs index 82e49fe415..65ab43aca5 100644 --- a/sdk/dotnet/BigTable/Instance.cs +++ b/sdk/dotnet/BigTable/Instance.cs @@ -160,6 +160,12 @@ public partial class Instance : global::Pulumi.CustomResource [Output("effectiveLabels")] public Output> EffectiveLabels { get; private set; } = null!; + /// + /// Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + /// + [Output("forceDestroy")] + public Output ForceDestroy { get; private set; } = null!; + /// /// 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, @@ -278,6 +284,12 @@ public InputList Clusters [Input("displayName")] public Input? DisplayName { get; set; } + /// + /// Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + /// + [Input("forceDestroy")] + public Input? ForceDestroy { get; set; } + /// /// 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, @@ -371,6 +383,12 @@ public InputMap EffectiveLabels } } + /// + /// Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + /// + [Input("forceDestroy")] + public Input? ForceDestroy { get; set; } + /// /// 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, diff --git a/sdk/dotnet/CloudDeploy/Inputs/TargetExecutionConfigArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/TargetExecutionConfigArgs.cs index 8ad4f874eb..baaa471221 100644 --- a/sdk/dotnet/CloudDeploy/Inputs/TargetExecutionConfigArgs.cs +++ b/sdk/dotnet/CloudDeploy/Inputs/TargetExecutionConfigArgs.cs @@ -42,6 +42,12 @@ public InputList Usages set => _usages = value; } + /// + /// Optional. If true, additional logging will be enabled when running builds in this execution environment. + /// + [Input("verbose")] + public Input? Verbose { get; set; } + /// /// Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. /// diff --git a/sdk/dotnet/CloudDeploy/Inputs/TargetExecutionConfigGetArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/TargetExecutionConfigGetArgs.cs index 461069335e..599f9e1341 100644 --- a/sdk/dotnet/CloudDeploy/Inputs/TargetExecutionConfigGetArgs.cs +++ b/sdk/dotnet/CloudDeploy/Inputs/TargetExecutionConfigGetArgs.cs @@ -42,6 +42,12 @@ public InputList Usages set => _usages = value; } + /// + /// Optional. If true, additional logging will be enabled when running builds in this execution environment. + /// + [Input("verbose")] + public Input? Verbose { get; set; } + /// /// Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. /// diff --git a/sdk/dotnet/CloudDeploy/Outputs/TargetExecutionConfig.cs b/sdk/dotnet/CloudDeploy/Outputs/TargetExecutionConfig.cs index d710d45946..aaa81fbd57 100644 --- a/sdk/dotnet/CloudDeploy/Outputs/TargetExecutionConfig.cs +++ b/sdk/dotnet/CloudDeploy/Outputs/TargetExecutionConfig.cs @@ -30,6 +30,10 @@ public sealed class TargetExecutionConfig /// public readonly ImmutableArray Usages; /// + /// Optional. If true, additional logging will be enabled when running builds in this execution environment. + /// + public readonly bool? Verbose; + /// /// Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. /// public readonly string? WorkerPool; @@ -44,12 +48,15 @@ private TargetExecutionConfig( ImmutableArray usages, + bool? verbose, + string? workerPool) { ArtifactStorage = artifactStorage; ExecutionTimeout = executionTimeout; ServiceAccount = serviceAccount; Usages = usages; + Verbose = verbose; WorkerPool = workerPool; } } diff --git a/sdk/dotnet/Compute/BackendService.cs b/sdk/dotnet/Compute/BackendService.cs index 78a8de2689..a45f83f8cf 100644 --- a/sdk/dotnet/Compute/BackendService.cs +++ b/sdk/dotnet/Compute/BackendService.cs @@ -725,6 +725,13 @@ public partial class BackendService : global::Pulumi.CustomResource [Output("selfLink")] public Output SelfLink { get; private set; } = null!; + /// + /// URL to networkservices.ServiceLbPolicy resource. + /// Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + /// + [Output("serviceLbPolicy")] + public Output ServiceLbPolicy { get; private set; } = null!; + /// /// Type of session affinity to use. The default is NONE. Session affinity is /// not applicable if the protocol is UDP. @@ -1069,6 +1076,13 @@ public InputList LocalityLbPolicies [Input("securitySettings")] public Input? SecuritySettings { get; set; } + /// + /// URL to networkservices.ServiceLbPolicy resource. + /// Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + /// + [Input("serviceLbPolicy")] + public Input? ServiceLbPolicy { get; set; } + /// /// Type of session affinity to use. The default is NONE. Session affinity is /// not applicable if the protocol is UDP. @@ -1400,6 +1414,13 @@ public InputList LocalityLbPolicie [Input("selfLink")] public Input? SelfLink { get; set; } + /// + /// URL to networkservices.ServiceLbPolicy resource. + /// Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + /// + [Input("serviceLbPolicy")] + public Input? ServiceLbPolicy { get; set; } + /// /// Type of session affinity to use. The default is NONE. Session affinity is /// not applicable if the protocol is UDP. diff --git a/sdk/dotnet/Compute/Disk.cs b/sdk/dotnet/Compute/Disk.cs index efdb067885..710763dc94 100644 --- a/sdk/dotnet/Compute/Disk.cs +++ b/sdk/dotnet/Compute/Disk.cs @@ -451,6 +451,15 @@ public partial class Disk : global::Pulumi.CustomResource [Output("sourceSnapshotId")] public Output SourceSnapshotId { get; private set; } = null!; + /// + /// The URL of the storage pool in which the new disk is created. + /// For example: + /// * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + /// * /projects/{project}/zones/{zone}/storagePools/{storagePool} + /// + [Output("storagePool")] + public Output StoragePool { get; private set; } = null!; + /// /// URL of the disk type resource describing which disk type to use to /// create the disk. Provide this when creating the disk. @@ -750,6 +759,15 @@ public InputList ResourcePolicies [Input("sourceSnapshotEncryptionKey")] public Input? SourceSnapshotEncryptionKey { get; set; } + /// + /// The URL of the storage pool in which the new disk is created. + /// For example: + /// * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + /// * /projects/{project}/zones/{zone}/storagePools/{storagePool} + /// + [Input("storagePool")] + public Input? StoragePool { get; set; } + /// /// URL of the disk type resource describing which disk type to use to /// create the disk. Provide this when creating the disk. @@ -1098,6 +1116,15 @@ public InputList ResourcePolicies [Input("sourceSnapshotId")] public Input? SourceSnapshotId { get; set; } + /// + /// The URL of the storage pool in which the new disk is created. + /// For example: + /// * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + /// * /projects/{project}/zones/{zone}/storagePools/{storagePool} + /// + [Input("storagePool")] + public Input? StoragePool { get; set; } + /// /// URL of the disk type resource describing which disk type to use to /// create the disk. Provide this when creating the disk. diff --git a/sdk/dotnet/Compute/GetBackendService.cs b/sdk/dotnet/Compute/GetBackendService.cs index ed88e8d576..12b6c58d1f 100644 --- a/sdk/dotnet/Compute/GetBackendService.cs +++ b/sdk/dotnet/Compute/GetBackendService.cs @@ -166,6 +166,7 @@ public sealed class GetBackendServiceResult /// The URI of the Backend Service. /// public readonly string SelfLink; + public readonly string ServiceLbPolicy; /// /// The Backend Service session stickiness configuration. /// @@ -237,6 +238,8 @@ private GetBackendServiceResult( string selfLink, + string serviceLbPolicy, + string sessionAffinity, int timeoutSec) @@ -271,6 +274,7 @@ private GetBackendServiceResult( SecurityPolicy = securityPolicy; SecuritySettings = securitySettings; SelfLink = selfLink; + ServiceLbPolicy = serviceLbPolicy; SessionAffinity = sessionAffinity; TimeoutSec = timeoutSec; } diff --git a/sdk/dotnet/Compute/GetDisk.cs b/sdk/dotnet/Compute/GetDisk.cs index a103bb5dd9..46c0fbffde 100644 --- a/sdk/dotnet/Compute/GetDisk.cs +++ b/sdk/dotnet/Compute/GetDisk.cs @@ -238,6 +238,7 @@ public sealed class GetDiskResult /// used. /// public readonly string SourceSnapshotId; + public readonly string StoragePool; /// /// URL of the disk type resource describing which disk type to use to /// create the disk. @@ -321,6 +322,8 @@ private GetDiskResult( string sourceSnapshotId, + string storagePool, + string type, ImmutableArray users, @@ -360,6 +363,7 @@ private GetDiskResult( SourceImageId = sourceImageId; SourceSnapshotEncryptionKeys = sourceSnapshotEncryptionKeys; SourceSnapshotId = sourceSnapshotId; + StoragePool = storagePool; Type = type; Users = users; Zone = zone; diff --git a/sdk/dotnet/Compute/GetInstance.cs b/sdk/dotnet/Compute/GetInstance.cs index dcdc1f05bf..46be3949a4 100644 --- a/sdk/dotnet/Compute/GetInstance.cs +++ b/sdk/dotnet/Compute/GetInstance.cs @@ -230,6 +230,7 @@ public sealed class GetInstanceResult /// public readonly ImmutableArray NetworkPerformanceConfigs; public readonly ImmutableArray Params; + public readonly ImmutableDictionary PartnerMetadata; public readonly string? Project; public readonly ImmutableDictionary PulumiLabels; public readonly ImmutableArray ReservationAffinities; @@ -322,6 +323,8 @@ private GetInstanceResult( ImmutableArray @params, + ImmutableDictionary partnerMetadata, + string? project, ImmutableDictionary pulumiLabels, @@ -374,6 +377,7 @@ private GetInstanceResult( NetworkInterfaces = networkInterfaces; NetworkPerformanceConfigs = networkPerformanceConfigs; Params = @params; + PartnerMetadata = partnerMetadata; Project = project; PulumiLabels = pulumiLabels; ReservationAffinities = reservationAffinities; diff --git a/sdk/dotnet/Compute/GetInstanceGroupManager.cs b/sdk/dotnet/Compute/GetInstanceGroupManager.cs index 400d3cdeee..908250e6d2 100644 --- a/sdk/dotnet/Compute/GetInstanceGroupManager.cs +++ b/sdk/dotnet/Compute/GetInstanceGroupManager.cs @@ -164,12 +164,15 @@ public sealed class GetInstanceGroupManagerResult public readonly ImmutableArray Params; public readonly string? Project; public readonly string? SelfLink; + public readonly ImmutableArray StandbyPolicies; public readonly ImmutableArray StatefulDisks; public readonly ImmutableArray StatefulExternalIps; public readonly ImmutableArray StatefulInternalIps; public readonly ImmutableArray Statuses; public readonly ImmutableArray TargetPools; public readonly int TargetSize; + public readonly int TargetStoppedSize; + public readonly int TargetSuspendedSize; public readonly ImmutableArray UpdatePolicies; public readonly ImmutableArray Versions; public readonly bool WaitForInstances; @@ -210,6 +213,8 @@ private GetInstanceGroupManagerResult( string? selfLink, + ImmutableArray standbyPolicies, + ImmutableArray statefulDisks, ImmutableArray statefulExternalIps, @@ -222,6 +227,10 @@ private GetInstanceGroupManagerResult( int targetSize, + int targetStoppedSize, + + int targetSuspendedSize, + ImmutableArray updatePolicies, ImmutableArray versions, @@ -248,12 +257,15 @@ private GetInstanceGroupManagerResult( Params = @params; Project = project; SelfLink = selfLink; + StandbyPolicies = standbyPolicies; StatefulDisks = statefulDisks; StatefulExternalIps = statefulExternalIps; StatefulInternalIps = statefulInternalIps; Statuses = statuses; TargetPools = targetPools; TargetSize = targetSize; + TargetStoppedSize = targetStoppedSize; + TargetSuspendedSize = targetSuspendedSize; UpdatePolicies = updatePolicies; Versions = versions; WaitForInstances = waitForInstances; diff --git a/sdk/dotnet/Compute/GetInstanceTemplate.cs b/sdk/dotnet/Compute/GetInstanceTemplate.cs index 8a07706c0c..5100b8149f 100644 --- a/sdk/dotnet/Compute/GetInstanceTemplate.cs +++ b/sdk/dotnet/Compute/GetInstanceTemplate.cs @@ -213,6 +213,7 @@ public sealed class GetInstanceTemplateResult /// for the instance, if set. Structure is documented below. /// public readonly ImmutableArray NetworkPerformanceConfigs; + public readonly ImmutableDictionary PartnerMetadata; /// /// The ID of the project in which the resource belongs. If it /// is not provided, the provider project is used. @@ -312,6 +313,8 @@ private GetInstanceTemplateResult( ImmutableArray networkPerformanceConfigs, + ImmutableDictionary partnerMetadata, + string? project, ImmutableDictionary pulumiLabels, @@ -360,6 +363,7 @@ private GetInstanceTemplateResult( NamePrefix = namePrefix; NetworkInterfaces = networkInterfaces; NetworkPerformanceConfigs = networkPerformanceConfigs; + PartnerMetadata = partnerMetadata; Project = project; PulumiLabels = pulumiLabels; Region = region; diff --git a/sdk/dotnet/Compute/GetRegionInstanceTemplate.cs b/sdk/dotnet/Compute/GetRegionInstanceTemplate.cs index 59b9d725e4..124f73387c 100644 --- a/sdk/dotnet/Compute/GetRegionInstanceTemplate.cs +++ b/sdk/dotnet/Compute/GetRegionInstanceTemplate.cs @@ -259,6 +259,7 @@ public sealed class GetRegionInstanceTemplateResult /// for the instance, if set. Structure is documented below. /// public readonly ImmutableArray NetworkPerformanceConfigs; + public readonly ImmutableDictionary PartnerMetadata; /// /// The ID of the project in which the resource belongs. If it /// is not provided, the provider project is used. @@ -345,6 +346,8 @@ private GetRegionInstanceTemplateResult( ImmutableArray networkPerformanceConfigs, + ImmutableDictionary partnerMetadata, + string? project, ImmutableDictionary pulumiLabels, @@ -391,6 +394,7 @@ private GetRegionInstanceTemplateResult( NamePrefix = namePrefix; NetworkInterfaces = networkInterfaces; NetworkPerformanceConfigs = networkPerformanceConfigs; + PartnerMetadata = partnerMetadata; Project = project; PulumiLabels = pulumiLabels; Region = region; diff --git a/sdk/dotnet/Compute/GetSecurityPolicy.cs b/sdk/dotnet/Compute/GetSecurityPolicy.cs new file mode 100644 index 0000000000..2fcfac191c --- /dev/null +++ b/sdk/dotnet/Compute/GetSecurityPolicy.cs @@ -0,0 +1,192 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know 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 +{ + public static class GetSecurityPolicy + { + /// + /// To get more information about Google Compute Security Policy, see: + /// + /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies) + /// * How-to Guides + /// * [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies) + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var sp1 = Gcp.Compute.GetSecurityPolicy.Invoke(new() + /// { + /// Name = "my-policy", + /// Project = "my-project", + /// }); + /// + /// var sp2 = Gcp.Compute.GetSecurityPolicy.Invoke(new() + /// { + /// SelfLink = "https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy", + /// }); + /// + /// }); + /// ``` + /// + public static Task InvokeAsync(GetSecurityPolicyArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:compute/getSecurityPolicy:getSecurityPolicy", args ?? new GetSecurityPolicyArgs(), options.WithDefaults()); + + /// + /// To get more information about Google Compute Security Policy, see: + /// + /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies) + /// * How-to Guides + /// * [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies) + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var sp1 = Gcp.Compute.GetSecurityPolicy.Invoke(new() + /// { + /// Name = "my-policy", + /// Project = "my-project", + /// }); + /// + /// var sp2 = Gcp.Compute.GetSecurityPolicy.Invoke(new() + /// { + /// SelfLink = "https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy", + /// }); + /// + /// }); + /// ``` + /// + public static Output Invoke(GetSecurityPolicyInvokeArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("gcp:compute/getSecurityPolicy:getSecurityPolicy", args ?? new GetSecurityPolicyInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetSecurityPolicyArgs : global::Pulumi.InvokeArgs + { + /// + /// The name of the security policy. Provide either this or a `self_link`. + /// + [Input("name")] + public string? Name { get; set; } + + /// + /// The project in which the resource belongs. If it is not provided, the provider project is used. + /// + [Input("project")] + public string? Project { get; set; } + + /// + /// The self_link of the security policy. Provide either this or a `name` + /// + [Input("selfLink")] + public string? SelfLink { get; set; } + + public GetSecurityPolicyArgs() + { + } + public static new GetSecurityPolicyArgs Empty => new GetSecurityPolicyArgs(); + } + + public sealed class GetSecurityPolicyInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// The name of the security policy. Provide either this or a `self_link`. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The project in which the resource belongs. If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + /// + /// The self_link of the security policy. Provide either this or a `name` + /// + [Input("selfLink")] + public Input? SelfLink { get; set; } + + public GetSecurityPolicyInvokeArgs() + { + } + public static new GetSecurityPolicyInvokeArgs Empty => new GetSecurityPolicyInvokeArgs(); + } + + + [OutputType] + public sealed class GetSecurityPolicyResult + { + public readonly ImmutableArray AdaptiveProtectionConfigs; + public readonly ImmutableArray AdvancedOptionsConfigs; + public readonly string Description; + public readonly string Fingerprint; + /// + /// The provider-assigned unique ID for this managed resource. + /// + public readonly string Id; + public readonly string? Name; + public readonly string? Project; + public readonly ImmutableArray RecaptchaOptionsConfigs; + public readonly ImmutableArray Rules; + public readonly string? SelfLink; + public readonly string Type; + + [OutputConstructor] + private GetSecurityPolicyResult( + ImmutableArray adaptiveProtectionConfigs, + + ImmutableArray advancedOptionsConfigs, + + string description, + + string fingerprint, + + string id, + + string? name, + + string? project, + + ImmutableArray recaptchaOptionsConfigs, + + ImmutableArray rules, + + string? selfLink, + + string type) + { + AdaptiveProtectionConfigs = adaptiveProtectionConfigs; + AdvancedOptionsConfigs = advancedOptionsConfigs; + Description = description; + Fingerprint = fingerprint; + Id = id; + Name = name; + Project = project; + RecaptchaOptionsConfigs = recaptchaOptionsConfigs; + Rules = rules; + SelfLink = selfLink; + Type = type; + } + } +} diff --git a/sdk/dotnet/Compute/Inputs/InstanceGroupManagerStandbyPolicyArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceGroupManagerStandbyPolicyArgs.cs new file mode 100644 index 0000000000..fe9a303517 --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/InstanceGroupManagerStandbyPolicyArgs.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 InstanceGroupManagerStandbyPolicyArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + /// + [Input("initialDelaySec")] + public Input? InitialDelaySec { get; set; } + + /// + /// Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + /// - - - + /// + [Input("mode")] + public Input? Mode { get; set; } + + public InstanceGroupManagerStandbyPolicyArgs() + { + } + public static new InstanceGroupManagerStandbyPolicyArgs Empty => new InstanceGroupManagerStandbyPolicyArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/InstanceGroupManagerStandbyPolicyGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceGroupManagerStandbyPolicyGetArgs.cs new file mode 100644 index 0000000000..c4491d857c --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/InstanceGroupManagerStandbyPolicyGetArgs.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 InstanceGroupManagerStandbyPolicyGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + /// + [Input("initialDelaySec")] + public Input? InitialDelaySec { get; set; } + + /// + /// Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + /// - - - + /// + [Input("mode")] + public Input? Mode { get; set; } + + public InstanceGroupManagerStandbyPolicyGetArgs() + { + } + public static new InstanceGroupManagerStandbyPolicyGetArgs Empty => new InstanceGroupManagerStandbyPolicyGetArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/RegionInstanceGroupManagerStandbyPolicyArgs.cs b/sdk/dotnet/Compute/Inputs/RegionInstanceGroupManagerStandbyPolicyArgs.cs new file mode 100644 index 0000000000..313bfad97f --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/RegionInstanceGroupManagerStandbyPolicyArgs.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 RegionInstanceGroupManagerStandbyPolicyArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + /// + [Input("initialDelaySec")] + public Input? InitialDelaySec { get; set; } + + /// + /// Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + /// - - - + /// + [Input("mode")] + public Input? Mode { get; set; } + + public RegionInstanceGroupManagerStandbyPolicyArgs() + { + } + public static new RegionInstanceGroupManagerStandbyPolicyArgs Empty => new RegionInstanceGroupManagerStandbyPolicyArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/RegionInstanceGroupManagerStandbyPolicyGetArgs.cs b/sdk/dotnet/Compute/Inputs/RegionInstanceGroupManagerStandbyPolicyGetArgs.cs new file mode 100644 index 0000000000..159219b7c0 --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/RegionInstanceGroupManagerStandbyPolicyGetArgs.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 RegionInstanceGroupManagerStandbyPolicyGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + /// + [Input("initialDelaySec")] + public Input? InitialDelaySec { get; set; } + + /// + /// Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + /// - - - + /// + [Input("mode")] + public Input? Mode { get; set; } + + public RegionInstanceGroupManagerStandbyPolicyGetArgs() + { + } + public static new RegionInstanceGroupManagerStandbyPolicyGetArgs Empty => new RegionInstanceGroupManagerStandbyPolicyGetArgs(); + } +} diff --git a/sdk/dotnet/Compute/Instance.cs b/sdk/dotnet/Compute/Instance.cs index 13baaa47d9..e260bd0077 100644 --- a/sdk/dotnet/Compute/Instance.cs +++ b/sdk/dotnet/Compute/Instance.cs @@ -328,6 +328,12 @@ public partial class Instance : global::Pulumi.CustomResource [Output("params")] public Output Params { get; private set; } = null!; + /// + /// Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + /// + [Output("partnerMetadata")] + public Output?> PartnerMetadata { get; private set; } = null!; + /// /// The ID of the project in which the resource belongs. If it /// is not provided, the provider project is used. @@ -666,6 +672,18 @@ public InputList NetworkInterfaces [Input("params")] public Input? Params { get; set; } + [Input("partnerMetadata")] + private InputMap? _partnerMetadata; + + /// + /// Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + /// + public InputMap PartnerMetadata + { + get => _partnerMetadata ?? (_partnerMetadata = new InputMap()); + set => _partnerMetadata = value; + } + /// /// The ID of the project in which the resource belongs. If it /// is not provided, the provider project is used. @@ -1001,6 +1019,18 @@ public InputList NetworkInterfaces [Input("params")] public Input? Params { get; set; } + [Input("partnerMetadata")] + private InputMap? _partnerMetadata; + + /// + /// Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + /// + public InputMap PartnerMetadata + { + get => _partnerMetadata ?? (_partnerMetadata = new InputMap()); + set => _partnerMetadata = value; + } + /// /// The ID of the project in which the resource belongs. If it /// is not provided, the provider project is used. diff --git a/sdk/dotnet/Compute/InstanceFromMachineImage.cs b/sdk/dotnet/Compute/InstanceFromMachineImage.cs index 3b90008369..d8de6adbb3 100644 --- a/sdk/dotnet/Compute/InstanceFromMachineImage.cs +++ b/sdk/dotnet/Compute/InstanceFromMachineImage.cs @@ -212,6 +212,12 @@ public partial class InstanceFromMachineImage : global::Pulumi.CustomResource [Output("params")] public Output Params { get; private set; } = null!; + /// + /// Partner Metadata Map made available within the instance. + /// + [Output("partnerMetadata")] + public Output> PartnerMetadata { get; private set; } = null!; + /// /// The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither /// self_link nor project are provided, the provider project is used. @@ -494,6 +500,18 @@ public InputList NetworkInt [Input("params")] public Input? Params { get; set; } + [Input("partnerMetadata")] + private InputMap? _partnerMetadata; + + /// + /// Partner Metadata Map made available within the instance. + /// + public InputMap PartnerMetadata + { + get => _partnerMetadata ?? (_partnerMetadata = new InputMap()); + set => _partnerMetadata = value; + } + /// /// The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither /// self_link nor project are provided, the provider project is used. @@ -783,6 +801,18 @@ public InputList Network [Input("params")] public Input? Params { get; set; } + [Input("partnerMetadata")] + private InputMap? _partnerMetadata; + + /// + /// Partner Metadata Map made available within the instance. + /// + public InputMap PartnerMetadata + { + get => _partnerMetadata ?? (_partnerMetadata = new InputMap()); + set => _partnerMetadata = value; + } + /// /// The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither /// self_link nor project are provided, the provider project is used. diff --git a/sdk/dotnet/Compute/InstanceFromTemplate.cs b/sdk/dotnet/Compute/InstanceFromTemplate.cs index f6169ccde9..54c99a75dd 100644 --- a/sdk/dotnet/Compute/InstanceFromTemplate.cs +++ b/sdk/dotnet/Compute/InstanceFromTemplate.cs @@ -244,6 +244,12 @@ public partial class InstanceFromTemplate : global::Pulumi.CustomResource [Output("params")] public Output Params { get; private set; } = null!; + /// + /// Partner Metadata Map made available within the instance. + /// + [Output("partnerMetadata")] + public Output> PartnerMetadata { get; private set; } = null!; + /// /// The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither /// self_link nor project are provided, the provider project is used. @@ -543,6 +549,18 @@ public InputList NetworkInterfa [Input("params")] public Input? Params { get; set; } + [Input("partnerMetadata")] + private InputMap? _partnerMetadata; + + /// + /// Partner Metadata Map made available within the instance. + /// + public InputMap PartnerMetadata + { + get => _partnerMetadata ?? (_partnerMetadata = new InputMap()); + set => _partnerMetadata = value; + } + /// /// The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither /// self_link nor project are provided, the provider project is used. @@ -837,6 +855,18 @@ public InputList NetworkInte [Input("params")] public Input? Params { get; set; } + [Input("partnerMetadata")] + private InputMap? _partnerMetadata; + + /// + /// Partner Metadata Map made available within the instance. + /// + public InputMap PartnerMetadata + { + get => _partnerMetadata ?? (_partnerMetadata = new InputMap()); + set => _partnerMetadata = value; + } + /// /// The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither /// self_link nor project are provided, the provider project is used. diff --git a/sdk/dotnet/Compute/InstanceGroupManager.cs b/sdk/dotnet/Compute/InstanceGroupManager.cs index 14b69f5ae1..8991f633a5 100644 --- a/sdk/dotnet/Compute/InstanceGroupManager.cs +++ b/sdk/dotnet/Compute/InstanceGroupManager.cs @@ -126,6 +126,41 @@ namespace Pulumi.Gcp.Compute /// }); /// ``` /// + /// ### With Standby Policy (`Google-Beta` Provider) + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var igm_sr = new Gcp.Compute.InstanceGroupManager("igm-sr", new() + /// { + /// Name = "tf-sr-igm", + /// BaseInstanceName = "tf-sr-igm-instance", + /// Zone = "us-central1-a", + /// TargetSize = 5, + /// Versions = new[] + /// { + /// new Gcp.Compute.Inputs.InstanceGroupManagerVersionArgs + /// { + /// InstanceTemplate = sr_igm.SelfLink, + /// Name = "primary", + /// }, + /// }, + /// StandbyPolicy = new Gcp.Compute.Inputs.InstanceGroupManagerStandbyPolicyArgs + /// { + /// InitialDelaySec = 30, + /// Mode = "MANUAL", + /// }, + /// TargetSuspendedSize = 2, + /// TargetStoppedSize = 1, + /// }); + /// + /// }); + /// ``` + /// /// ## Import /// /// Instance group managers can be imported using any of these accepted formats: @@ -267,6 +302,12 @@ public partial class InstanceGroupManager : global::Pulumi.CustomResource [Output("selfLink")] public Output SelfLink { get; private set; } = null!; + /// + /// The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + /// + [Output("standbyPolicy")] + public Output StandbyPolicy { get; private set; } = null!; + /// /// Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). /// @@ -306,6 +347,18 @@ public partial class InstanceGroupManager : global::Pulumi.CustomResource [Output("targetSize")] public Output TargetSize { get; private set; } = null!; + /// + /// The target number of stopped instances for this managed instance group. + /// + [Output("targetStoppedSize")] + public Output TargetStoppedSize { get; private set; } = null!; + + /// + /// The target number of suspended instances for this managed instance group. + /// + [Output("targetSuspendedSize")] + public Output TargetSuspendedSize { get; private set; } = null!; + /// /// 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). /// @@ -479,6 +532,12 @@ public InputList NamedPorts [Input("project")] public Input? Project { get; set; } + /// + /// The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + /// + [Input("standbyPolicy")] + public Input? StandbyPolicy { get; set; } + [Input("statefulDisks")] private InputList? _statefulDisks; @@ -536,6 +595,18 @@ public InputList TargetPools [Input("targetSize")] public Input? TargetSize { get; set; } + /// + /// The target number of stopped instances for this managed instance group. + /// + [Input("targetStoppedSize")] + public Input? TargetStoppedSize { get; set; } + + /// + /// The target number of suspended instances for this managed instance group. + /// + [Input("targetSuspendedSize")] + public Input? TargetSuspendedSize { get; set; } + /// /// 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). /// @@ -704,6 +775,12 @@ public InputList NamedPorts [Input("selfLink")] public Input? SelfLink { get; set; } + /// + /// The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + /// + [Input("standbyPolicy")] + public Input? StandbyPolicy { get; set; } + [Input("statefulDisks")] private InputList? _statefulDisks; @@ -773,6 +850,18 @@ public InputList TargetPools [Input("targetSize")] public Input? TargetSize { get; set; } + /// + /// The target number of stopped instances for this managed instance group. + /// + [Input("targetStoppedSize")] + public Input? TargetStoppedSize { get; set; } + + /// + /// The target number of suspended instances for this managed instance group. + /// + [Input("targetSuspendedSize")] + public Input? TargetSuspendedSize { get; set; } + /// /// 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). /// diff --git a/sdk/dotnet/Compute/InstanceTemplate.cs b/sdk/dotnet/Compute/InstanceTemplate.cs index a50da69492..ae65e41fa2 100644 --- a/sdk/dotnet/Compute/InstanceTemplate.cs +++ b/sdk/dotnet/Compute/InstanceTemplate.cs @@ -415,6 +415,12 @@ public partial class InstanceTemplate : global::Pulumi.CustomResource [Output("networkPerformanceConfig")] public Output NetworkPerformanceConfig { get; private set; } = null!; + /// + /// Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + /// + [Output("partnerMetadata")] + public Output?> PartnerMetadata { get; private set; } = null!; + /// /// The ID of the project in which the resource belongs. If it /// is not provided, the provider project is used. @@ -713,6 +719,18 @@ public InputList NetworkInterfaces [Input("networkPerformanceConfig")] public Input? NetworkPerformanceConfig { get; set; } + [Input("partnerMetadata")] + private InputMap? _partnerMetadata; + + /// + /// Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + /// + public InputMap PartnerMetadata + { + get => _partnerMetadata ?? (_partnerMetadata = new InputMap()); + set => _partnerMetadata = value; + } + /// /// The ID of the project in which the resource belongs. If it /// is not provided, the provider project is used. @@ -977,6 +995,18 @@ public InputList NetworkInterfac [Input("networkPerformanceConfig")] public Input? NetworkPerformanceConfig { get; set; } + [Input("partnerMetadata")] + private InputMap? _partnerMetadata; + + /// + /// Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + /// + public InputMap PartnerMetadata + { + get => _partnerMetadata ?? (_partnerMetadata = new InputMap()); + set => _partnerMetadata = value; + } + /// /// The ID of the project in which the resource belongs. If it /// is not provided, the provider project is used. diff --git a/sdk/dotnet/Compute/Outputs/GetInstanceGroupManagerStandbyPolicyResult.cs b/sdk/dotnet/Compute/Outputs/GetInstanceGroupManagerStandbyPolicyResult.cs new file mode 100644 index 0000000000..90b55b7b83 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetInstanceGroupManagerStandbyPolicyResult.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 GetInstanceGroupManagerStandbyPolicyResult + { + /// + /// Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + /// + public readonly int InitialDelaySec; + /// + /// Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. The default mode is "MANUAL". + /// + public readonly string Mode; + + [OutputConstructor] + private GetInstanceGroupManagerStandbyPolicyResult( + int initialDelaySec, + + string mode) + { + InitialDelaySec = initialDelaySec; + Mode = mode; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigResult.cs new file mode 100644 index 0000000000..886713ea14 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigResult.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 GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigResult + { + /// + /// 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 GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigResult( + double confidenceThreshold, + + int expirationSec, + + double impactedBaselineThreshold, + + double loadThreshold) + { + ConfidenceThreshold = confidenceThreshold; + ExpirationSec = expirationSec; + ImpactedBaselineThreshold = impactedBaselineThreshold; + LoadThreshold = loadThreshold; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult.cs new file mode 100644 index 0000000000..33547fd4be --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult.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 GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult + { + /// + /// If set to true, enables CAAP for L7 DDoS detection. + /// + public readonly bool Enable; + /// + /// Rule visibility. Supported values include: "STANDARD", "PREMIUM". + /// + public readonly string RuleVisibility; + + [OutputConstructor] + private GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult( + bool enable, + + string ruleVisibility) + { + Enable = enable; + RuleVisibility = ruleVisibility; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigResult.cs new file mode 100644 index 0000000000..32bdf251f8 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigResult.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 GetSecurityPolicyAdaptiveProtectionConfigResult + { + /// + /// Auto Deploy Config of this security policy + /// + public readonly ImmutableArray AutoDeployConfigs; + /// + /// Layer 7 DDoS Defense Config of this security policy + /// + public readonly ImmutableArray Layer7DdosDefenseConfigs; + + [OutputConstructor] + private GetSecurityPolicyAdaptiveProtectionConfigResult( + ImmutableArray autoDeployConfigs, + + ImmutableArray layer7DdosDefenseConfigs) + { + AutoDeployConfigs = autoDeployConfigs; + Layer7DdosDefenseConfigs = layer7DdosDefenseConfigs; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigResult.cs new file mode 100644 index 0000000000..3bf70b7a5a --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigResult.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 GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigResult + { + /// + /// A list of custom Content-Type header values to apply the JSON parsing. + /// + public readonly ImmutableArray ContentTypes; + + [OutputConstructor] + private GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigResult(ImmutableArray contentTypes) + { + ContentTypes = contentTypes; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdvancedOptionsConfigResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdvancedOptionsConfigResult.cs new file mode 100644 index 0000000000..9d47ce0ba5 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdvancedOptionsConfigResult.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 GetSecurityPolicyAdvancedOptionsConfigResult + { + /// + /// Custom configuration to apply the JSON parsing. Only applicable when JSON parsing is set to STANDARD. + /// + public readonly ImmutableArray JsonCustomConfigs; + /// + /// JSON body parsing. Supported values include: "DISABLED", "STANDARD". + /// + public readonly string JsonParsing; + /// + /// Logging level. Supported values include: "NORMAL", "VERBOSE". + /// + public readonly string LogLevel; + /// + /// An optional list of case-insensitive request header names to use for resolving the callers client IP address. + /// + public readonly ImmutableArray UserIpRequestHeaders; + + [OutputConstructor] + private GetSecurityPolicyAdvancedOptionsConfigResult( + ImmutableArray jsonCustomConfigs, + + string jsonParsing, + + string logLevel, + + ImmutableArray userIpRequestHeaders) + { + JsonCustomConfigs = jsonCustomConfigs; + JsonParsing = jsonParsing; + LogLevel = logLevel; + UserIpRequestHeaders = userIpRequestHeaders; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRecaptchaOptionsConfigResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRecaptchaOptionsConfigResult.cs new file mode 100644 index 0000000000..f3765f914e --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRecaptchaOptionsConfigResult.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 GetSecurityPolicyRecaptchaOptionsConfigResult + { + /// + /// A field to supply a reCAPTCHA site key to be used for all the rules using the redirect action with the type of GOOGLE_RECAPTCHA under the security policy. The specified site key needs to be created from the reCAPTCHA API. The user is responsible for the validity of the specified site key. If not specified, a Google-managed site key is used. + /// + public readonly string RedirectSiteKey; + + [OutputConstructor] + private GetSecurityPolicyRecaptchaOptionsConfigResult(string redirectSiteKey) + { + RedirectSiteKey = redirectSiteKey; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleHeaderActionRequestHeadersToAddResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleHeaderActionRequestHeadersToAddResult.cs new file mode 100644 index 0000000000..d5f9a5a269 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleHeaderActionRequestHeadersToAddResult.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 GetSecurityPolicyRuleHeaderActionRequestHeadersToAddResult + { + /// + /// The name of the header to set. + /// + public readonly string HeaderName; + /// + /// The value to set the named header to. + /// + public readonly string HeaderValue; + + [OutputConstructor] + private GetSecurityPolicyRuleHeaderActionRequestHeadersToAddResult( + string headerName, + + string headerValue) + { + HeaderName = headerName; + HeaderValue = headerValue; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleHeaderActionResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleHeaderActionResult.cs new file mode 100644 index 0000000000..eff8578f31 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleHeaderActionResult.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 GetSecurityPolicyRuleHeaderActionResult + { + /// + /// The list of request headers to add or overwrite if they're already present. + /// + public readonly ImmutableArray RequestHeadersToAdds; + + [OutputConstructor] + private GetSecurityPolicyRuleHeaderActionResult(ImmutableArray requestHeadersToAdds) + { + RequestHeadersToAdds = requestHeadersToAdds; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleMatchConfigResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleMatchConfigResult.cs new file mode 100644 index 0000000000..7f9ded9fed --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleMatchConfigResult.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 GetSecurityPolicyRuleMatchConfigResult + { + /// + /// Set of IP addresses or ranges (IPV4 or IPV6) in CIDR notation to match against inbound traffic. There is a limit of 10 IP ranges per rule. A value of '*' matches all IPs (can be used to override the default behavior). + /// + public readonly ImmutableArray SrcIpRanges; + + [OutputConstructor] + private GetSecurityPolicyRuleMatchConfigResult(ImmutableArray srcIpRanges) + { + SrcIpRanges = srcIpRanges; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleMatchExprResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleMatchExprResult.cs new file mode 100644 index 0000000000..c16ccc2aa0 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleMatchExprResult.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 GetSecurityPolicyRuleMatchExprResult + { + /// + /// Textual representation of an expression in Common Expression Language syntax. The application context of the containing message determines which well-known feature set of CEL is supported. + /// + public readonly string Expression; + + [OutputConstructor] + private GetSecurityPolicyRuleMatchExprResult(string expression) + { + Expression = expression; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleMatchResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleMatchResult.cs new file mode 100644 index 0000000000..2783fca9e5 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleMatchResult.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 GetSecurityPolicyRuleMatchResult + { + /// + /// The configuration options available when specifying versioned_expr. This field must be specified if versioned_expr is specified and cannot be specified if versioned_expr is not specified. + /// + public readonly ImmutableArray Configs; + /// + /// User defined CEVAL expression. A CEVAL expression is used to specify match criteria such as origin.ip, source.region_code and contents in the request header. + /// + public readonly ImmutableArray Exprs; + /// + /// Predefined rule expression. If this field is specified, config must also be specified. Available options: SRC_IPS_V1: Must specify the corresponding src_ip_ranges field in config. + /// + public readonly string VersionedExpr; + + [OutputConstructor] + private GetSecurityPolicyRuleMatchResult( + ImmutableArray configs, + + ImmutableArray exprs, + + string versionedExpr) + { + Configs = configs; + Exprs = exprs; + VersionedExpr = versionedExpr; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyResult.cs new file mode 100644 index 0000000000..af11b8386b --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyResult.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 GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyResult + { + /// + /// You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + /// + public readonly string Operator; + /// + /// A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + /// + public readonly string Value; + + [OutputConstructor] + private GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyResult( + string @operator, + + string value) + { + Operator = @operator; + Value = value; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderResult.cs new file mode 100644 index 0000000000..c9d3683d6f --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderResult.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 GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderResult + { + /// + /// You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + /// + public readonly string Operator; + /// + /// A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + /// + public readonly string Value; + + [OutputConstructor] + private GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderResult( + string @operator, + + string value) + { + Operator = @operator; + Value = value; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamResult.cs new file mode 100644 index 0000000000..a57a6965d1 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamResult.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 GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamResult + { + /// + /// You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + /// + public readonly string Operator; + /// + /// A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + /// + public readonly string Value; + + [OutputConstructor] + private GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamResult( + string @operator, + + string value) + { + Operator = @operator; + Value = value; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriResult.cs new file mode 100644 index 0000000000..8262a48c19 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriResult.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 GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriResult + { + /// + /// You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + /// + public readonly string Operator; + /// + /// A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + /// + public readonly string Value; + + [OutputConstructor] + private GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriResult( + string @operator, + + string value) + { + Operator = @operator; + Value = value; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionResult.cs new file mode 100644 index 0000000000..75fb699232 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionResult.cs @@ -0,0 +1,63 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Compute.Outputs +{ + + [OutputType] + public sealed class GetSecurityPolicyRulePreconfiguredWafConfigExclusionResult + { + /// + /// Request cookie whose value will be excluded from inspection during preconfigured WAF evaluation. + /// + public readonly ImmutableArray RequestCookies; + /// + /// Request header whose value will be excluded from inspection during preconfigured WAF evaluation. + /// + public readonly ImmutableArray RequestHeaders; + /// + /// Request query parameter whose value will be excluded from inspection during preconfigured WAF evaluation. Note that the parameter can be in the query string or in the POST body. + /// + public readonly ImmutableArray RequestQueryParams; + /// + /// Request URI from the request line to be excluded from inspection during preconfigured WAF evaluation. When specifying this field, the query or fragment part should be excluded. + /// + public readonly ImmutableArray RequestUris; + /// + /// A list of target rule IDs under the WAF rule set to apply the preconfigured WAF exclusion. If omitted, it refers to all the rule IDs under the WAF rule set. + /// + public readonly ImmutableArray TargetRuleIds; + /// + /// Target WAF rule set to apply the preconfigured WAF exclusion. + /// + public readonly string TargetRuleSet; + + [OutputConstructor] + private GetSecurityPolicyRulePreconfiguredWafConfigExclusionResult( + ImmutableArray requestCookies, + + ImmutableArray requestHeaders, + + ImmutableArray requestQueryParams, + + ImmutableArray requestUris, + + ImmutableArray targetRuleIds, + + string targetRuleSet) + { + RequestCookies = requestCookies; + RequestHeaders = requestHeaders; + RequestQueryParams = requestQueryParams; + RequestUris = requestUris; + TargetRuleIds = targetRuleIds; + TargetRuleSet = targetRuleSet; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigResult.cs new file mode 100644 index 0000000000..ddb22b21ce --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRulePreconfiguredWafConfigResult.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 GetSecurityPolicyRulePreconfiguredWafConfigResult + { + /// + /// An exclusion to apply during preconfigured WAF evaluation. + /// + public readonly ImmutableArray Exclusions; + + [OutputConstructor] + private GetSecurityPolicyRulePreconfiguredWafConfigResult(ImmutableArray exclusions) + { + Exclusions = exclusions; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionBanThresholdResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionBanThresholdResult.cs new file mode 100644 index 0000000000..2e1c3f6362 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionBanThresholdResult.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 GetSecurityPolicyRuleRateLimitOptionBanThresholdResult + { + /// + /// Number of HTTP(S) requests for calculating the threshold. + /// + public readonly int Count; + /// + /// Interval over which the threshold is computed. + /// + public readonly int IntervalSec; + + [OutputConstructor] + private GetSecurityPolicyRuleRateLimitOptionBanThresholdResult( + int count, + + int intervalSec) + { + Count = count; + IntervalSec = intervalSec; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigResult.cs new file mode 100644 index 0000000000..bdac735920 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigResult.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 GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigResult + { + /// + /// Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + /// + public readonly string EnforceOnKeyName; + /// + /// Determines the key to enforce the rate_limit_threshold on + /// + public readonly string EnforceOnKeyType; + + [OutputConstructor] + private GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigResult( + string enforceOnKeyName, + + string enforceOnKeyType) + { + EnforceOnKeyName = enforceOnKeyName; + EnforceOnKeyType = enforceOnKeyType; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionResult.cs new file mode 100644 index 0000000000..b041a1dde3 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionResult.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 GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionResult + { + /// + /// Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + /// + public readonly string Target; + /// + /// Type of the redirect action. + /// + public readonly string Type; + + [OutputConstructor] + private GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionResult( + string target, + + string type) + { + Target = target; + Type = type; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdResult.cs new file mode 100644 index 0000000000..f95dc59c14 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdResult.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 GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdResult + { + /// + /// Number of HTTP(S) requests for calculating the threshold. + /// + public readonly int Count; + /// + /// Interval over which the threshold is computed. + /// + public readonly int IntervalSec; + + [OutputConstructor] + private GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdResult( + int count, + + int intervalSec) + { + Count = count; + IntervalSec = intervalSec; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionResult.cs new file mode 100644 index 0000000000..19422de7f5 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRateLimitOptionResult.cs @@ -0,0 +1,84 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Compute.Outputs +{ + + [OutputType] + public sealed class GetSecurityPolicyRuleRateLimitOptionResult + { + /// + /// Can only be specified if the action for the rule is "rate_based_ban". If specified, determines the time (in seconds) the traffic will continue to be banned by the rate limit after the rate falls below the threshold. + /// + public readonly int BanDurationSec; + /// + /// Can only be specified if the action for the rule is "rate_based_ban". If specified, the key will be banned for the configured 'banDurationSec' when the number of requests that exceed the 'rateLimitThreshold' also exceed this 'banThreshold'. + /// + public readonly ImmutableArray BanThresholds; + /// + /// Action to take for requests that are under the configured rate limit threshold. Valid option is "allow" only. + /// + public readonly string ConformAction; + /// + /// Determines the key to enforce the rateLimitThreshold on + /// + public readonly string EnforceOnKey; + /// + /// Enforce On Key Config of this security policy + /// + public readonly ImmutableArray EnforceOnKeyConfigs; + /// + /// Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + /// + public readonly string EnforceOnKeyName; + /// + /// Action to take for requests that are above the configured rate limit threshold, to either deny with a specified HTTP response code, or redirect to a different endpoint. Valid options are "deny()" where valid values for status are 403, 404, 429, and 502, and "redirect" where the redirect parameters come from exceedRedirectOptions below. + /// + public readonly string ExceedAction; + /// + /// Parameters defining the redirect action that is used as the exceed action. Cannot be specified if the exceed action is not redirect. + /// + public readonly ImmutableArray ExceedRedirectOptions; + /// + /// Threshold at which to begin ratelimiting. + /// + public readonly ImmutableArray RateLimitThresholds; + + [OutputConstructor] + private GetSecurityPolicyRuleRateLimitOptionResult( + int banDurationSec, + + ImmutableArray banThresholds, + + string conformAction, + + string enforceOnKey, + + ImmutableArray enforceOnKeyConfigs, + + string enforceOnKeyName, + + string exceedAction, + + ImmutableArray exceedRedirectOptions, + + ImmutableArray rateLimitThresholds) + { + BanDurationSec = banDurationSec; + BanThresholds = banThresholds; + ConformAction = conformAction; + EnforceOnKey = enforceOnKey; + EnforceOnKeyConfigs = enforceOnKeyConfigs; + EnforceOnKeyName = enforceOnKeyName; + ExceedAction = exceedAction; + ExceedRedirectOptions = exceedRedirectOptions; + RateLimitThresholds = rateLimitThresholds; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRedirectOptionResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRedirectOptionResult.cs new file mode 100644 index 0000000000..81ddb905fd --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleRedirectOptionResult.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 GetSecurityPolicyRuleRedirectOptionResult + { + /// + /// Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + /// + public readonly string Target; + /// + /// Type of the redirect action. Available options: EXTERNAL_302: Must specify the corresponding target field in config. GOOGLE_RECAPTCHA: Cannot specify target field in config. + /// + public readonly string Type; + + [OutputConstructor] + private GetSecurityPolicyRuleRedirectOptionResult( + string target, + + string type) + { + Target = target; + Type = type; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleResult.cs new file mode 100644 index 0000000000..67f19a341e --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyRuleResult.cs @@ -0,0 +1,84 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Compute.Outputs +{ + + [OutputType] + public sealed class GetSecurityPolicyRuleResult + { + /// + /// Action to take when match matches the request. + /// + public readonly string Action; + /// + /// An optional description of this rule. Max size is 64. + /// + public readonly string Description; + /// + /// Additional actions that are performed on headers. + /// + public readonly ImmutableArray HeaderActions; + /// + /// A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding action is enforced. + /// + public readonly ImmutableArray Matches; + /// + /// Preconfigured WAF configuration to be applied for the rule. If the rule does not evaluate preconfigured WAF rules, i.e., if evaluatePreconfiguredWaf() is not used, this field will have no effect. + /// + public readonly ImmutableArray PreconfiguredWafConfigs; + /// + /// When set to true, the action specified above is not enforced. Stackdriver logs for requests that trigger a preview action are annotated as such. + /// + public readonly bool Preview; + /// + /// An unique positive integer indicating the priority of evaluation for a rule. Rules are evaluated from highest priority (lowest numerically) to lowest priority (highest numerically) in order. + /// + public readonly int Priority; + /// + /// Rate limit threshold for this security policy. Must be specified if the action is "rate_based_ban" or "throttle". Cannot be specified for any other actions. + /// + public readonly ImmutableArray RateLimitOptions; + /// + /// Parameters defining the redirect action. Cannot be specified for any other actions. + /// + public readonly ImmutableArray RedirectOptions; + + [OutputConstructor] + private GetSecurityPolicyRuleResult( + string action, + + string description, + + ImmutableArray headerActions, + + ImmutableArray matches, + + ImmutableArray preconfiguredWafConfigs, + + bool preview, + + int priority, + + ImmutableArray rateLimitOptions, + + ImmutableArray redirectOptions) + { + Action = action; + Description = description; + HeaderActions = headerActions; + Matches = matches; + PreconfiguredWafConfigs = preconfiguredWafConfigs; + Preview = preview; + Priority = priority; + RateLimitOptions = rateLimitOptions; + RedirectOptions = redirectOptions; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/InstanceGroupManagerStandbyPolicy.cs b/sdk/dotnet/Compute/Outputs/InstanceGroupManagerStandbyPolicy.cs new file mode 100644 index 0000000000..c50a022433 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/InstanceGroupManagerStandbyPolicy.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.Compute.Outputs +{ + + [OutputType] + public sealed class InstanceGroupManagerStandbyPolicy + { + /// + /// Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + /// + public readonly int? InitialDelaySec; + /// + /// Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + /// - - - + /// + public readonly string? Mode; + + [OutputConstructor] + private InstanceGroupManagerStandbyPolicy( + int? initialDelaySec, + + string? mode) + { + InitialDelaySec = initialDelaySec; + Mode = mode; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/RegionInstanceGroupManagerStandbyPolicy.cs b/sdk/dotnet/Compute/Outputs/RegionInstanceGroupManagerStandbyPolicy.cs new file mode 100644 index 0000000000..87c68ac2d4 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/RegionInstanceGroupManagerStandbyPolicy.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.Compute.Outputs +{ + + [OutputType] + public sealed class RegionInstanceGroupManagerStandbyPolicy + { + /// + /// Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + /// + public readonly int? InitialDelaySec; + /// + /// Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + /// - - - + /// + public readonly string? Mode; + + [OutputConstructor] + private RegionInstanceGroupManagerStandbyPolicy( + int? initialDelaySec, + + string? mode) + { + InitialDelaySec = initialDelaySec; + Mode = mode; + } + } +} diff --git a/sdk/dotnet/Compute/ProjectCloudArmorTier.cs b/sdk/dotnet/Compute/ProjectCloudArmorTier.cs new file mode 100644 index 0000000000..723a06c062 --- /dev/null +++ b/sdk/dotnet/Compute/ProjectCloudArmorTier.cs @@ -0,0 +1,210 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know 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 +{ + /// + /// Sets the Cloud Armor tier of the project. + /// + /// To get more information about ProjectCloudArmorTier, see: + /// + /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/projects/setCloudArmorTier) + /// * How-to Guides + /// * [Subscribing to Cloud Armor Enterprise](https://cloud.google.com/armor/docs/managed-protection-overview#subscribing_to_plus) + /// + /// ## Example Usage + /// + /// ### Compute Project Cloud Armor Tier Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var cloudArmorTierConfig = new Gcp.Compute.ProjectCloudArmorTier("cloud_armor_tier_config", new() + /// { + /// CloudArmorTier = "CA_STANDARD", + /// }); + /// + /// }); + /// ``` + /// ### Compute Project Cloud Armor Tier Project Set + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var project = new Gcp.Organizations.Project("project", new() + /// { + /// ProjectId = "your_project_id", + /// Name = "your_project_id", + /// OrgId = "123456789", + /// BillingAccount = "000000-0000000-0000000-000000", + /// }); + /// + /// var compute = new Gcp.Projects.Service("compute", new() + /// { + /// Project = project.ProjectId, + /// ServiceName = "compute.googleapis.com", + /// }); + /// + /// var cloudArmorTierConfig = new Gcp.Compute.ProjectCloudArmorTier("cloud_armor_tier_config", new() + /// { + /// Project = project.ProjectId, + /// CloudArmorTier = "CA_STANDARD", + /// }, new CustomResourceOptions + /// { + /// DependsOn = + /// { + /// compute, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// ProjectCloudArmorTier can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}` + /// + /// * `{{project}}` + /// + /// When using the `pulumi import` command, ProjectCloudArmorTier can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default projects/{{project}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default {{project}} + /// ``` + /// + [GcpResourceType("gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier")] + public partial class ProjectCloudArmorTier : global::Pulumi.CustomResource + { + /// + /// Managed protection tier to be set. + /// Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + /// + /// + /// - - - + /// + [Output("cloudArmorTier")] + public Output CloudArmorTier { 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!; + + + /// + /// Create a ProjectCloudArmorTier 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 ProjectCloudArmorTier(string name, ProjectCloudArmorTierArgs args, CustomResourceOptions? options = null) + : base("gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier", name, args ?? new ProjectCloudArmorTierArgs(), MakeResourceOptions(options, "")) + { + } + + private ProjectCloudArmorTier(string name, Input id, ProjectCloudArmorTierState? state = null, CustomResourceOptions? options = null) + : base("gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier", 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 ProjectCloudArmorTier 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 ProjectCloudArmorTier Get(string name, Input id, ProjectCloudArmorTierState? state = null, CustomResourceOptions? options = null) + { + return new ProjectCloudArmorTier(name, id, state, options); + } + } + + public sealed class ProjectCloudArmorTierArgs : global::Pulumi.ResourceArgs + { + /// + /// Managed protection tier to be set. + /// Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + /// + /// + /// - - - + /// + [Input("cloudArmorTier", required: true)] + public Input CloudArmorTier { get; set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + public ProjectCloudArmorTierArgs() + { + } + public static new ProjectCloudArmorTierArgs Empty => new ProjectCloudArmorTierArgs(); + } + + public sealed class ProjectCloudArmorTierState : global::Pulumi.ResourceArgs + { + /// + /// Managed protection tier to be set. + /// Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + /// + /// + /// - - - + /// + [Input("cloudArmorTier")] + public Input? CloudArmorTier { 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; } + + public ProjectCloudArmorTierState() + { + } + public static new ProjectCloudArmorTierState Empty => new ProjectCloudArmorTierState(); + } +} diff --git a/sdk/dotnet/Compute/RegionInstanceGroupManager.cs b/sdk/dotnet/Compute/RegionInstanceGroupManager.cs index 45fa8e1027..56e9d8f466 100644 --- a/sdk/dotnet/Compute/RegionInstanceGroupManager.cs +++ b/sdk/dotnet/Compute/RegionInstanceGroupManager.cs @@ -134,6 +134,41 @@ namespace Pulumi.Gcp.Compute /// }); /// ``` /// + /// ### With Standby Policy (`Google-Beta` Provider) + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var igm_sr = new Gcp.Compute.RegionInstanceGroupManager("igm-sr", new() + /// { + /// Name = "tf-sr-igm", + /// BaseInstanceName = "tf-sr-igm-instance", + /// Region = "us-central1", + /// TargetSize = 5, + /// Versions = new[] + /// { + /// new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionArgs + /// { + /// InstanceTemplate = sr_igm.SelfLink, + /// Name = "primary", + /// }, + /// }, + /// StandbyPolicy = new Gcp.Compute.Inputs.RegionInstanceGroupManagerStandbyPolicyArgs + /// { + /// InitialDelaySec = 50, + /// Mode = "SCALE_OUT_POOL", + /// }, + /// TargetSuspendedSize = 1, + /// TargetStoppedSize = 1, + /// }); + /// + /// }); + /// ``` + /// /// ## Import /// /// Instance group managers can be imported using any of these accepted formats: @@ -275,6 +310,12 @@ public partial class RegionInstanceGroupManager : global::Pulumi.CustomResource [Output("selfLink")] public Output SelfLink { get; private set; } = null!; + /// + /// The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + /// + [Output("standbyPolicy")] + public Output StandbyPolicy { get; private set; } = null!; + /// /// Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `update_policy`. /// @@ -314,6 +355,18 @@ public partial class RegionInstanceGroupManager : global::Pulumi.CustomResource [Output("targetSize")] public Output TargetSize { get; private set; } = null!; + /// + /// The target number of stopped instances for this managed instance group. + /// + [Output("targetStoppedSize")] + public Output TargetStoppedSize { get; private set; } = null!; + + /// + /// The target number of suspended instances for this managed instance group. + /// + [Output("targetSuspendedSize")] + public Output TargetSuspendedSize { get; private set; } = null!; + /// /// 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) /// @@ -505,6 +558,12 @@ public InputList NamedPorts [Input("region")] public Input? Region { get; set; } + /// + /// The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + /// + [Input("standbyPolicy")] + public Input? StandbyPolicy { get; set; } + [Input("statefulDisks")] private InputList? _statefulDisks; @@ -562,6 +621,18 @@ public InputList TargetPools [Input("targetSize")] public Input? TargetSize { get; set; } + /// + /// The target number of stopped instances for this managed instance group. + /// + [Input("targetStoppedSize")] + public Input? TargetStoppedSize { get; set; } + + /// + /// The target number of suspended instances for this managed instance group. + /// + [Input("targetSuspendedSize")] + public Input? TargetSuspendedSize { get; set; } + /// /// 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) /// @@ -745,6 +816,12 @@ public InputList NamedPorts [Input("selfLink")] public Input? SelfLink { get; set; } + /// + /// The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + /// + [Input("standbyPolicy")] + public Input? StandbyPolicy { get; set; } + [Input("statefulDisks")] private InputList? _statefulDisks; @@ -814,6 +891,18 @@ public InputList TargetPools [Input("targetSize")] public Input? TargetSize { get; set; } + /// + /// The target number of stopped instances for this managed instance group. + /// + [Input("targetStoppedSize")] + public Input? TargetStoppedSize { get; set; } + + /// + /// The target number of suspended instances for this managed instance group. + /// + [Input("targetSuspendedSize")] + public Input? TargetSuspendedSize { get; set; } + /// /// 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) /// diff --git a/sdk/dotnet/Compute/RegionInstanceTemplate.cs b/sdk/dotnet/Compute/RegionInstanceTemplate.cs index e9a6d04979..22a26c6b69 100644 --- a/sdk/dotnet/Compute/RegionInstanceTemplate.cs +++ b/sdk/dotnet/Compute/RegionInstanceTemplate.cs @@ -174,6 +174,12 @@ public partial class RegionInstanceTemplate : global::Pulumi.CustomResource [Output("networkPerformanceConfig")] public Output NetworkPerformanceConfig { get; private set; } = null!; + /// + /// Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + /// + [Output("partnerMetadata")] + public Output?> PartnerMetadata { get; private set; } = null!; + /// /// The ID of the project in which the resource belongs. If it /// is not provided, the provider project is used. @@ -457,6 +463,18 @@ public InputList NetworkInter [Input("networkPerformanceConfig")] public Input? NetworkPerformanceConfig { get; set; } + [Input("partnerMetadata")] + private InputMap? _partnerMetadata; + + /// + /// Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + /// + public InputMap PartnerMetadata + { + get => _partnerMetadata ?? (_partnerMetadata = new InputMap()); + set => _partnerMetadata = value; + } + /// /// The ID of the project in which the resource belongs. If it /// is not provided, the provider project is used. @@ -713,6 +731,18 @@ public InputList NetworkIn [Input("networkPerformanceConfig")] public Input? NetworkPerformanceConfig { get; set; } + [Input("partnerMetadata")] + private InputMap? _partnerMetadata; + + /// + /// Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + /// + public InputMap PartnerMetadata + { + get => _partnerMetadata ?? (_partnerMetadata = new InputMap()); + set => _partnerMetadata = value; + } + /// /// The ID of the project in which the resource belongs. If it /// is not provided, the provider project is used. diff --git a/sdk/dotnet/Config/Config.cs b/sdk/dotnet/Config/Config.cs index 86dbdd93a5..6d2cbca949 100644 --- a/sdk/dotnet/Config/Config.cs +++ b/sdk/dotnet/Config/Config.cs @@ -1033,6 +1033,13 @@ public static string? SecurityCenterCustomEndpoint set => _securityCenterCustomEndpoint.Set(value); } + private static readonly __Value _securityCenterManagementCustomEndpoint = new __Value(() => __config.Get("securityCenterManagementCustomEndpoint")); + public static string? SecurityCenterManagementCustomEndpoint + { + get => _securityCenterManagementCustomEndpoint.Get(); + set => _securityCenterManagementCustomEndpoint.Set(value); + } + private static readonly __Value _securityScannerCustomEndpoint = new __Value(() => __config.Get("securityScannerCustomEndpoint")); public static string? SecurityScannerCustomEndpoint { diff --git a/sdk/dotnet/Container/Cluster.cs b/sdk/dotnet/Container/Cluster.cs index 2ea59bb2b1..45431790c2 100644 --- a/sdk/dotnet/Container/Cluster.cs +++ b/sdk/dotnet/Container/Cluster.cs @@ -698,6 +698,14 @@ public partial class Cluster : global::Pulumi.CustomResource [Output("resourceUsageExportConfig")] public Output ResourceUsageExportConfig { get; private set; } = null!; + /// + /// Configuration for the + /// [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + /// Structure is documented below. + /// + [Output("secretManagerConfig")] + public Output SecretManagerConfig { get; private set; } = null!; + /// /// Enable/Disable Security Posture API features for the cluster. Structure is documented below. /// @@ -1329,6 +1337,14 @@ public InputMap ResourceLabels [Input("resourceUsageExportConfig")] public Input? ResourceUsageExportConfig { get; set; } + /// + /// Configuration for the + /// [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + /// Structure is documented below. + /// + [Input("secretManagerConfig")] + public Input? SecretManagerConfig { get; set; } + /// /// Enable/Disable Security Posture API features for the cluster. Structure is documented below. /// @@ -1922,6 +1938,14 @@ public InputMap ResourceLabels [Input("resourceUsageExportConfig")] public Input? ResourceUsageExportConfig { get; set; } + /// + /// Configuration for the + /// [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + /// Structure is documented below. + /// + [Input("secretManagerConfig")] + public Input? SecretManagerConfig { get; set; } + /// /// Enable/Disable Security Posture API features for the cluster. Structure is documented below. /// diff --git a/sdk/dotnet/Container/GetCluster.cs b/sdk/dotnet/Container/GetCluster.cs index 5c690c3af1..fdedad4d39 100644 --- a/sdk/dotnet/Container/GetCluster.cs +++ b/sdk/dotnet/Container/GetCluster.cs @@ -207,6 +207,7 @@ public sealed class GetClusterResult public readonly bool RemoveDefaultNodePool; public readonly ImmutableDictionary ResourceLabels; public readonly ImmutableArray ResourceUsageExportConfigs; + public readonly ImmutableArray SecretManagerConfigs; public readonly ImmutableArray SecurityPostureConfigs; public readonly string SelfLink; public readonly ImmutableArray ServiceExternalIpsConfigs; @@ -354,6 +355,8 @@ private GetClusterResult( ImmutableArray resourceUsageExportConfigs, + ImmutableArray secretManagerConfigs, + ImmutableArray securityPostureConfigs, string selfLink, @@ -441,6 +444,7 @@ private GetClusterResult( RemoveDefaultNodePool = removeDefaultNodePool; ResourceLabels = resourceLabels; ResourceUsageExportConfigs = resourceUsageExportConfigs; + SecretManagerConfigs = secretManagerConfigs; SecurityPostureConfigs = securityPostureConfigs; SelfLink = selfLink; ServiceExternalIpsConfigs = serviceExternalIpsConfigs; diff --git a/sdk/dotnet/Container/Inputs/ClusterSecretManagerConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterSecretManagerConfigArgs.cs new file mode 100644 index 0000000000..e189a219d9 --- /dev/null +++ b/sdk/dotnet/Container/Inputs/ClusterSecretManagerConfigArgs.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.Container.Inputs +{ + + public sealed class ClusterSecretManagerConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// Enable the Secret Manager add-on for this cluster. + /// + [Input("enabled", required: true)] + public Input Enabled { get; set; } = null!; + + public ClusterSecretManagerConfigArgs() + { + } + public static new ClusterSecretManagerConfigArgs Empty => new ClusterSecretManagerConfigArgs(); + } +} diff --git a/sdk/dotnet/Container/Inputs/ClusterSecretManagerConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterSecretManagerConfigGetArgs.cs new file mode 100644 index 0000000000..c66def88ff --- /dev/null +++ b/sdk/dotnet/Container/Inputs/ClusterSecretManagerConfigGetArgs.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.Container.Inputs +{ + + public sealed class ClusterSecretManagerConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Enable the Secret Manager add-on for this cluster. + /// + [Input("enabled", required: true)] + public Input Enabled { get; set; } = null!; + + public ClusterSecretManagerConfigGetArgs() + { + } + public static new ClusterSecretManagerConfigGetArgs Empty => new ClusterSecretManagerConfigGetArgs(); + } +} diff --git a/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigArgs.cs b/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigArgs.cs index 5a6e16da2a..0491ddce58 100644 --- a/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigArgs.cs @@ -51,13 +51,13 @@ public InputList Add public Input? EnablePrivateNodes { get; set; } /// - /// Network bandwidth tier configuration. + /// Network bandwidth tier configuration. Structure is documented below. /// [Input("networkPerformanceConfig")] public Input? NetworkPerformanceConfig { get; set; } /// - /// Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + /// Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. /// [Input("podCidrOverprovisionConfig")] public Input? PodCidrOverprovisionConfig { get; set; } diff --git a/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigGetArgs.cs index 58eb8698b3..811d5599fc 100644 --- a/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigGetArgs.cs @@ -51,13 +51,13 @@ public InputList public Input? EnablePrivateNodes { get; set; } /// - /// Network bandwidth tier configuration. + /// Network bandwidth tier configuration. Structure is documented below. /// [Input("networkPerformanceConfig")] public Input? NetworkPerformanceConfig { get; set; } /// - /// Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + /// Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. /// [Input("podCidrOverprovisionConfig")] public Input? PodCidrOverprovisionConfig { get; set; } diff --git a/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigPodCidrOverprovisionConfigArgs.cs b/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigPodCidrOverprovisionConfigArgs.cs index a3dc7153e6..5c4802570b 100644 --- a/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigPodCidrOverprovisionConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigPodCidrOverprovisionConfigArgs.cs @@ -12,6 +12,9 @@ namespace Pulumi.Gcp.Container.Inputs public sealed class NodePoolNetworkConfigPodCidrOverprovisionConfigArgs : global::Pulumi.ResourceArgs { + /// + /// Whether pod cidr overprovision is disabled. + /// [Input("disabled", required: true)] public Input Disabled { get; set; } = null!; diff --git a/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigPodCidrOverprovisionConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigPodCidrOverprovisionConfigGetArgs.cs index b4f8639868..086c4daeb6 100644 --- a/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigPodCidrOverprovisionConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/NodePoolNetworkConfigPodCidrOverprovisionConfigGetArgs.cs @@ -12,6 +12,9 @@ namespace Pulumi.Gcp.Container.Inputs public sealed class NodePoolNetworkConfigPodCidrOverprovisionConfigGetArgs : global::Pulumi.ResourceArgs { + /// + /// Whether pod cidr overprovision is disabled. + /// [Input("disabled", required: true)] public Input Disabled { get; set; } = null!; diff --git a/sdk/dotnet/Container/Outputs/ClusterSecretManagerConfig.cs b/sdk/dotnet/Container/Outputs/ClusterSecretManagerConfig.cs new file mode 100644 index 0000000000..08ffa1e435 --- /dev/null +++ b/sdk/dotnet/Container/Outputs/ClusterSecretManagerConfig.cs @@ -0,0 +1,27 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Container.Outputs +{ + + [OutputType] + public sealed class ClusterSecretManagerConfig + { + /// + /// Enable the Secret Manager add-on for this cluster. + /// + public readonly bool Enabled; + + [OutputConstructor] + private ClusterSecretManagerConfig(bool enabled) + { + Enabled = enabled; + } + } +} diff --git a/sdk/dotnet/Container/Outputs/GetClusterSecretManagerConfigResult.cs b/sdk/dotnet/Container/Outputs/GetClusterSecretManagerConfigResult.cs new file mode 100644 index 0000000000..a9c56fc435 --- /dev/null +++ b/sdk/dotnet/Container/Outputs/GetClusterSecretManagerConfigResult.cs @@ -0,0 +1,27 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Container.Outputs +{ + + [OutputType] + public sealed class GetClusterSecretManagerConfigResult + { + /// + /// Enable the Secret manager csi component. + /// + public readonly bool Enabled; + + [OutputConstructor] + private GetClusterSecretManagerConfigResult(bool enabled) + { + Enabled = enabled; + } + } +} diff --git a/sdk/dotnet/Container/Outputs/NodePoolNetworkConfig.cs b/sdk/dotnet/Container/Outputs/NodePoolNetworkConfig.cs index 030fca53ff..51d450af2c 100644 --- a/sdk/dotnet/Container/Outputs/NodePoolNetworkConfig.cs +++ b/sdk/dotnet/Container/Outputs/NodePoolNetworkConfig.cs @@ -32,11 +32,11 @@ public sealed class NodePoolNetworkConfig /// public readonly bool? EnablePrivateNodes; /// - /// Network bandwidth tier configuration. + /// Network bandwidth tier configuration. Structure is documented below. /// public readonly Outputs.NodePoolNetworkConfigNetworkPerformanceConfig? NetworkPerformanceConfig; /// - /// Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + /// Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. /// public readonly Outputs.NodePoolNetworkConfigPodCidrOverprovisionConfig? PodCidrOverprovisionConfig; /// diff --git a/sdk/dotnet/Container/Outputs/NodePoolNetworkConfigPodCidrOverprovisionConfig.cs b/sdk/dotnet/Container/Outputs/NodePoolNetworkConfigPodCidrOverprovisionConfig.cs index 68e4b57f88..c0eb26b341 100644 --- a/sdk/dotnet/Container/Outputs/NodePoolNetworkConfigPodCidrOverprovisionConfig.cs +++ b/sdk/dotnet/Container/Outputs/NodePoolNetworkConfigPodCidrOverprovisionConfig.cs @@ -13,6 +13,9 @@ namespace Pulumi.Gcp.Container.Outputs [OutputType] public sealed class NodePoolNetworkConfigPodCidrOverprovisionConfig { + /// + /// Whether pod cidr overprovision is disabled. + /// public readonly bool Disabled; [OutputConstructor] diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetArgs.cs index 23057a3596..806db9d20c 100644 --- a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetArgs.cs +++ b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetArgs.cs @@ -26,6 +26,12 @@ public sealed class PreventionDiscoveryConfigTargetArgs : global::Pulumi.Resourc [Input("cloudSqlTarget")] public Input? CloudSqlTarget { get; set; } + /// + /// Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + /// + [Input("secretsTarget")] + public Input? SecretsTarget { get; set; } + public PreventionDiscoveryConfigTargetArgs() { } diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs.cs index 03a177fb49..865ea25d03 100644 --- a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs.cs +++ b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs.cs @@ -18,6 +18,13 @@ public sealed class PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs : gl [Input("otherTables")] public Input? OtherTables { get; set; } + /// + /// The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + /// Structure is documented below. + /// + [Input("tableReference")] + public Input? TableReference { get; set; } + /// /// A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. /// Structure is documented below. diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterGetArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterGetArgs.cs index c87e26e9dc..64264448e2 100644 --- a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterGetArgs.cs +++ b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterGetArgs.cs @@ -18,6 +18,13 @@ public sealed class PreventionDiscoveryConfigTargetBigQueryTargetFilterGetArgs : [Input("otherTables")] public Input? OtherTables { get; set; } + /// + /// The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + /// Structure is documented below. + /// + [Input("tableReference")] + public Input? TableReference { get; set; } + /// /// A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. /// Structure is documented below. diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs.cs new file mode 100644 index 0000000000..c4c767e2b4 --- /dev/null +++ b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs.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.DataLoss.Inputs +{ + + public sealed class PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs : global::Pulumi.ResourceArgs + { + /// + /// Dataset ID of the table. + /// + [Input("datasetId", required: true)] + public Input DatasetId { get; set; } = null!; + + /// + /// Name of the table. + /// + [Input("tableId", required: true)] + public Input TableId { get; set; } = null!; + + public PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs() + { + } + public static new PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs Empty => new PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs(); + } +} diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceGetArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceGetArgs.cs new file mode 100644 index 0000000000..00509ed46e --- /dev/null +++ b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceGetArgs.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.DataLoss.Inputs +{ + + public sealed class PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Dataset ID of the table. + /// + [Input("datasetId", required: true)] + public Input DatasetId { get; set; } = null!; + + /// + /// Name of the table. + /// + [Input("tableId", required: true)] + public Input TableId { get; set; } = null!; + + public PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceGetArgs() + { + } + public static new PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceGetArgs Empty => new PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceGetArgs(); + } +} diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs.cs index 0150b966e0..57e895a4d0 100644 --- a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs.cs +++ b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs.cs @@ -19,6 +19,13 @@ public sealed class PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs : gl [Input("collection")] public Input? Collection { get; set; } + /// + /// The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + /// Structure is documented below. + /// + [Input("databaseResourceReference")] + public Input? DatabaseResourceReference { get; set; } + /// /// Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. /// diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs.cs new file mode 100644 index 0000000000..4770f93c74 --- /dev/null +++ b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs.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.DataLoss.Inputs +{ + + public sealed class PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs : global::Pulumi.ResourceArgs + { + /// + /// Required. Name of a database within the instance. + /// + [Input("database", required: true)] + public Input Database { get; set; } = null!; + + /// + /// Required. Name of a database resource, for example, a table within the database. + /// + [Input("databaseResource", required: true)] + public Input DatabaseResource { get; set; } = null!; + + /// + /// Required. The instance where this resource is located. For example: Cloud SQL instance ID. + /// + [Input("instance", required: true)] + public Input Instance { get; set; } = null!; + + /// + /// Required. If within a project-level config, then this must match the config's project ID. + /// + [Input("projectId", required: true)] + public Input ProjectId { get; set; } = null!; + + public PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs() + { + } + public static new PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs Empty => new PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs(); + } +} diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceGetArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceGetArgs.cs new file mode 100644 index 0000000000..d6d395a918 --- /dev/null +++ b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceGetArgs.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.DataLoss.Inputs +{ + + public sealed class PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Required. Name of a database within the instance. + /// + [Input("database", required: true)] + public Input Database { get; set; } = null!; + + /// + /// Required. Name of a database resource, for example, a table within the database. + /// + [Input("databaseResource", required: true)] + public Input DatabaseResource { get; set; } = null!; + + /// + /// Required. The instance where this resource is located. For example: Cloud SQL instance ID. + /// + [Input("instance", required: true)] + public Input Instance { get; set; } = null!; + + /// + /// Required. If within a project-level config, then this must match the config's project ID. + /// + [Input("projectId", required: true)] + public Input ProjectId { get; set; } = null!; + + public PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceGetArgs() + { + } + public static new PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceGetArgs Empty => new PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceGetArgs(); + } +} diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterGetArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterGetArgs.cs index fa2f14e41d..cd27d01d14 100644 --- a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterGetArgs.cs +++ b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterGetArgs.cs @@ -19,6 +19,13 @@ public sealed class PreventionDiscoveryConfigTargetCloudSqlTargetFilterGetArgs : [Input("collection")] public Input? Collection { get; set; } + /// + /// The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + /// Structure is documented below. + /// + [Input("databaseResourceReference")] + public Input? DatabaseResourceReference { get; set; } + /// /// Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. /// diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetGetArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetGetArgs.cs index 525eda833f..d3fcdf7b30 100644 --- a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetGetArgs.cs +++ b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetGetArgs.cs @@ -26,6 +26,12 @@ public sealed class PreventionDiscoveryConfigTargetGetArgs : global::Pulumi.Reso [Input("cloudSqlTarget")] public Input? CloudSqlTarget { get; set; } + /// + /// Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + /// + [Input("secretsTarget")] + public Input? SecretsTarget { get; set; } + public PreventionDiscoveryConfigTargetGetArgs() { } diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetSecretsTargetArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetSecretsTargetArgs.cs new file mode 100644 index 0000000000..f42c97de80 --- /dev/null +++ b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetSecretsTargetArgs.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 PreventionDiscoveryConfigTargetSecretsTargetArgs : global::Pulumi.ResourceArgs + { + public PreventionDiscoveryConfigTargetSecretsTargetArgs() + { + } + public static new PreventionDiscoveryConfigTargetSecretsTargetArgs Empty => new PreventionDiscoveryConfigTargetSecretsTargetArgs(); + } +} diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetSecretsTargetGetArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetSecretsTargetGetArgs.cs new file mode 100644 index 0000000000..e2b4754cc5 --- /dev/null +++ b/sdk/dotnet/DataLoss/Inputs/PreventionDiscoveryConfigTargetSecretsTargetGetArgs.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 PreventionDiscoveryConfigTargetSecretsTargetGetArgs : global::Pulumi.ResourceArgs + { + public PreventionDiscoveryConfigTargetSecretsTargetGetArgs() + { + } + public static new PreventionDiscoveryConfigTargetSecretsTargetGetArgs Empty => new PreventionDiscoveryConfigTargetSecretsTargetGetArgs(); + } +} diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.cs index c2f623329e..d236b7e470 100644 --- a/sdk/dotnet/DataLoss/Inputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.cs +++ b/sdk/dotnet/DataLoss/Inputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.cs @@ -18,8 +18,8 @@ public sealed class PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerIn /// specified in another InfoTypeLimit. /// Structure is documented below. /// - [Input("infoType", required: true)] - public Input InfoType { get; set; } = null!; + [Input("infoType")] + public Input? InfoType { get; set; } /// /// Max findings limit for the given infoType. diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeGetArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeGetArgs.cs index c83db9f6cf..730a802b68 100644 --- a/sdk/dotnet/DataLoss/Inputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeGetArgs.cs +++ b/sdk/dotnet/DataLoss/Inputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeGetArgs.cs @@ -18,8 +18,8 @@ public sealed class PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerIn /// specified in another InfoTypeLimit. /// Structure is documented below. /// - [Input("infoType", required: true)] - public Input InfoType { get; set; } = null!; + [Input("infoType")] + public Input? InfoType { get; set; } /// /// Max findings limit for the given infoType. diff --git a/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTarget.cs b/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTarget.cs index 9a02ec1960..0f3bd23fdf 100644 --- a/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTarget.cs +++ b/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTarget.cs @@ -23,15 +23,22 @@ public sealed class PreventionDiscoveryConfigTarget /// Structure is documented below. /// public readonly Outputs.PreventionDiscoveryConfigTargetCloudSqlTarget? CloudSqlTarget; + /// + /// Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + /// + public readonly Outputs.PreventionDiscoveryConfigTargetSecretsTarget? SecretsTarget; [OutputConstructor] private PreventionDiscoveryConfigTarget( Outputs.PreventionDiscoveryConfigTargetBigQueryTarget? bigQueryTarget, - Outputs.PreventionDiscoveryConfigTargetCloudSqlTarget? cloudSqlTarget) + Outputs.PreventionDiscoveryConfigTargetCloudSqlTarget? cloudSqlTarget, + + Outputs.PreventionDiscoveryConfigTargetSecretsTarget? secretsTarget) { BigQueryTarget = bigQueryTarget; CloudSqlTarget = cloudSqlTarget; + SecretsTarget = secretsTarget; } } } diff --git a/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilter.cs b/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilter.cs index 457807a374..0f9a753603 100644 --- a/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilter.cs +++ b/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilter.cs @@ -18,6 +18,11 @@ public sealed class PreventionDiscoveryConfigTargetBigQueryTargetFilter /// public readonly Outputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables? OtherTables; /// + /// The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + /// Structure is documented below. + /// + public readonly Outputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference? TableReference; + /// /// A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. /// Structure is documented below. /// @@ -27,9 +32,12 @@ public sealed class PreventionDiscoveryConfigTargetBigQueryTargetFilter private PreventionDiscoveryConfigTargetBigQueryTargetFilter( Outputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables? otherTables, + Outputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference? tableReference, + Outputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterTables? tables) { OtherTables = otherTables; + TableReference = tableReference; Tables = tables; } } diff --git a/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference.cs b/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference.cs new file mode 100644 index 0000000000..596ed42d1d --- /dev/null +++ b/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference.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.DataLoss.Outputs +{ + + [OutputType] + public sealed class PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference + { + /// + /// Dataset ID of the table. + /// + public readonly string DatasetId; + /// + /// Name of the table. + /// + public readonly string TableId; + + [OutputConstructor] + private PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference( + string datasetId, + + string tableId) + { + DatasetId = datasetId; + TableId = tableId; + } + } +} diff --git a/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilter.cs b/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilter.cs index 9b6d6e8958..7e90482d07 100644 --- a/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilter.cs +++ b/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilter.cs @@ -19,6 +19,11 @@ public sealed class PreventionDiscoveryConfigTargetCloudSqlTargetFilter /// public readonly Outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollection? Collection; /// + /// The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + /// Structure is documented below. + /// + public readonly Outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference? DatabaseResourceReference; + /// /// Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. /// public readonly Outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers? Others; @@ -27,9 +32,12 @@ public sealed class PreventionDiscoveryConfigTargetCloudSqlTargetFilter private PreventionDiscoveryConfigTargetCloudSqlTargetFilter( Outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollection? collection, + Outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference? databaseResourceReference, + Outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers? others) { Collection = collection; + DatabaseResourceReference = databaseResourceReference; Others = others; } } diff --git a/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference.cs b/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference.cs new file mode 100644 index 0000000000..cb42178c6d --- /dev/null +++ b/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference.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.DataLoss.Outputs +{ + + [OutputType] + public sealed class PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference + { + /// + /// Required. Name of a database within the instance. + /// + public readonly string Database; + /// + /// Required. Name of a database resource, for example, a table within the database. + /// + public readonly string DatabaseResource; + /// + /// Required. The instance where this resource is located. For example: Cloud SQL instance ID. + /// + public readonly string Instance; + /// + /// Required. If within a project-level config, then this must match the config's project ID. + /// + public readonly string ProjectId; + + [OutputConstructor] + private PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference( + string database, + + string databaseResource, + + string instance, + + string projectId) + { + Database = database; + DatabaseResource = databaseResource; + Instance = instance; + ProjectId = projectId; + } + } +} diff --git a/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetSecretsTarget.cs b/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetSecretsTarget.cs new file mode 100644 index 0000000000..24cdadfb1a --- /dev/null +++ b/sdk/dotnet/DataLoss/Outputs/PreventionDiscoveryConfigTargetSecretsTarget.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 PreventionDiscoveryConfigTargetSecretsTarget + { + [OutputConstructor] + private PreventionDiscoveryConfigTargetSecretsTarget() + { + } + } +} diff --git a/sdk/dotnet/DataLoss/Outputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType.cs b/sdk/dotnet/DataLoss/Outputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType.cs index 97a0fbd349..115a67d99c 100644 --- a/sdk/dotnet/DataLoss/Outputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType.cs +++ b/sdk/dotnet/DataLoss/Outputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType.cs @@ -19,7 +19,7 @@ public sealed class PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerIn /// specified in another InfoTypeLimit. /// Structure is documented below. /// - public readonly Outputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType InfoType; + public readonly Outputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType? InfoType; /// /// Max findings limit for the given infoType. /// @@ -27,7 +27,7 @@ public sealed class PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerIn [OutputConstructor] private PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType( - Outputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType infoType, + Outputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType? infoType, int maxFindings) { diff --git a/sdk/dotnet/DataLoss/PreventionInspectTemplate.cs b/sdk/dotnet/DataLoss/PreventionInspectTemplate.cs index 15dfe69b82..9087401da1 100644 --- a/sdk/dotnet/DataLoss/PreventionInspectTemplate.cs +++ b/sdk/dotnet/DataLoss/PreventionInspectTemplate.cs @@ -411,6 +411,50 @@ namespace Pulumi.Gcp.DataLoss /// /// }); /// ``` + /// ### Dlp Inspect Template Max Infotype Per Finding Default + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var maxInfotypePerFindingDefault = new Gcp.DataLoss.PreventionInspectTemplate("max_infotype_per_finding_default", new() + /// { + /// Parent = "projects/my-project-name", + /// InspectConfig = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigArgs + /// { + /// InfoTypes = new[] + /// { + /// new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs + /// { + /// Name = "EMAIL_ADDRESS", + /// }, + /// new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigInfoTypeArgs + /// { + /// Name = "PERSON_NAME", + /// }, + /// }, + /// MinLikelihood = "UNLIKELY", + /// Limits = new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsArgs + /// { + /// MaxFindingsPerRequest = 333, + /// MaxFindingsPerItem = 222, + /// MaxFindingsPerInfoTypes = new[] + /// { + /// new Gcp.DataLoss.Inputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs + /// { + /// MaxFindings = 111, + /// }, + /// }, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/GkeBackup/BackupPlan.cs b/sdk/dotnet/GkeBackup/BackupPlan.cs index 09f9d7a69a..fbdf55209b 100644 --- a/sdk/dotnet/GkeBackup/BackupPlan.cs +++ b/sdk/dotnet/GkeBackup/BackupPlan.cs @@ -252,6 +252,77 @@ namespace Pulumi.Gcp.GkeBackup /// /// }); /// ``` + /// ### Gkebackup Backupplan Permissive + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var primary = new Gcp.Container.Cluster("primary", new() + /// { + /// Name = "permissive-cluster", + /// Location = "us-central1", + /// InitialNodeCount = 1, + /// WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs + /// { + /// WorkloadPool = "my-project-name.svc.id.goog", + /// }, + /// AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs + /// { + /// GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs + /// { + /// Enabled = true, + /// }, + /// }, + /// DeletionProtection = true, + /// Network = "default", + /// Subnetwork = "default", + /// }); + /// + /// var permissive = new Gcp.GkeBackup.BackupPlan("permissive", new() + /// { + /// Name = "permissive-plan", + /// Cluster = primary.Id, + /// Location = "us-central1", + /// RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs + /// { + /// BackupDeleteLockDays = 30, + /// BackupRetainDays = 180, + /// }, + /// BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs + /// { + /// CronSchedule = "0 9 * * 1", + /// }, + /// BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs + /// { + /// IncludeVolumeData = true, + /// IncludeSecrets = true, + /// PermissiveMode = true, + /// SelectedApplications = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsArgs + /// { + /// NamespacedNames = new[] + /// { + /// new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs + /// { + /// Name = "app1", + /// Namespace = "ns1", + /// }, + /// new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs + /// { + /// Name = "app2", + /// Namespace = "ns2", + /// }, + /// }, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` /// ### Gkebackup Backupplan Rpo Daily Window /// /// ```csharp diff --git a/sdk/dotnet/GkeBackup/Inputs/BackupPlanBackupConfigArgs.cs b/sdk/dotnet/GkeBackup/Inputs/BackupPlanBackupConfigArgs.cs index f579f68be6..e0bc778fbd 100644 --- a/sdk/dotnet/GkeBackup/Inputs/BackupPlanBackupConfigArgs.cs +++ b/sdk/dotnet/GkeBackup/Inputs/BackupPlanBackupConfigArgs.cs @@ -40,6 +40,14 @@ public sealed class BackupPlanBackupConfigArgs : global::Pulumi.ResourceArgs [Input("includeVolumeData")] public Input? IncludeVolumeData { get; set; } + /// + /// This flag specifies whether Backups will not fail when + /// Backup for GKE detects Kubernetes configuration that is + /// non-standard or requires additional setup to restore. + /// + [Input("permissiveMode")] + public Input? PermissiveMode { get; set; } + /// /// A list of namespaced Kubernetes Resources. /// Structure is documented below. diff --git a/sdk/dotnet/GkeBackup/Inputs/BackupPlanBackupConfigGetArgs.cs b/sdk/dotnet/GkeBackup/Inputs/BackupPlanBackupConfigGetArgs.cs index 3711f49be1..551c03c042 100644 --- a/sdk/dotnet/GkeBackup/Inputs/BackupPlanBackupConfigGetArgs.cs +++ b/sdk/dotnet/GkeBackup/Inputs/BackupPlanBackupConfigGetArgs.cs @@ -40,6 +40,14 @@ public sealed class BackupPlanBackupConfigGetArgs : global::Pulumi.ResourceArgs [Input("includeVolumeData")] public Input? IncludeVolumeData { get; set; } + /// + /// This flag specifies whether Backups will not fail when + /// Backup for GKE detects Kubernetes configuration that is + /// non-standard or requires additional setup to restore. + /// + [Input("permissiveMode")] + public Input? PermissiveMode { get; set; } + /// /// A list of namespaced Kubernetes Resources. /// Structure is documented below. diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigArgs.cs index 538bdf64e8..3d07f7ae1b 100644 --- a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigArgs.cs +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigArgs.cs @@ -53,7 +53,7 @@ public sealed class RestorePlanRestoreConfigArgs : global::Pulumi.ResourceArgs /// if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. /// See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode /// for more information on each mode. - /// Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + /// Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. /// [Input("namespacedResourceRestoreMode")] public Input? NamespacedResourceRestoreMode { get; set; } @@ -65,6 +65,13 @@ public sealed class RestorePlanRestoreConfigArgs : global::Pulumi.ResourceArgs [Input("noNamespaces")] public Input? NoNamespaces { get; set; } + /// + /// It contains custom ordering to use on a Restore. + /// Structure is documented below. + /// + [Input("restoreOrder")] + public Input? RestoreOrder { get; set; } + /// /// A list of selected ProtectedApplications to restore. /// The listed ProtectedApplications and all the resources @@ -111,6 +118,21 @@ public InputList Transfor [Input("volumeDataRestorePolicy")] public Input? VolumeDataRestorePolicy { get; set; } + [Input("volumeDataRestorePolicyBindings")] + private InputList? _volumeDataRestorePolicyBindings; + + /// + /// A table that binds volumes by their scope to a restore policy. Bindings + /// must have a unique scope. Any volumes not scoped in the bindings are + /// subject to the policy defined in volume_data_restore_policy. + /// Structure is documented below. + /// + public InputList VolumeDataRestorePolicyBindings + { + get => _volumeDataRestorePolicyBindings ?? (_volumeDataRestorePolicyBindings = new InputList()); + set => _volumeDataRestorePolicyBindings = value; + } + public RestorePlanRestoreConfigArgs() { } diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigGetArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigGetArgs.cs index ba4e2f3962..4dda0ebf9f 100644 --- a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigGetArgs.cs +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigGetArgs.cs @@ -53,7 +53,7 @@ public sealed class RestorePlanRestoreConfigGetArgs : global::Pulumi.ResourceArg /// if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. /// See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode /// for more information on each mode. - /// Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + /// Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. /// [Input("namespacedResourceRestoreMode")] public Input? NamespacedResourceRestoreMode { get; set; } @@ -65,6 +65,13 @@ public sealed class RestorePlanRestoreConfigGetArgs : global::Pulumi.ResourceArg [Input("noNamespaces")] public Input? NoNamespaces { get; set; } + /// + /// It contains custom ordering to use on a Restore. + /// Structure is documented below. + /// + [Input("restoreOrder")] + public Input? RestoreOrder { get; set; } + /// /// A list of selected ProtectedApplications to restore. /// The listed ProtectedApplications and all the resources @@ -111,6 +118,21 @@ public InputList Trans [Input("volumeDataRestorePolicy")] public Input? VolumeDataRestorePolicy { get; set; } + [Input("volumeDataRestorePolicyBindings")] + private InputList? _volumeDataRestorePolicyBindings; + + /// + /// A table that binds volumes by their scope to a restore policy. Bindings + /// must have a unique scope. Any volumes not scoped in the bindings are + /// subject to the policy defined in volume_data_restore_policy. + /// Structure is documented below. + /// + public InputList VolumeDataRestorePolicyBindings + { + get => _volumeDataRestorePolicyBindings ?? (_volumeDataRestorePolicyBindings = new InputList()); + set => _volumeDataRestorePolicyBindings = value; + } + public RestorePlanRestoreConfigGetArgs() { } diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderArgs.cs new file mode 100644 index 0000000000..8185501555 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderArgs.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.GkeBackup.Inputs +{ + + public sealed class RestorePlanRestoreConfigRestoreOrderArgs : global::Pulumi.ResourceArgs + { + [Input("groupKindDependencies", required: true)] + private InputList? _groupKindDependencies; + + /// + /// A list of group kind dependency pairs + /// that is used by Backup for GKE to + /// generate a group kind restore order. + /// Structure is documented below. + /// + public InputList GroupKindDependencies + { + get => _groupKindDependencies ?? (_groupKindDependencies = new InputList()); + set => _groupKindDependencies = value; + } + + public RestorePlanRestoreConfigRestoreOrderArgs() + { + } + public static new RestorePlanRestoreConfigRestoreOrderArgs Empty => new RestorePlanRestoreConfigRestoreOrderArgs(); + } +} diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGetArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGetArgs.cs new file mode 100644 index 0000000000..1a05deb0c5 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGetArgs.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.GkeBackup.Inputs +{ + + public sealed class RestorePlanRestoreConfigRestoreOrderGetArgs : global::Pulumi.ResourceArgs + { + [Input("groupKindDependencies", required: true)] + private InputList? _groupKindDependencies; + + /// + /// A list of group kind dependency pairs + /// that is used by Backup for GKE to + /// generate a group kind restore order. + /// Structure is documented below. + /// + public InputList GroupKindDependencies + { + get => _groupKindDependencies ?? (_groupKindDependencies = new InputList()); + set => _groupKindDependencies = value; + } + + public RestorePlanRestoreConfigRestoreOrderGetArgs() + { + } + public static new RestorePlanRestoreConfigRestoreOrderGetArgs Empty => new RestorePlanRestoreConfigRestoreOrderGetArgs(); + } +} diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.cs new file mode 100644 index 0000000000..7cc5e26287 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.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.GkeBackup.Inputs +{ + + public sealed class RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs : global::Pulumi.ResourceArgs + { + /// + /// The requiring group kind requires that the satisfying + /// group kind be restored first. + /// Structure is documented below. + /// + [Input("requiring", required: true)] + public Input Requiring { get; set; } = null!; + + /// + /// The satisfying group kind must be restored first + /// in order to satisfy the dependency. + /// Structure is documented below. + /// + [Input("satisfying", required: true)] + public Input Satisfying { get; set; } = null!; + + public RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs() + { + } + public static new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs Empty => new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs(); + } +} diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyGetArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyGetArgs.cs new file mode 100644 index 0000000000..677e986c90 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyGetArgs.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.GkeBackup.Inputs +{ + + public sealed class RestorePlanRestoreConfigRestoreOrderGroupKindDependencyGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The requiring group kind requires that the satisfying + /// group kind be restored first. + /// Structure is documented below. + /// + [Input("requiring", required: true)] + public Input Requiring { get; set; } = null!; + + /// + /// The satisfying group kind must be restored first + /// in order to satisfy the dependency. + /// Structure is documented below. + /// + [Input("satisfying", required: true)] + public Input Satisfying { get; set; } = null!; + + public RestorePlanRestoreConfigRestoreOrderGroupKindDependencyGetArgs() + { + } + public static new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyGetArgs Empty => new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyGetArgs(); + } +} diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.cs new file mode 100644 index 0000000000..fbe58e9412 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.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.GkeBackup.Inputs +{ + + public sealed class RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs : global::Pulumi.ResourceArgs + { + /// + /// API Group of a Kubernetes resource, e.g. + /// "apiextensions.k8s.io", "storage.k8s.io", etc. + /// Use empty string for core group. + /// + [Input("resourceGroup")] + public Input? ResourceGroup { get; set; } + + /// + /// Kind of a Kubernetes resource, e.g. + /// "CustomResourceDefinition", "StorageClass", etc. + /// + /// - - - + /// + [Input("resourceKind")] + public Input? ResourceKind { get; set; } + + public RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs() + { + } + public static new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs Empty => new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs(); + } +} diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringGetArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringGetArgs.cs new file mode 100644 index 0000000000..e899e9a2c2 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringGetArgs.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.GkeBackup.Inputs +{ + + public sealed class RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringGetArgs : global::Pulumi.ResourceArgs + { + /// + /// API Group of a Kubernetes resource, e.g. + /// "apiextensions.k8s.io", "storage.k8s.io", etc. + /// Use empty string for core group. + /// + [Input("resourceGroup")] + public Input? ResourceGroup { get; set; } + + /// + /// Kind of a Kubernetes resource, e.g. + /// "CustomResourceDefinition", "StorageClass", etc. + /// + /// - - - + /// + [Input("resourceKind")] + public Input? ResourceKind { get; set; } + + public RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringGetArgs() + { + } + public static new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringGetArgs Empty => new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringGetArgs(); + } +} diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.cs new file mode 100644 index 0000000000..f8ae32f772 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.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.GkeBackup.Inputs +{ + + public sealed class RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs : global::Pulumi.ResourceArgs + { + /// + /// API Group of a Kubernetes resource, e.g. + /// "apiextensions.k8s.io", "storage.k8s.io", etc. + /// Use empty string for core group. + /// + [Input("resourceGroup")] + public Input? ResourceGroup { get; set; } + + /// + /// Kind of a Kubernetes resource, e.g. + /// "CustomResourceDefinition", "StorageClass", etc. + /// + [Input("resourceKind")] + public Input? ResourceKind { get; set; } + + public RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs() + { + } + public static new RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs Empty => new RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs(); + } +} diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingGetArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingGetArgs.cs new file mode 100644 index 0000000000..81b9762527 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingGetArgs.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.GkeBackup.Inputs +{ + + public sealed class RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingGetArgs : global::Pulumi.ResourceArgs + { + /// + /// API Group of a Kubernetes resource, e.g. + /// "apiextensions.k8s.io", "storage.k8s.io", etc. + /// Use empty string for core group. + /// + [Input("resourceGroup")] + public Input? ResourceGroup { get; set; } + + /// + /// Kind of a Kubernetes resource, e.g. + /// "CustomResourceDefinition", "StorageClass", etc. + /// + [Input("resourceKind")] + public Input? ResourceKind { get; set; } + + public RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingGetArgs() + { + } + public static new RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingGetArgs Empty => new RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingGetArgs(); + } +} diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigTransformationRuleFieldActionArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigTransformationRuleFieldActionArgs.cs index cc1d93aae8..91e6bf9c37 100644 --- a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigTransformationRuleFieldActionArgs.cs +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigTransformationRuleFieldActionArgs.cs @@ -36,8 +36,6 @@ public sealed class RestorePlanRestoreConfigTransformationRuleFieldActionArgs : /// /// A string that specifies the desired value in string format /// to use for transformation. - /// - /// - - - /// [Input("value")] public Input? Value { get; set; } diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigTransformationRuleFieldActionGetArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigTransformationRuleFieldActionGetArgs.cs index e5e720f95e..e235f89ce7 100644 --- a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigTransformationRuleFieldActionGetArgs.cs +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigTransformationRuleFieldActionGetArgs.cs @@ -36,8 +36,6 @@ public sealed class RestorePlanRestoreConfigTransformationRuleFieldActionGetArgs /// /// A string that specifies the desired value in string format /// to use for transformation. - /// - /// - - - /// [Input("value")] public Input? Value { get; set; } diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.cs new file mode 100644 index 0000000000..f98633244b --- /dev/null +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.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.GkeBackup.Inputs +{ + + public sealed class RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies the mechanism to be used to restore this volume data. + /// See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + /// for more information on each policy option. + /// Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + /// + [Input("policy", required: true)] + public Input Policy { get; set; } = null!; + + /// + /// The volume type, as determined by the PVC's + /// bound PV, to apply the policy to. + /// Possible values are: `GCE_PERSISTENT_DISK`. + /// + [Input("volumeType", required: true)] + public Input VolumeType { get; set; } = null!; + + public RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs() + { + } + public static new RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs Empty => new RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs(); + } +} diff --git a/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBindingGetArgs.cs b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBindingGetArgs.cs new file mode 100644 index 0000000000..f18e4626a4 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Inputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBindingGetArgs.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.GkeBackup.Inputs +{ + + public sealed class RestorePlanRestoreConfigVolumeDataRestorePolicyBindingGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies the mechanism to be used to restore this volume data. + /// See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + /// for more information on each policy option. + /// Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + /// + [Input("policy", required: true)] + public Input Policy { get; set; } = null!; + + /// + /// The volume type, as determined by the PVC's + /// bound PV, to apply the policy to. + /// Possible values are: `GCE_PERSISTENT_DISK`. + /// + [Input("volumeType", required: true)] + public Input VolumeType { get; set; } = null!; + + public RestorePlanRestoreConfigVolumeDataRestorePolicyBindingGetArgs() + { + } + public static new RestorePlanRestoreConfigVolumeDataRestorePolicyBindingGetArgs Empty => new RestorePlanRestoreConfigVolumeDataRestorePolicyBindingGetArgs(); + } +} diff --git a/sdk/dotnet/GkeBackup/Outputs/BackupPlanBackupConfig.cs b/sdk/dotnet/GkeBackup/Outputs/BackupPlanBackupConfig.cs index 8b88f9a7da..173d2ce244 100644 --- a/sdk/dotnet/GkeBackup/Outputs/BackupPlanBackupConfig.cs +++ b/sdk/dotnet/GkeBackup/Outputs/BackupPlanBackupConfig.cs @@ -34,6 +34,12 @@ public sealed class BackupPlanBackupConfig /// public readonly bool? IncludeVolumeData; /// + /// This flag specifies whether Backups will not fail when + /// Backup for GKE detects Kubernetes configuration that is + /// non-standard or requires additional setup to restore. + /// + public readonly bool? PermissiveMode; + /// /// A list of namespaced Kubernetes Resources. /// Structure is documented below. /// @@ -54,6 +60,8 @@ private BackupPlanBackupConfig( bool? includeVolumeData, + bool? permissiveMode, + Outputs.BackupPlanBackupConfigSelectedApplications? selectedApplications, Outputs.BackupPlanBackupConfigSelectedNamespaces? selectedNamespaces) @@ -62,6 +70,7 @@ private BackupPlanBackupConfig( EncryptionKey = encryptionKey; IncludeSecrets = includeSecrets; IncludeVolumeData = includeVolumeData; + PermissiveMode = permissiveMode; SelectedApplications = selectedApplications; SelectedNamespaces = selectedNamespaces; } diff --git a/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfig.cs b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfig.cs index 009301fc8c..6bd31cd1b2 100644 --- a/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfig.cs +++ b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfig.cs @@ -46,7 +46,7 @@ public sealed class RestorePlanRestoreConfig /// if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. /// See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode /// for more information on each mode. - /// Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + /// Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. /// public readonly string? NamespacedResourceRestoreMode; /// @@ -55,6 +55,11 @@ public sealed class RestorePlanRestoreConfig /// public readonly bool? NoNamespaces; /// + /// It contains custom ordering to use on a Restore. + /// Structure is documented below. + /// + public readonly Outputs.RestorePlanRestoreConfigRestoreOrder? RestoreOrder; + /// /// A list of selected ProtectedApplications to restore. /// The listed ProtectedApplications and all the resources /// to which they refer will be restored. @@ -86,6 +91,13 @@ public sealed class RestorePlanRestoreConfig /// Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. /// public readonly string? VolumeDataRestorePolicy; + /// + /// A table that binds volumes by their scope to a restore policy. Bindings + /// must have a unique scope. Any volumes not scoped in the bindings are + /// subject to the policy defined in volume_data_restore_policy. + /// Structure is documented below. + /// + public readonly ImmutableArray VolumeDataRestorePolicyBindings; [OutputConstructor] private RestorePlanRestoreConfig( @@ -101,13 +113,17 @@ private RestorePlanRestoreConfig( bool? noNamespaces, + Outputs.RestorePlanRestoreConfigRestoreOrder? restoreOrder, + Outputs.RestorePlanRestoreConfigSelectedApplications? selectedApplications, Outputs.RestorePlanRestoreConfigSelectedNamespaces? selectedNamespaces, ImmutableArray transformationRules, - string? volumeDataRestorePolicy) + string? volumeDataRestorePolicy, + + ImmutableArray volumeDataRestorePolicyBindings) { AllNamespaces = allNamespaces; ClusterResourceConflictPolicy = clusterResourceConflictPolicy; @@ -115,10 +131,12 @@ private RestorePlanRestoreConfig( ExcludedNamespaces = excludedNamespaces; NamespacedResourceRestoreMode = namespacedResourceRestoreMode; NoNamespaces = noNamespaces; + RestoreOrder = restoreOrder; SelectedApplications = selectedApplications; SelectedNamespaces = selectedNamespaces; TransformationRules = transformationRules; VolumeDataRestorePolicy = volumeDataRestorePolicy; + VolumeDataRestorePolicyBindings = volumeDataRestorePolicyBindings; } } } diff --git a/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrder.cs b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrder.cs new file mode 100644 index 0000000000..d2509e6265 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrder.cs @@ -0,0 +1,30 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.GkeBackup.Outputs +{ + + [OutputType] + public sealed class RestorePlanRestoreConfigRestoreOrder + { + /// + /// A list of group kind dependency pairs + /// that is used by Backup for GKE to + /// generate a group kind restore order. + /// Structure is documented below. + /// + public readonly ImmutableArray GroupKindDependencies; + + [OutputConstructor] + private RestorePlanRestoreConfigRestoreOrder(ImmutableArray groupKindDependencies) + { + GroupKindDependencies = groupKindDependencies; + } + } +} diff --git a/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependency.cs b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependency.cs new file mode 100644 index 0000000000..89c5f141f7 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependency.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.GkeBackup.Outputs +{ + + [OutputType] + public sealed class RestorePlanRestoreConfigRestoreOrderGroupKindDependency + { + /// + /// The requiring group kind requires that the satisfying + /// group kind be restored first. + /// Structure is documented below. + /// + public readonly Outputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring Requiring; + /// + /// The satisfying group kind must be restored first + /// in order to satisfy the dependency. + /// Structure is documented below. + /// + public readonly Outputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying Satisfying; + + [OutputConstructor] + private RestorePlanRestoreConfigRestoreOrderGroupKindDependency( + Outputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring requiring, + + Outputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying satisfying) + { + Requiring = requiring; + Satisfying = satisfying; + } + } +} diff --git a/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring.cs b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring.cs new file mode 100644 index 0000000000..d2c70213f5 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring.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.GkeBackup.Outputs +{ + + [OutputType] + public sealed class RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring + { + /// + /// API Group of a Kubernetes resource, e.g. + /// "apiextensions.k8s.io", "storage.k8s.io", etc. + /// Use empty string for core group. + /// + public readonly string? ResourceGroup; + /// + /// Kind of a Kubernetes resource, e.g. + /// "CustomResourceDefinition", "StorageClass", etc. + /// + /// - - - + /// + public readonly string? ResourceKind; + + [OutputConstructor] + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring( + string? resourceGroup, + + string? resourceKind) + { + ResourceGroup = resourceGroup; + ResourceKind = resourceKind; + } + } +} diff --git a/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying.cs b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying.cs new file mode 100644 index 0000000000..b98ae17a34 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying.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.GkeBackup.Outputs +{ + + [OutputType] + public sealed class RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying + { + /// + /// API Group of a Kubernetes resource, e.g. + /// "apiextensions.k8s.io", "storage.k8s.io", etc. + /// Use empty string for core group. + /// + public readonly string? ResourceGroup; + /// + /// Kind of a Kubernetes resource, e.g. + /// "CustomResourceDefinition", "StorageClass", etc. + /// + public readonly string? ResourceKind; + + [OutputConstructor] + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying( + string? resourceGroup, + + string? resourceKind) + { + ResourceGroup = resourceGroup; + ResourceKind = resourceKind; + } + } +} diff --git a/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigTransformationRuleFieldAction.cs b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigTransformationRuleFieldAction.cs index 07989514a5..a27c77b2e7 100644 --- a/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigTransformationRuleFieldAction.cs +++ b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigTransformationRuleFieldAction.cs @@ -31,8 +31,6 @@ public sealed class RestorePlanRestoreConfigTransformationRuleFieldAction /// /// A string that specifies the desired value in string format /// to use for transformation. - /// - /// - - - /// public readonly string? Value; diff --git a/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBinding.cs b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBinding.cs new file mode 100644 index 0000000000..bfc8dee938 --- /dev/null +++ b/sdk/dotnet/GkeBackup/Outputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBinding.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.GkeBackup.Outputs +{ + + [OutputType] + public sealed class RestorePlanRestoreConfigVolumeDataRestorePolicyBinding + { + /// + /// Specifies the mechanism to be used to restore this volume data. + /// See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + /// for more information on each policy option. + /// Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + /// + public readonly string Policy; + /// + /// The volume type, as determined by the PVC's + /// bound PV, to apply the policy to. + /// Possible values are: `GCE_PERSISTENT_DISK`. + /// + public readonly string VolumeType; + + [OutputConstructor] + private RestorePlanRestoreConfigVolumeDataRestorePolicyBinding( + string policy, + + string volumeType) + { + Policy = policy; + VolumeType = volumeType; + } + } +} diff --git a/sdk/dotnet/GkeBackup/RestorePlan.cs b/sdk/dotnet/GkeBackup/RestorePlan.cs index 82b4eb9cb6..5c3acb7665 100644 --- a/sdk/dotnet/GkeBackup/RestorePlan.cs +++ b/sdk/dotnet/GkeBackup/RestorePlan.cs @@ -534,6 +534,241 @@ namespace Pulumi.Gcp.GkeBackup /// /// }); /// ``` + /// ### Gkebackup Restoreplan Gitops Mode + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var primary = new Gcp.Container.Cluster("primary", new() + /// { + /// Name = "gitops-mode-cluster", + /// Location = "us-central1", + /// InitialNodeCount = 1, + /// WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs + /// { + /// WorkloadPool = "my-project-name.svc.id.goog", + /// }, + /// AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs + /// { + /// GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs + /// { + /// Enabled = true, + /// }, + /// }, + /// DeletionProtection = "", + /// Network = "default", + /// Subnetwork = "default", + /// }); + /// + /// var basic = new Gcp.GkeBackup.BackupPlan("basic", new() + /// { + /// Name = "gitops-mode", + /// Cluster = primary.Id, + /// Location = "us-central1", + /// BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs + /// { + /// IncludeVolumeData = true, + /// IncludeSecrets = true, + /// AllNamespaces = true, + /// }, + /// }); + /// + /// var gitopsMode = new Gcp.GkeBackup.RestorePlan("gitops_mode", new() + /// { + /// Name = "gitops-mode", + /// Location = "us-central1", + /// BackupPlan = basic.Id, + /// Cluster = primary.Id, + /// RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs + /// { + /// AllNamespaces = true, + /// NamespacedResourceRestoreMode = "MERGE_SKIP_ON_CONFLICT", + /// VolumeDataRestorePolicy = "RESTORE_VOLUME_DATA_FROM_BACKUP", + /// ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs + /// { + /// AllGroupKinds = true, + /// }, + /// ClusterResourceConflictPolicy = "USE_EXISTING_VERSION", + /// }, + /// }); + /// + /// }); + /// ``` + /// ### Gkebackup Restoreplan Restore Order + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var primary = new Gcp.Container.Cluster("primary", new() + /// { + /// Name = "restore-order-cluster", + /// Location = "us-central1", + /// InitialNodeCount = 1, + /// WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs + /// { + /// WorkloadPool = "my-project-name.svc.id.goog", + /// }, + /// AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs + /// { + /// GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs + /// { + /// Enabled = true, + /// }, + /// }, + /// DeletionProtection = "", + /// Network = "default", + /// Subnetwork = "default", + /// }); + /// + /// var basic = new Gcp.GkeBackup.BackupPlan("basic", new() + /// { + /// Name = "restore-order", + /// Cluster = primary.Id, + /// Location = "us-central1", + /// BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs + /// { + /// IncludeVolumeData = true, + /// IncludeSecrets = true, + /// AllNamespaces = true, + /// }, + /// }); + /// + /// var restoreOrder = new Gcp.GkeBackup.RestorePlan("restore_order", new() + /// { + /// Name = "restore-order", + /// Location = "us-central1", + /// BackupPlan = basic.Id, + /// Cluster = primary.Id, + /// RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs + /// { + /// AllNamespaces = true, + /// NamespacedResourceRestoreMode = "FAIL_ON_CONFLICT", + /// VolumeDataRestorePolicy = "RESTORE_VOLUME_DATA_FROM_BACKUP", + /// ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs + /// { + /// AllGroupKinds = true, + /// }, + /// ClusterResourceConflictPolicy = "USE_EXISTING_VERSION", + /// RestoreOrder = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderArgs + /// { + /// GroupKindDependencies = new[] + /// { + /// new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs + /// { + /// Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindA", + /// }, + /// Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindB", + /// }, + /// }, + /// new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs + /// { + /// Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindB", + /// }, + /// Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindC", + /// }, + /// }, + /// }, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` + /// ### Gkebackup Restoreplan Volume Res + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var primary = new Gcp.Container.Cluster("primary", new() + /// { + /// Name = "volume-res-cluster", + /// Location = "us-central1", + /// InitialNodeCount = 1, + /// WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs + /// { + /// WorkloadPool = "my-project-name.svc.id.goog", + /// }, + /// AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs + /// { + /// GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs + /// { + /// Enabled = true, + /// }, + /// }, + /// DeletionProtection = "", + /// Network = "default", + /// Subnetwork = "default", + /// }); + /// + /// var basic = new Gcp.GkeBackup.BackupPlan("basic", new() + /// { + /// Name = "volume-res", + /// Cluster = primary.Id, + /// Location = "us-central1", + /// BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs + /// { + /// IncludeVolumeData = true, + /// IncludeSecrets = true, + /// AllNamespaces = true, + /// }, + /// }); + /// + /// var volumeRes = new Gcp.GkeBackup.RestorePlan("volume_res", new() + /// { + /// Name = "volume-res", + /// Location = "us-central1", + /// BackupPlan = basic.Id, + /// Cluster = primary.Id, + /// RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs + /// { + /// AllNamespaces = true, + /// NamespacedResourceRestoreMode = "FAIL_ON_CONFLICT", + /// VolumeDataRestorePolicy = "NO_VOLUME_DATA_RESTORATION", + /// ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs + /// { + /// AllGroupKinds = true, + /// }, + /// ClusterResourceConflictPolicy = "USE_EXISTING_VERSION", + /// VolumeDataRestorePolicyBindings = new[] + /// { + /// new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs + /// { + /// Policy = "RESTORE_VOLUME_DATA_FROM_BACKUP", + /// VolumeType = "GCE_PERSISTENT_DISK", + /// }, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/GkeBackup/RestorePlanIamBinding.cs b/sdk/dotnet/GkeBackup/RestorePlanIamBinding.cs index e7fab8e0bb..0f4c88073a 100644 --- a/sdk/dotnet/GkeBackup/RestorePlanIamBinding.cs +++ b/sdk/dotnet/GkeBackup/RestorePlanIamBinding.cs @@ -534,6 +534,241 @@ namespace Pulumi.Gcp.GkeBackup /// /// }); /// ``` + /// ### Gkebackup Restoreplan Gitops Mode + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var primary = new Gcp.Container.Cluster("primary", new() + /// { + /// Name = "gitops-mode-cluster", + /// Location = "us-central1", + /// InitialNodeCount = 1, + /// WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs + /// { + /// WorkloadPool = "my-project-name.svc.id.goog", + /// }, + /// AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs + /// { + /// GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs + /// { + /// Enabled = true, + /// }, + /// }, + /// DeletionProtection = "", + /// Network = "default", + /// Subnetwork = "default", + /// }); + /// + /// var basic = new Gcp.GkeBackup.BackupPlan("basic", new() + /// { + /// Name = "gitops-mode", + /// Cluster = primary.Id, + /// Location = "us-central1", + /// BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs + /// { + /// IncludeVolumeData = true, + /// IncludeSecrets = true, + /// AllNamespaces = true, + /// }, + /// }); + /// + /// var gitopsMode = new Gcp.GkeBackup.RestorePlan("gitops_mode", new() + /// { + /// Name = "gitops-mode", + /// Location = "us-central1", + /// BackupPlan = basic.Id, + /// Cluster = primary.Id, + /// RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs + /// { + /// AllNamespaces = true, + /// NamespacedResourceRestoreMode = "MERGE_SKIP_ON_CONFLICT", + /// VolumeDataRestorePolicy = "RESTORE_VOLUME_DATA_FROM_BACKUP", + /// ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs + /// { + /// AllGroupKinds = true, + /// }, + /// ClusterResourceConflictPolicy = "USE_EXISTING_VERSION", + /// }, + /// }); + /// + /// }); + /// ``` + /// ### Gkebackup Restoreplan Restore Order + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var primary = new Gcp.Container.Cluster("primary", new() + /// { + /// Name = "restore-order-cluster", + /// Location = "us-central1", + /// InitialNodeCount = 1, + /// WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs + /// { + /// WorkloadPool = "my-project-name.svc.id.goog", + /// }, + /// AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs + /// { + /// GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs + /// { + /// Enabled = true, + /// }, + /// }, + /// DeletionProtection = "", + /// Network = "default", + /// Subnetwork = "default", + /// }); + /// + /// var basic = new Gcp.GkeBackup.BackupPlan("basic", new() + /// { + /// Name = "restore-order", + /// Cluster = primary.Id, + /// Location = "us-central1", + /// BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs + /// { + /// IncludeVolumeData = true, + /// IncludeSecrets = true, + /// AllNamespaces = true, + /// }, + /// }); + /// + /// var restoreOrder = new Gcp.GkeBackup.RestorePlan("restore_order", new() + /// { + /// Name = "restore-order", + /// Location = "us-central1", + /// BackupPlan = basic.Id, + /// Cluster = primary.Id, + /// RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs + /// { + /// AllNamespaces = true, + /// NamespacedResourceRestoreMode = "FAIL_ON_CONFLICT", + /// VolumeDataRestorePolicy = "RESTORE_VOLUME_DATA_FROM_BACKUP", + /// ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs + /// { + /// AllGroupKinds = true, + /// }, + /// ClusterResourceConflictPolicy = "USE_EXISTING_VERSION", + /// RestoreOrder = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderArgs + /// { + /// GroupKindDependencies = new[] + /// { + /// new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs + /// { + /// Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindA", + /// }, + /// Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindB", + /// }, + /// }, + /// new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs + /// { + /// Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindB", + /// }, + /// Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindC", + /// }, + /// }, + /// }, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` + /// ### Gkebackup Restoreplan Volume Res + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var primary = new Gcp.Container.Cluster("primary", new() + /// { + /// Name = "volume-res-cluster", + /// Location = "us-central1", + /// InitialNodeCount = 1, + /// WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs + /// { + /// WorkloadPool = "my-project-name.svc.id.goog", + /// }, + /// AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs + /// { + /// GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs + /// { + /// Enabled = true, + /// }, + /// }, + /// DeletionProtection = "", + /// Network = "default", + /// Subnetwork = "default", + /// }); + /// + /// var basic = new Gcp.GkeBackup.BackupPlan("basic", new() + /// { + /// Name = "volume-res", + /// Cluster = primary.Id, + /// Location = "us-central1", + /// BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs + /// { + /// IncludeVolumeData = true, + /// IncludeSecrets = true, + /// AllNamespaces = true, + /// }, + /// }); + /// + /// var volumeRes = new Gcp.GkeBackup.RestorePlan("volume_res", new() + /// { + /// Name = "volume-res", + /// Location = "us-central1", + /// BackupPlan = basic.Id, + /// Cluster = primary.Id, + /// RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs + /// { + /// AllNamespaces = true, + /// NamespacedResourceRestoreMode = "FAIL_ON_CONFLICT", + /// VolumeDataRestorePolicy = "NO_VOLUME_DATA_RESTORATION", + /// ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs + /// { + /// AllGroupKinds = true, + /// }, + /// ClusterResourceConflictPolicy = "USE_EXISTING_VERSION", + /// VolumeDataRestorePolicyBindings = new[] + /// { + /// new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs + /// { + /// Policy = "RESTORE_VOLUME_DATA_FROM_BACKUP", + /// VolumeType = "GCE_PERSISTENT_DISK", + /// }, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/GkeBackup/RestorePlanIamMember.cs b/sdk/dotnet/GkeBackup/RestorePlanIamMember.cs index 6b1aa3255e..5a465c84fc 100644 --- a/sdk/dotnet/GkeBackup/RestorePlanIamMember.cs +++ b/sdk/dotnet/GkeBackup/RestorePlanIamMember.cs @@ -534,6 +534,241 @@ namespace Pulumi.Gcp.GkeBackup /// /// }); /// ``` + /// ### Gkebackup Restoreplan Gitops Mode + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var primary = new Gcp.Container.Cluster("primary", new() + /// { + /// Name = "gitops-mode-cluster", + /// Location = "us-central1", + /// InitialNodeCount = 1, + /// WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs + /// { + /// WorkloadPool = "my-project-name.svc.id.goog", + /// }, + /// AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs + /// { + /// GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs + /// { + /// Enabled = true, + /// }, + /// }, + /// DeletionProtection = "", + /// Network = "default", + /// Subnetwork = "default", + /// }); + /// + /// var basic = new Gcp.GkeBackup.BackupPlan("basic", new() + /// { + /// Name = "gitops-mode", + /// Cluster = primary.Id, + /// Location = "us-central1", + /// BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs + /// { + /// IncludeVolumeData = true, + /// IncludeSecrets = true, + /// AllNamespaces = true, + /// }, + /// }); + /// + /// var gitopsMode = new Gcp.GkeBackup.RestorePlan("gitops_mode", new() + /// { + /// Name = "gitops-mode", + /// Location = "us-central1", + /// BackupPlan = basic.Id, + /// Cluster = primary.Id, + /// RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs + /// { + /// AllNamespaces = true, + /// NamespacedResourceRestoreMode = "MERGE_SKIP_ON_CONFLICT", + /// VolumeDataRestorePolicy = "RESTORE_VOLUME_DATA_FROM_BACKUP", + /// ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs + /// { + /// AllGroupKinds = true, + /// }, + /// ClusterResourceConflictPolicy = "USE_EXISTING_VERSION", + /// }, + /// }); + /// + /// }); + /// ``` + /// ### Gkebackup Restoreplan Restore Order + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var primary = new Gcp.Container.Cluster("primary", new() + /// { + /// Name = "restore-order-cluster", + /// Location = "us-central1", + /// InitialNodeCount = 1, + /// WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs + /// { + /// WorkloadPool = "my-project-name.svc.id.goog", + /// }, + /// AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs + /// { + /// GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs + /// { + /// Enabled = true, + /// }, + /// }, + /// DeletionProtection = "", + /// Network = "default", + /// Subnetwork = "default", + /// }); + /// + /// var basic = new Gcp.GkeBackup.BackupPlan("basic", new() + /// { + /// Name = "restore-order", + /// Cluster = primary.Id, + /// Location = "us-central1", + /// BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs + /// { + /// IncludeVolumeData = true, + /// IncludeSecrets = true, + /// AllNamespaces = true, + /// }, + /// }); + /// + /// var restoreOrder = new Gcp.GkeBackup.RestorePlan("restore_order", new() + /// { + /// Name = "restore-order", + /// Location = "us-central1", + /// BackupPlan = basic.Id, + /// Cluster = primary.Id, + /// RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs + /// { + /// AllNamespaces = true, + /// NamespacedResourceRestoreMode = "FAIL_ON_CONFLICT", + /// VolumeDataRestorePolicy = "RESTORE_VOLUME_DATA_FROM_BACKUP", + /// ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs + /// { + /// AllGroupKinds = true, + /// }, + /// ClusterResourceConflictPolicy = "USE_EXISTING_VERSION", + /// RestoreOrder = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderArgs + /// { + /// GroupKindDependencies = new[] + /// { + /// new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs + /// { + /// Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindA", + /// }, + /// Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindB", + /// }, + /// }, + /// new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs + /// { + /// Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindB", + /// }, + /// Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindC", + /// }, + /// }, + /// }, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` + /// ### Gkebackup Restoreplan Volume Res + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var primary = new Gcp.Container.Cluster("primary", new() + /// { + /// Name = "volume-res-cluster", + /// Location = "us-central1", + /// InitialNodeCount = 1, + /// WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs + /// { + /// WorkloadPool = "my-project-name.svc.id.goog", + /// }, + /// AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs + /// { + /// GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs + /// { + /// Enabled = true, + /// }, + /// }, + /// DeletionProtection = "", + /// Network = "default", + /// Subnetwork = "default", + /// }); + /// + /// var basic = new Gcp.GkeBackup.BackupPlan("basic", new() + /// { + /// Name = "volume-res", + /// Cluster = primary.Id, + /// Location = "us-central1", + /// BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs + /// { + /// IncludeVolumeData = true, + /// IncludeSecrets = true, + /// AllNamespaces = true, + /// }, + /// }); + /// + /// var volumeRes = new Gcp.GkeBackup.RestorePlan("volume_res", new() + /// { + /// Name = "volume-res", + /// Location = "us-central1", + /// BackupPlan = basic.Id, + /// Cluster = primary.Id, + /// RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs + /// { + /// AllNamespaces = true, + /// NamespacedResourceRestoreMode = "FAIL_ON_CONFLICT", + /// VolumeDataRestorePolicy = "NO_VOLUME_DATA_RESTORATION", + /// ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs + /// { + /// AllGroupKinds = true, + /// }, + /// ClusterResourceConflictPolicy = "USE_EXISTING_VERSION", + /// VolumeDataRestorePolicyBindings = new[] + /// { + /// new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs + /// { + /// Policy = "RESTORE_VOLUME_DATA_FROM_BACKUP", + /// VolumeType = "GCE_PERSISTENT_DISK", + /// }, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/GkeBackup/RestorePlanIamPolicy.cs b/sdk/dotnet/GkeBackup/RestorePlanIamPolicy.cs index 91c6b3b307..1334ec8ea2 100644 --- a/sdk/dotnet/GkeBackup/RestorePlanIamPolicy.cs +++ b/sdk/dotnet/GkeBackup/RestorePlanIamPolicy.cs @@ -534,6 +534,241 @@ namespace Pulumi.Gcp.GkeBackup /// /// }); /// ``` + /// ### Gkebackup Restoreplan Gitops Mode + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var primary = new Gcp.Container.Cluster("primary", new() + /// { + /// Name = "gitops-mode-cluster", + /// Location = "us-central1", + /// InitialNodeCount = 1, + /// WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs + /// { + /// WorkloadPool = "my-project-name.svc.id.goog", + /// }, + /// AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs + /// { + /// GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs + /// { + /// Enabled = true, + /// }, + /// }, + /// DeletionProtection = "", + /// Network = "default", + /// Subnetwork = "default", + /// }); + /// + /// var basic = new Gcp.GkeBackup.BackupPlan("basic", new() + /// { + /// Name = "gitops-mode", + /// Cluster = primary.Id, + /// Location = "us-central1", + /// BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs + /// { + /// IncludeVolumeData = true, + /// IncludeSecrets = true, + /// AllNamespaces = true, + /// }, + /// }); + /// + /// var gitopsMode = new Gcp.GkeBackup.RestorePlan("gitops_mode", new() + /// { + /// Name = "gitops-mode", + /// Location = "us-central1", + /// BackupPlan = basic.Id, + /// Cluster = primary.Id, + /// RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs + /// { + /// AllNamespaces = true, + /// NamespacedResourceRestoreMode = "MERGE_SKIP_ON_CONFLICT", + /// VolumeDataRestorePolicy = "RESTORE_VOLUME_DATA_FROM_BACKUP", + /// ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs + /// { + /// AllGroupKinds = true, + /// }, + /// ClusterResourceConflictPolicy = "USE_EXISTING_VERSION", + /// }, + /// }); + /// + /// }); + /// ``` + /// ### Gkebackup Restoreplan Restore Order + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var primary = new Gcp.Container.Cluster("primary", new() + /// { + /// Name = "restore-order-cluster", + /// Location = "us-central1", + /// InitialNodeCount = 1, + /// WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs + /// { + /// WorkloadPool = "my-project-name.svc.id.goog", + /// }, + /// AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs + /// { + /// GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs + /// { + /// Enabled = true, + /// }, + /// }, + /// DeletionProtection = "", + /// Network = "default", + /// Subnetwork = "default", + /// }); + /// + /// var basic = new Gcp.GkeBackup.BackupPlan("basic", new() + /// { + /// Name = "restore-order", + /// Cluster = primary.Id, + /// Location = "us-central1", + /// BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs + /// { + /// IncludeVolumeData = true, + /// IncludeSecrets = true, + /// AllNamespaces = true, + /// }, + /// }); + /// + /// var restoreOrder = new Gcp.GkeBackup.RestorePlan("restore_order", new() + /// { + /// Name = "restore-order", + /// Location = "us-central1", + /// BackupPlan = basic.Id, + /// Cluster = primary.Id, + /// RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs + /// { + /// AllNamespaces = true, + /// NamespacedResourceRestoreMode = "FAIL_ON_CONFLICT", + /// VolumeDataRestorePolicy = "RESTORE_VOLUME_DATA_FROM_BACKUP", + /// ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs + /// { + /// AllGroupKinds = true, + /// }, + /// ClusterResourceConflictPolicy = "USE_EXISTING_VERSION", + /// RestoreOrder = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderArgs + /// { + /// GroupKindDependencies = new[] + /// { + /// new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs + /// { + /// Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindA", + /// }, + /// Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindB", + /// }, + /// }, + /// new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs + /// { + /// Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindB", + /// }, + /// Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs + /// { + /// ResourceGroup = "stable.example.com", + /// ResourceKind = "kindC", + /// }, + /// }, + /// }, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` + /// ### Gkebackup Restoreplan Volume Res + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var primary = new Gcp.Container.Cluster("primary", new() + /// { + /// Name = "volume-res-cluster", + /// Location = "us-central1", + /// InitialNodeCount = 1, + /// WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs + /// { + /// WorkloadPool = "my-project-name.svc.id.goog", + /// }, + /// AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs + /// { + /// GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs + /// { + /// Enabled = true, + /// }, + /// }, + /// DeletionProtection = "", + /// Network = "default", + /// Subnetwork = "default", + /// }); + /// + /// var basic = new Gcp.GkeBackup.BackupPlan("basic", new() + /// { + /// Name = "volume-res", + /// Cluster = primary.Id, + /// Location = "us-central1", + /// BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs + /// { + /// IncludeVolumeData = true, + /// IncludeSecrets = true, + /// AllNamespaces = true, + /// }, + /// }); + /// + /// var volumeRes = new Gcp.GkeBackup.RestorePlan("volume_res", new() + /// { + /// Name = "volume-res", + /// Location = "us-central1", + /// BackupPlan = basic.Id, + /// Cluster = primary.Id, + /// RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs + /// { + /// AllNamespaces = true, + /// NamespacedResourceRestoreMode = "FAIL_ON_CONFLICT", + /// VolumeDataRestorePolicy = "NO_VOLUME_DATA_RESTORATION", + /// ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs + /// { + /// AllGroupKinds = true, + /// }, + /// ClusterResourceConflictPolicy = "USE_EXISTING_VERSION", + /// VolumeDataRestorePolicyBindings = new[] + /// { + /// new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs + /// { + /// Policy = "RESTORE_VOLUME_DATA_FROM_BACKUP", + /// VolumeType = "GCE_PERSISTENT_DISK", + /// }, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Healthcare/DicomStore.cs b/sdk/dotnet/Healthcare/DicomStore.cs index 0f81ca5d78..2c91fd71d8 100644 --- a/sdk/dotnet/Healthcare/DicomStore.cs +++ b/sdk/dotnet/Healthcare/DicomStore.cs @@ -102,6 +102,7 @@ namespace Pulumi.Gcp.Healthcare /// NotificationConfig = new Gcp.Healthcare.Inputs.DicomStoreNotificationConfigArgs /// { /// PubsubTopic = topic.Id, + /// SendForBulkImport = true, /// }, /// Labels = /// { diff --git a/sdk/dotnet/Healthcare/FhirStore.cs b/sdk/dotnet/Healthcare/FhirStore.cs index 14b25acacf..5d2f96d5eb 100644 --- a/sdk/dotnet/Healthcare/FhirStore.cs +++ b/sdk/dotnet/Healthcare/FhirStore.cs @@ -53,9 +53,12 @@ namespace Pulumi.Gcp.Healthcare /// DisableResourceVersioning = false, /// EnableHistoryImport = false, /// DefaultSearchHandlingStrict = false, - /// NotificationConfig = new Gcp.Healthcare.Inputs.FhirStoreNotificationConfigArgs + /// NotificationConfigs = new[] /// { - /// PubsubTopic = topic.Id, + /// new Gcp.Healthcare.Inputs.FhirStoreNotificationConfigArgs + /// { + /// PubsubTopic = topic.Id, + /// }, /// }, /// Labels = /// { @@ -140,48 +143,6 @@ namespace Pulumi.Gcp.Healthcare /// /// }); /// ``` - /// ### Healthcare Fhir Store Notification Config - /// - /// ```csharp - /// using System.Collections.Generic; - /// using System.Linq; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var topic = new Gcp.PubSub.Topic("topic", new() - /// { - /// Name = "fhir-notifications", - /// }); - /// - /// var dataset = new Gcp.Healthcare.Dataset("dataset", new() - /// { - /// Name = "example-dataset", - /// Location = "us-central1", - /// }); - /// - /// var @default = new Gcp.Healthcare.FhirStore("default", new() - /// { - /// Name = "example-fhir-store", - /// Dataset = dataset.Id, - /// Version = "R4", - /// EnableUpdateCreate = false, - /// DisableReferentialIntegrity = false, - /// DisableResourceVersioning = false, - /// EnableHistoryImport = false, - /// Labels = - /// { - /// { "label1", "labelvalue1" }, - /// }, - /// NotificationConfig = new Gcp.Healthcare.Inputs.FhirStoreNotificationConfigArgs - /// { - /// PubsubTopic = topic.Id, - /// }, - /// }); - /// - /// }); - /// ``` /// ### Healthcare Fhir Store Notification Configs /// /// ```csharp @@ -212,7 +173,6 @@ namespace Pulumi.Gcp.Healthcare /// DisableReferentialIntegrity = false, /// DisableResourceVersioning = false, /// EnableHistoryImport = false, - /// EnableHistoryModifications = false, /// Labels = /// { /// { "label1", "labelvalue1" }, @@ -358,8 +318,11 @@ public partial class FhirStore : global::Pulumi.CustomResource public Output Name { get; private set; } = null!; /// + /// (Optional, Deprecated) /// A nested object resource /// Structure is documented below. + /// + /// > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. /// [Output("notificationConfig")] public Output NotificationConfig { get; private set; } = null!; @@ -561,8 +524,11 @@ public InputMap Labels public Input? Name { get; set; } /// + /// (Optional, Deprecated) /// A nested object resource /// Structure is documented below. + /// + /// > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. /// [Input("notificationConfig")] public Input? NotificationConfig { get; set; } @@ -736,8 +702,11 @@ public InputMap Labels public Input? Name { get; set; } /// + /// (Optional, Deprecated) /// A nested object resource /// Structure is documented below. + /// + /// > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. /// [Input("notificationConfig")] public Input? NotificationConfig { get; set; } diff --git a/sdk/dotnet/Healthcare/Inputs/DicomStoreNotificationConfigArgs.cs b/sdk/dotnet/Healthcare/Inputs/DicomStoreNotificationConfigArgs.cs index 366ccb52ac..f3709c99f8 100644 --- a/sdk/dotnet/Healthcare/Inputs/DicomStoreNotificationConfigArgs.cs +++ b/sdk/dotnet/Healthcare/Inputs/DicomStoreNotificationConfigArgs.cs @@ -23,6 +23,12 @@ public sealed class DicomStoreNotificationConfigArgs : global::Pulumi.ResourceAr [Input("pubsubTopic", required: true)] public Input PubsubTopic { get; set; } = null!; + /// + /// Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + /// + [Input("sendForBulkImport")] + public Input? SendForBulkImport { get; set; } + public DicomStoreNotificationConfigArgs() { } diff --git a/sdk/dotnet/Healthcare/Inputs/DicomStoreNotificationConfigGetArgs.cs b/sdk/dotnet/Healthcare/Inputs/DicomStoreNotificationConfigGetArgs.cs index 7c0b2fcf44..2f34a017b6 100644 --- a/sdk/dotnet/Healthcare/Inputs/DicomStoreNotificationConfigGetArgs.cs +++ b/sdk/dotnet/Healthcare/Inputs/DicomStoreNotificationConfigGetArgs.cs @@ -23,6 +23,12 @@ public sealed class DicomStoreNotificationConfigGetArgs : global::Pulumi.Resourc [Input("pubsubTopic", required: true)] public Input PubsubTopic { get; set; } = null!; + /// + /// Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + /// + [Input("sendForBulkImport")] + public Input? SendForBulkImport { get; set; } + public DicomStoreNotificationConfigGetArgs() { } diff --git a/sdk/dotnet/Healthcare/Outputs/DicomStoreNotificationConfig.cs b/sdk/dotnet/Healthcare/Outputs/DicomStoreNotificationConfig.cs index 14b4fbe2ff..eac0e6672e 100644 --- a/sdk/dotnet/Healthcare/Outputs/DicomStoreNotificationConfig.cs +++ b/sdk/dotnet/Healthcare/Outputs/DicomStoreNotificationConfig.cs @@ -22,11 +22,19 @@ public sealed class DicomStoreNotificationConfig /// Cloud Pub/Sub topic. Not having adequate permissions will cause the calls that send notifications to fail. /// public readonly string PubsubTopic; + /// + /// Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + /// + public readonly bool? SendForBulkImport; [OutputConstructor] - private DicomStoreNotificationConfig(string pubsubTopic) + private DicomStoreNotificationConfig( + string pubsubTopic, + + bool? sendForBulkImport) { PubsubTopic = pubsubTopic; + SendForBulkImport = sendForBulkImport; } } } diff --git a/sdk/dotnet/IntegrationConnectors/EndpointAttachment.cs b/sdk/dotnet/IntegrationConnectors/EndpointAttachment.cs index ed7a82b8e0..78e4fdf7e7 100644 --- a/sdk/dotnet/IntegrationConnectors/EndpointAttachment.cs +++ b/sdk/dotnet/IntegrationConnectors/EndpointAttachment.cs @@ -90,6 +90,12 @@ public partial class EndpointAttachment : global::Pulumi.CustomResource [Output("effectiveLabels")] public Output> EffectiveLabels { get; private set; } = null!; + /// + /// Enable global access for endpoint attachment. + /// + [Output("endpointGlobalAccess")] + public Output EndpointGlobalAccess { get; private set; } = null!; + /// /// The Private Service Connect connection endpoint ip. /// @@ -203,6 +209,12 @@ public sealed class EndpointAttachmentArgs : global::Pulumi.ResourceArgs [Input("description")] public Input? Description { get; set; } + /// + /// Enable global access for endpoint attachment. + /// + [Input("endpointGlobalAccess")] + public Input? EndpointGlobalAccess { get; set; } + [Input("labels")] private InputMap? _labels; @@ -282,6 +294,12 @@ public InputMap EffectiveLabels } } + /// + /// Enable global access for endpoint attachment. + /// + [Input("endpointGlobalAccess")] + public Input? EndpointGlobalAccess { get; set; } + /// /// The Private Service Connect connection endpoint ip. /// diff --git a/sdk/dotnet/Kms/CryptoKey.cs b/sdk/dotnet/Kms/CryptoKey.cs index 6715d14572..16c0847f8b 100644 --- a/sdk/dotnet/Kms/CryptoKey.cs +++ b/sdk/dotnet/Kms/CryptoKey.cs @@ -191,7 +191,8 @@ public partial class CryptoKey : global::Pulumi.CustomResource /// /// If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - /// You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + /// You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + /// or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. /// [Output("skipInitialVersionCreation")] public Output SkipInitialVersionCreation { get; private set; } = null!; @@ -325,7 +326,8 @@ public InputMap Labels /// /// If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - /// You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + /// You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + /// or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. /// [Input("skipInitialVersionCreation")] public Input? SkipInitialVersionCreation { get; set; } @@ -463,7 +465,8 @@ public InputMap PulumiLabels /// /// If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - /// You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + /// You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + /// or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. /// [Input("skipInitialVersionCreation")] public Input? SkipInitialVersionCreation { get; set; } diff --git a/sdk/dotnet/Netapp/Inputs/VolumeBackupConfigArgs.cs b/sdk/dotnet/Netapp/Inputs/VolumeBackupConfigArgs.cs new file mode 100644 index 0000000000..e816c16a9f --- /dev/null +++ b/sdk/dotnet/Netapp/Inputs/VolumeBackupConfigArgs.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.Netapp.Inputs +{ + + public sealed class VolumeBackupConfigArgs : global::Pulumi.ResourceArgs + { + [Input("backupPolicies")] + private InputList? _backupPolicies; + + /// + /// Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + /// + public InputList BackupPolicies + { + get => _backupPolicies ?? (_backupPolicies = new InputList()); + set => _backupPolicies = value; + } + + /// + /// ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + /// Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + /// + [Input("backupVault")] + public Input? BackupVault { get; set; } + + /// + /// When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. + /// + [Input("scheduledBackupEnabled")] + public Input? ScheduledBackupEnabled { get; set; } + + public VolumeBackupConfigArgs() + { + } + public static new VolumeBackupConfigArgs Empty => new VolumeBackupConfigArgs(); + } +} diff --git a/sdk/dotnet/Netapp/Inputs/VolumeBackupConfigGetArgs.cs b/sdk/dotnet/Netapp/Inputs/VolumeBackupConfigGetArgs.cs new file mode 100644 index 0000000000..759ebf591a --- /dev/null +++ b/sdk/dotnet/Netapp/Inputs/VolumeBackupConfigGetArgs.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.Netapp.Inputs +{ + + public sealed class VolumeBackupConfigGetArgs : global::Pulumi.ResourceArgs + { + [Input("backupPolicies")] + private InputList? _backupPolicies; + + /// + /// Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + /// + public InputList BackupPolicies + { + get => _backupPolicies ?? (_backupPolicies = new InputList()); + set => _backupPolicies = value; + } + + /// + /// ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + /// Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + /// + [Input("backupVault")] + public Input? BackupVault { get; set; } + + /// + /// When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. + /// + [Input("scheduledBackupEnabled")] + public Input? ScheduledBackupEnabled { get; set; } + + public VolumeBackupConfigGetArgs() + { + } + public static new VolumeBackupConfigGetArgs Empty => new VolumeBackupConfigGetArgs(); + } +} diff --git a/sdk/dotnet/Netapp/Outputs/VolumeBackupConfig.cs b/sdk/dotnet/Netapp/Outputs/VolumeBackupConfig.cs new file mode 100644 index 0000000000..55a348b949 --- /dev/null +++ b/sdk/dotnet/Netapp/Outputs/VolumeBackupConfig.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.Netapp.Outputs +{ + + [OutputType] + public sealed class VolumeBackupConfig + { + /// + /// Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + /// + public readonly ImmutableArray BackupPolicies; + /// + /// ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + /// Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + /// + public readonly string? BackupVault; + /// + /// When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. + /// + public readonly bool? ScheduledBackupEnabled; + + [OutputConstructor] + private VolumeBackupConfig( + ImmutableArray backupPolicies, + + string? backupVault, + + bool? scheduledBackupEnabled) + { + BackupPolicies = backupPolicies; + BackupVault = backupVault; + ScheduledBackupEnabled = scheduledBackupEnabled; + } + } +} diff --git a/sdk/dotnet/Netapp/Volume.cs b/sdk/dotnet/Netapp/Volume.cs index 475a2db129..cca11c72ce 100644 --- a/sdk/dotnet/Netapp/Volume.cs +++ b/sdk/dotnet/Netapp/Volume.cs @@ -99,6 +99,13 @@ public partial class Volume : global::Pulumi.CustomResource [Output("activeDirectory")] public Output ActiveDirectory { get; private set; } = null!; + /// + /// Backup configuration for the volume. + /// Structure is documented below. + /// + [Output("backupConfig")] + public Output BackupConfig { get; private set; } = null!; + /// /// Capacity of the volume (in GiB). /// @@ -368,6 +375,13 @@ public static Volume Get(string name, Input id, VolumeState? state = nul public sealed class VolumeArgs : global::Pulumi.ResourceArgs { + /// + /// Backup configuration for the volume. + /// Structure is documented below. + /// + [Input("backupConfig")] + public Input? BackupConfig { get; set; } + /// /// Capacity of the volume (in GiB). /// @@ -538,6 +552,13 @@ public sealed class VolumeState : global::Pulumi.ResourceArgs [Input("activeDirectory")] public Input? ActiveDirectory { get; set; } + /// + /// Backup configuration for the volume. + /// Structure is documented below. + /// + [Input("backupConfig")] + public Input? BackupConfig { get; set; } + /// /// Capacity of the volume (in GiB). /// diff --git a/sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesAutoCapacityDrainArgs.cs b/sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesAutoCapacityDrainArgs.cs new file mode 100644 index 0000000000..30624cabe7 --- /dev/null +++ b/sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesAutoCapacityDrainArgs.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.NetworkServices.Inputs +{ + + public sealed class ServiceLbPoliciesAutoCapacityDrainArgs : global::Pulumi.ResourceArgs + { + /// + /// Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + /// + [Input("enable")] + public Input? Enable { get; set; } + + public ServiceLbPoliciesAutoCapacityDrainArgs() + { + } + public static new ServiceLbPoliciesAutoCapacityDrainArgs Empty => new ServiceLbPoliciesAutoCapacityDrainArgs(); + } +} diff --git a/sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesAutoCapacityDrainGetArgs.cs b/sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesAutoCapacityDrainGetArgs.cs new file mode 100644 index 0000000000..48d6af3f66 --- /dev/null +++ b/sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesAutoCapacityDrainGetArgs.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.NetworkServices.Inputs +{ + + public sealed class ServiceLbPoliciesAutoCapacityDrainGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + /// + [Input("enable")] + public Input? Enable { get; set; } + + public ServiceLbPoliciesAutoCapacityDrainGetArgs() + { + } + public static new ServiceLbPoliciesAutoCapacityDrainGetArgs Empty => new ServiceLbPoliciesAutoCapacityDrainGetArgs(); + } +} diff --git a/sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesFailoverConfigArgs.cs b/sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesFailoverConfigArgs.cs new file mode 100644 index 0000000000..84e79ad67c --- /dev/null +++ b/sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesFailoverConfigArgs.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.NetworkServices.Inputs +{ + + public sealed class ServiceLbPoliciesFailoverConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + /// + [Input("failoverHealthThreshold", required: true)] + public Input FailoverHealthThreshold { get; set; } = null!; + + public ServiceLbPoliciesFailoverConfigArgs() + { + } + public static new ServiceLbPoliciesFailoverConfigArgs Empty => new ServiceLbPoliciesFailoverConfigArgs(); + } +} diff --git a/sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesFailoverConfigGetArgs.cs b/sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesFailoverConfigGetArgs.cs new file mode 100644 index 0000000000..0d8cf0cbc2 --- /dev/null +++ b/sdk/dotnet/NetworkServices/Inputs/ServiceLbPoliciesFailoverConfigGetArgs.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.NetworkServices.Inputs +{ + + public sealed class ServiceLbPoliciesFailoverConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + /// + [Input("failoverHealthThreshold", required: true)] + public Input FailoverHealthThreshold { get; set; } = null!; + + public ServiceLbPoliciesFailoverConfigGetArgs() + { + } + public static new ServiceLbPoliciesFailoverConfigGetArgs Empty => new ServiceLbPoliciesFailoverConfigGetArgs(); + } +} diff --git a/sdk/dotnet/NetworkServices/Outputs/ServiceLbPoliciesAutoCapacityDrain.cs b/sdk/dotnet/NetworkServices/Outputs/ServiceLbPoliciesAutoCapacityDrain.cs new file mode 100644 index 0000000000..0c05176e87 --- /dev/null +++ b/sdk/dotnet/NetworkServices/Outputs/ServiceLbPoliciesAutoCapacityDrain.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.NetworkServices.Outputs +{ + + [OutputType] + public sealed class ServiceLbPoliciesAutoCapacityDrain + { + /// + /// Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + /// + public readonly bool? Enable; + + [OutputConstructor] + private ServiceLbPoliciesAutoCapacityDrain(bool? enable) + { + Enable = enable; + } + } +} diff --git a/sdk/dotnet/NetworkServices/Outputs/ServiceLbPoliciesFailoverConfig.cs b/sdk/dotnet/NetworkServices/Outputs/ServiceLbPoliciesFailoverConfig.cs new file mode 100644 index 0000000000..160ec7588e --- /dev/null +++ b/sdk/dotnet/NetworkServices/Outputs/ServiceLbPoliciesFailoverConfig.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.NetworkServices.Outputs +{ + + [OutputType] + public sealed class ServiceLbPoliciesFailoverConfig + { + /// + /// Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + /// + public readonly int FailoverHealthThreshold; + + [OutputConstructor] + private ServiceLbPoliciesFailoverConfig(int failoverHealthThreshold) + { + FailoverHealthThreshold = failoverHealthThreshold; + } + } +} diff --git a/sdk/dotnet/NetworkServices/ServiceLbPolicies.cs b/sdk/dotnet/NetworkServices/ServiceLbPolicies.cs new file mode 100644 index 0000000000..403deeaa50 --- /dev/null +++ b/sdk/dotnet/NetworkServices/ServiceLbPolicies.cs @@ -0,0 +1,419 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.NetworkServices +{ + /// + /// ## Example Usage + /// + /// ### Network Services Service Lb Policies Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var @default = new Gcp.NetworkServices.ServiceLbPolicies("default", new() + /// { + /// Name = "my-lb-policy", + /// Location = "global", + /// }); + /// + /// }); + /// ``` + /// ### Network Services Service Lb Policies Advanced + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var @default = new Gcp.NetworkServices.ServiceLbPolicies("default", new() + /// { + /// Name = "my-lb-policy", + /// Location = "global", + /// Description = "my description", + /// LoadBalancingAlgorithm = "SPRAY_TO_REGION", + /// AutoCapacityDrain = new Gcp.NetworkServices.Inputs.ServiceLbPoliciesAutoCapacityDrainArgs + /// { + /// Enable = true, + /// }, + /// FailoverConfig = new Gcp.NetworkServices.Inputs.ServiceLbPoliciesFailoverConfigArgs + /// { + /// FailoverHealthThreshold = 70, + /// }, + /// Labels = + /// { + /// { "foo", "bar" }, + /// }, + /// }); + /// + /// var defaultBackendService = new Gcp.Compute.BackendService("default", new() + /// { + /// Name = "my-lb-backend", + /// Description = "my description", + /// LoadBalancingScheme = "INTERNAL_SELF_MANAGED", + /// Protocol = "HTTP", + /// ServiceLbPolicy = @default.Id.Apply(id => $"//networkservices.googleapis.com/{id}"), + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// ServiceLbPolicies can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}}` + /// + /// * `{{project}}/{{location}}/{{name}}` + /// + /// * `{{location}}/{{name}}` + /// + /// When using the `pulumi import` command, ServiceLbPolicies can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{project}}/{{location}}/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{location}}/{{name}} + /// ``` + /// + [GcpResourceType("gcp:networkservices/serviceLbPolicies:ServiceLbPolicies")] + public partial class ServiceLbPolicies : global::Pulumi.CustomResource + { + /// + /// Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + /// Structure is documented below. + /// + [Output("autoCapacityDrain")] + public Output AutoCapacityDrain { get; private set; } = null!; + + /// + /// Time the ServiceLbPolicy was created in UTC. + /// + [Output("createTime")] + public Output CreateTime { get; private set; } = null!; + + /// + /// A free-text description of the resource. Max length 1024 characters. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + /// + [Output("effectiveLabels")] + public Output> EffectiveLabels { get; private set; } = null!; + + /// + /// Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + /// Structure is documented below. + /// + [Output("failoverConfig")] + public Output FailoverConfig { get; private set; } = null!; + + /// + /// Set of label tags associated with the ServiceLbPolicy resource. + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + [Output("labels")] + public Output?> Labels { get; private set; } = null!; + + /// + /// The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + /// Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + /// + [Output("loadBalancingAlgorithm")] + public Output LoadBalancingAlgorithm { get; private set; } = null!; + + /// + /// The location of the service lb policy. + /// + /// + /// - - - + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// The combination of labels configured directly on the resource + /// and default labels configured on the provider. + /// + [Output("pulumiLabels")] + public Output> PulumiLabels { get; private set; } = null!; + + /// + /// Time the ServiceLbPolicy was updated in UTC. + /// + [Output("updateTime")] + public Output UpdateTime { get; private set; } = null!; + + + /// + /// Create a ServiceLbPolicies 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 ServiceLbPolicies(string name, ServiceLbPoliciesArgs args, CustomResourceOptions? options = null) + : base("gcp:networkservices/serviceLbPolicies:ServiceLbPolicies", name, args ?? new ServiceLbPoliciesArgs(), MakeResourceOptions(options, "")) + { + } + + private ServiceLbPolicies(string name, Input id, ServiceLbPoliciesState? state = null, CustomResourceOptions? options = null) + : base("gcp:networkservices/serviceLbPolicies:ServiceLbPolicies", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + AdditionalSecretOutputs = + { + "effectiveLabels", + "pulumiLabels", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing ServiceLbPolicies 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 ServiceLbPolicies Get(string name, Input id, ServiceLbPoliciesState? state = null, CustomResourceOptions? options = null) + { + return new ServiceLbPolicies(name, id, state, options); + } + } + + public sealed class ServiceLbPoliciesArgs : global::Pulumi.ResourceArgs + { + /// + /// Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + /// Structure is documented below. + /// + [Input("autoCapacityDrain")] + public Input? AutoCapacityDrain { get; set; } + + /// + /// A free-text description of the resource. Max length 1024 characters. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + /// Structure is documented below. + /// + [Input("failoverConfig")] + public Input? FailoverConfig { get; set; } + + [Input("labels")] + private InputMap? _labels; + + /// + /// Set of label tags associated with the ServiceLbPolicy resource. + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + /// Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + /// + [Input("loadBalancingAlgorithm")] + public Input? LoadBalancingAlgorithm { get; set; } + + /// + /// The location of the service lb policy. + /// + /// + /// - - - + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + public ServiceLbPoliciesArgs() + { + } + public static new ServiceLbPoliciesArgs Empty => new ServiceLbPoliciesArgs(); + } + + public sealed class ServiceLbPoliciesState : global::Pulumi.ResourceArgs + { + /// + /// Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + /// Structure is documented below. + /// + [Input("autoCapacityDrain")] + public Input? AutoCapacityDrain { get; set; } + + /// + /// Time the ServiceLbPolicy was created in UTC. + /// + [Input("createTime")] + public Input? CreateTime { get; set; } + + /// + /// A free-text description of the resource. Max length 1024 characters. + /// + [Input("description")] + public Input? Description { get; set; } + + [Input("effectiveLabels")] + private InputMap? _effectiveLabels; + + /// + /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + /// + public InputMap EffectiveLabels + { + get => _effectiveLabels ?? (_effectiveLabels = new InputMap()); + set + { + var emptySecret = Output.CreateSecret(ImmutableDictionary.Create()); + _effectiveLabels = Output.All(value, emptySecret).Apply(v => v[0]); + } + } + + /// + /// Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + /// Structure is documented below. + /// + [Input("failoverConfig")] + public Input? FailoverConfig { get; set; } + + [Input("labels")] + private InputMap? _labels; + + /// + /// Set of label tags associated with the ServiceLbPolicy resource. + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + /// Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + /// + [Input("loadBalancingAlgorithm")] + public Input? LoadBalancingAlgorithm { get; set; } + + /// + /// The location of the service lb policy. + /// + /// + /// - - - + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + [Input("pulumiLabels")] + private InputMap? _pulumiLabels; + + /// + /// The combination of labels configured directly on the resource + /// and default labels configured on the provider. + /// + public InputMap PulumiLabels + { + get => _pulumiLabels ?? (_pulumiLabels = new InputMap()); + set + { + var emptySecret = Output.CreateSecret(ImmutableDictionary.Create()); + _pulumiLabels = Output.All(value, emptySecret).Apply(v => v[0]); + } + } + + /// + /// Time the ServiceLbPolicy was updated in UTC. + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public ServiceLbPoliciesState() + { + } + public static new ServiceLbPoliciesState Empty => new ServiceLbPoliciesState(); + } +} diff --git a/sdk/dotnet/Provider.cs b/sdk/dotnet/Provider.cs index e4214c47f3..a37c84057f 100644 --- a/sdk/dotnet/Provider.cs +++ b/sdk/dotnet/Provider.cs @@ -429,6 +429,9 @@ public partial class Provider : global::Pulumi.ProviderResource [Output("securityCenterCustomEndpoint")] public Output SecurityCenterCustomEndpoint { get; private set; } = null!; + [Output("securityCenterManagementCustomEndpoint")] + public Output SecurityCenterManagementCustomEndpoint { get; private set; } = null!; + [Output("securityScannerCustomEndpoint")] public Output SecurityScannerCustomEndpoint { get; private set; } = null!; @@ -989,6 +992,9 @@ public InputList Scopes [Input("securityCenterCustomEndpoint")] public Input? SecurityCenterCustomEndpoint { get; set; } + [Input("securityCenterManagementCustomEndpoint")] + public Input? SecurityCenterManagementCustomEndpoint { get; set; } + [Input("securityScannerCustomEndpoint")] public Input? SecurityScannerCustomEndpoint { get; set; } diff --git a/sdk/dotnet/Redis/Cluster.cs b/sdk/dotnet/Redis/Cluster.cs index 1625d80999..5fef6720c9 100644 --- a/sdk/dotnet/Redis/Cluster.cs +++ b/sdk/dotnet/Redis/Cluster.cs @@ -80,6 +80,77 @@ namespace Pulumi.Gcp.Redis /// { /// { "maxmemory-policy", "volatile-ttl" }, /// }, + /// ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs + /// { + /// Mode = "MULTI_ZONE", + /// }, + /// }, new CustomResourceOptions + /// { + /// DependsOn = + /// { + /// @default, + /// }, + /// }); + /// + /// }); + /// ``` + /// ### Redis Cluster Ha Single Zone + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var producerNet = new Gcp.Compute.Network("producer_net", new() + /// { + /// Name = "mynetwork", + /// AutoCreateSubnetworks = false, + /// }); + /// + /// var producerSubnet = new Gcp.Compute.Subnetwork("producer_subnet", new() + /// { + /// Name = "mysubnet", + /// IpCidrRange = "10.0.0.248/29", + /// Region = "us-central1", + /// Network = producerNet.Id, + /// }); + /// + /// var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy("default", new() + /// { + /// Name = "mypolicy", + /// Location = "us-central1", + /// ServiceClass = "gcp-memorystore-redis", + /// Description = "my basic service connection policy", + /// Network = producerNet.Id, + /// PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs + /// { + /// Subnetworks = new[] + /// { + /// producerSubnet.Id, + /// }, + /// }, + /// }); + /// + /// var cluster_ha_single_zone = new Gcp.Redis.Cluster("cluster-ha-single-zone", new() + /// { + /// Name = "ha-cluster-single-zone", + /// ShardCount = 3, + /// PscConfigs = new[] + /// { + /// new Gcp.Redis.Inputs.ClusterPscConfigArgs + /// { + /// Network = producerNet.Id, + /// }, + /// }, + /// Region = "us-central1", + /// ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs + /// { + /// Mode = "SINGLE_ZONE", + /// Zone = "us-central1-f", + /// }, /// }, new CustomResourceOptions /// { /// DependsOn = @@ -247,6 +318,12 @@ public partial class Cluster : global::Pulumi.CustomResource [Output("uid")] public Output Uid { get; private set; } = null!; + /// + /// Immutable. Zone distribution config for Memorystore Redis cluster. + /// + [Output("zoneDistributionConfig")] + public Output ZoneDistributionConfig { get; private set; } = null!; + /// /// Create a Cluster resource with the given unique name, arguments, and options. @@ -373,6 +450,12 @@ public InputMap RedisConfigs [Input("transitEncryptionMode")] public Input? TransitEncryptionMode { get; set; } + /// + /// Immutable. Zone distribution config for Memorystore Redis cluster. + /// + [Input("zoneDistributionConfig")] + public Input? ZoneDistributionConfig { get; set; } + public ClusterArgs() { } @@ -534,6 +617,12 @@ public InputList StateInfos [Input("uid")] public Input? Uid { get; set; } + /// + /// Immutable. Zone distribution config for Memorystore Redis cluster. + /// + [Input("zoneDistributionConfig")] + public Input? ZoneDistributionConfig { get; set; } + public ClusterState() { } diff --git a/sdk/dotnet/Redis/Inputs/ClusterZoneDistributionConfigArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterZoneDistributionConfigArgs.cs new file mode 100644 index 0000000000..eebdc033d2 --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterZoneDistributionConfigArgs.cs @@ -0,0 +1,34 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Redis.Inputs +{ + + public sealed class ClusterZoneDistributionConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// Immutable. The mode for zone distribution for Memorystore Redis cluster. + /// If not provided, MULTI_ZONE will be used as default + /// Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`. + /// + [Input("mode")] + public Input? Mode { get; set; } + + /// + /// Immutable. The zone for single zone Memorystore Redis cluster. + /// + [Input("zone")] + public Input? Zone { get; set; } + + public ClusterZoneDistributionConfigArgs() + { + } + public static new ClusterZoneDistributionConfigArgs Empty => new ClusterZoneDistributionConfigArgs(); + } +} diff --git a/sdk/dotnet/Redis/Inputs/ClusterZoneDistributionConfigGetArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterZoneDistributionConfigGetArgs.cs new file mode 100644 index 0000000000..16e599514b --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterZoneDistributionConfigGetArgs.cs @@ -0,0 +1,34 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Redis.Inputs +{ + + public sealed class ClusterZoneDistributionConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Immutable. The mode for zone distribution for Memorystore Redis cluster. + /// If not provided, MULTI_ZONE will be used as default + /// Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`. + /// + [Input("mode")] + public Input? Mode { get; set; } + + /// + /// Immutable. The zone for single zone Memorystore Redis cluster. + /// + [Input("zone")] + public Input? Zone { get; set; } + + public ClusterZoneDistributionConfigGetArgs() + { + } + public static new ClusterZoneDistributionConfigGetArgs Empty => new ClusterZoneDistributionConfigGetArgs(); + } +} diff --git a/sdk/dotnet/Redis/Outputs/ClusterZoneDistributionConfig.cs b/sdk/dotnet/Redis/Outputs/ClusterZoneDistributionConfig.cs new file mode 100644 index 0000000000..f8349a3366 --- /dev/null +++ b/sdk/dotnet/Redis/Outputs/ClusterZoneDistributionConfig.cs @@ -0,0 +1,37 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Redis.Outputs +{ + + [OutputType] + public sealed class ClusterZoneDistributionConfig + { + /// + /// Immutable. The mode for zone distribution for Memorystore Redis cluster. + /// If not provided, MULTI_ZONE will be used as default + /// Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`. + /// + public readonly string? Mode; + /// + /// Immutable. The zone for single zone Memorystore Redis cluster. + /// + public readonly string? Zone; + + [OutputConstructor] + private ClusterZoneDistributionConfig( + string? mode, + + string? zone) + { + Mode = mode; + Zone = zone; + } + } +} diff --git a/sdk/dotnet/SecretManager/Inputs/SecretIamBindingConditionArgs.cs b/sdk/dotnet/SecretManager/Inputs/SecretIamBindingConditionArgs.cs index 5926aacf6c..e016ea8e69 100644 --- a/sdk/dotnet/SecretManager/Inputs/SecretIamBindingConditionArgs.cs +++ b/sdk/dotnet/SecretManager/Inputs/SecretIamBindingConditionArgs.cs @@ -15,9 +15,15 @@ public sealed class SecretIamBindingConditionArgs : global::Pulumi.ResourceArgs [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/SecretManager/Inputs/SecretIamBindingConditionGetArgs.cs b/sdk/dotnet/SecretManager/Inputs/SecretIamBindingConditionGetArgs.cs index 051ceb0dc8..57b84b6a0c 100644 --- a/sdk/dotnet/SecretManager/Inputs/SecretIamBindingConditionGetArgs.cs +++ b/sdk/dotnet/SecretManager/Inputs/SecretIamBindingConditionGetArgs.cs @@ -15,9 +15,15 @@ public sealed class SecretIamBindingConditionGetArgs : global::Pulumi.ResourceAr [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/SecretManager/Inputs/SecretIamMemberConditionArgs.cs b/sdk/dotnet/SecretManager/Inputs/SecretIamMemberConditionArgs.cs index 72dd614361..081585dd36 100644 --- a/sdk/dotnet/SecretManager/Inputs/SecretIamMemberConditionArgs.cs +++ b/sdk/dotnet/SecretManager/Inputs/SecretIamMemberConditionArgs.cs @@ -15,9 +15,15 @@ public sealed class SecretIamMemberConditionArgs : global::Pulumi.ResourceArgs [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/SecretManager/Inputs/SecretIamMemberConditionGetArgs.cs b/sdk/dotnet/SecretManager/Inputs/SecretIamMemberConditionGetArgs.cs index 15186990b2..7bf100dc74 100644 --- a/sdk/dotnet/SecretManager/Inputs/SecretIamMemberConditionGetArgs.cs +++ b/sdk/dotnet/SecretManager/Inputs/SecretIamMemberConditionGetArgs.cs @@ -15,9 +15,15 @@ public sealed class SecretIamMemberConditionGetArgs : global::Pulumi.ResourceArg [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/SecretManager/Outputs/SecretIamBindingCondition.cs b/sdk/dotnet/SecretManager/Outputs/SecretIamBindingCondition.cs index 1c7b7ac519..81c4aebc87 100644 --- a/sdk/dotnet/SecretManager/Outputs/SecretIamBindingCondition.cs +++ b/sdk/dotnet/SecretManager/Outputs/SecretIamBindingCondition.cs @@ -14,7 +14,13 @@ namespace Pulumi.Gcp.SecretManager.Outputs public sealed class SecretIamBindingCondition { 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/SecretManager/Outputs/SecretIamMemberCondition.cs b/sdk/dotnet/SecretManager/Outputs/SecretIamMemberCondition.cs index d431a216a2..bd48919cd4 100644 --- a/sdk/dotnet/SecretManager/Outputs/SecretIamMemberCondition.cs +++ b/sdk/dotnet/SecretManager/Outputs/SecretIamMemberCondition.cs @@ -14,7 +14,13 @@ namespace Pulumi.Gcp.SecretManager.Outputs public sealed class SecretIamMemberCondition { 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/SecretManager/SecretIamBinding.cs b/sdk/dotnet/SecretManager/SecretIamBinding.cs index 26d3885402..d5d30a4e30 100644 --- a/sdk/dotnet/SecretManager/SecretIamBinding.cs +++ b/sdk/dotnet/SecretManager/SecretIamBinding.cs @@ -24,6 +24,8 @@ namespace Pulumi.Gcp.SecretManager /// /// > **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. /// + /// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. + /// /// ## gcp.secretmanager.SecretIamPolicy /// /// ```csharp @@ -59,6 +61,46 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() + /// { + /// Bindings = new[] + /// { + /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs + /// { + /// Role = "roles/secretmanager.secretAccessor", + /// 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.SecretManager.SecretIamPolicy("policy", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), + /// }); + /// + /// }); + /// ``` /// ## gcp.secretmanager.SecretIamBinding /// /// ```csharp @@ -83,6 +125,35 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var binding = new Gcp.SecretManager.SecretIamBinding("binding", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// Role = "roles/secretmanager.secretAccessor", + /// Members = new[] + /// { + /// "user:jane@example.com", + /// }, + /// Condition = new Gcp.SecretManager.Inputs.SecretIamBindingConditionArgs + /// { + /// Title = "expires_after_2019_12_31", + /// Description = "Expiring at midnight of 2019-12-31", + /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", + /// }, + /// }); + /// + /// }); + /// ``` /// ## gcp.secretmanager.SecretIamMember /// /// ```csharp @@ -104,6 +175,33 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var member = new Gcp.SecretManager.SecretIamMember("member", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// Role = "roles/secretmanager.secretAccessor", + /// Member = "user:jane@example.com", + /// Condition = new Gcp.SecretManager.Inputs.SecretIamMemberConditionArgs + /// { + /// Title = "expires_after_2019_12_31", + /// Description = "Expiring at midnight of 2019-12-31", + /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", + /// }, + /// }); + /// + /// }); + /// ``` + /// /// ## gcp.secretmanager.SecretIamPolicy /// /// ```csharp @@ -139,6 +237,46 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() + /// { + /// Bindings = new[] + /// { + /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs + /// { + /// Role = "roles/secretmanager.secretAccessor", + /// 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.SecretManager.SecretIamPolicy("policy", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), + /// }); + /// + /// }); + /// ``` /// ## gcp.secretmanager.SecretIamBinding /// /// ```csharp @@ -163,6 +301,35 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var binding = new Gcp.SecretManager.SecretIamBinding("binding", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// Role = "roles/secretmanager.secretAccessor", + /// Members = new[] + /// { + /// "user:jane@example.com", + /// }, + /// Condition = new Gcp.SecretManager.Inputs.SecretIamBindingConditionArgs + /// { + /// Title = "expires_after_2019_12_31", + /// Description = "Expiring at midnight of 2019-12-31", + /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", + /// }, + /// }); + /// + /// }); + /// ``` /// ## gcp.secretmanager.SecretIamMember /// /// ```csharp @@ -184,6 +351,33 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var member = new Gcp.SecretManager.SecretIamMember("member", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// Role = "roles/secretmanager.secretAccessor", + /// Member = "user:jane@example.com", + /// Condition = new Gcp.SecretManager.Inputs.SecretIamMemberConditionArgs + /// { + /// Title = "expires_after_2019_12_31", + /// Description = "Expiring at midnight of 2019-12-31", + /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", + /// }, + /// }); + /// + /// }); + /// ``` + /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms: @@ -223,6 +417,10 @@ namespace Pulumi.Gcp.SecretManager [GcpResourceType("gcp:secretmanager/secretIamBinding:SecretIamBinding")] public partial class SecretIamBinding : 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!; @@ -312,6 +510,10 @@ public static SecretIamBinding Get(string name, Input id, SecretIamBindi public sealed class SecretIamBindingArgs : 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; } @@ -363,6 +565,10 @@ public SecretIamBindingArgs() public sealed class SecretIamBindingState : 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; } diff --git a/sdk/dotnet/SecretManager/SecretIamMember.cs b/sdk/dotnet/SecretManager/SecretIamMember.cs index 031a3754b1..3f3ce2dd8f 100644 --- a/sdk/dotnet/SecretManager/SecretIamMember.cs +++ b/sdk/dotnet/SecretManager/SecretIamMember.cs @@ -24,6 +24,8 @@ namespace Pulumi.Gcp.SecretManager /// /// > **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. /// + /// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. + /// /// ## gcp.secretmanager.SecretIamPolicy /// /// ```csharp @@ -59,6 +61,46 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() + /// { + /// Bindings = new[] + /// { + /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs + /// { + /// Role = "roles/secretmanager.secretAccessor", + /// 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.SecretManager.SecretIamPolicy("policy", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), + /// }); + /// + /// }); + /// ``` /// ## gcp.secretmanager.SecretIamBinding /// /// ```csharp @@ -83,6 +125,35 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var binding = new Gcp.SecretManager.SecretIamBinding("binding", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// Role = "roles/secretmanager.secretAccessor", + /// Members = new[] + /// { + /// "user:jane@example.com", + /// }, + /// Condition = new Gcp.SecretManager.Inputs.SecretIamBindingConditionArgs + /// { + /// Title = "expires_after_2019_12_31", + /// Description = "Expiring at midnight of 2019-12-31", + /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", + /// }, + /// }); + /// + /// }); + /// ``` /// ## gcp.secretmanager.SecretIamMember /// /// ```csharp @@ -104,6 +175,33 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var member = new Gcp.SecretManager.SecretIamMember("member", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// Role = "roles/secretmanager.secretAccessor", + /// Member = "user:jane@example.com", + /// Condition = new Gcp.SecretManager.Inputs.SecretIamMemberConditionArgs + /// { + /// Title = "expires_after_2019_12_31", + /// Description = "Expiring at midnight of 2019-12-31", + /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", + /// }, + /// }); + /// + /// }); + /// ``` + /// /// ## gcp.secretmanager.SecretIamPolicy /// /// ```csharp @@ -139,6 +237,46 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() + /// { + /// Bindings = new[] + /// { + /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs + /// { + /// Role = "roles/secretmanager.secretAccessor", + /// 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.SecretManager.SecretIamPolicy("policy", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), + /// }); + /// + /// }); + /// ``` /// ## gcp.secretmanager.SecretIamBinding /// /// ```csharp @@ -163,6 +301,35 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var binding = new Gcp.SecretManager.SecretIamBinding("binding", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// Role = "roles/secretmanager.secretAccessor", + /// Members = new[] + /// { + /// "user:jane@example.com", + /// }, + /// Condition = new Gcp.SecretManager.Inputs.SecretIamBindingConditionArgs + /// { + /// Title = "expires_after_2019_12_31", + /// Description = "Expiring at midnight of 2019-12-31", + /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", + /// }, + /// }); + /// + /// }); + /// ``` /// ## gcp.secretmanager.SecretIamMember /// /// ```csharp @@ -184,6 +351,33 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var member = new Gcp.SecretManager.SecretIamMember("member", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// Role = "roles/secretmanager.secretAccessor", + /// Member = "user:jane@example.com", + /// Condition = new Gcp.SecretManager.Inputs.SecretIamMemberConditionArgs + /// { + /// Title = "expires_after_2019_12_31", + /// Description = "Expiring at midnight of 2019-12-31", + /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", + /// }, + /// }); + /// + /// }); + /// ``` + /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms: @@ -223,6 +417,10 @@ namespace Pulumi.Gcp.SecretManager [GcpResourceType("gcp:secretmanager/secretIamMember:SecretIamMember")] public partial class SecretIamMember : 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!; @@ -312,6 +510,10 @@ public static SecretIamMember Get(string name, Input id, SecretIamMember public sealed class SecretIamMemberArgs : 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; } @@ -357,6 +559,10 @@ public SecretIamMemberArgs() public sealed class SecretIamMemberState : 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; } diff --git a/sdk/dotnet/SecretManager/SecretIamPolicy.cs b/sdk/dotnet/SecretManager/SecretIamPolicy.cs index c2673a927a..a279005e6a 100644 --- a/sdk/dotnet/SecretManager/SecretIamPolicy.cs +++ b/sdk/dotnet/SecretManager/SecretIamPolicy.cs @@ -24,6 +24,8 @@ namespace Pulumi.Gcp.SecretManager /// /// > **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. /// + /// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. + /// /// ## gcp.secretmanager.SecretIamPolicy /// /// ```csharp @@ -59,6 +61,46 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() + /// { + /// Bindings = new[] + /// { + /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs + /// { + /// Role = "roles/secretmanager.secretAccessor", + /// 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.SecretManager.SecretIamPolicy("policy", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), + /// }); + /// + /// }); + /// ``` /// ## gcp.secretmanager.SecretIamBinding /// /// ```csharp @@ -83,6 +125,35 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var binding = new Gcp.SecretManager.SecretIamBinding("binding", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// Role = "roles/secretmanager.secretAccessor", + /// Members = new[] + /// { + /// "user:jane@example.com", + /// }, + /// Condition = new Gcp.SecretManager.Inputs.SecretIamBindingConditionArgs + /// { + /// Title = "expires_after_2019_12_31", + /// Description = "Expiring at midnight of 2019-12-31", + /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", + /// }, + /// }); + /// + /// }); + /// ``` /// ## gcp.secretmanager.SecretIamMember /// /// ```csharp @@ -104,6 +175,33 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var member = new Gcp.SecretManager.SecretIamMember("member", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// Role = "roles/secretmanager.secretAccessor", + /// Member = "user:jane@example.com", + /// Condition = new Gcp.SecretManager.Inputs.SecretIamMemberConditionArgs + /// { + /// Title = "expires_after_2019_12_31", + /// Description = "Expiring at midnight of 2019-12-31", + /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", + /// }, + /// }); + /// + /// }); + /// ``` + /// /// ## gcp.secretmanager.SecretIamPolicy /// /// ```csharp @@ -139,6 +237,46 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() + /// { + /// Bindings = new[] + /// { + /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs + /// { + /// Role = "roles/secretmanager.secretAccessor", + /// 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.SecretManager.SecretIamPolicy("policy", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), + /// }); + /// + /// }); + /// ``` /// ## gcp.secretmanager.SecretIamBinding /// /// ```csharp @@ -163,6 +301,35 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var binding = new Gcp.SecretManager.SecretIamBinding("binding", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// Role = "roles/secretmanager.secretAccessor", + /// Members = new[] + /// { + /// "user:jane@example.com", + /// }, + /// Condition = new Gcp.SecretManager.Inputs.SecretIamBindingConditionArgs + /// { + /// Title = "expires_after_2019_12_31", + /// Description = "Expiring at midnight of 2019-12-31", + /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", + /// }, + /// }); + /// + /// }); + /// ``` /// ## gcp.secretmanager.SecretIamMember /// /// ```csharp @@ -184,6 +351,33 @@ namespace Pulumi.Gcp.SecretManager /// }); /// ``` /// + /// With IAM Conditions: + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var member = new Gcp.SecretManager.SecretIamMember("member", new() + /// { + /// Project = secret_basic.Project, + /// SecretId = secret_basic.SecretId, + /// Role = "roles/secretmanager.secretAccessor", + /// Member = "user:jane@example.com", + /// Condition = new Gcp.SecretManager.Inputs.SecretIamMemberConditionArgs + /// { + /// Title = "expires_after_2019_12_31", + /// Description = "Expiring at midnight of 2019-12-31", + /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", + /// }, + /// }); + /// + /// }); + /// ``` + /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms: diff --git a/sdk/dotnet/SecurityCenter/ManagementOrganizationEventThreatDetectionCustomModule.cs b/sdk/dotnet/SecurityCenter/ManagementOrganizationEventThreatDetectionCustomModule.cs new file mode 100644 index 0000000000..21fd75490f --- /dev/null +++ b/sdk/dotnet/SecurityCenter/ManagementOrganizationEventThreatDetectionCustomModule.cs @@ -0,0 +1,270 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.SecurityCenter +{ + /// + /// Represents an instance of an Event Threat Detection custom module, including + /// its full module name, display name, enablement state, and last updated time. + /// You can create a custom module at the organization level only. + /// + /// To get more information about OrganizationEventThreatDetectionCustomModule, see: + /// + /// * [API documentation](https://cloud.google.com/security-command-center/docs/reference/security-center-management/rest/v1/organizations.locations.eventThreatDetectionCustomModules) + /// * How-to Guides + /// * [Overview of custom modules for Event Threat Detection](https://cloud.google.com/security-command-center/docs/custom-modules-etd-overview) + /// + /// ## Example Usage + /// + /// ## Import + /// + /// OrganizationEventThreatDetectionCustomModule can be imported using any of these accepted formats: + /// + /// * `organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}}` + /// + /// * `{{organization}}/{{location}}/{{name}}` + /// + /// When using the `pulumi import` command, OrganizationEventThreatDetectionCustomModule can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default {{organization}}/{{location}}/{{name}} + /// ``` + /// + [GcpResourceType("gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule")] + public partial class ManagementOrganizationEventThreatDetectionCustomModule : global::Pulumi.CustomResource + { + /// + /// Config for the module. For the resident module, its config value is defined at this level. + /// For the inherited module, its config value is inherited from the ancestor module. + /// + [Output("config")] + public Output Config { get; private set; } = null!; + + /// + /// The human readable name to be displayed for the module. + /// + [Output("displayName")] + public Output DisplayName { get; private set; } = null!; + + /// + /// The state of enablement for the module at the given level of the hierarchy. + /// Possible values are: `ENABLED`, `DISABLED`. + /// + [Output("enablementState")] + public Output EnablementState { get; private set; } = null!; + + /// + /// The editor that last updated the custom module + /// + [Output("lastEditor")] + public Output LastEditor { get; private set; } = null!; + + /// + /// Location ID of the parent organization. Only global is supported at the moment. + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// The resource name of the Event Threat Detection custom module. + /// Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Numerical ID of the parent organization. + /// + /// + /// - - - + /// + [Output("organization")] + public Output Organization { get; private set; } = null!; + + /// + /// Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + /// + [Output("type")] + public Output Type { get; private set; } = null!; + + /// + /// The time at which the custom module was last updated. + /// A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + /// up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + /// + [Output("updateTime")] + public Output UpdateTime { get; private set; } = null!; + + + /// + /// Create a ManagementOrganizationEventThreatDetectionCustomModule 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 ManagementOrganizationEventThreatDetectionCustomModule(string name, ManagementOrganizationEventThreatDetectionCustomModuleArgs args, CustomResourceOptions? options = null) + : base("gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule", name, args ?? new ManagementOrganizationEventThreatDetectionCustomModuleArgs(), MakeResourceOptions(options, "")) + { + } + + private ManagementOrganizationEventThreatDetectionCustomModule(string name, Input id, ManagementOrganizationEventThreatDetectionCustomModuleState? state = null, CustomResourceOptions? options = null) + : base("gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule", 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 ManagementOrganizationEventThreatDetectionCustomModule 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 ManagementOrganizationEventThreatDetectionCustomModule Get(string name, Input id, ManagementOrganizationEventThreatDetectionCustomModuleState? state = null, CustomResourceOptions? options = null) + { + return new ManagementOrganizationEventThreatDetectionCustomModule(name, id, state, options); + } + } + + public sealed class ManagementOrganizationEventThreatDetectionCustomModuleArgs : global::Pulumi.ResourceArgs + { + /// + /// Config for the module. For the resident module, its config value is defined at this level. + /// For the inherited module, its config value is inherited from the ancestor module. + /// + [Input("config")] + public Input? Config { get; set; } + + /// + /// The human readable name to be displayed for the module. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + /// + /// The state of enablement for the module at the given level of the hierarchy. + /// Possible values are: `ENABLED`, `DISABLED`. + /// + [Input("enablementState")] + public Input? EnablementState { get; set; } + + /// + /// Location ID of the parent organization. Only global is supported at the moment. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// Numerical ID of the parent organization. + /// + /// + /// - - - + /// + [Input("organization", required: true)] + public Input Organization { get; set; } = null!; + + /// + /// Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + /// + [Input("type")] + public Input? Type { get; set; } + + public ManagementOrganizationEventThreatDetectionCustomModuleArgs() + { + } + public static new ManagementOrganizationEventThreatDetectionCustomModuleArgs Empty => new ManagementOrganizationEventThreatDetectionCustomModuleArgs(); + } + + public sealed class ManagementOrganizationEventThreatDetectionCustomModuleState : global::Pulumi.ResourceArgs + { + /// + /// Config for the module. For the resident module, its config value is defined at this level. + /// For the inherited module, its config value is inherited from the ancestor module. + /// + [Input("config")] + public Input? Config { get; set; } + + /// + /// The human readable name to be displayed for the module. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + /// + /// The state of enablement for the module at the given level of the hierarchy. + /// Possible values are: `ENABLED`, `DISABLED`. + /// + [Input("enablementState")] + public Input? EnablementState { get; set; } + + /// + /// The editor that last updated the custom module + /// + [Input("lastEditor")] + public Input? LastEditor { get; set; } + + /// + /// Location ID of the parent organization. Only global is supported at the moment. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// The resource name of the Event Threat Detection custom module. + /// Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Numerical ID of the parent organization. + /// + /// + /// - - - + /// + [Input("organization")] + public Input? Organization { get; set; } + + /// + /// Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + /// + [Input("type")] + public Input? Type { get; set; } + + /// + /// The time at which the custom module was last updated. + /// A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + /// up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public ManagementOrganizationEventThreatDetectionCustomModuleState() + { + } + public static new ManagementOrganizationEventThreatDetectionCustomModuleState Empty => new ManagementOrganizationEventThreatDetectionCustomModuleState(); + } +} diff --git a/sdk/dotnet/Spanner/Inputs/InstanceConfigReplicaArgs.cs b/sdk/dotnet/Spanner/Inputs/InstanceConfigReplicaArgs.cs new file mode 100644 index 0000000000..2edf935e22 --- /dev/null +++ b/sdk/dotnet/Spanner/Inputs/InstanceConfigReplicaArgs.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.Spanner.Inputs +{ + + public sealed class InstanceConfigReplicaArgs : global::Pulumi.ResourceArgs + { + /// + /// If true, this location is designated as the default leader location where + /// leader replicas are placed. + /// + /// - - - + /// + [Input("defaultLeaderLocation")] + public Input? DefaultLeaderLocation { get; set; } + + /// + /// The location of the serving resources, e.g. "us-central1". + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// Indicates the type of replica. See the [replica types + /// documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + /// for more details. + /// Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + /// + [Input("type")] + public Input? Type { get; set; } + + public InstanceConfigReplicaArgs() + { + } + public static new InstanceConfigReplicaArgs Empty => new InstanceConfigReplicaArgs(); + } +} diff --git a/sdk/dotnet/Spanner/Inputs/InstanceConfigReplicaGetArgs.cs b/sdk/dotnet/Spanner/Inputs/InstanceConfigReplicaGetArgs.cs new file mode 100644 index 0000000000..d4ad526098 --- /dev/null +++ b/sdk/dotnet/Spanner/Inputs/InstanceConfigReplicaGetArgs.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.Spanner.Inputs +{ + + public sealed class InstanceConfigReplicaGetArgs : global::Pulumi.ResourceArgs + { + /// + /// If true, this location is designated as the default leader location where + /// leader replicas are placed. + /// + /// - - - + /// + [Input("defaultLeaderLocation")] + public Input? DefaultLeaderLocation { get; set; } + + /// + /// The location of the serving resources, e.g. "us-central1". + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// Indicates the type of replica. See the [replica types + /// documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + /// for more details. + /// Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + /// + [Input("type")] + public Input? Type { get; set; } + + public InstanceConfigReplicaGetArgs() + { + } + public static new InstanceConfigReplicaGetArgs Empty => new InstanceConfigReplicaGetArgs(); + } +} diff --git a/sdk/dotnet/Spanner/InstanceConfig.cs b/sdk/dotnet/Spanner/InstanceConfig.cs new file mode 100644 index 0000000000..dd3b501ee3 --- /dev/null +++ b/sdk/dotnet/Spanner/InstanceConfig.cs @@ -0,0 +1,314 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Spanner +{ + /// + /// A possible configuration for a Cloud Spanner instance. Configurations + /// define the geographic placement of nodes and their replication. + /// + /// To get more information about InstanceConfig, see: + /// + /// * [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instanceConfigs) + /// * How-to Guides + /// * [Official Documentation](https://cloud.google.com/spanner/) + /// + /// ## Example Usage + /// + /// ## Import + /// + /// InstanceConfig can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/instanceConfigs/{{name}}` + /// + /// * `{{project}}/{{name}}` + /// + /// * `{{name}}` + /// + /// When using the `pulumi import` command, InstanceConfig can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default projects/{{project}}/instanceConfigs/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{project}}/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{name}} + /// ``` + /// + [GcpResourceType("gcp:spanner/instanceConfig:InstanceConfig")] + public partial class InstanceConfig : global::Pulumi.CustomResource + { + /// + /// Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + /// configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + /// configuration. + /// + [Output("baseConfig")] + public Output BaseConfig { get; private set; } = null!; + + /// + /// Output only. Whether this instance config is a Google or User Managed Configuration. + /// + [Output("configType")] + public Output ConfigType { get; private set; } = null!; + + /// + /// The name of this instance configuration as it appears in UIs. + /// + [Output("displayName")] + public Output DisplayName { get; private set; } = null!; + + /// + /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + /// + [Output("effectiveLabels")] + public Output> EffectiveLabels { get; private set; } = null!; + + /// + /// An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + /// to the field 'effective_labels' for all of the labels present on the resource. + /// + [Output("labels")] + public Output?> Labels { get; private set; } = null!; + + /// + /// A unique identifier for the instance configuration. Values are of the + /// form projects/<project>/instanceConfigs/[a-z][-a-z0-9]* + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// The combination of labels configured directly on the resource + /// and default labels configured on the provider. + /// + [Output("pulumiLabels")] + public Output> PulumiLabels { get; private set; } = null!; + + /// + /// The geographic placement of nodes in this instance configuration and their replication properties. + /// Structure is documented below. + /// + [Output("replicas")] + public Output> Replicas { get; private set; } = null!; + + + /// + /// Create a InstanceConfig 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 InstanceConfig(string name, InstanceConfigArgs args, CustomResourceOptions? options = null) + : base("gcp:spanner/instanceConfig:InstanceConfig", name, args ?? new InstanceConfigArgs(), MakeResourceOptions(options, "")) + { + } + + private InstanceConfig(string name, Input id, InstanceConfigState? state = null, CustomResourceOptions? options = null) + : base("gcp:spanner/instanceConfig:InstanceConfig", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + AdditionalSecretOutputs = + { + "effectiveLabels", + "pulumiLabels", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing InstanceConfig 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 InstanceConfig Get(string name, Input id, InstanceConfigState? state = null, CustomResourceOptions? options = null) + { + return new InstanceConfig(name, id, state, options); + } + } + + public sealed class InstanceConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + /// configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + /// configuration. + /// + [Input("baseConfig")] + public Input? BaseConfig { get; set; } + + /// + /// The name of this instance configuration as it appears in UIs. + /// + [Input("displayName", required: true)] + public Input DisplayName { get; set; } = null!; + + [Input("labels")] + private InputMap? _labels; + + /// + /// An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + /// to the field 'effective_labels' for all of the labels present on the resource. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// A unique identifier for the instance configuration. Values are of the + /// form projects/<project>/instanceConfigs/[a-z][-a-z0-9]* + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("project")] + public Input? Project { get; set; } + + [Input("replicas", required: true)] + private InputList? _replicas; + + /// + /// The geographic placement of nodes in this instance configuration and their replication properties. + /// Structure is documented below. + /// + public InputList Replicas + { + get => _replicas ?? (_replicas = new InputList()); + set => _replicas = value; + } + + public InstanceConfigArgs() + { + } + public static new InstanceConfigArgs Empty => new InstanceConfigArgs(); + } + + public sealed class InstanceConfigState : global::Pulumi.ResourceArgs + { + /// + /// Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + /// configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + /// configuration. + /// + [Input("baseConfig")] + public Input? BaseConfig { get; set; } + + /// + /// Output only. Whether this instance config is a Google or User Managed Configuration. + /// + [Input("configType")] + public Input? ConfigType { get; set; } + + /// + /// The name of this instance configuration as it appears in UIs. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + [Input("effectiveLabels")] + private InputMap? _effectiveLabels; + + /// + /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + /// + public InputMap EffectiveLabels + { + get => _effectiveLabels ?? (_effectiveLabels = new InputMap()); + set + { + var emptySecret = Output.CreateSecret(ImmutableDictionary.Create()); + _effectiveLabels = Output.All(value, emptySecret).Apply(v => v[0]); + } + } + + [Input("labels")] + private InputMap? _labels; + + /// + /// An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + /// to the field 'effective_labels' for all of the labels present on the resource. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// A unique identifier for the instance configuration. Values are of the + /// form projects/<project>/instanceConfigs/[a-z][-a-z0-9]* + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("project")] + public Input? Project { get; set; } + + [Input("pulumiLabels")] + private InputMap? _pulumiLabels; + + /// + /// The combination of labels configured directly on the resource + /// and default labels configured on the provider. + /// + public InputMap PulumiLabels + { + get => _pulumiLabels ?? (_pulumiLabels = new InputMap()); + set + { + var emptySecret = Output.CreateSecret(ImmutableDictionary.Create()); + _pulumiLabels = Output.All(value, emptySecret).Apply(v => v[0]); + } + } + + [Input("replicas")] + private InputList? _replicas; + + /// + /// The geographic placement of nodes in this instance configuration and their replication properties. + /// Structure is documented below. + /// + public InputList Replicas + { + get => _replicas ?? (_replicas = new InputList()); + set => _replicas = value; + } + + public InstanceConfigState() + { + } + public static new InstanceConfigState Empty => new InstanceConfigState(); + } +} diff --git a/sdk/dotnet/Spanner/Outputs/InstanceConfigReplica.cs b/sdk/dotnet/Spanner/Outputs/InstanceConfigReplica.cs new file mode 100644 index 0000000000..e22e7db253 --- /dev/null +++ b/sdk/dotnet/Spanner/Outputs/InstanceConfigReplica.cs @@ -0,0 +1,48 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Spanner.Outputs +{ + + [OutputType] + public sealed class InstanceConfigReplica + { + /// + /// If true, this location is designated as the default leader location where + /// leader replicas are placed. + /// + /// - - - + /// + public readonly bool? DefaultLeaderLocation; + /// + /// The location of the serving resources, e.g. "us-central1". + /// + public readonly string? Location; + /// + /// Indicates the type of replica. See the [replica types + /// documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + /// for more details. + /// Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + /// + public readonly string? Type; + + [OutputConstructor] + private InstanceConfigReplica( + bool? defaultLeaderLocation, + + string? location, + + string? type) + { + DefaultLeaderLocation = defaultLeaderLocation; + Location = location; + Type = type; + } + } +} diff --git a/sdk/dotnet/Sql/Inputs/DatabaseInstanceSettingsIpConfigurationArgs.cs b/sdk/dotnet/Sql/Inputs/DatabaseInstanceSettingsIpConfigurationArgs.cs index 4aecba3e01..d8bb9b1f2e 100644 --- a/sdk/dotnet/Sql/Inputs/DatabaseInstanceSettingsIpConfigurationArgs.cs +++ b/sdk/dotnet/Sql/Inputs/DatabaseInstanceSettingsIpConfigurationArgs.cs @@ -63,7 +63,7 @@ public InputList Ps } /// - /// Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. + /// Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. It will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. /// [Input("requireSsl")] public Input? RequireSsl { get; set; } diff --git a/sdk/dotnet/Sql/Inputs/DatabaseInstanceSettingsIpConfigurationGetArgs.cs b/sdk/dotnet/Sql/Inputs/DatabaseInstanceSettingsIpConfigurationGetArgs.cs index f164bc3c0b..1aae6200f1 100644 --- a/sdk/dotnet/Sql/Inputs/DatabaseInstanceSettingsIpConfigurationGetArgs.cs +++ b/sdk/dotnet/Sql/Inputs/DatabaseInstanceSettingsIpConfigurationGetArgs.cs @@ -63,7 +63,7 @@ public InputList } /// - /// Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. + /// Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. It will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. /// [Input("requireSsl")] public Input? RequireSsl { get; set; } diff --git a/sdk/dotnet/Sql/Outputs/DatabaseInstanceSettingsIpConfiguration.cs b/sdk/dotnet/Sql/Outputs/DatabaseInstanceSettingsIpConfiguration.cs index d202e9478d..1ba40bcf46 100644 --- a/sdk/dotnet/Sql/Outputs/DatabaseInstanceSettingsIpConfiguration.cs +++ b/sdk/dotnet/Sql/Outputs/DatabaseInstanceSettingsIpConfiguration.cs @@ -41,7 +41,7 @@ public sealed class DatabaseInstanceSettingsIpConfiguration /// public readonly ImmutableArray PscConfigs; /// - /// Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. + /// Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. It will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. /// public readonly bool? RequireSsl; /// diff --git a/sdk/dotnet/Sql/Outputs/GetDatabaseInstanceSettingIpConfigurationResult.cs b/sdk/dotnet/Sql/Outputs/GetDatabaseInstanceSettingIpConfigurationResult.cs index 28b07aac91..7a87708c20 100644 --- a/sdk/dotnet/Sql/Outputs/GetDatabaseInstanceSettingIpConfigurationResult.cs +++ b/sdk/dotnet/Sql/Outputs/GetDatabaseInstanceSettingIpConfigurationResult.cs @@ -39,7 +39,7 @@ public sealed class GetDatabaseInstanceSettingIpConfigurationResult /// public readonly bool RequireSsl; /// - /// Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + /// Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl until next major release. /// public readonly string SslMode; diff --git a/sdk/dotnet/Sql/Outputs/GetDatabaseInstancesInstanceSettingIpConfigurationResult.cs b/sdk/dotnet/Sql/Outputs/GetDatabaseInstancesInstanceSettingIpConfigurationResult.cs index d512bfc495..2b106ae109 100644 --- a/sdk/dotnet/Sql/Outputs/GetDatabaseInstancesInstanceSettingIpConfigurationResult.cs +++ b/sdk/dotnet/Sql/Outputs/GetDatabaseInstancesInstanceSettingIpConfigurationResult.cs @@ -39,7 +39,7 @@ public sealed class GetDatabaseInstancesInstanceSettingIpConfigurationResult /// public readonly bool RequireSsl; /// - /// Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + /// Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl until next major release. /// public readonly string SslMode; diff --git a/sdk/dotnet/Workstations/Inputs/WorkstationConfigHostGceInstanceBoostConfigArgs.cs b/sdk/dotnet/Workstations/Inputs/WorkstationConfigHostGceInstanceBoostConfigArgs.cs index acaed0dd0d..ea1397ec21 100644 --- a/sdk/dotnet/Workstations/Inputs/WorkstationConfigHostGceInstanceBoostConfigArgs.cs +++ b/sdk/dotnet/Workstations/Inputs/WorkstationConfigHostGceInstanceBoostConfigArgs.cs @@ -25,6 +25,19 @@ public InputList _accelerators = value; } + /// + /// Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + /// + [Input("bootDiskSizeGb")] + public Input? BootDiskSizeGb { get; set; } + + /// + /// Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + /// See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + /// + [Input("enableNestedVirtualization")] + public Input? EnableNestedVirtualization { get; set; } + /// /// The id to be used for the boost config. /// @@ -37,6 +50,12 @@ public InputList? MachineType { get; set; } + /// + /// Number of instances to pool for faster workstation boosting. + /// + [Input("poolSize")] + public Input? PoolSize { get; set; } + public WorkstationConfigHostGceInstanceBoostConfigArgs() { } diff --git a/sdk/dotnet/Workstations/Inputs/WorkstationConfigHostGceInstanceBoostConfigGetArgs.cs b/sdk/dotnet/Workstations/Inputs/WorkstationConfigHostGceInstanceBoostConfigGetArgs.cs index b7da30bc56..4fc0dec021 100644 --- a/sdk/dotnet/Workstations/Inputs/WorkstationConfigHostGceInstanceBoostConfigGetArgs.cs +++ b/sdk/dotnet/Workstations/Inputs/WorkstationConfigHostGceInstanceBoostConfigGetArgs.cs @@ -25,6 +25,19 @@ public InputList _accelerators = value; } + /// + /// Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + /// + [Input("bootDiskSizeGb")] + public Input? BootDiskSizeGb { get; set; } + + /// + /// Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + /// See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + /// + [Input("enableNestedVirtualization")] + public Input? EnableNestedVirtualization { get; set; } + /// /// The id to be used for the boost config. /// @@ -37,6 +50,12 @@ public InputList? MachineType { get; set; } + /// + /// Number of instances to pool for faster workstation boosting. + /// + [Input("poolSize")] + public Input? PoolSize { get; set; } + public WorkstationConfigHostGceInstanceBoostConfigGetArgs() { } diff --git a/sdk/dotnet/Workstations/Outputs/WorkstationConfigHostGceInstanceBoostConfig.cs b/sdk/dotnet/Workstations/Outputs/WorkstationConfigHostGceInstanceBoostConfig.cs index e05658cab0..8ff3a89c03 100644 --- a/sdk/dotnet/Workstations/Outputs/WorkstationConfigHostGceInstanceBoostConfig.cs +++ b/sdk/dotnet/Workstations/Outputs/WorkstationConfigHostGceInstanceBoostConfig.cs @@ -19,6 +19,15 @@ public sealed class WorkstationConfigHostGceInstanceBoostConfig /// public readonly ImmutableArray Accelerators; /// + /// Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + /// + public readonly int? BootDiskSizeGb; + /// + /// Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + /// See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + /// + public readonly bool? EnableNestedVirtualization; + /// /// The id to be used for the boost config. /// public readonly string Id; @@ -26,18 +35,31 @@ public sealed class WorkstationConfigHostGceInstanceBoostConfig /// The type of machine that boosted VM instances will use—for example, e2-standard-4. For more information about machine types that Cloud Workstations supports, see the list of available machine types https://cloud.google.com/workstations/docs/available-machine-types. Defaults to e2-standard-4. /// public readonly string? MachineType; + /// + /// Number of instances to pool for faster workstation boosting. + /// + public readonly int? PoolSize; [OutputConstructor] private WorkstationConfigHostGceInstanceBoostConfig( ImmutableArray accelerators, + int? bootDiskSizeGb, + + bool? enableNestedVirtualization, + string id, - string? machineType) + string? machineType, + + int? poolSize) { Accelerators = accelerators; + BootDiskSizeGb = bootDiskSizeGb; + EnableNestedVirtualization = enableNestedVirtualization; Id = id; MachineType = machineType; + PoolSize = poolSize; } } } diff --git a/sdk/dotnet/Workstations/WorkstationConfig.cs b/sdk/dotnet/Workstations/WorkstationConfig.cs index 922cf139b7..5cd0f8cb72 100644 --- a/sdk/dotnet/Workstations/WorkstationConfig.cs +++ b/sdk/dotnet/Workstations/WorkstationConfig.cs @@ -497,8 +497,11 @@ namespace Pulumi.Gcp.Workstations /// }, /// new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceBoostConfigArgs /// { - /// Id = "boost-1", - /// MachineType = "e2-standard-2", + /// Id = "boost-2", + /// MachineType = "n1-standard-2", + /// PoolSize = 2, + /// BootDiskSizeGb = 30, + /// EnableNestedVirtualization = true, /// }, /// }, /// }, diff --git a/sdk/go/gcp/appengine/flexibleAppVersion.go b/sdk/go/gcp/appengine/flexibleAppVersion.go index e305043935..0d014851d8 100644 --- a/sdk/go/gcp/appengine/flexibleAppVersion.go +++ b/sdk/go/gcp/appengine/flexibleAppVersion.go @@ -226,6 +226,8 @@ type FlexibleAppVersion struct { // The entrypoint for the application. Entrypoint FlexibleAppVersionEntrypointPtrOutput `pulumi:"entrypoint"` EnvVariables pulumi.StringMapOutput `pulumi:"envVariables"` + // Runtime settings for App Engine flexible environment. + FlexibleRuntimeSettings FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput `pulumi:"flexibleRuntimeSettings"` // 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. Handlers FlexibleAppVersionHandlerArrayOutput `pulumi:"handlers"` @@ -342,6 +344,8 @@ type flexibleAppVersionState struct { // The entrypoint for the application. Entrypoint *FlexibleAppVersionEntrypoint `pulumi:"entrypoint"` EnvVariables map[string]string `pulumi:"envVariables"` + // Runtime settings for App Engine flexible environment. + FlexibleRuntimeSettings *FlexibleAppVersionFlexibleRuntimeSettings `pulumi:"flexibleRuntimeSettings"` // 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. Handlers []FlexibleAppVersionHandler `pulumi:"handlers"` @@ -417,6 +421,8 @@ type FlexibleAppVersionState struct { // The entrypoint for the application. Entrypoint FlexibleAppVersionEntrypointPtrInput EnvVariables pulumi.StringMapInput + // Runtime settings for App Engine flexible environment. + FlexibleRuntimeSettings FlexibleAppVersionFlexibleRuntimeSettingsPtrInput // 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. Handlers FlexibleAppVersionHandlerArrayInput @@ -496,6 +502,8 @@ type flexibleAppVersionArgs struct { // The entrypoint for the application. Entrypoint *FlexibleAppVersionEntrypoint `pulumi:"entrypoint"` EnvVariables map[string]string `pulumi:"envVariables"` + // Runtime settings for App Engine flexible environment. + FlexibleRuntimeSettings *FlexibleAppVersionFlexibleRuntimeSettings `pulumi:"flexibleRuntimeSettings"` // 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. Handlers []FlexibleAppVersionHandler `pulumi:"handlers"` @@ -570,6 +578,8 @@ type FlexibleAppVersionArgs struct { // The entrypoint for the application. Entrypoint FlexibleAppVersionEntrypointPtrInput EnvVariables pulumi.StringMapInput + // Runtime settings for App Engine flexible environment. + FlexibleRuntimeSettings FlexibleAppVersionFlexibleRuntimeSettingsPtrInput // 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. Handlers FlexibleAppVersionHandlerArrayInput @@ -758,6 +768,13 @@ func (o FlexibleAppVersionOutput) EnvVariables() pulumi.StringMapOutput { return o.ApplyT(func(v *FlexibleAppVersion) pulumi.StringMapOutput { return v.EnvVariables }).(pulumi.StringMapOutput) } +// Runtime settings for App Engine flexible environment. +func (o FlexibleAppVersionOutput) FlexibleRuntimeSettings() FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput { + return o.ApplyT(func(v *FlexibleAppVersion) FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput { + return v.FlexibleRuntimeSettings + }).(FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput) +} + // 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. func (o FlexibleAppVersionOutput) Handlers() FlexibleAppVersionHandlerArrayOutput { diff --git a/sdk/go/gcp/appengine/pulumiTypes.go b/sdk/go/gcp/appengine/pulumiTypes.go index 51df8304e6..0ad8dffa87 100644 --- a/sdk/go/gcp/appengine/pulumiTypes.go +++ b/sdk/go/gcp/appengine/pulumiTypes.go @@ -3575,6 +3575,162 @@ func (o FlexibleAppVersionEntrypointPtrOutput) Shell() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } +type FlexibleAppVersionFlexibleRuntimeSettings struct { + // Operating System of the application runtime. + OperatingSystem *string `pulumi:"operatingSystem"` + // The runtime version of an App Engine flexible application. + RuntimeVersion *string `pulumi:"runtimeVersion"` +} + +// FlexibleAppVersionFlexibleRuntimeSettingsInput is an input type that accepts FlexibleAppVersionFlexibleRuntimeSettingsArgs and FlexibleAppVersionFlexibleRuntimeSettingsOutput values. +// You can construct a concrete instance of `FlexibleAppVersionFlexibleRuntimeSettingsInput` via: +// +// FlexibleAppVersionFlexibleRuntimeSettingsArgs{...} +type FlexibleAppVersionFlexibleRuntimeSettingsInput interface { + pulumi.Input + + ToFlexibleAppVersionFlexibleRuntimeSettingsOutput() FlexibleAppVersionFlexibleRuntimeSettingsOutput + ToFlexibleAppVersionFlexibleRuntimeSettingsOutputWithContext(context.Context) FlexibleAppVersionFlexibleRuntimeSettingsOutput +} + +type FlexibleAppVersionFlexibleRuntimeSettingsArgs struct { + // Operating System of the application runtime. + OperatingSystem pulumi.StringPtrInput `pulumi:"operatingSystem"` + // The runtime version of an App Engine flexible application. + RuntimeVersion pulumi.StringPtrInput `pulumi:"runtimeVersion"` +} + +func (FlexibleAppVersionFlexibleRuntimeSettingsArgs) ElementType() reflect.Type { + return reflect.TypeOf((*FlexibleAppVersionFlexibleRuntimeSettings)(nil)).Elem() +} + +func (i FlexibleAppVersionFlexibleRuntimeSettingsArgs) ToFlexibleAppVersionFlexibleRuntimeSettingsOutput() FlexibleAppVersionFlexibleRuntimeSettingsOutput { + return i.ToFlexibleAppVersionFlexibleRuntimeSettingsOutputWithContext(context.Background()) +} + +func (i FlexibleAppVersionFlexibleRuntimeSettingsArgs) ToFlexibleAppVersionFlexibleRuntimeSettingsOutputWithContext(ctx context.Context) FlexibleAppVersionFlexibleRuntimeSettingsOutput { + return pulumi.ToOutputWithContext(ctx, i).(FlexibleAppVersionFlexibleRuntimeSettingsOutput) +} + +func (i FlexibleAppVersionFlexibleRuntimeSettingsArgs) ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutput() FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput { + return i.ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutputWithContext(context.Background()) +} + +func (i FlexibleAppVersionFlexibleRuntimeSettingsArgs) ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutputWithContext(ctx context.Context) FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(FlexibleAppVersionFlexibleRuntimeSettingsOutput).ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutputWithContext(ctx) +} + +// FlexibleAppVersionFlexibleRuntimeSettingsPtrInput is an input type that accepts FlexibleAppVersionFlexibleRuntimeSettingsArgs, FlexibleAppVersionFlexibleRuntimeSettingsPtr and FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput values. +// You can construct a concrete instance of `FlexibleAppVersionFlexibleRuntimeSettingsPtrInput` via: +// +// FlexibleAppVersionFlexibleRuntimeSettingsArgs{...} +// +// or: +// +// nil +type FlexibleAppVersionFlexibleRuntimeSettingsPtrInput interface { + pulumi.Input + + ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutput() FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput + ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutputWithContext(context.Context) FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput +} + +type flexibleAppVersionFlexibleRuntimeSettingsPtrType FlexibleAppVersionFlexibleRuntimeSettingsArgs + +func FlexibleAppVersionFlexibleRuntimeSettingsPtr(v *FlexibleAppVersionFlexibleRuntimeSettingsArgs) FlexibleAppVersionFlexibleRuntimeSettingsPtrInput { + return (*flexibleAppVersionFlexibleRuntimeSettingsPtrType)(v) +} + +func (*flexibleAppVersionFlexibleRuntimeSettingsPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**FlexibleAppVersionFlexibleRuntimeSettings)(nil)).Elem() +} + +func (i *flexibleAppVersionFlexibleRuntimeSettingsPtrType) ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutput() FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput { + return i.ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutputWithContext(context.Background()) +} + +func (i *flexibleAppVersionFlexibleRuntimeSettingsPtrType) ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutputWithContext(ctx context.Context) FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput) +} + +type FlexibleAppVersionFlexibleRuntimeSettingsOutput struct{ *pulumi.OutputState } + +func (FlexibleAppVersionFlexibleRuntimeSettingsOutput) ElementType() reflect.Type { + return reflect.TypeOf((*FlexibleAppVersionFlexibleRuntimeSettings)(nil)).Elem() +} + +func (o FlexibleAppVersionFlexibleRuntimeSettingsOutput) ToFlexibleAppVersionFlexibleRuntimeSettingsOutput() FlexibleAppVersionFlexibleRuntimeSettingsOutput { + return o +} + +func (o FlexibleAppVersionFlexibleRuntimeSettingsOutput) ToFlexibleAppVersionFlexibleRuntimeSettingsOutputWithContext(ctx context.Context) FlexibleAppVersionFlexibleRuntimeSettingsOutput { + return o +} + +func (o FlexibleAppVersionFlexibleRuntimeSettingsOutput) ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutput() FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput { + return o.ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutputWithContext(context.Background()) +} + +func (o FlexibleAppVersionFlexibleRuntimeSettingsOutput) ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutputWithContext(ctx context.Context) FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v FlexibleAppVersionFlexibleRuntimeSettings) *FlexibleAppVersionFlexibleRuntimeSettings { + return &v + }).(FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput) +} + +// Operating System of the application runtime. +func (o FlexibleAppVersionFlexibleRuntimeSettingsOutput) OperatingSystem() pulumi.StringPtrOutput { + return o.ApplyT(func(v FlexibleAppVersionFlexibleRuntimeSettings) *string { return v.OperatingSystem }).(pulumi.StringPtrOutput) +} + +// The runtime version of an App Engine flexible application. +func (o FlexibleAppVersionFlexibleRuntimeSettingsOutput) RuntimeVersion() pulumi.StringPtrOutput { + return o.ApplyT(func(v FlexibleAppVersionFlexibleRuntimeSettings) *string { return v.RuntimeVersion }).(pulumi.StringPtrOutput) +} + +type FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput struct{ *pulumi.OutputState } + +func (FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**FlexibleAppVersionFlexibleRuntimeSettings)(nil)).Elem() +} + +func (o FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput) ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutput() FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput { + return o +} + +func (o FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput) ToFlexibleAppVersionFlexibleRuntimeSettingsPtrOutputWithContext(ctx context.Context) FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput { + return o +} + +func (o FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput) Elem() FlexibleAppVersionFlexibleRuntimeSettingsOutput { + return o.ApplyT(func(v *FlexibleAppVersionFlexibleRuntimeSettings) FlexibleAppVersionFlexibleRuntimeSettings { + if v != nil { + return *v + } + var ret FlexibleAppVersionFlexibleRuntimeSettings + return ret + }).(FlexibleAppVersionFlexibleRuntimeSettingsOutput) +} + +// Operating System of the application runtime. +func (o FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput) OperatingSystem() pulumi.StringPtrOutput { + return o.ApplyT(func(v *FlexibleAppVersionFlexibleRuntimeSettings) *string { + if v == nil { + return nil + } + return v.OperatingSystem + }).(pulumi.StringPtrOutput) +} + +// The runtime version of an App Engine flexible application. +func (o FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput) RuntimeVersion() pulumi.StringPtrOutput { + return o.ApplyT(func(v *FlexibleAppVersionFlexibleRuntimeSettings) *string { + if v == nil { + return nil + } + return v.RuntimeVersion + }).(pulumi.StringPtrOutput) +} + type FlexibleAppVersionHandler struct { // Actions to take when the user is not logged in. // Possible values are: `AUTH_FAIL_ACTION_REDIRECT`, `AUTH_FAIL_ACTION_UNAUTHORIZED`. @@ -7906,6 +8062,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*FlexibleAppVersionEndpointsApiServicePtrInput)(nil)).Elem(), FlexibleAppVersionEndpointsApiServiceArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*FlexibleAppVersionEntrypointInput)(nil)).Elem(), FlexibleAppVersionEntrypointArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*FlexibleAppVersionEntrypointPtrInput)(nil)).Elem(), FlexibleAppVersionEntrypointArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*FlexibleAppVersionFlexibleRuntimeSettingsInput)(nil)).Elem(), FlexibleAppVersionFlexibleRuntimeSettingsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*FlexibleAppVersionFlexibleRuntimeSettingsPtrInput)(nil)).Elem(), FlexibleAppVersionFlexibleRuntimeSettingsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*FlexibleAppVersionHandlerInput)(nil)).Elem(), FlexibleAppVersionHandlerArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*FlexibleAppVersionHandlerArrayInput)(nil)).Elem(), FlexibleAppVersionHandlerArray{}) pulumi.RegisterInputType(reflect.TypeOf((*FlexibleAppVersionHandlerScriptInput)(nil)).Elem(), FlexibleAppVersionHandlerScriptArgs{}) @@ -7994,6 +8152,8 @@ func init() { pulumi.RegisterOutputType(FlexibleAppVersionEndpointsApiServicePtrOutput{}) pulumi.RegisterOutputType(FlexibleAppVersionEntrypointOutput{}) pulumi.RegisterOutputType(FlexibleAppVersionEntrypointPtrOutput{}) + pulumi.RegisterOutputType(FlexibleAppVersionFlexibleRuntimeSettingsOutput{}) + pulumi.RegisterOutputType(FlexibleAppVersionFlexibleRuntimeSettingsPtrOutput{}) pulumi.RegisterOutputType(FlexibleAppVersionHandlerOutput{}) pulumi.RegisterOutputType(FlexibleAppVersionHandlerArrayOutput{}) pulumi.RegisterOutputType(FlexibleAppVersionHandlerScriptOutput{}) diff --git a/sdk/go/gcp/bigtable/instance.go b/sdk/go/gcp/bigtable/instance.go index 194fc6abc2..9b58538d32 100644 --- a/sdk/go/gcp/bigtable/instance.go +++ b/sdk/go/gcp/bigtable/instance.go @@ -154,6 +154,8 @@ type Instance struct { // // *** EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // Deleting a BigTable instance can be blocked if any backups are present in the instance. When `forceDestroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + ForceDestroy pulumi.BoolPtrOutput `pulumi:"forceDestroy"` // 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, // and all instances will become `"PRODUCTION"` instances. This means that new and existing `"DEVELOPMENT"` instances will be converted to @@ -226,6 +228,8 @@ type instanceState struct { // // *** EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // Deleting a BigTable instance can be blocked if any backups are present in the instance. When `forceDestroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + ForceDestroy *bool `pulumi:"forceDestroy"` // 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, // and all instances will become `"PRODUCTION"` instances. This means that new and existing `"DEVELOPMENT"` instances will be converted to @@ -264,6 +268,8 @@ type InstanceState struct { // // *** EffectiveLabels pulumi.StringMapInput + // Deleting a BigTable instance can be blocked if any backups are present in the instance. When `forceDestroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + ForceDestroy pulumi.BoolPtrInput // 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, // and all instances will become `"PRODUCTION"` instances. This means that new and existing `"DEVELOPMENT"` instances will be converted to @@ -302,6 +308,8 @@ type instanceArgs struct { DeletionProtection *bool `pulumi:"deletionProtection"` // The human-readable display name of the Bigtable instance. Defaults to the instance `name`. DisplayName *string `pulumi:"displayName"` + // Deleting a BigTable instance can be blocked if any backups are present in the instance. When `forceDestroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + ForceDestroy *bool `pulumi:"forceDestroy"` // 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, // and all instances will become `"PRODUCTION"` instances. This means that new and existing `"DEVELOPMENT"` instances will be converted to @@ -335,6 +343,8 @@ type InstanceArgs struct { DeletionProtection pulumi.BoolPtrInput // The human-readable display name of the Bigtable instance. Defaults to the instance `name`. DisplayName pulumi.StringPtrInput + // Deleting a BigTable instance can be blocked if any backups are present in the instance. When `forceDestroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + ForceDestroy pulumi.BoolPtrInput // 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, // and all instances will become `"PRODUCTION"` instances. This means that new and existing `"DEVELOPMENT"` instances will be converted to @@ -469,6 +479,11 @@ func (o InstanceOutput) EffectiveLabels() pulumi.StringMapOutput { return o.ApplyT(func(v *Instance) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) } +// Deleting a BigTable instance can be blocked if any backups are present in the instance. When `forceDestroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. +func (o InstanceOutput) ForceDestroy() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *Instance) pulumi.BoolPtrOutput { return v.ForceDestroy }).(pulumi.BoolPtrOutput) +} + // 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, // and all instances will become `"PRODUCTION"` instances. This means that new and existing `"DEVELOPMENT"` instances will be converted to diff --git a/sdk/go/gcp/clouddeploy/pulumiTypes.go b/sdk/go/gcp/clouddeploy/pulumiTypes.go index 85813d8dfc..0a2a30768d 100644 --- a/sdk/go/gcp/clouddeploy/pulumiTypes.go +++ b/sdk/go/gcp/clouddeploy/pulumiTypes.go @@ -6106,6 +6106,8 @@ type TargetExecutionConfig struct { ServiceAccount *string `pulumi:"serviceAccount"` // Required. Usages when this configuration should be applied. Usages []string `pulumi:"usages"` + // Optional. If true, additional logging will be enabled when running builds in this execution environment. + Verbose *bool `pulumi:"verbose"` // Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. WorkerPool *string `pulumi:"workerPool"` } @@ -6130,6 +6132,8 @@ type TargetExecutionConfigArgs struct { ServiceAccount pulumi.StringPtrInput `pulumi:"serviceAccount"` // Required. Usages when this configuration should be applied. Usages pulumi.StringArrayInput `pulumi:"usages"` + // Optional. If true, additional logging will be enabled when running builds in this execution environment. + Verbose pulumi.BoolPtrInput `pulumi:"verbose"` // Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. WorkerPool pulumi.StringPtrInput `pulumi:"workerPool"` } @@ -6205,6 +6209,11 @@ func (o TargetExecutionConfigOutput) Usages() pulumi.StringArrayOutput { return o.ApplyT(func(v TargetExecutionConfig) []string { return v.Usages }).(pulumi.StringArrayOutput) } +// Optional. If true, additional logging will be enabled when running builds in this execution environment. +func (o TargetExecutionConfigOutput) Verbose() pulumi.BoolPtrOutput { + return o.ApplyT(func(v TargetExecutionConfig) *bool { return v.Verbose }).(pulumi.BoolPtrOutput) +} + // Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. func (o TargetExecutionConfigOutput) WorkerPool() pulumi.StringPtrOutput { return o.ApplyT(func(v TargetExecutionConfig) *string { return v.WorkerPool }).(pulumi.StringPtrOutput) diff --git a/sdk/go/gcp/compute/backendService.go b/sdk/go/gcp/compute/backendService.go index d6d07352bd..54bef41d13 100644 --- a/sdk/go/gcp/compute/backendService.go +++ b/sdk/go/gcp/compute/backendService.go @@ -684,6 +684,9 @@ type BackendService struct { SecuritySettings BackendServiceSecuritySettingsPtrOutput `pulumi:"securitySettings"` // The URI of the created resource. SelfLink pulumi.StringOutput `pulumi:"selfLink"` + // URL to networkservices.ServiceLbPolicy resource. + // Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + ServiceLbPolicy pulumi.StringPtrOutput `pulumi:"serviceLbPolicy"` // Type of session affinity to use. The default is NONE. Session affinity is // not applicable if the protocol is UDP. // Possible values are: `NONE`, `CLIENT_IP`, `CLIENT_IP_PORT_PROTO`, `CLIENT_IP_PROTO`, `GENERATED_COOKIE`, `HEADER_FIELD`, `HTTP_COOKIE`. @@ -890,6 +893,9 @@ type backendServiceState struct { SecuritySettings *BackendServiceSecuritySettings `pulumi:"securitySettings"` // The URI of the created resource. SelfLink *string `pulumi:"selfLink"` + // URL to networkservices.ServiceLbPolicy resource. + // Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + ServiceLbPolicy *string `pulumi:"serviceLbPolicy"` // Type of session affinity to use. The default is NONE. Session affinity is // not applicable if the protocol is UDP. // Possible values are: `NONE`, `CLIENT_IP`, `CLIENT_IP_PORT_PROTO`, `CLIENT_IP_PROTO`, `GENERATED_COOKIE`, `HEADER_FIELD`, `HTTP_COOKIE`. @@ -1067,6 +1073,9 @@ type BackendServiceState struct { SecuritySettings BackendServiceSecuritySettingsPtrInput // The URI of the created resource. SelfLink pulumi.StringPtrInput + // URL to networkservices.ServiceLbPolicy resource. + // Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + ServiceLbPolicy pulumi.StringPtrInput // Type of session affinity to use. The default is NONE. Session affinity is // not applicable if the protocol is UDP. // Possible values are: `NONE`, `CLIENT_IP`, `CLIENT_IP_PORT_PROTO`, `CLIENT_IP_PROTO`, `GENERATED_COOKIE`, `HEADER_FIELD`, `HTTP_COOKIE`. @@ -1239,6 +1248,9 @@ type backendServiceArgs struct { // loadBalancingScheme set to INTERNAL_SELF_MANAGED. // Structure is documented below. SecuritySettings *BackendServiceSecuritySettings `pulumi:"securitySettings"` + // URL to networkservices.ServiceLbPolicy resource. + // Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + ServiceLbPolicy *string `pulumi:"serviceLbPolicy"` // Type of session affinity to use. The default is NONE. Session affinity is // not applicable if the protocol is UDP. // Possible values are: `NONE`, `CLIENT_IP`, `CLIENT_IP_PORT_PROTO`, `CLIENT_IP_PROTO`, `GENERATED_COOKIE`, `HEADER_FIELD`, `HTTP_COOKIE`. @@ -1408,6 +1420,9 @@ type BackendServiceArgs struct { // loadBalancingScheme set to INTERNAL_SELF_MANAGED. // Structure is documented below. SecuritySettings BackendServiceSecuritySettingsPtrInput + // URL to networkservices.ServiceLbPolicy resource. + // Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + ServiceLbPolicy pulumi.StringPtrInput // Type of session affinity to use. The default is NONE. Session affinity is // not applicable if the protocol is UDP. // Possible values are: `NONE`, `CLIENT_IP`, `CLIENT_IP_PORT_PROTO`, `CLIENT_IP_PROTO`, `GENERATED_COOKIE`, `HEADER_FIELD`, `HTTP_COOKIE`. @@ -1758,6 +1773,12 @@ func (o BackendServiceOutput) SelfLink() pulumi.StringOutput { return o.ApplyT(func(v *BackendService) pulumi.StringOutput { return v.SelfLink }).(pulumi.StringOutput) } +// URL to networkservices.ServiceLbPolicy resource. +// Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. +func (o BackendServiceOutput) ServiceLbPolicy() pulumi.StringPtrOutput { + return o.ApplyT(func(v *BackendService) pulumi.StringPtrOutput { return v.ServiceLbPolicy }).(pulumi.StringPtrOutput) +} + // Type of session affinity to use. The default is NONE. Session affinity is // not applicable if the protocol is UDP. // Possible values are: `NONE`, `CLIENT_IP`, `CLIENT_IP_PORT_PROTO`, `CLIENT_IP_PROTO`, `GENERATED_COOKIE`, `HEADER_FIELD`, `HTTP_COOKIE`. diff --git a/sdk/go/gcp/compute/disk.go b/sdk/go/gcp/compute/disk.go index ba5ba8c63a..a162f36188 100644 --- a/sdk/go/gcp/compute/disk.go +++ b/sdk/go/gcp/compute/disk.go @@ -341,6 +341,11 @@ type Disk struct { // snapshot ID would identify the exact version of the snapshot that was // used. SourceSnapshotId pulumi.StringOutput `pulumi:"sourceSnapshotId"` + // The URL of the storage pool in which the new disk is created. + // For example: + // * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + // * /projects/{project}/zones/{zone}/storagePools/{storagePool} + StoragePool pulumi.StringPtrOutput `pulumi:"storagePool"` // URL of the disk type resource describing which disk type to use to // create the disk. Provide this when creating the disk. Type pulumi.StringPtrOutput `pulumi:"type"` @@ -542,6 +547,11 @@ type diskState struct { // snapshot ID would identify the exact version of the snapshot that was // used. SourceSnapshotId *string `pulumi:"sourceSnapshotId"` + // The URL of the storage pool in which the new disk is created. + // For example: + // * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + // * /projects/{project}/zones/{zone}/storagePools/{storagePool} + StoragePool *string `pulumi:"storagePool"` // URL of the disk type resource describing which disk type to use to // create the disk. Provide this when creating the disk. Type *string `pulumi:"type"` @@ -709,6 +719,11 @@ type DiskState struct { // snapshot ID would identify the exact version of the snapshot that was // used. SourceSnapshotId pulumi.StringPtrInput + // The URL of the storage pool in which the new disk is created. + // For example: + // * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + // * /projects/{project}/zones/{zone}/storagePools/{storagePool} + StoragePool pulumi.StringPtrInput // URL of the disk type resource describing which disk type to use to // create the disk. Provide this when creating the disk. Type pulumi.StringPtrInput @@ -845,6 +860,11 @@ type diskArgs struct { // key. // Structure is documented below. SourceSnapshotEncryptionKey *DiskSourceSnapshotEncryptionKey `pulumi:"sourceSnapshotEncryptionKey"` + // The URL of the storage pool in which the new disk is created. + // For example: + // * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + // * /projects/{project}/zones/{zone}/storagePools/{storagePool} + StoragePool *string `pulumi:"storagePool"` // URL of the disk type resource describing which disk type to use to // create the disk. Provide this when creating the disk. Type *string `pulumi:"type"` @@ -975,6 +995,11 @@ type DiskArgs struct { // key. // Structure is documented below. SourceSnapshotEncryptionKey DiskSourceSnapshotEncryptionKeyPtrInput + // The URL of the storage pool in which the new disk is created. + // For example: + // * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + // * /projects/{project}/zones/{zone}/storagePools/{storagePool} + StoragePool pulumi.StringPtrInput // URL of the disk type resource describing which disk type to use to // create the disk. Provide this when creating the disk. Type pulumi.StringPtrInput @@ -1321,6 +1346,14 @@ func (o DiskOutput) SourceSnapshotId() pulumi.StringOutput { return o.ApplyT(func(v *Disk) pulumi.StringOutput { return v.SourceSnapshotId }).(pulumi.StringOutput) } +// The URL of the storage pool in which the new disk is created. +// For example: +// * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} +// * /projects/{project}/zones/{zone}/storagePools/{storagePool} +func (o DiskOutput) StoragePool() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Disk) pulumi.StringPtrOutput { return v.StoragePool }).(pulumi.StringPtrOutput) +} + // URL of the disk type resource describing which disk type to use to // create the disk. Provide this when creating the disk. func (o DiskOutput) Type() pulumi.StringPtrOutput { diff --git a/sdk/go/gcp/compute/getBackendService.go b/sdk/go/gcp/compute/getBackendService.go index bfdef1e3bc..fde5cbb0fd 100644 --- a/sdk/go/gcp/compute/getBackendService.go +++ b/sdk/go/gcp/compute/getBackendService.go @@ -78,7 +78,8 @@ type LookupBackendServiceResult struct { SecurityPolicy string `pulumi:"securityPolicy"` SecuritySettings []GetBackendServiceSecuritySetting `pulumi:"securitySettings"` // The URI of the Backend Service. - SelfLink string `pulumi:"selfLink"` + SelfLink string `pulumi:"selfLink"` + ServiceLbPolicy string `pulumi:"serviceLbPolicy"` // The Backend Service session stickiness configuration. SessionAffinity string `pulumi:"sessionAffinity"` // The number of seconds to wait for a backend to respond to a request before considering the request failed. @@ -258,6 +259,10 @@ func (o LookupBackendServiceResultOutput) SelfLink() pulumi.StringOutput { return o.ApplyT(func(v LookupBackendServiceResult) string { return v.SelfLink }).(pulumi.StringOutput) } +func (o LookupBackendServiceResultOutput) ServiceLbPolicy() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackendServiceResult) string { return v.ServiceLbPolicy }).(pulumi.StringOutput) +} + // The Backend Service session stickiness configuration. func (o LookupBackendServiceResultOutput) SessionAffinity() pulumi.StringOutput { return o.ApplyT(func(v LookupBackendServiceResult) string { return v.SessionAffinity }).(pulumi.StringOutput) diff --git a/sdk/go/gcp/compute/getDisk.go b/sdk/go/gcp/compute/getDisk.go index e1a80513f3..f28880d493 100644 --- a/sdk/go/gcp/compute/getDisk.go +++ b/sdk/go/gcp/compute/getDisk.go @@ -134,6 +134,7 @@ type LookupDiskResult struct { // snapshot ID would identify the exact version of the snapshot that was // used. SourceSnapshotId string `pulumi:"sourceSnapshotId"` + StoragePool string `pulumi:"storagePool"` // URL of the disk type resource describing which disk type to use to // create the disk. Type string `pulumi:"type"` @@ -347,6 +348,10 @@ func (o LookupDiskResultOutput) SourceSnapshotId() pulumi.StringOutput { return o.ApplyT(func(v LookupDiskResult) string { return v.SourceSnapshotId }).(pulumi.StringOutput) } +func (o LookupDiskResultOutput) StoragePool() pulumi.StringOutput { + return o.ApplyT(func(v LookupDiskResult) string { return v.StoragePool }).(pulumi.StringOutput) +} + // URL of the disk type resource describing which disk type to use to // create the disk. func (o LookupDiskResultOutput) Type() pulumi.StringOutput { diff --git a/sdk/go/gcp/compute/getInstance.go b/sdk/go/gcp/compute/getInstance.go index 9f9c8f5a9c..6740b4b94f 100644 --- a/sdk/go/gcp/compute/getInstance.go +++ b/sdk/go/gcp/compute/getInstance.go @@ -117,6 +117,7 @@ type LookupInstanceResult struct { // The network performance configuration setting for the instance, if set. Structure is documented below. NetworkPerformanceConfigs []GetInstanceNetworkPerformanceConfig `pulumi:"networkPerformanceConfigs"` Params []GetInstanceParam `pulumi:"params"` + PartnerMetadata map[string]string `pulumi:"partnerMetadata"` Project *string `pulumi:"project"` PulumiLabels map[string]string `pulumi:"pulumiLabels"` ReservationAffinities []GetInstanceReservationAffinity `pulumi:"reservationAffinities"` @@ -319,6 +320,10 @@ func (o LookupInstanceResultOutput) Params() GetInstanceParamArrayOutput { return o.ApplyT(func(v LookupInstanceResult) []GetInstanceParam { return v.Params }).(GetInstanceParamArrayOutput) } +func (o LookupInstanceResultOutput) PartnerMetadata() pulumi.StringMapOutput { + return o.ApplyT(func(v LookupInstanceResult) map[string]string { return v.PartnerMetadata }).(pulumi.StringMapOutput) +} + func (o LookupInstanceResultOutput) Project() pulumi.StringPtrOutput { return o.ApplyT(func(v LookupInstanceResult) *string { return v.Project }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/compute/getInstanceGroupManager.go b/sdk/go/gcp/compute/getInstanceGroupManager.go index 25cae272a0..0e724b5b43 100644 --- a/sdk/go/gcp/compute/getInstanceGroupManager.go +++ b/sdk/go/gcp/compute/getInstanceGroupManager.go @@ -88,12 +88,15 @@ type LookupInstanceGroupManagerResult struct { Params []GetInstanceGroupManagerParam `pulumi:"params"` Project *string `pulumi:"project"` SelfLink *string `pulumi:"selfLink"` + StandbyPolicies []GetInstanceGroupManagerStandbyPolicy `pulumi:"standbyPolicies"` StatefulDisks []GetInstanceGroupManagerStatefulDisk `pulumi:"statefulDisks"` StatefulExternalIps []GetInstanceGroupManagerStatefulExternalIp `pulumi:"statefulExternalIps"` StatefulInternalIps []GetInstanceGroupManagerStatefulInternalIp `pulumi:"statefulInternalIps"` Statuses []GetInstanceGroupManagerStatus `pulumi:"statuses"` TargetPools []string `pulumi:"targetPools"` TargetSize int `pulumi:"targetSize"` + TargetStoppedSize int `pulumi:"targetStoppedSize"` + TargetSuspendedSize int `pulumi:"targetSuspendedSize"` UpdatePolicies []GetInstanceGroupManagerUpdatePolicy `pulumi:"updatePolicies"` Versions []GetInstanceGroupManagerVersion `pulumi:"versions"` WaitForInstances bool `pulumi:"waitForInstances"` @@ -216,6 +219,12 @@ func (o LookupInstanceGroupManagerResultOutput) SelfLink() pulumi.StringPtrOutpu return o.ApplyT(func(v LookupInstanceGroupManagerResult) *string { return v.SelfLink }).(pulumi.StringPtrOutput) } +func (o LookupInstanceGroupManagerResultOutput) StandbyPolicies() GetInstanceGroupManagerStandbyPolicyArrayOutput { + return o.ApplyT(func(v LookupInstanceGroupManagerResult) []GetInstanceGroupManagerStandbyPolicy { + return v.StandbyPolicies + }).(GetInstanceGroupManagerStandbyPolicyArrayOutput) +} + func (o LookupInstanceGroupManagerResultOutput) StatefulDisks() GetInstanceGroupManagerStatefulDiskArrayOutput { return o.ApplyT(func(v LookupInstanceGroupManagerResult) []GetInstanceGroupManagerStatefulDisk { return v.StatefulDisks }).(GetInstanceGroupManagerStatefulDiskArrayOutput) } @@ -244,6 +253,14 @@ func (o LookupInstanceGroupManagerResultOutput) TargetSize() pulumi.IntOutput { return o.ApplyT(func(v LookupInstanceGroupManagerResult) int { return v.TargetSize }).(pulumi.IntOutput) } +func (o LookupInstanceGroupManagerResultOutput) TargetStoppedSize() pulumi.IntOutput { + return o.ApplyT(func(v LookupInstanceGroupManagerResult) int { return v.TargetStoppedSize }).(pulumi.IntOutput) +} + +func (o LookupInstanceGroupManagerResultOutput) TargetSuspendedSize() pulumi.IntOutput { + return o.ApplyT(func(v LookupInstanceGroupManagerResult) int { return v.TargetSuspendedSize }).(pulumi.IntOutput) +} + func (o LookupInstanceGroupManagerResultOutput) UpdatePolicies() GetInstanceGroupManagerUpdatePolicyArrayOutput { return o.ApplyT(func(v LookupInstanceGroupManagerResult) []GetInstanceGroupManagerUpdatePolicy { return v.UpdatePolicies diff --git a/sdk/go/gcp/compute/getInstanceTemplate.go b/sdk/go/gcp/compute/getInstanceTemplate.go index 50d4a81172..c3f800d649 100644 --- a/sdk/go/gcp/compute/getInstanceTemplate.go +++ b/sdk/go/gcp/compute/getInstanceTemplate.go @@ -101,6 +101,7 @@ type LookupInstanceTemplateResult struct { // The network performance configuration setting // for the instance, if set. Structure is documented below. NetworkPerformanceConfigs []GetInstanceTemplateNetworkPerformanceConfig `pulumi:"networkPerformanceConfigs"` + PartnerMetadata map[string]string `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project *string `pulumi:"project"` @@ -311,6 +312,10 @@ func (o LookupInstanceTemplateResultOutput) NetworkPerformanceConfigs() GetInsta }).(GetInstanceTemplateNetworkPerformanceConfigArrayOutput) } +func (o LookupInstanceTemplateResultOutput) PartnerMetadata() pulumi.StringMapOutput { + return o.ApplyT(func(v LookupInstanceTemplateResult) map[string]string { return v.PartnerMetadata }).(pulumi.StringMapOutput) +} + // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. func (o LookupInstanceTemplateResultOutput) Project() pulumi.StringPtrOutput { diff --git a/sdk/go/gcp/compute/getRegionInstanceTemplate.go b/sdk/go/gcp/compute/getRegionInstanceTemplate.go index 70820e1c71..64784c2b8f 100644 --- a/sdk/go/gcp/compute/getRegionInstanceTemplate.go +++ b/sdk/go/gcp/compute/getRegionInstanceTemplate.go @@ -134,6 +134,7 @@ type LookupRegionInstanceTemplateResult struct { // The network performance configuration setting // for the instance, if set. Structure is documented below. NetworkPerformanceConfigs []GetRegionInstanceTemplateNetworkPerformanceConfig `pulumi:"networkPerformanceConfigs"` + PartnerMetadata map[string]string `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project *string `pulumi:"project"` @@ -339,6 +340,10 @@ func (o LookupRegionInstanceTemplateResultOutput) NetworkPerformanceConfigs() Ge }).(GetRegionInstanceTemplateNetworkPerformanceConfigArrayOutput) } +func (o LookupRegionInstanceTemplateResultOutput) PartnerMetadata() pulumi.StringMapOutput { + return o.ApplyT(func(v LookupRegionInstanceTemplateResult) map[string]string { return v.PartnerMetadata }).(pulumi.StringMapOutput) +} + // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. func (o LookupRegionInstanceTemplateResultOutput) Project() pulumi.StringPtrOutput { diff --git a/sdk/go/gcp/compute/getSecurityPolicy.go b/sdk/go/gcp/compute/getSecurityPolicy.go new file mode 100644 index 0000000000..4e04ef83b4 --- /dev/null +++ b/sdk/go/gcp/compute/getSecurityPolicy.go @@ -0,0 +1,183 @@ +// 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 compute + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// To get more information about Google Compute Security Policy, see: +// +// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies) +// * How-to Guides +// - [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies) +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := compute.LookupSecurityPolicy(ctx, &compute.LookupSecurityPolicyArgs{ +// Name: pulumi.StringRef("my-policy"), +// Project: pulumi.StringRef("my-project"), +// }, nil) +// if err != nil { +// return err +// } +// _, err = compute.LookupSecurityPolicy(ctx, &compute.LookupSecurityPolicyArgs{ +// SelfLink: pulumi.StringRef("https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy"), +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func LookupSecurityPolicy(ctx *pulumi.Context, args *LookupSecurityPolicyArgs, opts ...pulumi.InvokeOption) (*LookupSecurityPolicyResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupSecurityPolicyResult + err := ctx.Invoke("gcp:compute/getSecurityPolicy:getSecurityPolicy", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getSecurityPolicy. +type LookupSecurityPolicyArgs struct { + // The name of the security policy. Provide either this or a `selfLink`. + Name *string `pulumi:"name"` + // The project in which the resource belongs. If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The selfLink of the security policy. Provide either this or a `name` + SelfLink *string `pulumi:"selfLink"` +} + +// A collection of values returned by getSecurityPolicy. +type LookupSecurityPolicyResult struct { + AdaptiveProtectionConfigs []GetSecurityPolicyAdaptiveProtectionConfig `pulumi:"adaptiveProtectionConfigs"` + AdvancedOptionsConfigs []GetSecurityPolicyAdvancedOptionsConfig `pulumi:"advancedOptionsConfigs"` + Description string `pulumi:"description"` + Fingerprint string `pulumi:"fingerprint"` + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + Name *string `pulumi:"name"` + Project *string `pulumi:"project"` + RecaptchaOptionsConfigs []GetSecurityPolicyRecaptchaOptionsConfig `pulumi:"recaptchaOptionsConfigs"` + Rules []GetSecurityPolicyRuleType `pulumi:"rules"` + SelfLink *string `pulumi:"selfLink"` + Type string `pulumi:"type"` +} + +func LookupSecurityPolicyOutput(ctx *pulumi.Context, args LookupSecurityPolicyOutputArgs, opts ...pulumi.InvokeOption) LookupSecurityPolicyResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (LookupSecurityPolicyResult, error) { + args := v.(LookupSecurityPolicyArgs) + r, err := LookupSecurityPolicy(ctx, &args, opts...) + var s LookupSecurityPolicyResult + if r != nil { + s = *r + } + return s, err + }).(LookupSecurityPolicyResultOutput) +} + +// A collection of arguments for invoking getSecurityPolicy. +type LookupSecurityPolicyOutputArgs struct { + // The name of the security policy. Provide either this or a `selfLink`. + Name pulumi.StringPtrInput `pulumi:"name"` + // The project in which the resource belongs. If it is not provided, the provider project is used. + Project pulumi.StringPtrInput `pulumi:"project"` + // The selfLink of the security policy. Provide either this or a `name` + SelfLink pulumi.StringPtrInput `pulumi:"selfLink"` +} + +func (LookupSecurityPolicyOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupSecurityPolicyArgs)(nil)).Elem() +} + +// A collection of values returned by getSecurityPolicy. +type LookupSecurityPolicyResultOutput struct{ *pulumi.OutputState } + +func (LookupSecurityPolicyResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupSecurityPolicyResult)(nil)).Elem() +} + +func (o LookupSecurityPolicyResultOutput) ToLookupSecurityPolicyResultOutput() LookupSecurityPolicyResultOutput { + return o +} + +func (o LookupSecurityPolicyResultOutput) ToLookupSecurityPolicyResultOutputWithContext(ctx context.Context) LookupSecurityPolicyResultOutput { + return o +} + +func (o LookupSecurityPolicyResultOutput) AdaptiveProtectionConfigs() GetSecurityPolicyAdaptiveProtectionConfigArrayOutput { + return o.ApplyT(func(v LookupSecurityPolicyResult) []GetSecurityPolicyAdaptiveProtectionConfig { + return v.AdaptiveProtectionConfigs + }).(GetSecurityPolicyAdaptiveProtectionConfigArrayOutput) +} + +func (o LookupSecurityPolicyResultOutput) AdvancedOptionsConfigs() GetSecurityPolicyAdvancedOptionsConfigArrayOutput { + return o.ApplyT(func(v LookupSecurityPolicyResult) []GetSecurityPolicyAdvancedOptionsConfig { + return v.AdvancedOptionsConfigs + }).(GetSecurityPolicyAdvancedOptionsConfigArrayOutput) +} + +func (o LookupSecurityPolicyResultOutput) Description() pulumi.StringOutput { + return o.ApplyT(func(v LookupSecurityPolicyResult) string { return v.Description }).(pulumi.StringOutput) +} + +func (o LookupSecurityPolicyResultOutput) Fingerprint() pulumi.StringOutput { + return o.ApplyT(func(v LookupSecurityPolicyResult) string { return v.Fingerprint }).(pulumi.StringOutput) +} + +// The provider-assigned unique ID for this managed resource. +func (o LookupSecurityPolicyResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupSecurityPolicyResult) string { return v.Id }).(pulumi.StringOutput) +} + +func (o LookupSecurityPolicyResultOutput) Name() pulumi.StringPtrOutput { + return o.ApplyT(func(v LookupSecurityPolicyResult) *string { return v.Name }).(pulumi.StringPtrOutput) +} + +func (o LookupSecurityPolicyResultOutput) Project() pulumi.StringPtrOutput { + return o.ApplyT(func(v LookupSecurityPolicyResult) *string { return v.Project }).(pulumi.StringPtrOutput) +} + +func (o LookupSecurityPolicyResultOutput) RecaptchaOptionsConfigs() GetSecurityPolicyRecaptchaOptionsConfigArrayOutput { + return o.ApplyT(func(v LookupSecurityPolicyResult) []GetSecurityPolicyRecaptchaOptionsConfig { + return v.RecaptchaOptionsConfigs + }).(GetSecurityPolicyRecaptchaOptionsConfigArrayOutput) +} + +func (o LookupSecurityPolicyResultOutput) Rules() GetSecurityPolicyRuleTypeArrayOutput { + return o.ApplyT(func(v LookupSecurityPolicyResult) []GetSecurityPolicyRuleType { return v.Rules }).(GetSecurityPolicyRuleTypeArrayOutput) +} + +func (o LookupSecurityPolicyResultOutput) SelfLink() pulumi.StringPtrOutput { + return o.ApplyT(func(v LookupSecurityPolicyResult) *string { return v.SelfLink }).(pulumi.StringPtrOutput) +} + +func (o LookupSecurityPolicyResultOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v LookupSecurityPolicyResult) string { return v.Type }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupSecurityPolicyResultOutput{}) +} diff --git a/sdk/go/gcp/compute/init.go b/sdk/go/gcp/compute/init.go index 8994fa4708..01d531e048 100644 --- a/sdk/go/gcp/compute/init.go +++ b/sdk/go/gcp/compute/init.go @@ -173,6 +173,8 @@ func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi r = &PacketMirroring{} case "gcp:compute/perInstanceConfig:PerInstanceConfig": r = &PerInstanceConfig{} + case "gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier": + r = &ProjectCloudArmorTier{} case "gcp:compute/projectDefaultNetworkTier:ProjectDefaultNetworkTier": r = &ProjectDefaultNetworkTier{} case "gcp:compute/projectMetadata:ProjectMetadata": @@ -698,6 +700,11 @@ func init() { "compute/perInstanceConfig", &module{version}, ) + pulumi.RegisterResourceModule( + "gcp", + "compute/projectCloudArmorTier", + &module{version}, + ) pulumi.RegisterResourceModule( "gcp", "compute/projectDefaultNetworkTier", diff --git a/sdk/go/gcp/compute/instance.go b/sdk/go/gcp/compute/instance.go index bc0a5dcd6e..a9b2c3b76c 100644 --- a/sdk/go/gcp/compute/instance.go +++ b/sdk/go/gcp/compute/instance.go @@ -219,6 +219,8 @@ type Instance struct { // Additional instance parameters. // . Params InstanceParamsPtrOutput `pulumi:"params"` + // Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata pulumi.StringMapOutput `pulumi:"partnerMetadata"` // 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"` @@ -402,6 +404,8 @@ type instanceState struct { // Additional instance parameters. // . Params *InstanceParams `pulumi:"params"` + // Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata map[string]string `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project *string `pulumi:"project"` @@ -542,6 +546,8 @@ type InstanceState struct { // Additional instance parameters. // . Params InstanceParamsPtrInput + // Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata pulumi.StringMapInput // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project pulumi.StringPtrInput @@ -674,6 +680,8 @@ type instanceArgs struct { // Additional instance parameters. // . Params *InstanceParams `pulumi:"params"` + // Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata map[string]string `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project *string `pulumi:"project"` @@ -797,6 +805,8 @@ type InstanceArgs struct { // Additional instance parameters. // . Params InstanceParamsPtrInput + // Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata pulumi.StringMapInput // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project pulumi.StringPtrInput @@ -1098,6 +1108,11 @@ func (o InstanceOutput) Params() InstanceParamsPtrOutput { return o.ApplyT(func(v *Instance) InstanceParamsPtrOutput { return v.Params }).(InstanceParamsPtrOutput) } +// Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. +func (o InstanceOutput) PartnerMetadata() pulumi.StringMapOutput { + return o.ApplyT(func(v *Instance) pulumi.StringMapOutput { return v.PartnerMetadata }).(pulumi.StringMapOutput) +} + // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. func (o InstanceOutput) Project() pulumi.StringOutput { diff --git a/sdk/go/gcp/compute/instanceFromMachineImage.go b/sdk/go/gcp/compute/instanceFromMachineImage.go index 9c495c07e6..9f9465baa4 100644 --- a/sdk/go/gcp/compute/instanceFromMachineImage.go +++ b/sdk/go/gcp/compute/instanceFromMachineImage.go @@ -116,6 +116,8 @@ type InstanceFromMachineImage struct { NetworkPerformanceConfig InstanceFromMachineImageNetworkPerformanceConfigOutput `pulumi:"networkPerformanceConfig"` // Stores additional params passed with the request, but not persisted as part of resource payload. Params InstanceFromMachineImageParamsOutput `pulumi:"params"` + // Partner Metadata Map made available within the instance. + PartnerMetadata pulumi.StringMapOutput `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink // nor project are provided, the provider project is used. Project pulumi.StringOutput `pulumi:"project"` @@ -254,6 +256,8 @@ type instanceFromMachineImageState struct { NetworkPerformanceConfig *InstanceFromMachineImageNetworkPerformanceConfig `pulumi:"networkPerformanceConfig"` // Stores additional params passed with the request, but not persisted as part of resource payload. Params *InstanceFromMachineImageParams `pulumi:"params"` + // Partner Metadata Map made available within the instance. + PartnerMetadata map[string]string `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink // nor project are provided, the provider project is used. Project *string `pulumi:"project"` @@ -355,6 +359,8 @@ type InstanceFromMachineImageState struct { NetworkPerformanceConfig InstanceFromMachineImageNetworkPerformanceConfigPtrInput // Stores additional params passed with the request, but not persisted as part of resource payload. Params InstanceFromMachineImageParamsPtrInput + // Partner Metadata Map made available within the instance. + PartnerMetadata pulumi.StringMapInput // The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink // nor project are provided, the provider project is used. Project pulumi.StringPtrInput @@ -443,6 +449,8 @@ type instanceFromMachineImageArgs struct { NetworkPerformanceConfig *InstanceFromMachineImageNetworkPerformanceConfig `pulumi:"networkPerformanceConfig"` // Stores additional params passed with the request, but not persisted as part of resource payload. Params *InstanceFromMachineImageParams `pulumi:"params"` + // Partner Metadata Map made available within the instance. + PartnerMetadata map[string]string `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink // nor project are provided, the provider project is used. Project *string `pulumi:"project"` @@ -520,6 +528,8 @@ type InstanceFromMachineImageArgs struct { NetworkPerformanceConfig InstanceFromMachineImageNetworkPerformanceConfigPtrInput // Stores additional params passed with the request, but not persisted as part of resource payload. Params InstanceFromMachineImageParamsPtrInput + // Partner Metadata Map made available within the instance. + PartnerMetadata pulumi.StringMapInput // The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink // nor project are provided, the provider project is used. Project pulumi.StringPtrInput @@ -792,6 +802,11 @@ func (o InstanceFromMachineImageOutput) Params() InstanceFromMachineImageParamsO return o.ApplyT(func(v *InstanceFromMachineImage) InstanceFromMachineImageParamsOutput { return v.Params }).(InstanceFromMachineImageParamsOutput) } +// Partner Metadata Map made available within the instance. +func (o InstanceFromMachineImageOutput) PartnerMetadata() pulumi.StringMapOutput { + return o.ApplyT(func(v *InstanceFromMachineImage) pulumi.StringMapOutput { return v.PartnerMetadata }).(pulumi.StringMapOutput) +} + // The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink // nor project are provided, the provider project is used. func (o InstanceFromMachineImageOutput) Project() pulumi.StringOutput { diff --git a/sdk/go/gcp/compute/instanceFromTemplate.go b/sdk/go/gcp/compute/instanceFromTemplate.go index 4987d8baa3..1d6cd225a2 100644 --- a/sdk/go/gcp/compute/instanceFromTemplate.go +++ b/sdk/go/gcp/compute/instanceFromTemplate.go @@ -144,6 +144,8 @@ type InstanceFromTemplate struct { NetworkPerformanceConfig InstanceFromTemplateNetworkPerformanceConfigOutput `pulumi:"networkPerformanceConfig"` // Stores additional params passed with the request, but not persisted as part of resource payload. Params InstanceFromTemplateParamsOutput `pulumi:"params"` + // Partner Metadata Map made available within the instance. + PartnerMetadata pulumi.StringMapOutput `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink // nor project are provided, the provider project is used. Project pulumi.StringOutput `pulumi:"project"` @@ -281,6 +283,8 @@ type instanceFromTemplateState struct { NetworkPerformanceConfig *InstanceFromTemplateNetworkPerformanceConfig `pulumi:"networkPerformanceConfig"` // Stores additional params passed with the request, but not persisted as part of resource payload. Params *InstanceFromTemplateParams `pulumi:"params"` + // Partner Metadata Map made available within the instance. + PartnerMetadata map[string]string `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink // nor project are provided, the provider project is used. Project *string `pulumi:"project"` @@ -381,6 +385,8 @@ type InstanceFromTemplateState struct { NetworkPerformanceConfig InstanceFromTemplateNetworkPerformanceConfigPtrInput // Stores additional params passed with the request, but not persisted as part of resource payload. Params InstanceFromTemplateParamsPtrInput + // Partner Metadata Map made available within the instance. + PartnerMetadata pulumi.StringMapInput // The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink // nor project are provided, the provider project is used. Project pulumi.StringPtrInput @@ -472,6 +478,8 @@ type instanceFromTemplateArgs struct { NetworkPerformanceConfig *InstanceFromTemplateNetworkPerformanceConfig `pulumi:"networkPerformanceConfig"` // Stores additional params passed with the request, but not persisted as part of resource payload. Params *InstanceFromTemplateParams `pulumi:"params"` + // Partner Metadata Map made available within the instance. + PartnerMetadata map[string]string `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink // nor project are provided, the provider project is used. Project *string `pulumi:"project"` @@ -554,6 +562,8 @@ type InstanceFromTemplateArgs struct { NetworkPerformanceConfig InstanceFromTemplateNetworkPerformanceConfigPtrInput // Stores additional params passed with the request, but not persisted as part of resource payload. Params InstanceFromTemplateParamsPtrInput + // Partner Metadata Map made available within the instance. + PartnerMetadata pulumi.StringMapInput // The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink // nor project are provided, the provider project is used. Project pulumi.StringPtrInput @@ -825,6 +835,11 @@ func (o InstanceFromTemplateOutput) Params() InstanceFromTemplateParamsOutput { return o.ApplyT(func(v *InstanceFromTemplate) InstanceFromTemplateParamsOutput { return v.Params }).(InstanceFromTemplateParamsOutput) } +// Partner Metadata Map made available within the instance. +func (o InstanceFromTemplateOutput) PartnerMetadata() pulumi.StringMapOutput { + return o.ApplyT(func(v *InstanceFromTemplate) pulumi.StringMapOutput { return v.PartnerMetadata }).(pulumi.StringMapOutput) +} + // The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink // nor project are provided, the provider project is used. func (o InstanceFromTemplateOutput) Project() pulumi.StringOutput { diff --git a/sdk/go/gcp/compute/instanceGroupManager.go b/sdk/go/gcp/compute/instanceGroupManager.go index 3671e268c4..3a34fd6925 100644 --- a/sdk/go/gcp/compute/instanceGroupManager.go +++ b/sdk/go/gcp/compute/instanceGroupManager.go @@ -131,6 +131,46 @@ import ( // // ``` // +// ### With Standby Policy (`Google-Beta` Provider) +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := compute.NewInstanceGroupManager(ctx, "igm-sr", &compute.InstanceGroupManagerArgs{ +// Name: pulumi.String("tf-sr-igm"), +// BaseInstanceName: pulumi.String("tf-sr-igm-instance"), +// Zone: pulumi.String("us-central1-a"), +// TargetSize: pulumi.Int(5), +// Versions: compute.InstanceGroupManagerVersionArray{ +// &compute.InstanceGroupManagerVersionArgs{ +// InstanceTemplate: pulumi.Any(sr_igm.SelfLink), +// Name: pulumi.String("primary"), +// }, +// }, +// StandbyPolicy: &compute.InstanceGroupManagerStandbyPolicyArgs{ +// InitialDelaySec: pulumi.Int(30), +// Mode: pulumi.String("MANUAL"), +// }, +// TargetSuspendedSize: pulumi.Int(2), +// TargetStoppedSize: pulumi.Int(1), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// // ## Import // // Instance group managers can be imported using any of these accepted formats: @@ -213,6 +253,8 @@ type InstanceGroupManager struct { Project pulumi.StringOutput `pulumi:"project"` // The URL of the created resource. SelfLink pulumi.StringOutput `pulumi:"selfLink"` + // The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + StandbyPolicy InstanceGroupManagerStandbyPolicyOutput `pulumi:"standbyPolicy"` // Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). StatefulDisks InstanceGroupManagerStatefulDiskArrayOutput `pulumi:"statefulDisks"` // External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -228,6 +270,10 @@ type InstanceGroupManager struct { // The target number of running instances for this managed 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. TargetSize pulumi.IntOutput `pulumi:"targetSize"` + // The target number of stopped instances for this managed instance group. + TargetStoppedSize pulumi.IntOutput `pulumi:"targetStoppedSize"` + // The target number of suspended instances for this managed instance group. + TargetSuspendedSize pulumi.IntOutput `pulumi:"targetSuspendedSize"` // 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). UpdatePolicy InstanceGroupManagerUpdatePolicyOutput `pulumi:"updatePolicy"` // Application versions managed by this instance group. Each @@ -336,6 +382,8 @@ type instanceGroupManagerState struct { Project *string `pulumi:"project"` // The URL of the created resource. SelfLink *string `pulumi:"selfLink"` + // The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + StandbyPolicy *InstanceGroupManagerStandbyPolicy `pulumi:"standbyPolicy"` // Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). StatefulDisks []InstanceGroupManagerStatefulDisk `pulumi:"statefulDisks"` // External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -351,6 +399,10 @@ type instanceGroupManagerState struct { // The target number of running instances for this managed 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. TargetSize *int `pulumi:"targetSize"` + // The target number of stopped instances for this managed instance group. + TargetStoppedSize *int `pulumi:"targetStoppedSize"` + // The target number of suspended instances for this managed instance group. + TargetSuspendedSize *int `pulumi:"targetSuspendedSize"` // 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). UpdatePolicy *InstanceGroupManagerUpdatePolicy `pulumi:"updatePolicy"` // Application versions managed by this instance group. Each @@ -424,6 +476,8 @@ type InstanceGroupManagerState struct { Project pulumi.StringPtrInput // The URL of the created resource. SelfLink pulumi.StringPtrInput + // The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + StandbyPolicy InstanceGroupManagerStandbyPolicyPtrInput // Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). StatefulDisks InstanceGroupManagerStatefulDiskArrayInput // External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -439,6 +493,10 @@ type InstanceGroupManagerState struct { // The target number of running instances for this managed 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. TargetSize pulumi.IntPtrInput + // The target number of stopped instances for this managed instance group. + TargetStoppedSize pulumi.IntPtrInput + // The target number of suspended instances for this managed instance group. + TargetSuspendedSize pulumi.IntPtrInput // 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). UpdatePolicy InstanceGroupManagerUpdatePolicyPtrInput // Application versions managed by this instance group. Each @@ -507,6 +565,8 @@ type instanceGroupManagerArgs 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 standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + StandbyPolicy *InstanceGroupManagerStandbyPolicy `pulumi:"standbyPolicy"` // Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). StatefulDisks []InstanceGroupManagerStatefulDisk `pulumi:"statefulDisks"` // External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -520,6 +580,10 @@ type instanceGroupManagerArgs struct { // The target number of running instances for this managed 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. TargetSize *int `pulumi:"targetSize"` + // The target number of stopped instances for this managed instance group. + TargetStoppedSize *int `pulumi:"targetStoppedSize"` + // The target number of suspended instances for this managed instance group. + TargetSuspendedSize *int `pulumi:"targetSuspendedSize"` // 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). UpdatePolicy *InstanceGroupManagerUpdatePolicy `pulumi:"updatePolicy"` // Application versions managed by this instance group. Each @@ -585,6 +649,8 @@ type InstanceGroupManagerArgs 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 standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + StandbyPolicy InstanceGroupManagerStandbyPolicyPtrInput // Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). StatefulDisks InstanceGroupManagerStatefulDiskArrayInput // External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -598,6 +664,10 @@ type InstanceGroupManagerArgs struct { // The target number of running instances for this managed 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. TargetSize pulumi.IntPtrInput + // The target number of stopped instances for this managed instance group. + TargetStoppedSize pulumi.IntPtrInput + // The target number of suspended instances for this managed instance group. + TargetSuspendedSize pulumi.IntPtrInput // 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). UpdatePolicy InstanceGroupManagerUpdatePolicyPtrInput // Application versions managed by this instance group. Each @@ -808,6 +878,11 @@ func (o InstanceGroupManagerOutput) SelfLink() pulumi.StringOutput { return o.ApplyT(func(v *InstanceGroupManager) pulumi.StringOutput { return v.SelfLink }).(pulumi.StringOutput) } +// The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) +func (o InstanceGroupManagerOutput) StandbyPolicy() InstanceGroupManagerStandbyPolicyOutput { + return o.ApplyT(func(v *InstanceGroupManager) InstanceGroupManagerStandbyPolicyOutput { return v.StandbyPolicy }).(InstanceGroupManagerStandbyPolicyOutput) +} + // Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). func (o InstanceGroupManagerOutput) StatefulDisks() InstanceGroupManagerStatefulDiskArrayOutput { return o.ApplyT(func(v *InstanceGroupManager) InstanceGroupManagerStatefulDiskArrayOutput { return v.StatefulDisks }).(InstanceGroupManagerStatefulDiskArrayOutput) @@ -845,6 +920,16 @@ func (o InstanceGroupManagerOutput) TargetSize() pulumi.IntOutput { return o.ApplyT(func(v *InstanceGroupManager) pulumi.IntOutput { return v.TargetSize }).(pulumi.IntOutput) } +// The target number of stopped instances for this managed instance group. +func (o InstanceGroupManagerOutput) TargetStoppedSize() pulumi.IntOutput { + return o.ApplyT(func(v *InstanceGroupManager) pulumi.IntOutput { return v.TargetStoppedSize }).(pulumi.IntOutput) +} + +// The target number of suspended instances for this managed instance group. +func (o InstanceGroupManagerOutput) TargetSuspendedSize() pulumi.IntOutput { + return o.ApplyT(func(v *InstanceGroupManager) pulumi.IntOutput { return v.TargetSuspendedSize }).(pulumi.IntOutput) +} + // 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). func (o InstanceGroupManagerOutput) UpdatePolicy() InstanceGroupManagerUpdatePolicyOutput { return o.ApplyT(func(v *InstanceGroupManager) InstanceGroupManagerUpdatePolicyOutput { return v.UpdatePolicy }).(InstanceGroupManagerUpdatePolicyOutput) diff --git a/sdk/go/gcp/compute/instanceTemplate.go b/sdk/go/gcp/compute/instanceTemplate.go index 8d4172464b..58f7b9f54b 100644 --- a/sdk/go/gcp/compute/instanceTemplate.go +++ b/sdk/go/gcp/compute/instanceTemplate.go @@ -344,6 +344,8 @@ type InstanceTemplate struct { // in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` // in order for this setting to take effect. NetworkPerformanceConfig InstanceTemplateNetworkPerformanceConfigPtrOutput `pulumi:"networkPerformanceConfig"` + // Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata pulumi.StringMapOutput `pulumi:"partnerMetadata"` // 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"` @@ -488,6 +490,8 @@ type instanceTemplateState struct { // in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` // in order for this setting to take effect. NetworkPerformanceConfig *InstanceTemplateNetworkPerformanceConfig `pulumi:"networkPerformanceConfig"` + // Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata map[string]string `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project *string `pulumi:"project"` @@ -592,6 +596,8 @@ type InstanceTemplateState struct { // in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` // in order for this setting to take effect. NetworkPerformanceConfig InstanceTemplateNetworkPerformanceConfigPtrInput + // Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata pulumi.StringMapInput // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project pulumi.StringPtrInput @@ -696,6 +702,8 @@ type instanceTemplateArgs struct { // in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` // in order for this setting to take effect. NetworkPerformanceConfig *InstanceTemplateNetworkPerformanceConfig `pulumi:"networkPerformanceConfig"` + // Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata map[string]string `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project *string `pulumi:"project"` @@ -788,6 +796,8 @@ type InstanceTemplateArgs struct { // in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` // in order for this setting to take effect. NetworkPerformanceConfig InstanceTemplateNetworkPerformanceConfigPtrInput + // Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata pulumi.StringMapInput // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project pulumi.StringPtrInput @@ -1032,6 +1042,11 @@ func (o InstanceTemplateOutput) NetworkPerformanceConfig() InstanceTemplateNetwo }).(InstanceTemplateNetworkPerformanceConfigPtrOutput) } +// Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. +func (o InstanceTemplateOutput) PartnerMetadata() pulumi.StringMapOutput { + return o.ApplyT(func(v *InstanceTemplate) pulumi.StringMapOutput { return v.PartnerMetadata }).(pulumi.StringMapOutput) +} + // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. func (o InstanceTemplateOutput) Project() pulumi.StringOutput { diff --git a/sdk/go/gcp/compute/projectCloudArmorTier.go b/sdk/go/gcp/compute/projectCloudArmorTier.go new file mode 100644 index 0000000000..9ecf8b21fb --- /dev/null +++ b/sdk/go/gcp/compute/projectCloudArmorTier.go @@ -0,0 +1,356 @@ +// 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 compute + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Sets the Cloud Armor tier of the project. +// +// To get more information about ProjectCloudArmorTier, see: +// +// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/projects/setCloudArmorTier) +// * How-to Guides +// - [Subscribing to Cloud Armor Enterprise](https://cloud.google.com/armor/docs/managed-protection-overview#subscribing_to_plus) +// +// ## Example Usage +// +// ### Compute Project Cloud Armor Tier Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := compute.NewProjectCloudArmorTier(ctx, "cloud_armor_tier_config", &compute.ProjectCloudArmorTierArgs{ +// CloudArmorTier: pulumi.String("CA_STANDARD"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Compute Project Cloud Armor Tier Project Set +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v7/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("your_project_id"), +// Name: pulumi.String("your_project_id"), +// OrgId: pulumi.String("123456789"), +// BillingAccount: pulumi.String("000000-0000000-0000000-000000"), +// }) +// 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 +// } +// _, err = compute.NewProjectCloudArmorTier(ctx, "cloud_armor_tier_config", &compute.ProjectCloudArmorTierArgs{ +// Project: project.ProjectId, +// CloudArmorTier: pulumi.String("CA_STANDARD"), +// }, pulumi.DependsOn([]pulumi.Resource{ +// compute, +// })) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// ProjectCloudArmorTier can be imported using any of these accepted formats: +// +// * `projects/{{project}}` +// +// * `{{project}}` +// +// When using the `pulumi import` command, ProjectCloudArmorTier can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default projects/{{project}} +// ``` +// +// ```sh +// $ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default {{project}} +// ``` +type ProjectCloudArmorTier struct { + pulumi.CustomResourceState + + // Managed protection tier to be set. + // Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + // + // *** + CloudArmorTier pulumi.StringOutput `pulumi:"cloudArmorTier"` + // 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"` +} + +// NewProjectCloudArmorTier registers a new resource with the given unique name, arguments, and options. +func NewProjectCloudArmorTier(ctx *pulumi.Context, + name string, args *ProjectCloudArmorTierArgs, opts ...pulumi.ResourceOption) (*ProjectCloudArmorTier, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.CloudArmorTier == nil { + return nil, errors.New("invalid value for required argument 'CloudArmorTier'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource ProjectCloudArmorTier + err := ctx.RegisterResource("gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetProjectCloudArmorTier gets an existing ProjectCloudArmorTier 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 GetProjectCloudArmorTier(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ProjectCloudArmorTierState, opts ...pulumi.ResourceOption) (*ProjectCloudArmorTier, error) { + var resource ProjectCloudArmorTier + err := ctx.ReadResource("gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering ProjectCloudArmorTier resources. +type projectCloudArmorTierState struct { + // Managed protection tier to be set. + // Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + // + // *** + CloudArmorTier *string `pulumi:"cloudArmorTier"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` +} + +type ProjectCloudArmorTierState struct { + // Managed protection tier to be set. + // Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + // + // *** + CloudArmorTier 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 +} + +func (ProjectCloudArmorTierState) ElementType() reflect.Type { + return reflect.TypeOf((*projectCloudArmorTierState)(nil)).Elem() +} + +type projectCloudArmorTierArgs struct { + // Managed protection tier to be set. + // Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + // + // *** + CloudArmorTier string `pulumi:"cloudArmorTier"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` +} + +// The set of arguments for constructing a ProjectCloudArmorTier resource. +type ProjectCloudArmorTierArgs struct { + // Managed protection tier to be set. + // Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + // + // *** + CloudArmorTier pulumi.StringInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput +} + +func (ProjectCloudArmorTierArgs) ElementType() reflect.Type { + return reflect.TypeOf((*projectCloudArmorTierArgs)(nil)).Elem() +} + +type ProjectCloudArmorTierInput interface { + pulumi.Input + + ToProjectCloudArmorTierOutput() ProjectCloudArmorTierOutput + ToProjectCloudArmorTierOutputWithContext(ctx context.Context) ProjectCloudArmorTierOutput +} + +func (*ProjectCloudArmorTier) ElementType() reflect.Type { + return reflect.TypeOf((**ProjectCloudArmorTier)(nil)).Elem() +} + +func (i *ProjectCloudArmorTier) ToProjectCloudArmorTierOutput() ProjectCloudArmorTierOutput { + return i.ToProjectCloudArmorTierOutputWithContext(context.Background()) +} + +func (i *ProjectCloudArmorTier) ToProjectCloudArmorTierOutputWithContext(ctx context.Context) ProjectCloudArmorTierOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectCloudArmorTierOutput) +} + +// ProjectCloudArmorTierArrayInput is an input type that accepts ProjectCloudArmorTierArray and ProjectCloudArmorTierArrayOutput values. +// You can construct a concrete instance of `ProjectCloudArmorTierArrayInput` via: +// +// ProjectCloudArmorTierArray{ ProjectCloudArmorTierArgs{...} } +type ProjectCloudArmorTierArrayInput interface { + pulumi.Input + + ToProjectCloudArmorTierArrayOutput() ProjectCloudArmorTierArrayOutput + ToProjectCloudArmorTierArrayOutputWithContext(context.Context) ProjectCloudArmorTierArrayOutput +} + +type ProjectCloudArmorTierArray []ProjectCloudArmorTierInput + +func (ProjectCloudArmorTierArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ProjectCloudArmorTier)(nil)).Elem() +} + +func (i ProjectCloudArmorTierArray) ToProjectCloudArmorTierArrayOutput() ProjectCloudArmorTierArrayOutput { + return i.ToProjectCloudArmorTierArrayOutputWithContext(context.Background()) +} + +func (i ProjectCloudArmorTierArray) ToProjectCloudArmorTierArrayOutputWithContext(ctx context.Context) ProjectCloudArmorTierArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectCloudArmorTierArrayOutput) +} + +// ProjectCloudArmorTierMapInput is an input type that accepts ProjectCloudArmorTierMap and ProjectCloudArmorTierMapOutput values. +// You can construct a concrete instance of `ProjectCloudArmorTierMapInput` via: +// +// ProjectCloudArmorTierMap{ "key": ProjectCloudArmorTierArgs{...} } +type ProjectCloudArmorTierMapInput interface { + pulumi.Input + + ToProjectCloudArmorTierMapOutput() ProjectCloudArmorTierMapOutput + ToProjectCloudArmorTierMapOutputWithContext(context.Context) ProjectCloudArmorTierMapOutput +} + +type ProjectCloudArmorTierMap map[string]ProjectCloudArmorTierInput + +func (ProjectCloudArmorTierMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ProjectCloudArmorTier)(nil)).Elem() +} + +func (i ProjectCloudArmorTierMap) ToProjectCloudArmorTierMapOutput() ProjectCloudArmorTierMapOutput { + return i.ToProjectCloudArmorTierMapOutputWithContext(context.Background()) +} + +func (i ProjectCloudArmorTierMap) ToProjectCloudArmorTierMapOutputWithContext(ctx context.Context) ProjectCloudArmorTierMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectCloudArmorTierMapOutput) +} + +type ProjectCloudArmorTierOutput struct{ *pulumi.OutputState } + +func (ProjectCloudArmorTierOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ProjectCloudArmorTier)(nil)).Elem() +} + +func (o ProjectCloudArmorTierOutput) ToProjectCloudArmorTierOutput() ProjectCloudArmorTierOutput { + return o +} + +func (o ProjectCloudArmorTierOutput) ToProjectCloudArmorTierOutputWithContext(ctx context.Context) ProjectCloudArmorTierOutput { + return o +} + +// Managed protection tier to be set. +// Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. +// +// *** +func (o ProjectCloudArmorTierOutput) CloudArmorTier() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectCloudArmorTier) pulumi.StringOutput { return v.CloudArmorTier }).(pulumi.StringOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o ProjectCloudArmorTierOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectCloudArmorTier) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +type ProjectCloudArmorTierArrayOutput struct{ *pulumi.OutputState } + +func (ProjectCloudArmorTierArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ProjectCloudArmorTier)(nil)).Elem() +} + +func (o ProjectCloudArmorTierArrayOutput) ToProjectCloudArmorTierArrayOutput() ProjectCloudArmorTierArrayOutput { + return o +} + +func (o ProjectCloudArmorTierArrayOutput) ToProjectCloudArmorTierArrayOutputWithContext(ctx context.Context) ProjectCloudArmorTierArrayOutput { + return o +} + +func (o ProjectCloudArmorTierArrayOutput) Index(i pulumi.IntInput) ProjectCloudArmorTierOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *ProjectCloudArmorTier { + return vs[0].([]*ProjectCloudArmorTier)[vs[1].(int)] + }).(ProjectCloudArmorTierOutput) +} + +type ProjectCloudArmorTierMapOutput struct{ *pulumi.OutputState } + +func (ProjectCloudArmorTierMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ProjectCloudArmorTier)(nil)).Elem() +} + +func (o ProjectCloudArmorTierMapOutput) ToProjectCloudArmorTierMapOutput() ProjectCloudArmorTierMapOutput { + return o +} + +func (o ProjectCloudArmorTierMapOutput) ToProjectCloudArmorTierMapOutputWithContext(ctx context.Context) ProjectCloudArmorTierMapOutput { + return o +} + +func (o ProjectCloudArmorTierMapOutput) MapIndex(k pulumi.StringInput) ProjectCloudArmorTierOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *ProjectCloudArmorTier { + return vs[0].(map[string]*ProjectCloudArmorTier)[vs[1].(string)] + }).(ProjectCloudArmorTierOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ProjectCloudArmorTierInput)(nil)).Elem(), &ProjectCloudArmorTier{}) + pulumi.RegisterInputType(reflect.TypeOf((*ProjectCloudArmorTierArrayInput)(nil)).Elem(), ProjectCloudArmorTierArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ProjectCloudArmorTierMapInput)(nil)).Elem(), ProjectCloudArmorTierMap{}) + pulumi.RegisterOutputType(ProjectCloudArmorTierOutput{}) + pulumi.RegisterOutputType(ProjectCloudArmorTierArrayOutput{}) + pulumi.RegisterOutputType(ProjectCloudArmorTierMapOutput{}) +} diff --git a/sdk/go/gcp/compute/pulumiTypes.go b/sdk/go/gcp/compute/pulumiTypes.go index 10a01d7a05..d0a87ba999 100644 --- a/sdk/go/gcp/compute/pulumiTypes.go +++ b/sdk/go/gcp/compute/pulumiTypes.go @@ -22632,6 +22632,166 @@ func (o InstanceGroupManagerParamsPtrOutput) ResourceManagerTags() pulumi.MapOut }).(pulumi.MapOutput) } +type InstanceGroupManagerStandbyPolicy struct { + // Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + InitialDelaySec *int `pulumi:"initialDelaySec"` + // Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + // *** + Mode *string `pulumi:"mode"` +} + +// InstanceGroupManagerStandbyPolicyInput is an input type that accepts InstanceGroupManagerStandbyPolicyArgs and InstanceGroupManagerStandbyPolicyOutput values. +// You can construct a concrete instance of `InstanceGroupManagerStandbyPolicyInput` via: +// +// InstanceGroupManagerStandbyPolicyArgs{...} +type InstanceGroupManagerStandbyPolicyInput interface { + pulumi.Input + + ToInstanceGroupManagerStandbyPolicyOutput() InstanceGroupManagerStandbyPolicyOutput + ToInstanceGroupManagerStandbyPolicyOutputWithContext(context.Context) InstanceGroupManagerStandbyPolicyOutput +} + +type InstanceGroupManagerStandbyPolicyArgs struct { + // Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + InitialDelaySec pulumi.IntPtrInput `pulumi:"initialDelaySec"` + // Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + // *** + Mode pulumi.StringPtrInput `pulumi:"mode"` +} + +func (InstanceGroupManagerStandbyPolicyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*InstanceGroupManagerStandbyPolicy)(nil)).Elem() +} + +func (i InstanceGroupManagerStandbyPolicyArgs) ToInstanceGroupManagerStandbyPolicyOutput() InstanceGroupManagerStandbyPolicyOutput { + return i.ToInstanceGroupManagerStandbyPolicyOutputWithContext(context.Background()) +} + +func (i InstanceGroupManagerStandbyPolicyArgs) ToInstanceGroupManagerStandbyPolicyOutputWithContext(ctx context.Context) InstanceGroupManagerStandbyPolicyOutput { + return pulumi.ToOutputWithContext(ctx, i).(InstanceGroupManagerStandbyPolicyOutput) +} + +func (i InstanceGroupManagerStandbyPolicyArgs) ToInstanceGroupManagerStandbyPolicyPtrOutput() InstanceGroupManagerStandbyPolicyPtrOutput { + return i.ToInstanceGroupManagerStandbyPolicyPtrOutputWithContext(context.Background()) +} + +func (i InstanceGroupManagerStandbyPolicyArgs) ToInstanceGroupManagerStandbyPolicyPtrOutputWithContext(ctx context.Context) InstanceGroupManagerStandbyPolicyPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(InstanceGroupManagerStandbyPolicyOutput).ToInstanceGroupManagerStandbyPolicyPtrOutputWithContext(ctx) +} + +// InstanceGroupManagerStandbyPolicyPtrInput is an input type that accepts InstanceGroupManagerStandbyPolicyArgs, InstanceGroupManagerStandbyPolicyPtr and InstanceGroupManagerStandbyPolicyPtrOutput values. +// You can construct a concrete instance of `InstanceGroupManagerStandbyPolicyPtrInput` via: +// +// InstanceGroupManagerStandbyPolicyArgs{...} +// +// or: +// +// nil +type InstanceGroupManagerStandbyPolicyPtrInput interface { + pulumi.Input + + ToInstanceGroupManagerStandbyPolicyPtrOutput() InstanceGroupManagerStandbyPolicyPtrOutput + ToInstanceGroupManagerStandbyPolicyPtrOutputWithContext(context.Context) InstanceGroupManagerStandbyPolicyPtrOutput +} + +type instanceGroupManagerStandbyPolicyPtrType InstanceGroupManagerStandbyPolicyArgs + +func InstanceGroupManagerStandbyPolicyPtr(v *InstanceGroupManagerStandbyPolicyArgs) InstanceGroupManagerStandbyPolicyPtrInput { + return (*instanceGroupManagerStandbyPolicyPtrType)(v) +} + +func (*instanceGroupManagerStandbyPolicyPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**InstanceGroupManagerStandbyPolicy)(nil)).Elem() +} + +func (i *instanceGroupManagerStandbyPolicyPtrType) ToInstanceGroupManagerStandbyPolicyPtrOutput() InstanceGroupManagerStandbyPolicyPtrOutput { + return i.ToInstanceGroupManagerStandbyPolicyPtrOutputWithContext(context.Background()) +} + +func (i *instanceGroupManagerStandbyPolicyPtrType) ToInstanceGroupManagerStandbyPolicyPtrOutputWithContext(ctx context.Context) InstanceGroupManagerStandbyPolicyPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(InstanceGroupManagerStandbyPolicyPtrOutput) +} + +type InstanceGroupManagerStandbyPolicyOutput struct{ *pulumi.OutputState } + +func (InstanceGroupManagerStandbyPolicyOutput) ElementType() reflect.Type { + return reflect.TypeOf((*InstanceGroupManagerStandbyPolicy)(nil)).Elem() +} + +func (o InstanceGroupManagerStandbyPolicyOutput) ToInstanceGroupManagerStandbyPolicyOutput() InstanceGroupManagerStandbyPolicyOutput { + return o +} + +func (o InstanceGroupManagerStandbyPolicyOutput) ToInstanceGroupManagerStandbyPolicyOutputWithContext(ctx context.Context) InstanceGroupManagerStandbyPolicyOutput { + return o +} + +func (o InstanceGroupManagerStandbyPolicyOutput) ToInstanceGroupManagerStandbyPolicyPtrOutput() InstanceGroupManagerStandbyPolicyPtrOutput { + return o.ToInstanceGroupManagerStandbyPolicyPtrOutputWithContext(context.Background()) +} + +func (o InstanceGroupManagerStandbyPolicyOutput) ToInstanceGroupManagerStandbyPolicyPtrOutputWithContext(ctx context.Context) InstanceGroupManagerStandbyPolicyPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v InstanceGroupManagerStandbyPolicy) *InstanceGroupManagerStandbyPolicy { + return &v + }).(InstanceGroupManagerStandbyPolicyPtrOutput) +} + +// Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. +func (o InstanceGroupManagerStandbyPolicyOutput) InitialDelaySec() pulumi.IntPtrOutput { + return o.ApplyT(func(v InstanceGroupManagerStandbyPolicy) *int { return v.InitialDelaySec }).(pulumi.IntPtrOutput) +} + +// Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. +// *** +func (o InstanceGroupManagerStandbyPolicyOutput) Mode() pulumi.StringPtrOutput { + return o.ApplyT(func(v InstanceGroupManagerStandbyPolicy) *string { return v.Mode }).(pulumi.StringPtrOutput) +} + +type InstanceGroupManagerStandbyPolicyPtrOutput struct{ *pulumi.OutputState } + +func (InstanceGroupManagerStandbyPolicyPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**InstanceGroupManagerStandbyPolicy)(nil)).Elem() +} + +func (o InstanceGroupManagerStandbyPolicyPtrOutput) ToInstanceGroupManagerStandbyPolicyPtrOutput() InstanceGroupManagerStandbyPolicyPtrOutput { + return o +} + +func (o InstanceGroupManagerStandbyPolicyPtrOutput) ToInstanceGroupManagerStandbyPolicyPtrOutputWithContext(ctx context.Context) InstanceGroupManagerStandbyPolicyPtrOutput { + return o +} + +func (o InstanceGroupManagerStandbyPolicyPtrOutput) Elem() InstanceGroupManagerStandbyPolicyOutput { + return o.ApplyT(func(v *InstanceGroupManagerStandbyPolicy) InstanceGroupManagerStandbyPolicy { + if v != nil { + return *v + } + var ret InstanceGroupManagerStandbyPolicy + return ret + }).(InstanceGroupManagerStandbyPolicyOutput) +} + +// Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. +func (o InstanceGroupManagerStandbyPolicyPtrOutput) InitialDelaySec() pulumi.IntPtrOutput { + return o.ApplyT(func(v *InstanceGroupManagerStandbyPolicy) *int { + if v == nil { + return nil + } + return v.InitialDelaySec + }).(pulumi.IntPtrOutput) +} + +// Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. +// *** +func (o InstanceGroupManagerStandbyPolicyPtrOutput) Mode() pulumi.StringPtrOutput { + return o.ApplyT(func(v *InstanceGroupManagerStandbyPolicy) *string { + if v == nil { + return nil + } + return v.Mode + }).(pulumi.StringPtrOutput) +} + type InstanceGroupManagerStatefulDisk struct { // , A value that prescribes what should happen to the stateful disk when the VM instance is deleted. The available options are `NEVER` and `ON_PERMANENT_INSTANCE_DELETION`. `NEVER` - detach the disk when the VM is deleted, but do not delete the disk. `ON_PERMANENT_INSTANCE_DELETION` will delete the stateful disk when the VM is permanently deleted from the instance group. The default is `NEVER`. DeleteRule *string `pulumi:"deleteRule"` @@ -47218,6 +47378,166 @@ func (o RegionInstanceGroupManagerParamsPtrOutput) ResourceManagerTags() pulumi. }).(pulumi.MapOutput) } +type RegionInstanceGroupManagerStandbyPolicy struct { + // Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + InitialDelaySec *int `pulumi:"initialDelaySec"` + // Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + // *** + Mode *string `pulumi:"mode"` +} + +// RegionInstanceGroupManagerStandbyPolicyInput is an input type that accepts RegionInstanceGroupManagerStandbyPolicyArgs and RegionInstanceGroupManagerStandbyPolicyOutput values. +// You can construct a concrete instance of `RegionInstanceGroupManagerStandbyPolicyInput` via: +// +// RegionInstanceGroupManagerStandbyPolicyArgs{...} +type RegionInstanceGroupManagerStandbyPolicyInput interface { + pulumi.Input + + ToRegionInstanceGroupManagerStandbyPolicyOutput() RegionInstanceGroupManagerStandbyPolicyOutput + ToRegionInstanceGroupManagerStandbyPolicyOutputWithContext(context.Context) RegionInstanceGroupManagerStandbyPolicyOutput +} + +type RegionInstanceGroupManagerStandbyPolicyArgs struct { + // Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + InitialDelaySec pulumi.IntPtrInput `pulumi:"initialDelaySec"` + // Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + // *** + Mode pulumi.StringPtrInput `pulumi:"mode"` +} + +func (RegionInstanceGroupManagerStandbyPolicyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RegionInstanceGroupManagerStandbyPolicy)(nil)).Elem() +} + +func (i RegionInstanceGroupManagerStandbyPolicyArgs) ToRegionInstanceGroupManagerStandbyPolicyOutput() RegionInstanceGroupManagerStandbyPolicyOutput { + return i.ToRegionInstanceGroupManagerStandbyPolicyOutputWithContext(context.Background()) +} + +func (i RegionInstanceGroupManagerStandbyPolicyArgs) ToRegionInstanceGroupManagerStandbyPolicyOutputWithContext(ctx context.Context) RegionInstanceGroupManagerStandbyPolicyOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionInstanceGroupManagerStandbyPolicyOutput) +} + +func (i RegionInstanceGroupManagerStandbyPolicyArgs) ToRegionInstanceGroupManagerStandbyPolicyPtrOutput() RegionInstanceGroupManagerStandbyPolicyPtrOutput { + return i.ToRegionInstanceGroupManagerStandbyPolicyPtrOutputWithContext(context.Background()) +} + +func (i RegionInstanceGroupManagerStandbyPolicyArgs) ToRegionInstanceGroupManagerStandbyPolicyPtrOutputWithContext(ctx context.Context) RegionInstanceGroupManagerStandbyPolicyPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionInstanceGroupManagerStandbyPolicyOutput).ToRegionInstanceGroupManagerStandbyPolicyPtrOutputWithContext(ctx) +} + +// RegionInstanceGroupManagerStandbyPolicyPtrInput is an input type that accepts RegionInstanceGroupManagerStandbyPolicyArgs, RegionInstanceGroupManagerStandbyPolicyPtr and RegionInstanceGroupManagerStandbyPolicyPtrOutput values. +// You can construct a concrete instance of `RegionInstanceGroupManagerStandbyPolicyPtrInput` via: +// +// RegionInstanceGroupManagerStandbyPolicyArgs{...} +// +// or: +// +// nil +type RegionInstanceGroupManagerStandbyPolicyPtrInput interface { + pulumi.Input + + ToRegionInstanceGroupManagerStandbyPolicyPtrOutput() RegionInstanceGroupManagerStandbyPolicyPtrOutput + ToRegionInstanceGroupManagerStandbyPolicyPtrOutputWithContext(context.Context) RegionInstanceGroupManagerStandbyPolicyPtrOutput +} + +type regionInstanceGroupManagerStandbyPolicyPtrType RegionInstanceGroupManagerStandbyPolicyArgs + +func RegionInstanceGroupManagerStandbyPolicyPtr(v *RegionInstanceGroupManagerStandbyPolicyArgs) RegionInstanceGroupManagerStandbyPolicyPtrInput { + return (*regionInstanceGroupManagerStandbyPolicyPtrType)(v) +} + +func (*regionInstanceGroupManagerStandbyPolicyPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**RegionInstanceGroupManagerStandbyPolicy)(nil)).Elem() +} + +func (i *regionInstanceGroupManagerStandbyPolicyPtrType) ToRegionInstanceGroupManagerStandbyPolicyPtrOutput() RegionInstanceGroupManagerStandbyPolicyPtrOutput { + return i.ToRegionInstanceGroupManagerStandbyPolicyPtrOutputWithContext(context.Background()) +} + +func (i *regionInstanceGroupManagerStandbyPolicyPtrType) ToRegionInstanceGroupManagerStandbyPolicyPtrOutputWithContext(ctx context.Context) RegionInstanceGroupManagerStandbyPolicyPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionInstanceGroupManagerStandbyPolicyPtrOutput) +} + +type RegionInstanceGroupManagerStandbyPolicyOutput struct{ *pulumi.OutputState } + +func (RegionInstanceGroupManagerStandbyPolicyOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RegionInstanceGroupManagerStandbyPolicy)(nil)).Elem() +} + +func (o RegionInstanceGroupManagerStandbyPolicyOutput) ToRegionInstanceGroupManagerStandbyPolicyOutput() RegionInstanceGroupManagerStandbyPolicyOutput { + return o +} + +func (o RegionInstanceGroupManagerStandbyPolicyOutput) ToRegionInstanceGroupManagerStandbyPolicyOutputWithContext(ctx context.Context) RegionInstanceGroupManagerStandbyPolicyOutput { + return o +} + +func (o RegionInstanceGroupManagerStandbyPolicyOutput) ToRegionInstanceGroupManagerStandbyPolicyPtrOutput() RegionInstanceGroupManagerStandbyPolicyPtrOutput { + return o.ToRegionInstanceGroupManagerStandbyPolicyPtrOutputWithContext(context.Background()) +} + +func (o RegionInstanceGroupManagerStandbyPolicyOutput) ToRegionInstanceGroupManagerStandbyPolicyPtrOutputWithContext(ctx context.Context) RegionInstanceGroupManagerStandbyPolicyPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v RegionInstanceGroupManagerStandbyPolicy) *RegionInstanceGroupManagerStandbyPolicy { + return &v + }).(RegionInstanceGroupManagerStandbyPolicyPtrOutput) +} + +// Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. +func (o RegionInstanceGroupManagerStandbyPolicyOutput) InitialDelaySec() pulumi.IntPtrOutput { + return o.ApplyT(func(v RegionInstanceGroupManagerStandbyPolicy) *int { return v.InitialDelaySec }).(pulumi.IntPtrOutput) +} + +// Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. +// *** +func (o RegionInstanceGroupManagerStandbyPolicyOutput) Mode() pulumi.StringPtrOutput { + return o.ApplyT(func(v RegionInstanceGroupManagerStandbyPolicy) *string { return v.Mode }).(pulumi.StringPtrOutput) +} + +type RegionInstanceGroupManagerStandbyPolicyPtrOutput struct{ *pulumi.OutputState } + +func (RegionInstanceGroupManagerStandbyPolicyPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RegionInstanceGroupManagerStandbyPolicy)(nil)).Elem() +} + +func (o RegionInstanceGroupManagerStandbyPolicyPtrOutput) ToRegionInstanceGroupManagerStandbyPolicyPtrOutput() RegionInstanceGroupManagerStandbyPolicyPtrOutput { + return o +} + +func (o RegionInstanceGroupManagerStandbyPolicyPtrOutput) ToRegionInstanceGroupManagerStandbyPolicyPtrOutputWithContext(ctx context.Context) RegionInstanceGroupManagerStandbyPolicyPtrOutput { + return o +} + +func (o RegionInstanceGroupManagerStandbyPolicyPtrOutput) Elem() RegionInstanceGroupManagerStandbyPolicyOutput { + return o.ApplyT(func(v *RegionInstanceGroupManagerStandbyPolicy) RegionInstanceGroupManagerStandbyPolicy { + if v != nil { + return *v + } + var ret RegionInstanceGroupManagerStandbyPolicy + return ret + }).(RegionInstanceGroupManagerStandbyPolicyOutput) +} + +// Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. +func (o RegionInstanceGroupManagerStandbyPolicyPtrOutput) InitialDelaySec() pulumi.IntPtrOutput { + return o.ApplyT(func(v *RegionInstanceGroupManagerStandbyPolicy) *int { + if v == nil { + return nil + } + return v.InitialDelaySec + }).(pulumi.IntPtrOutput) +} + +// Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. +// *** +func (o RegionInstanceGroupManagerStandbyPolicyPtrOutput) Mode() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RegionInstanceGroupManagerStandbyPolicy) *string { + if v == nil { + return nil + } + return v.Mode + }).(pulumi.StringPtrOutput) +} + type RegionInstanceGroupManagerStatefulDisk struct { // , A value that prescribes what should happen to the stateful disk when the VM instance is deleted. The available options are `NEVER` and `ON_PERMANENT_INSTANCE_DELETION`. `NEVER` - detach the disk when the VM is deleted, but do not delete the disk. `ON_PERMANENT_INSTANCE_DELETION` will delete the stateful disk when the VM is permanently deleted from the instance group. The default is `NEVER`. DeleteRule *string `pulumi:"deleteRule"` @@ -90099,338 +90419,6 @@ func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortPtrOutput) }).(pulumi.Float64PtrOutput) } -type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay struct { - // Specifies the value of the fixed delay interval. - // Structure is documented below. - FixedDelay URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay `pulumi:"fixedDelay"` - // The percentage of traffic (connections/operations/requests) on which delay will be introduced as part of fault injection. - // The value must be between 0.0 and 100.0 inclusive. - Percentage float64 `pulumi:"percentage"` -} - -// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayInput is an input type that accepts URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs and URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput values. -// You can construct a concrete instance of `URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayInput` via: -// -// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs{...} -type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayInput interface { - pulumi.Input - - ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput - ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutputWithContext(context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput -} - -type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs struct { - // Specifies the value of the fixed delay interval. - // Structure is documented below. - FixedDelay URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayInput `pulumi:"fixedDelay"` - // The percentage of traffic (connections/operations/requests) on which delay will be introduced as part of fault injection. - // The value must be between 0.0 and 100.0 inclusive. - Percentage pulumi.Float64Input `pulumi:"percentage"` -} - -func (URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs) ElementType() reflect.Type { - return reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay)(nil)).Elem() -} - -func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput { - return i.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutputWithContext(context.Background()) -} - -func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput { - return pulumi.ToOutputWithContext(ctx, i).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) -} - -func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { - return i.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(context.Background()) -} - -func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { - return pulumi.ToOutputWithContext(ctx, i).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput).ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(ctx) -} - -// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrInput is an input type that accepts URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs, URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtr and URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput values. -// You can construct a concrete instance of `URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrInput` via: -// -// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs{...} -// -// or: -// -// nil -type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrInput interface { - pulumi.Input - - ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput - ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput -} - -type urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrType URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs - -func URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtr(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrInput { - return (*urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrType)(v) -} - -func (*urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrType) ElementType() reflect.Type { - return reflect.TypeOf((**URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay)(nil)).Elem() -} - -func (i *urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrType) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { - return i.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(context.Background()) -} - -func (i *urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrType) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { - return pulumi.ToOutputWithContext(ctx, i).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) -} - -type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput struct{ *pulumi.OutputState } - -func (URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) ElementType() reflect.Type { - return reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay)(nil)).Elem() -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput { - return o -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput { - return o -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { - return o.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(context.Background()) -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { - return o.ApplyTWithContext(ctx, func(_ context.Context, v URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay) *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay { - return &v - }).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) -} - -// Specifies the value of the fixed delay interval. -// Structure is documented below. -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) FixedDelay() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput { - return o.ApplyT(func(v URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay { - return v.FixedDelay - }).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) -} - -// The percentage of traffic (connections/operations/requests) on which delay will be introduced as part of fault injection. -// The value must be between 0.0 and 100.0 inclusive. -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) Percentage() pulumi.Float64Output { - return o.ApplyT(func(v URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay) float64 { return v.Percentage }).(pulumi.Float64Output) -} - -type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput struct{ *pulumi.OutputState } - -func (URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) ElementType() reflect.Type { - return reflect.TypeOf((**URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay)(nil)).Elem() -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { - return o -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { - return o -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) Elem() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput { - return o.ApplyT(func(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay { - if v != nil { - return *v - } - var ret URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay - return ret - }).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) -} - -// Specifies the value of the fixed delay interval. -// Structure is documented below. -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) FixedDelay() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { - return o.ApplyT(func(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay) *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay { - if v == nil { - return nil - } - return &v.FixedDelay - }).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) -} - -// The percentage of traffic (connections/operations/requests) on which delay will be introduced as part of fault injection. -// The value must be between 0.0 and 100.0 inclusive. -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) Percentage() pulumi.Float64PtrOutput { - return o.ApplyT(func(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay) *float64 { - if v == nil { - return nil - } - return &v.Percentage - }).(pulumi.Float64PtrOutput) -} - -type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay struct { - // Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are - // represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive. - Nanos *int `pulumi:"nanos"` - // Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. - // Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years - Seconds string `pulumi:"seconds"` -} - -// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayInput is an input type that accepts URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs and URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput values. -// You can construct a concrete instance of `URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayInput` via: -// -// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs{...} -type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayInput interface { - pulumi.Input - - ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput - ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutputWithContext(context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput -} - -type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs struct { - // Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are - // represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive. - Nanos pulumi.IntPtrInput `pulumi:"nanos"` - // Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. - // Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years - Seconds pulumi.StringInput `pulumi:"seconds"` -} - -func (URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs) ElementType() reflect.Type { - return reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay)(nil)).Elem() -} - -func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput { - return i.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutputWithContext(context.Background()) -} - -func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput { - return pulumi.ToOutputWithContext(ctx, i).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) -} - -func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { - return i.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(context.Background()) -} - -func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { - return pulumi.ToOutputWithContext(ctx, i).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput).ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(ctx) -} - -// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrInput is an input type that accepts URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs, URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtr and URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput values. -// You can construct a concrete instance of `URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrInput` via: -// -// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs{...} -// -// or: -// -// nil -type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrInput interface { - pulumi.Input - - ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput - ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput -} - -type urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrType URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs - -func URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtr(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrInput { - return (*urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrType)(v) -} - -func (*urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrType) ElementType() reflect.Type { - return reflect.TypeOf((**URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay)(nil)).Elem() -} - -func (i *urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrType) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { - return i.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(context.Background()) -} - -func (i *urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrType) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { - return pulumi.ToOutputWithContext(ctx, i).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) -} - -type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput struct{ *pulumi.OutputState } - -func (URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) ElementType() reflect.Type { - return reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay)(nil)).Elem() -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput { - return o -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput { - return o -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { - return o.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(context.Background()) -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { - return o.ApplyTWithContext(ctx, func(_ context.Context, v URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay) *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay { - return &v - }).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) -} - -// Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are -// represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive. -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) Nanos() pulumi.IntPtrOutput { - return o.ApplyT(func(v URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay) *int { return v.Nanos }).(pulumi.IntPtrOutput) -} - -// Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. -// Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) Seconds() pulumi.StringOutput { - return o.ApplyT(func(v URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay) string { - return v.Seconds - }).(pulumi.StringOutput) -} - -type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput struct{ *pulumi.OutputState } - -func (URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) ElementType() reflect.Type { - return reflect.TypeOf((**URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay)(nil)).Elem() -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { - return o -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { - return o -} - -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) Elem() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput { - return o.ApplyT(func(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay { - if v != nil { - return *v - } - var ret URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay - return ret - }).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) -} - -// Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are -// represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive. -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) Nanos() pulumi.IntPtrOutput { - return o.ApplyT(func(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay) *int { - if v == nil { - return nil - } - return v.Nanos - }).(pulumi.IntPtrOutput) -} - -// Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. -// Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years -func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) Seconds() pulumi.StringPtrOutput { - return o.ApplyT(func(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay) *string { - if v == nil { - return nil - } - return &v.Seconds - }).(pulumi.StringPtrOutput) -} - func init() { pulumi.RegisterInputType(reflect.TypeOf((*AutoscalerAutoscalingPolicyInput)(nil)).Elem(), AutoscalerAutoscalingPolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*AutoscalerAutoscalingPolicyPtrInput)(nil)).Elem(), AutoscalerAutoscalingPolicyArgs{}) @@ -90674,6 +90662,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*InstanceGroupManagerNamedPortArrayInput)(nil)).Elem(), InstanceGroupManagerNamedPortArray{}) pulumi.RegisterInputType(reflect.TypeOf((*InstanceGroupManagerParamsInput)(nil)).Elem(), InstanceGroupManagerParamsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*InstanceGroupManagerParamsPtrInput)(nil)).Elem(), InstanceGroupManagerParamsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*InstanceGroupManagerStandbyPolicyInput)(nil)).Elem(), InstanceGroupManagerStandbyPolicyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*InstanceGroupManagerStandbyPolicyPtrInput)(nil)).Elem(), InstanceGroupManagerStandbyPolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*InstanceGroupManagerStatefulDiskInput)(nil)).Elem(), InstanceGroupManagerStatefulDiskArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*InstanceGroupManagerStatefulDiskArrayInput)(nil)).Elem(), InstanceGroupManagerStatefulDiskArray{}) pulumi.RegisterInputType(reflect.TypeOf((*InstanceGroupManagerStatefulExternalIpInput)(nil)).Elem(), InstanceGroupManagerStatefulExternalIpArgs{}) @@ -90950,6 +90940,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*RegionInstanceGroupManagerNamedPortArrayInput)(nil)).Elem(), RegionInstanceGroupManagerNamedPortArray{}) pulumi.RegisterInputType(reflect.TypeOf((*RegionInstanceGroupManagerParamsInput)(nil)).Elem(), RegionInstanceGroupManagerParamsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RegionInstanceGroupManagerParamsPtrInput)(nil)).Elem(), RegionInstanceGroupManagerParamsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RegionInstanceGroupManagerStandbyPolicyInput)(nil)).Elem(), RegionInstanceGroupManagerStandbyPolicyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RegionInstanceGroupManagerStandbyPolicyPtrInput)(nil)).Elem(), RegionInstanceGroupManagerStandbyPolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RegionInstanceGroupManagerStatefulDiskInput)(nil)).Elem(), RegionInstanceGroupManagerStatefulDiskArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RegionInstanceGroupManagerStatefulDiskArrayInput)(nil)).Elem(), RegionInstanceGroupManagerStatefulDiskArray{}) pulumi.RegisterInputType(reflect.TypeOf((*RegionInstanceGroupManagerStatefulExternalIpInput)(nil)).Elem(), RegionInstanceGroupManagerStatefulExternalIpArgs{}) @@ -91428,10 +91420,6 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyPtrInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortPtrInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs{}) pulumi.RegisterOutputType(AutoscalerAutoscalingPolicyOutput{}) pulumi.RegisterOutputType(AutoscalerAutoscalingPolicyPtrOutput{}) pulumi.RegisterOutputType(AutoscalerAutoscalingPolicyCpuUtilizationOutput{}) @@ -91674,6 +91662,8 @@ func init() { pulumi.RegisterOutputType(InstanceGroupManagerNamedPortArrayOutput{}) pulumi.RegisterOutputType(InstanceGroupManagerParamsOutput{}) pulumi.RegisterOutputType(InstanceGroupManagerParamsPtrOutput{}) + pulumi.RegisterOutputType(InstanceGroupManagerStandbyPolicyOutput{}) + pulumi.RegisterOutputType(InstanceGroupManagerStandbyPolicyPtrOutput{}) pulumi.RegisterOutputType(InstanceGroupManagerStatefulDiskOutput{}) pulumi.RegisterOutputType(InstanceGroupManagerStatefulDiskArrayOutput{}) pulumi.RegisterOutputType(InstanceGroupManagerStatefulExternalIpOutput{}) @@ -91950,6 +91940,8 @@ func init() { pulumi.RegisterOutputType(RegionInstanceGroupManagerNamedPortArrayOutput{}) pulumi.RegisterOutputType(RegionInstanceGroupManagerParamsOutput{}) pulumi.RegisterOutputType(RegionInstanceGroupManagerParamsPtrOutput{}) + pulumi.RegisterOutputType(RegionInstanceGroupManagerStandbyPolicyOutput{}) + pulumi.RegisterOutputType(RegionInstanceGroupManagerStandbyPolicyPtrOutput{}) pulumi.RegisterOutputType(RegionInstanceGroupManagerStatefulDiskOutput{}) pulumi.RegisterOutputType(RegionInstanceGroupManagerStatefulDiskArrayOutput{}) pulumi.RegisterOutputType(RegionInstanceGroupManagerStatefulExternalIpOutput{}) @@ -92428,8 +92420,4 @@ func init() { pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyPtrOutput{}) pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortOutput{}) pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortPtrOutput{}) - pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput{}) - pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput{}) - pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput{}) - pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput{}) } diff --git a/sdk/go/gcp/compute/pulumiTypes1.go b/sdk/go/gcp/compute/pulumiTypes1.go index 91e424583e..a4c8dd8930 100644 --- a/sdk/go/gcp/compute/pulumiTypes1.go +++ b/sdk/go/gcp/compute/pulumiTypes1.go @@ -13,6 +13,338 @@ import ( var _ = internal.GetEnvOrDefault +type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay struct { + // Specifies the value of the fixed delay interval. + // Structure is documented below. + FixedDelay URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay `pulumi:"fixedDelay"` + // The percentage of traffic (connections/operations/requests) on which delay will be introduced as part of fault injection. + // The value must be between 0.0 and 100.0 inclusive. + Percentage float64 `pulumi:"percentage"` +} + +// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayInput is an input type that accepts URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs and URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput values. +// You can construct a concrete instance of `URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayInput` via: +// +// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs{...} +type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayInput interface { + pulumi.Input + + ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput + ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutputWithContext(context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput +} + +type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs struct { + // Specifies the value of the fixed delay interval. + // Structure is documented below. + FixedDelay URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayInput `pulumi:"fixedDelay"` + // The percentage of traffic (connections/operations/requests) on which delay will be introduced as part of fault injection. + // The value must be between 0.0 and 100.0 inclusive. + Percentage pulumi.Float64Input `pulumi:"percentage"` +} + +func (URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs) ElementType() reflect.Type { + return reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay)(nil)).Elem() +} + +func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput { + return i.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutputWithContext(context.Background()) +} + +func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput { + return pulumi.ToOutputWithContext(ctx, i).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) +} + +func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { + return i.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(context.Background()) +} + +func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput).ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(ctx) +} + +// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrInput is an input type that accepts URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs, URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtr and URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput values. +// You can construct a concrete instance of `URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrInput` via: +// +// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs{...} +// +// or: +// +// nil +type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrInput interface { + pulumi.Input + + ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput + ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput +} + +type urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrType URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs + +func URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtr(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrInput { + return (*urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrType)(v) +} + +func (*urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay)(nil)).Elem() +} + +func (i *urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrType) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { + return i.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(context.Background()) +} + +func (i *urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrType) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) +} + +type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput struct{ *pulumi.OutputState } + +func (URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay)(nil)).Elem() +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput { + return o +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput { + return o +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { + return o.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(context.Background()) +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay) *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay { + return &v + }).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) +} + +// Specifies the value of the fixed delay interval. +// Structure is documented below. +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) FixedDelay() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput { + return o.ApplyT(func(v URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay { + return v.FixedDelay + }).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) +} + +// The percentage of traffic (connections/operations/requests) on which delay will be introduced as part of fault injection. +// The value must be between 0.0 and 100.0 inclusive. +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) Percentage() pulumi.Float64Output { + return o.ApplyT(func(v URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay) float64 { return v.Percentage }).(pulumi.Float64Output) +} + +type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput struct{ *pulumi.OutputState } + +func (URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay)(nil)).Elem() +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { + return o +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput { + return o +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) Elem() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput { + return o.ApplyT(func(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay { + if v != nil { + return *v + } + var ret URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay + return ret + }).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput) +} + +// Specifies the value of the fixed delay interval. +// Structure is documented below. +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) FixedDelay() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { + return o.ApplyT(func(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay) *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay { + if v == nil { + return nil + } + return &v.FixedDelay + }).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) +} + +// The percentage of traffic (connections/operations/requests) on which delay will be introduced as part of fault injection. +// The value must be between 0.0 and 100.0 inclusive. +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput) Percentage() pulumi.Float64PtrOutput { + return o.ApplyT(func(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelay) *float64 { + if v == nil { + return nil + } + return &v.Percentage + }).(pulumi.Float64PtrOutput) +} + +type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay struct { + // Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are + // represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive. + Nanos *int `pulumi:"nanos"` + // Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. + // Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years + Seconds string `pulumi:"seconds"` +} + +// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayInput is an input type that accepts URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs and URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput values. +// You can construct a concrete instance of `URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayInput` via: +// +// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs{...} +type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayInput interface { + pulumi.Input + + ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput + ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutputWithContext(context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput +} + +type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs struct { + // Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are + // represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive. + Nanos pulumi.IntPtrInput `pulumi:"nanos"` + // Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. + // Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years + Seconds pulumi.StringInput `pulumi:"seconds"` +} + +func (URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs) ElementType() reflect.Type { + return reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay)(nil)).Elem() +} + +func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput { + return i.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutputWithContext(context.Background()) +} + +func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput { + return pulumi.ToOutputWithContext(ctx, i).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) +} + +func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { + return i.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(context.Background()) +} + +func (i URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput).ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(ctx) +} + +// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrInput is an input type that accepts URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs, URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtr and URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput values. +// You can construct a concrete instance of `URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrInput` via: +// +// URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs{...} +// +// or: +// +// nil +type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrInput interface { + pulumi.Input + + ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput + ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput +} + +type urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrType URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs + +func URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtr(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrInput { + return (*urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrType)(v) +} + +func (*urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay)(nil)).Elem() +} + +func (i *urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrType) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { + return i.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(context.Background()) +} + +func (i *urlmapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrType) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) +} + +type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput struct{ *pulumi.OutputState } + +func (URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay)(nil)).Elem() +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput { + return o +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput { + return o +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { + return o.ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(context.Background()) +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay) *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay { + return &v + }).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) +} + +// Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are +// represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive. +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) Nanos() pulumi.IntPtrOutput { + return o.ApplyT(func(v URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay) *int { return v.Nanos }).(pulumi.IntPtrOutput) +} + +// Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. +// Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) Seconds() pulumi.StringOutput { + return o.ApplyT(func(v URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay) string { + return v.Seconds + }).(pulumi.StringOutput) +} + +type URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput struct{ *pulumi.OutputState } + +func (URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay)(nil)).Elem() +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { + return o +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) ToURLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutputWithContext(ctx context.Context) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput { + return o +} + +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) Elem() URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput { + return o.ApplyT(func(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay) URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay { + if v != nil { + return *v + } + var ret URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay + return ret + }).(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput) +} + +// Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are +// represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive. +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) Nanos() pulumi.IntPtrOutput { + return o.ApplyT(func(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay) *int { + if v == nil { + return nil + } + return v.Nanos + }).(pulumi.IntPtrOutput) +} + +// Span of time at a resolution of a second. Must be from 0 to 315,576,000,000 inclusive. +// Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years +func (o URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput) Seconds() pulumi.StringPtrOutput { + return o.ApplyT(func(v *URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelay) *string { + if v == nil { + return nil + } + return &v.Seconds + }).(pulumi.StringPtrOutput) +} + type URLMapPathMatcherPathRuleRouteActionRequestMirrorPolicy struct { // The full or partial URL to the BackendService resource being mirrored to. BackendService string `pulumi:"backendService"` @@ -15306,95 +15638,201 @@ func (o GetInstanceGroupManagerParamArrayOutput) Index(i pulumi.IntInput) GetIns }).(GetInstanceGroupManagerParamOutput) } -type GetInstanceGroupManagerStatefulDisk struct { - // A value that prescribes what should happen to the stateful disk when the VM instance is deleted. The available options are NEVER and ON_PERMANENT_INSTANCE_DELETION. NEVER - detach the disk when the VM is deleted, but do not delete the disk. ON_PERMANENT_INSTANCE_DELETION will delete the stateful disk when the VM is permanently deleted from the instance group. The default is NEVER. - DeleteRule string `pulumi:"deleteRule"` - // The device name of the disk to be attached. - DeviceName string `pulumi:"deviceName"` +type GetInstanceGroupManagerStandbyPolicy struct { + // Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + InitialDelaySec int `pulumi:"initialDelaySec"` + // Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. The default mode is "MANUAL". + Mode string `pulumi:"mode"` } -// GetInstanceGroupManagerStatefulDiskInput is an input type that accepts GetInstanceGroupManagerStatefulDiskArgs and GetInstanceGroupManagerStatefulDiskOutput values. -// You can construct a concrete instance of `GetInstanceGroupManagerStatefulDiskInput` via: +// GetInstanceGroupManagerStandbyPolicyInput is an input type that accepts GetInstanceGroupManagerStandbyPolicyArgs and GetInstanceGroupManagerStandbyPolicyOutput values. +// You can construct a concrete instance of `GetInstanceGroupManagerStandbyPolicyInput` via: // -// GetInstanceGroupManagerStatefulDiskArgs{...} -type GetInstanceGroupManagerStatefulDiskInput interface { +// GetInstanceGroupManagerStandbyPolicyArgs{...} +type GetInstanceGroupManagerStandbyPolicyInput interface { pulumi.Input - ToGetInstanceGroupManagerStatefulDiskOutput() GetInstanceGroupManagerStatefulDiskOutput - ToGetInstanceGroupManagerStatefulDiskOutputWithContext(context.Context) GetInstanceGroupManagerStatefulDiskOutput + ToGetInstanceGroupManagerStandbyPolicyOutput() GetInstanceGroupManagerStandbyPolicyOutput + ToGetInstanceGroupManagerStandbyPolicyOutputWithContext(context.Context) GetInstanceGroupManagerStandbyPolicyOutput } -type GetInstanceGroupManagerStatefulDiskArgs struct { - // A value that prescribes what should happen to the stateful disk when the VM instance is deleted. The available options are NEVER and ON_PERMANENT_INSTANCE_DELETION. NEVER - detach the disk when the VM is deleted, but do not delete the disk. ON_PERMANENT_INSTANCE_DELETION will delete the stateful disk when the VM is permanently deleted from the instance group. The default is NEVER. - DeleteRule pulumi.StringInput `pulumi:"deleteRule"` - // The device name of the disk to be attached. - DeviceName pulumi.StringInput `pulumi:"deviceName"` +type GetInstanceGroupManagerStandbyPolicyArgs struct { + // Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + InitialDelaySec pulumi.IntInput `pulumi:"initialDelaySec"` + // Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. The default mode is "MANUAL". + Mode pulumi.StringInput `pulumi:"mode"` } -func (GetInstanceGroupManagerStatefulDiskArgs) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceGroupManagerStatefulDisk)(nil)).Elem() +func (GetInstanceGroupManagerStandbyPolicyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceGroupManagerStandbyPolicy)(nil)).Elem() } -func (i GetInstanceGroupManagerStatefulDiskArgs) ToGetInstanceGroupManagerStatefulDiskOutput() GetInstanceGroupManagerStatefulDiskOutput { - return i.ToGetInstanceGroupManagerStatefulDiskOutputWithContext(context.Background()) +func (i GetInstanceGroupManagerStandbyPolicyArgs) ToGetInstanceGroupManagerStandbyPolicyOutput() GetInstanceGroupManagerStandbyPolicyOutput { + return i.ToGetInstanceGroupManagerStandbyPolicyOutputWithContext(context.Background()) } -func (i GetInstanceGroupManagerStatefulDiskArgs) ToGetInstanceGroupManagerStatefulDiskOutputWithContext(ctx context.Context) GetInstanceGroupManagerStatefulDiskOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceGroupManagerStatefulDiskOutput) +func (i GetInstanceGroupManagerStandbyPolicyArgs) ToGetInstanceGroupManagerStandbyPolicyOutputWithContext(ctx context.Context) GetInstanceGroupManagerStandbyPolicyOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceGroupManagerStandbyPolicyOutput) } -// GetInstanceGroupManagerStatefulDiskArrayInput is an input type that accepts GetInstanceGroupManagerStatefulDiskArray and GetInstanceGroupManagerStatefulDiskArrayOutput values. -// You can construct a concrete instance of `GetInstanceGroupManagerStatefulDiskArrayInput` via: +// GetInstanceGroupManagerStandbyPolicyArrayInput is an input type that accepts GetInstanceGroupManagerStandbyPolicyArray and GetInstanceGroupManagerStandbyPolicyArrayOutput values. +// You can construct a concrete instance of `GetInstanceGroupManagerStandbyPolicyArrayInput` via: // -// GetInstanceGroupManagerStatefulDiskArray{ GetInstanceGroupManagerStatefulDiskArgs{...} } -type GetInstanceGroupManagerStatefulDiskArrayInput interface { +// GetInstanceGroupManagerStandbyPolicyArray{ GetInstanceGroupManagerStandbyPolicyArgs{...} } +type GetInstanceGroupManagerStandbyPolicyArrayInput interface { pulumi.Input - ToGetInstanceGroupManagerStatefulDiskArrayOutput() GetInstanceGroupManagerStatefulDiskArrayOutput - ToGetInstanceGroupManagerStatefulDiskArrayOutputWithContext(context.Context) GetInstanceGroupManagerStatefulDiskArrayOutput + ToGetInstanceGroupManagerStandbyPolicyArrayOutput() GetInstanceGroupManagerStandbyPolicyArrayOutput + ToGetInstanceGroupManagerStandbyPolicyArrayOutputWithContext(context.Context) GetInstanceGroupManagerStandbyPolicyArrayOutput } -type GetInstanceGroupManagerStatefulDiskArray []GetInstanceGroupManagerStatefulDiskInput +type GetInstanceGroupManagerStandbyPolicyArray []GetInstanceGroupManagerStandbyPolicyInput -func (GetInstanceGroupManagerStatefulDiskArray) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetInstanceGroupManagerStatefulDisk)(nil)).Elem() +func (GetInstanceGroupManagerStandbyPolicyArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceGroupManagerStandbyPolicy)(nil)).Elem() } -func (i GetInstanceGroupManagerStatefulDiskArray) ToGetInstanceGroupManagerStatefulDiskArrayOutput() GetInstanceGroupManagerStatefulDiskArrayOutput { - return i.ToGetInstanceGroupManagerStatefulDiskArrayOutputWithContext(context.Background()) +func (i GetInstanceGroupManagerStandbyPolicyArray) ToGetInstanceGroupManagerStandbyPolicyArrayOutput() GetInstanceGroupManagerStandbyPolicyArrayOutput { + return i.ToGetInstanceGroupManagerStandbyPolicyArrayOutputWithContext(context.Background()) } -func (i GetInstanceGroupManagerStatefulDiskArray) ToGetInstanceGroupManagerStatefulDiskArrayOutputWithContext(ctx context.Context) GetInstanceGroupManagerStatefulDiskArrayOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceGroupManagerStatefulDiskArrayOutput) +func (i GetInstanceGroupManagerStandbyPolicyArray) ToGetInstanceGroupManagerStandbyPolicyArrayOutputWithContext(ctx context.Context) GetInstanceGroupManagerStandbyPolicyArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceGroupManagerStandbyPolicyArrayOutput) } -type GetInstanceGroupManagerStatefulDiskOutput struct{ *pulumi.OutputState } +type GetInstanceGroupManagerStandbyPolicyOutput struct{ *pulumi.OutputState } -func (GetInstanceGroupManagerStatefulDiskOutput) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceGroupManagerStatefulDisk)(nil)).Elem() +func (GetInstanceGroupManagerStandbyPolicyOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceGroupManagerStandbyPolicy)(nil)).Elem() } -func (o GetInstanceGroupManagerStatefulDiskOutput) ToGetInstanceGroupManagerStatefulDiskOutput() GetInstanceGroupManagerStatefulDiskOutput { +func (o GetInstanceGroupManagerStandbyPolicyOutput) ToGetInstanceGroupManagerStandbyPolicyOutput() GetInstanceGroupManagerStandbyPolicyOutput { return o } -func (o GetInstanceGroupManagerStatefulDiskOutput) ToGetInstanceGroupManagerStatefulDiskOutputWithContext(ctx context.Context) GetInstanceGroupManagerStatefulDiskOutput { +func (o GetInstanceGroupManagerStandbyPolicyOutput) ToGetInstanceGroupManagerStandbyPolicyOutputWithContext(ctx context.Context) GetInstanceGroupManagerStandbyPolicyOutput { return o } -// A value that prescribes what should happen to the stateful disk when the VM instance is deleted. The available options are NEVER and ON_PERMANENT_INSTANCE_DELETION. NEVER - detach the disk when the VM is deleted, but do not delete the disk. ON_PERMANENT_INSTANCE_DELETION will delete the stateful disk when the VM is permanently deleted from the instance group. The default is NEVER. -func (o GetInstanceGroupManagerStatefulDiskOutput) DeleteRule() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceGroupManagerStatefulDisk) string { return v.DeleteRule }).(pulumi.StringOutput) +// Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. +func (o GetInstanceGroupManagerStandbyPolicyOutput) InitialDelaySec() pulumi.IntOutput { + return o.ApplyT(func(v GetInstanceGroupManagerStandbyPolicy) int { return v.InitialDelaySec }).(pulumi.IntOutput) } -// The device name of the disk to be attached. -func (o GetInstanceGroupManagerStatefulDiskOutput) DeviceName() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceGroupManagerStatefulDisk) string { return v.DeviceName }).(pulumi.StringOutput) +// Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. The default mode is "MANUAL". +func (o GetInstanceGroupManagerStandbyPolicyOutput) Mode() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceGroupManagerStandbyPolicy) string { return v.Mode }).(pulumi.StringOutput) } -type GetInstanceGroupManagerStatefulDiskArrayOutput struct{ *pulumi.OutputState } +type GetInstanceGroupManagerStandbyPolicyArrayOutput struct{ *pulumi.OutputState } -func (GetInstanceGroupManagerStatefulDiskArrayOutput) ElementType() reflect.Type { +func (GetInstanceGroupManagerStandbyPolicyArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceGroupManagerStandbyPolicy)(nil)).Elem() +} + +func (o GetInstanceGroupManagerStandbyPolicyArrayOutput) ToGetInstanceGroupManagerStandbyPolicyArrayOutput() GetInstanceGroupManagerStandbyPolicyArrayOutput { + return o +} + +func (o GetInstanceGroupManagerStandbyPolicyArrayOutput) ToGetInstanceGroupManagerStandbyPolicyArrayOutputWithContext(ctx context.Context) GetInstanceGroupManagerStandbyPolicyArrayOutput { + return o +} + +func (o GetInstanceGroupManagerStandbyPolicyArrayOutput) Index(i pulumi.IntInput) GetInstanceGroupManagerStandbyPolicyOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetInstanceGroupManagerStandbyPolicy { + return vs[0].([]GetInstanceGroupManagerStandbyPolicy)[vs[1].(int)] + }).(GetInstanceGroupManagerStandbyPolicyOutput) +} + +type GetInstanceGroupManagerStatefulDisk struct { + // A value that prescribes what should happen to the stateful disk when the VM instance is deleted. The available options are NEVER and ON_PERMANENT_INSTANCE_DELETION. NEVER - detach the disk when the VM is deleted, but do not delete the disk. ON_PERMANENT_INSTANCE_DELETION will delete the stateful disk when the VM is permanently deleted from the instance group. The default is NEVER. + DeleteRule string `pulumi:"deleteRule"` + // The device name of the disk to be attached. + DeviceName string `pulumi:"deviceName"` +} + +// GetInstanceGroupManagerStatefulDiskInput is an input type that accepts GetInstanceGroupManagerStatefulDiskArgs and GetInstanceGroupManagerStatefulDiskOutput values. +// You can construct a concrete instance of `GetInstanceGroupManagerStatefulDiskInput` via: +// +// GetInstanceGroupManagerStatefulDiskArgs{...} +type GetInstanceGroupManagerStatefulDiskInput interface { + pulumi.Input + + ToGetInstanceGroupManagerStatefulDiskOutput() GetInstanceGroupManagerStatefulDiskOutput + ToGetInstanceGroupManagerStatefulDiskOutputWithContext(context.Context) GetInstanceGroupManagerStatefulDiskOutput +} + +type GetInstanceGroupManagerStatefulDiskArgs struct { + // A value that prescribes what should happen to the stateful disk when the VM instance is deleted. The available options are NEVER and ON_PERMANENT_INSTANCE_DELETION. NEVER - detach the disk when the VM is deleted, but do not delete the disk. ON_PERMANENT_INSTANCE_DELETION will delete the stateful disk when the VM is permanently deleted from the instance group. The default is NEVER. + DeleteRule pulumi.StringInput `pulumi:"deleteRule"` + // The device name of the disk to be attached. + DeviceName pulumi.StringInput `pulumi:"deviceName"` +} + +func (GetInstanceGroupManagerStatefulDiskArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceGroupManagerStatefulDisk)(nil)).Elem() +} + +func (i GetInstanceGroupManagerStatefulDiskArgs) ToGetInstanceGroupManagerStatefulDiskOutput() GetInstanceGroupManagerStatefulDiskOutput { + return i.ToGetInstanceGroupManagerStatefulDiskOutputWithContext(context.Background()) +} + +func (i GetInstanceGroupManagerStatefulDiskArgs) ToGetInstanceGroupManagerStatefulDiskOutputWithContext(ctx context.Context) GetInstanceGroupManagerStatefulDiskOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceGroupManagerStatefulDiskOutput) +} + +// GetInstanceGroupManagerStatefulDiskArrayInput is an input type that accepts GetInstanceGroupManagerStatefulDiskArray and GetInstanceGroupManagerStatefulDiskArrayOutput values. +// You can construct a concrete instance of `GetInstanceGroupManagerStatefulDiskArrayInput` via: +// +// GetInstanceGroupManagerStatefulDiskArray{ GetInstanceGroupManagerStatefulDiskArgs{...} } +type GetInstanceGroupManagerStatefulDiskArrayInput interface { + pulumi.Input + + ToGetInstanceGroupManagerStatefulDiskArrayOutput() GetInstanceGroupManagerStatefulDiskArrayOutput + ToGetInstanceGroupManagerStatefulDiskArrayOutputWithContext(context.Context) GetInstanceGroupManagerStatefulDiskArrayOutput +} + +type GetInstanceGroupManagerStatefulDiskArray []GetInstanceGroupManagerStatefulDiskInput + +func (GetInstanceGroupManagerStatefulDiskArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceGroupManagerStatefulDisk)(nil)).Elem() +} + +func (i GetInstanceGroupManagerStatefulDiskArray) ToGetInstanceGroupManagerStatefulDiskArrayOutput() GetInstanceGroupManagerStatefulDiskArrayOutput { + return i.ToGetInstanceGroupManagerStatefulDiskArrayOutputWithContext(context.Background()) +} + +func (i GetInstanceGroupManagerStatefulDiskArray) ToGetInstanceGroupManagerStatefulDiskArrayOutputWithContext(ctx context.Context) GetInstanceGroupManagerStatefulDiskArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceGroupManagerStatefulDiskArrayOutput) +} + +type GetInstanceGroupManagerStatefulDiskOutput struct{ *pulumi.OutputState } + +func (GetInstanceGroupManagerStatefulDiskOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceGroupManagerStatefulDisk)(nil)).Elem() +} + +func (o GetInstanceGroupManagerStatefulDiskOutput) ToGetInstanceGroupManagerStatefulDiskOutput() GetInstanceGroupManagerStatefulDiskOutput { + return o +} + +func (o GetInstanceGroupManagerStatefulDiskOutput) ToGetInstanceGroupManagerStatefulDiskOutputWithContext(ctx context.Context) GetInstanceGroupManagerStatefulDiskOutput { + return o +} + +// A value that prescribes what should happen to the stateful disk when the VM instance is deleted. The available options are NEVER and ON_PERMANENT_INSTANCE_DELETION. NEVER - detach the disk when the VM is deleted, but do not delete the disk. ON_PERMANENT_INSTANCE_DELETION will delete the stateful disk when the VM is permanently deleted from the instance group. The default is NEVER. +func (o GetInstanceGroupManagerStatefulDiskOutput) DeleteRule() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceGroupManagerStatefulDisk) string { return v.DeleteRule }).(pulumi.StringOutput) +} + +// The device name of the disk to be attached. +func (o GetInstanceGroupManagerStatefulDiskOutput) DeviceName() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceGroupManagerStatefulDisk) string { return v.DeviceName }).(pulumi.StringOutput) +} + +type GetInstanceGroupManagerStatefulDiskArrayOutput struct{ *pulumi.OutputState } + +func (GetInstanceGroupManagerStatefulDiskArrayOutput) ElementType() reflect.Type { return reflect.TypeOf((*[]GetInstanceGroupManagerStatefulDisk)(nil)).Elem() } @@ -30007,6 +30445,2739 @@ func (o GetRouterStatusBestRoutesForRouterArrayOutput) Index(i pulumi.IntInput) }).(GetRouterStatusBestRoutesForRouterOutput) } +type GetSecurityPolicyAdaptiveProtectionConfig struct { + // Auto Deploy Config of this security policy + AutoDeployConfigs []GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig `pulumi:"autoDeployConfigs"` + // Layer 7 DDoS Defense Config of this security policy + Layer7DdosDefenseConfigs []GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig `pulumi:"layer7DdosDefenseConfigs"` +} + +// GetSecurityPolicyAdaptiveProtectionConfigInput is an input type that accepts GetSecurityPolicyAdaptiveProtectionConfigArgs and GetSecurityPolicyAdaptiveProtectionConfigOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdaptiveProtectionConfigInput` via: +// +// GetSecurityPolicyAdaptiveProtectionConfigArgs{...} +type GetSecurityPolicyAdaptiveProtectionConfigInput interface { + pulumi.Input + + ToGetSecurityPolicyAdaptiveProtectionConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigOutput + ToGetSecurityPolicyAdaptiveProtectionConfigOutputWithContext(context.Context) GetSecurityPolicyAdaptiveProtectionConfigOutput +} + +type GetSecurityPolicyAdaptiveProtectionConfigArgs struct { + // Auto Deploy Config of this security policy + AutoDeployConfigs GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayInput `pulumi:"autoDeployConfigs"` + // Layer 7 DDoS Defense Config of this security policy + Layer7DdosDefenseConfigs GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayInput `pulumi:"layer7DdosDefenseConfigs"` +} + +func (GetSecurityPolicyAdaptiveProtectionConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigArgs) ToGetSecurityPolicyAdaptiveProtectionConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigOutput { + return i.ToGetSecurityPolicyAdaptiveProtectionConfigOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigArgs) ToGetSecurityPolicyAdaptiveProtectionConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdaptiveProtectionConfigOutput) +} + +// GetSecurityPolicyAdaptiveProtectionConfigArrayInput is an input type that accepts GetSecurityPolicyAdaptiveProtectionConfigArray and GetSecurityPolicyAdaptiveProtectionConfigArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdaptiveProtectionConfigArrayInput` via: +// +// GetSecurityPolicyAdaptiveProtectionConfigArray{ GetSecurityPolicyAdaptiveProtectionConfigArgs{...} } +type GetSecurityPolicyAdaptiveProtectionConfigArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyAdaptiveProtectionConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigArrayOutput + ToGetSecurityPolicyAdaptiveProtectionConfigArrayOutputWithContext(context.Context) GetSecurityPolicyAdaptiveProtectionConfigArrayOutput +} + +type GetSecurityPolicyAdaptiveProtectionConfigArray []GetSecurityPolicyAdaptiveProtectionConfigInput + +func (GetSecurityPolicyAdaptiveProtectionConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdaptiveProtectionConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigArray) ToGetSecurityPolicyAdaptiveProtectionConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigArrayOutput { + return i.ToGetSecurityPolicyAdaptiveProtectionConfigArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigArray) ToGetSecurityPolicyAdaptiveProtectionConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdaptiveProtectionConfigArrayOutput) +} + +type GetSecurityPolicyAdaptiveProtectionConfigOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdaptiveProtectionConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigOutput) ToGetSecurityPolicyAdaptiveProtectionConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigOutput) ToGetSecurityPolicyAdaptiveProtectionConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigOutput { + return o +} + +// Auto Deploy Config of this security policy +func (o GetSecurityPolicyAdaptiveProtectionConfigOutput) AutoDeployConfigs() GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfig) []GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig { + return v.AutoDeployConfigs + }).(GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput) +} + +// Layer 7 DDoS Defense Config of this security policy +func (o GetSecurityPolicyAdaptiveProtectionConfigOutput) Layer7DdosDefenseConfigs() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfig) []GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig { + return v.Layer7DdosDefenseConfigs + }).(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput) +} + +type GetSecurityPolicyAdaptiveProtectionConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdaptiveProtectionConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdaptiveProtectionConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigArrayOutput) ToGetSecurityPolicyAdaptiveProtectionConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigArrayOutput) ToGetSecurityPolicyAdaptiveProtectionConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyAdaptiveProtectionConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyAdaptiveProtectionConfig { + return vs[0].([]GetSecurityPolicyAdaptiveProtectionConfig)[vs[1].(int)] + }).(GetSecurityPolicyAdaptiveProtectionConfigOutput) +} + +type GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig 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"` +} + +// GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigInput is an input type that accepts GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs and GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigInput` via: +// +// GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs{...} +type GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigInput interface { + pulumi.Input + + ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput + ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutputWithContext(context.Context) GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput +} + +type GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs struct { + // Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + ConfidenceThreshold pulumi.Float64Input `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.IntInput `pulumi:"expirationSec"` + // Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + ImpactedBaselineThreshold pulumi.Float64Input `pulumi:"impactedBaselineThreshold"` + // Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + LoadThreshold pulumi.Float64Input `pulumi:"loadThreshold"` +} + +func (GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs) ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput { + return i.ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs) ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) +} + +// GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayInput is an input type that accepts GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArray and GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayInput` via: +// +// GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArray{ GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs{...} } +type GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput + ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutputWithContext(context.Context) GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput +} + +type GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArray []GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigInput + +func (GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArray) ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput { + return i.ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArray) ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput) +} + +type GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput { + return o +} + +// Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. +func (o GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ConfidenceThreshold() pulumi.Float64Output { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) float64 { + return v.ConfidenceThreshold + }).(pulumi.Float64Output) +} + +// 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 GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ExpirationSec() pulumi.IntOutput { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) int { return v.ExpirationSec }).(pulumi.IntOutput) +} + +// Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. +func (o GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ImpactedBaselineThreshold() pulumi.Float64Output { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) float64 { + return v.ImpactedBaselineThreshold + }).(pulumi.Float64Output) +} + +// Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. +func (o GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) LoadThreshold() pulumi.Float64Output { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) float64 { return v.LoadThreshold }).(pulumi.Float64Output) +} + +type GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput) ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput) ToGetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig { + return vs[0].([]GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig)[vs[1].(int)] + }).(GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig struct { + // If set to true, enables CAAP for L7 DDoS detection. + Enable bool `pulumi:"enable"` + // Rule visibility. Supported values include: "STANDARD", "PREMIUM". + RuleVisibility string `pulumi:"ruleVisibility"` +} + +// GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigInput is an input type that accepts GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs and GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigInput` via: +// +// GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs{...} +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigInput interface { + pulumi.Input + + ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput + ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutputWithContext(context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs struct { + // If set to true, enables CAAP for L7 DDoS detection. + Enable pulumi.BoolInput `pulumi:"enable"` + // Rule visibility. Supported values include: "STANDARD", "PREMIUM". + RuleVisibility pulumi.StringInput `pulumi:"ruleVisibility"` +} + +func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput { + return i.ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput) +} + +// GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayInput is an input type that accepts GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArray and GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayInput` via: +// +// GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArray{ GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs{...} } +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput + ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutputWithContext(context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArray []GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigInput + +func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArray) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput { + return i.ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArray) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput) +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput { + return o +} + +// If set to true, enables CAAP for L7 DDoS detection. +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput) Enable() pulumi.BoolOutput { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig) bool { return v.Enable }).(pulumi.BoolOutput) +} + +// Rule visibility. Supported values include: "STANDARD", "PREMIUM". +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput) RuleVisibility() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig) string { + return v.RuleVisibility + }).(pulumi.StringOutput) +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig { + return vs[0].([]GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig)[vs[1].(int)] + }).(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput) +} + +type GetSecurityPolicyAdvancedOptionsConfig struct { + // Custom configuration to apply the JSON parsing. Only applicable when JSON parsing is set to STANDARD. + JsonCustomConfigs []GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig `pulumi:"jsonCustomConfigs"` + // JSON body parsing. Supported values include: "DISABLED", "STANDARD". + JsonParsing string `pulumi:"jsonParsing"` + // Logging level. Supported values include: "NORMAL", "VERBOSE". + LogLevel string `pulumi:"logLevel"` + // An optional list of case-insensitive request header names to use for resolving the callers client IP address. + UserIpRequestHeaders []string `pulumi:"userIpRequestHeaders"` +} + +// GetSecurityPolicyAdvancedOptionsConfigInput is an input type that accepts GetSecurityPolicyAdvancedOptionsConfigArgs and GetSecurityPolicyAdvancedOptionsConfigOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdvancedOptionsConfigInput` via: +// +// GetSecurityPolicyAdvancedOptionsConfigArgs{...} +type GetSecurityPolicyAdvancedOptionsConfigInput interface { + pulumi.Input + + ToGetSecurityPolicyAdvancedOptionsConfigOutput() GetSecurityPolicyAdvancedOptionsConfigOutput + ToGetSecurityPolicyAdvancedOptionsConfigOutputWithContext(context.Context) GetSecurityPolicyAdvancedOptionsConfigOutput +} + +type GetSecurityPolicyAdvancedOptionsConfigArgs struct { + // Custom configuration to apply the JSON parsing. Only applicable when JSON parsing is set to STANDARD. + JsonCustomConfigs GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayInput `pulumi:"jsonCustomConfigs"` + // JSON body parsing. Supported values include: "DISABLED", "STANDARD". + JsonParsing pulumi.StringInput `pulumi:"jsonParsing"` + // Logging level. Supported values include: "NORMAL", "VERBOSE". + LogLevel pulumi.StringInput `pulumi:"logLevel"` + // An optional list of case-insensitive request header names to use for resolving the callers client IP address. + UserIpRequestHeaders pulumi.StringArrayInput `pulumi:"userIpRequestHeaders"` +} + +func (GetSecurityPolicyAdvancedOptionsConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdvancedOptionsConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdvancedOptionsConfigArgs) ToGetSecurityPolicyAdvancedOptionsConfigOutput() GetSecurityPolicyAdvancedOptionsConfigOutput { + return i.ToGetSecurityPolicyAdvancedOptionsConfigOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdvancedOptionsConfigArgs) ToGetSecurityPolicyAdvancedOptionsConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdvancedOptionsConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdvancedOptionsConfigOutput) +} + +// GetSecurityPolicyAdvancedOptionsConfigArrayInput is an input type that accepts GetSecurityPolicyAdvancedOptionsConfigArray and GetSecurityPolicyAdvancedOptionsConfigArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdvancedOptionsConfigArrayInput` via: +// +// GetSecurityPolicyAdvancedOptionsConfigArray{ GetSecurityPolicyAdvancedOptionsConfigArgs{...} } +type GetSecurityPolicyAdvancedOptionsConfigArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyAdvancedOptionsConfigArrayOutput() GetSecurityPolicyAdvancedOptionsConfigArrayOutput + ToGetSecurityPolicyAdvancedOptionsConfigArrayOutputWithContext(context.Context) GetSecurityPolicyAdvancedOptionsConfigArrayOutput +} + +type GetSecurityPolicyAdvancedOptionsConfigArray []GetSecurityPolicyAdvancedOptionsConfigInput + +func (GetSecurityPolicyAdvancedOptionsConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdvancedOptionsConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdvancedOptionsConfigArray) ToGetSecurityPolicyAdvancedOptionsConfigArrayOutput() GetSecurityPolicyAdvancedOptionsConfigArrayOutput { + return i.ToGetSecurityPolicyAdvancedOptionsConfigArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdvancedOptionsConfigArray) ToGetSecurityPolicyAdvancedOptionsConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdvancedOptionsConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdvancedOptionsConfigArrayOutput) +} + +type GetSecurityPolicyAdvancedOptionsConfigOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdvancedOptionsConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdvancedOptionsConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdvancedOptionsConfigOutput) ToGetSecurityPolicyAdvancedOptionsConfigOutput() GetSecurityPolicyAdvancedOptionsConfigOutput { + return o +} + +func (o GetSecurityPolicyAdvancedOptionsConfigOutput) ToGetSecurityPolicyAdvancedOptionsConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdvancedOptionsConfigOutput { + return o +} + +// Custom configuration to apply the JSON parsing. Only applicable when JSON parsing is set to STANDARD. +func (o GetSecurityPolicyAdvancedOptionsConfigOutput) JsonCustomConfigs() GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyAdvancedOptionsConfig) []GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig { + return v.JsonCustomConfigs + }).(GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput) +} + +// JSON body parsing. Supported values include: "DISABLED", "STANDARD". +func (o GetSecurityPolicyAdvancedOptionsConfigOutput) JsonParsing() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyAdvancedOptionsConfig) string { return v.JsonParsing }).(pulumi.StringOutput) +} + +// Logging level. Supported values include: "NORMAL", "VERBOSE". +func (o GetSecurityPolicyAdvancedOptionsConfigOutput) LogLevel() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyAdvancedOptionsConfig) string { return v.LogLevel }).(pulumi.StringOutput) +} + +// An optional list of case-insensitive request header names to use for resolving the callers client IP address. +func (o GetSecurityPolicyAdvancedOptionsConfigOutput) UserIpRequestHeaders() pulumi.StringArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyAdvancedOptionsConfig) []string { return v.UserIpRequestHeaders }).(pulumi.StringArrayOutput) +} + +type GetSecurityPolicyAdvancedOptionsConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdvancedOptionsConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdvancedOptionsConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdvancedOptionsConfigArrayOutput) ToGetSecurityPolicyAdvancedOptionsConfigArrayOutput() GetSecurityPolicyAdvancedOptionsConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdvancedOptionsConfigArrayOutput) ToGetSecurityPolicyAdvancedOptionsConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdvancedOptionsConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdvancedOptionsConfigArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyAdvancedOptionsConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyAdvancedOptionsConfig { + return vs[0].([]GetSecurityPolicyAdvancedOptionsConfig)[vs[1].(int)] + }).(GetSecurityPolicyAdvancedOptionsConfigOutput) +} + +type GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig struct { + // A list of custom Content-Type header values to apply the JSON parsing. + ContentTypes []string `pulumi:"contentTypes"` +} + +// GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput is an input type that accepts GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs and GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput` via: +// +// GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs{...} +type GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput interface { + pulumi.Input + + ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput() GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput + ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutputWithContext(context.Context) GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput +} + +type GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs struct { + // A list of custom Content-Type header values to apply the JSON parsing. + ContentTypes pulumi.StringArrayInput `pulumi:"contentTypes"` +} + +func (GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput() GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { + return i.ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) +} + +// GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayInput is an input type that accepts GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArray and GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayInput` via: +// +// GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArray{ GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs{...} } +type GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput() GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput + ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutputWithContext(context.Context) GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput +} + +type GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArray []GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput + +func (GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArray) ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput() GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput { + return i.ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArray) ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput) +} + +type GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput() GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { + return o +} + +func (o GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { + return o +} + +// A list of custom Content-Type header values to apply the JSON parsing. +func (o GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ContentTypes() pulumi.StringArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig) []string { return v.ContentTypes }).(pulumi.StringArrayOutput) +} + +type GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput) ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput() GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput) ToGetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig { + return vs[0].([]GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig)[vs[1].(int)] + }).(GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) +} + +type GetSecurityPolicyRecaptchaOptionsConfig struct { + // A field to supply a reCAPTCHA site key to be used for all the rules using the redirect action with the type of GOOGLE_RECAPTCHA under the security policy. The specified site key needs to be created from the reCAPTCHA API. The user is responsible for the validity of the specified site key. If not specified, a Google-managed site key is used. + RedirectSiteKey string `pulumi:"redirectSiteKey"` +} + +// GetSecurityPolicyRecaptchaOptionsConfigInput is an input type that accepts GetSecurityPolicyRecaptchaOptionsConfigArgs and GetSecurityPolicyRecaptchaOptionsConfigOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRecaptchaOptionsConfigInput` via: +// +// GetSecurityPolicyRecaptchaOptionsConfigArgs{...} +type GetSecurityPolicyRecaptchaOptionsConfigInput interface { + pulumi.Input + + ToGetSecurityPolicyRecaptchaOptionsConfigOutput() GetSecurityPolicyRecaptchaOptionsConfigOutput + ToGetSecurityPolicyRecaptchaOptionsConfigOutputWithContext(context.Context) GetSecurityPolicyRecaptchaOptionsConfigOutput +} + +type GetSecurityPolicyRecaptchaOptionsConfigArgs struct { + // A field to supply a reCAPTCHA site key to be used for all the rules using the redirect action with the type of GOOGLE_RECAPTCHA under the security policy. The specified site key needs to be created from the reCAPTCHA API. The user is responsible for the validity of the specified site key. If not specified, a Google-managed site key is used. + RedirectSiteKey pulumi.StringInput `pulumi:"redirectSiteKey"` +} + +func (GetSecurityPolicyRecaptchaOptionsConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRecaptchaOptionsConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyRecaptchaOptionsConfigArgs) ToGetSecurityPolicyRecaptchaOptionsConfigOutput() GetSecurityPolicyRecaptchaOptionsConfigOutput { + return i.ToGetSecurityPolicyRecaptchaOptionsConfigOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRecaptchaOptionsConfigArgs) ToGetSecurityPolicyRecaptchaOptionsConfigOutputWithContext(ctx context.Context) GetSecurityPolicyRecaptchaOptionsConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRecaptchaOptionsConfigOutput) +} + +// GetSecurityPolicyRecaptchaOptionsConfigArrayInput is an input type that accepts GetSecurityPolicyRecaptchaOptionsConfigArray and GetSecurityPolicyRecaptchaOptionsConfigArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRecaptchaOptionsConfigArrayInput` via: +// +// GetSecurityPolicyRecaptchaOptionsConfigArray{ GetSecurityPolicyRecaptchaOptionsConfigArgs{...} } +type GetSecurityPolicyRecaptchaOptionsConfigArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRecaptchaOptionsConfigArrayOutput() GetSecurityPolicyRecaptchaOptionsConfigArrayOutput + ToGetSecurityPolicyRecaptchaOptionsConfigArrayOutputWithContext(context.Context) GetSecurityPolicyRecaptchaOptionsConfigArrayOutput +} + +type GetSecurityPolicyRecaptchaOptionsConfigArray []GetSecurityPolicyRecaptchaOptionsConfigInput + +func (GetSecurityPolicyRecaptchaOptionsConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRecaptchaOptionsConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyRecaptchaOptionsConfigArray) ToGetSecurityPolicyRecaptchaOptionsConfigArrayOutput() GetSecurityPolicyRecaptchaOptionsConfigArrayOutput { + return i.ToGetSecurityPolicyRecaptchaOptionsConfigArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRecaptchaOptionsConfigArray) ToGetSecurityPolicyRecaptchaOptionsConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRecaptchaOptionsConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRecaptchaOptionsConfigArrayOutput) +} + +type GetSecurityPolicyRecaptchaOptionsConfigOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRecaptchaOptionsConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRecaptchaOptionsConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyRecaptchaOptionsConfigOutput) ToGetSecurityPolicyRecaptchaOptionsConfigOutput() GetSecurityPolicyRecaptchaOptionsConfigOutput { + return o +} + +func (o GetSecurityPolicyRecaptchaOptionsConfigOutput) ToGetSecurityPolicyRecaptchaOptionsConfigOutputWithContext(ctx context.Context) GetSecurityPolicyRecaptchaOptionsConfigOutput { + return o +} + +// A field to supply a reCAPTCHA site key to be used for all the rules using the redirect action with the type of GOOGLE_RECAPTCHA under the security policy. The specified site key needs to be created from the reCAPTCHA API. The user is responsible for the validity of the specified site key. If not specified, a Google-managed site key is used. +func (o GetSecurityPolicyRecaptchaOptionsConfigOutput) RedirectSiteKey() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRecaptchaOptionsConfig) string { return v.RedirectSiteKey }).(pulumi.StringOutput) +} + +type GetSecurityPolicyRecaptchaOptionsConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRecaptchaOptionsConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRecaptchaOptionsConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyRecaptchaOptionsConfigArrayOutput) ToGetSecurityPolicyRecaptchaOptionsConfigArrayOutput() GetSecurityPolicyRecaptchaOptionsConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyRecaptchaOptionsConfigArrayOutput) ToGetSecurityPolicyRecaptchaOptionsConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRecaptchaOptionsConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyRecaptchaOptionsConfigArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRecaptchaOptionsConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRecaptchaOptionsConfig { + return vs[0].([]GetSecurityPolicyRecaptchaOptionsConfig)[vs[1].(int)] + }).(GetSecurityPolicyRecaptchaOptionsConfigOutput) +} + +type GetSecurityPolicyRuleType struct { + // Action to take when match matches the request. + Action string `pulumi:"action"` + // An optional description of this rule. Max size is 64. + Description string `pulumi:"description"` + // Additional actions that are performed on headers. + HeaderActions []GetSecurityPolicyRuleHeaderAction `pulumi:"headerActions"` + // A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding action is enforced. + Matches []GetSecurityPolicyRuleMatch `pulumi:"matches"` + // Preconfigured WAF configuration to be applied for the rule. If the rule does not evaluate preconfigured WAF rules, i.e., if evaluatePreconfiguredWaf() is not used, this field will have no effect. + PreconfiguredWafConfigs []GetSecurityPolicyRulePreconfiguredWafConfig `pulumi:"preconfiguredWafConfigs"` + // When set to true, the action specified above is not enforced. Stackdriver logs for requests that trigger a preview action are annotated as such. + Preview bool `pulumi:"preview"` + // An unique positive integer indicating the priority of evaluation for a rule. Rules are evaluated from highest priority (lowest numerically) to lowest priority (highest numerically) in order. + Priority int `pulumi:"priority"` + // Rate limit threshold for this security policy. Must be specified if the action is "rateBasedBan" or "throttle". Cannot be specified for any other actions. + RateLimitOptions []GetSecurityPolicyRuleRateLimitOption `pulumi:"rateLimitOptions"` + // Parameters defining the redirect action. Cannot be specified for any other actions. + RedirectOptions []GetSecurityPolicyRuleRedirectOption `pulumi:"redirectOptions"` +} + +// GetSecurityPolicyRuleTypeInput is an input type that accepts GetSecurityPolicyRuleTypeArgs and GetSecurityPolicyRuleTypeOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleTypeInput` via: +// +// GetSecurityPolicyRuleTypeArgs{...} +type GetSecurityPolicyRuleTypeInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleTypeOutput() GetSecurityPolicyRuleTypeOutput + ToGetSecurityPolicyRuleTypeOutputWithContext(context.Context) GetSecurityPolicyRuleTypeOutput +} + +type GetSecurityPolicyRuleTypeArgs struct { + // Action to take when match matches the request. + Action pulumi.StringInput `pulumi:"action"` + // An optional description of this rule. Max size is 64. + Description pulumi.StringInput `pulumi:"description"` + // Additional actions that are performed on headers. + HeaderActions GetSecurityPolicyRuleHeaderActionArrayInput `pulumi:"headerActions"` + // A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding action is enforced. + Matches GetSecurityPolicyRuleMatchArrayInput `pulumi:"matches"` + // Preconfigured WAF configuration to be applied for the rule. If the rule does not evaluate preconfigured WAF rules, i.e., if evaluatePreconfiguredWaf() is not used, this field will have no effect. + PreconfiguredWafConfigs GetSecurityPolicyRulePreconfiguredWafConfigArrayInput `pulumi:"preconfiguredWafConfigs"` + // When set to true, the action specified above is not enforced. Stackdriver logs for requests that trigger a preview action are annotated as such. + Preview pulumi.BoolInput `pulumi:"preview"` + // An unique positive integer indicating the priority of evaluation for a rule. Rules are evaluated from highest priority (lowest numerically) to lowest priority (highest numerically) in order. + Priority pulumi.IntInput `pulumi:"priority"` + // Rate limit threshold for this security policy. Must be specified if the action is "rateBasedBan" or "throttle". Cannot be specified for any other actions. + RateLimitOptions GetSecurityPolicyRuleRateLimitOptionArrayInput `pulumi:"rateLimitOptions"` + // Parameters defining the redirect action. Cannot be specified for any other actions. + RedirectOptions GetSecurityPolicyRuleRedirectOptionArrayInput `pulumi:"redirectOptions"` +} + +func (GetSecurityPolicyRuleTypeArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleType)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleTypeArgs) ToGetSecurityPolicyRuleTypeOutput() GetSecurityPolicyRuleTypeOutput { + return i.ToGetSecurityPolicyRuleTypeOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleTypeArgs) ToGetSecurityPolicyRuleTypeOutputWithContext(ctx context.Context) GetSecurityPolicyRuleTypeOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleTypeOutput) +} + +// GetSecurityPolicyRuleTypeArrayInput is an input type that accepts GetSecurityPolicyRuleTypeArray and GetSecurityPolicyRuleTypeArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleTypeArrayInput` via: +// +// GetSecurityPolicyRuleTypeArray{ GetSecurityPolicyRuleTypeArgs{...} } +type GetSecurityPolicyRuleTypeArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleTypeArrayOutput() GetSecurityPolicyRuleTypeArrayOutput + ToGetSecurityPolicyRuleTypeArrayOutputWithContext(context.Context) GetSecurityPolicyRuleTypeArrayOutput +} + +type GetSecurityPolicyRuleTypeArray []GetSecurityPolicyRuleTypeInput + +func (GetSecurityPolicyRuleTypeArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleType)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleTypeArray) ToGetSecurityPolicyRuleTypeArrayOutput() GetSecurityPolicyRuleTypeArrayOutput { + return i.ToGetSecurityPolicyRuleTypeArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleTypeArray) ToGetSecurityPolicyRuleTypeArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleTypeArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleTypeArrayOutput) +} + +type GetSecurityPolicyRuleTypeOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleTypeOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleType)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleTypeOutput) ToGetSecurityPolicyRuleTypeOutput() GetSecurityPolicyRuleTypeOutput { + return o +} + +func (o GetSecurityPolicyRuleTypeOutput) ToGetSecurityPolicyRuleTypeOutputWithContext(ctx context.Context) GetSecurityPolicyRuleTypeOutput { + return o +} + +// Action to take when match matches the request. +func (o GetSecurityPolicyRuleTypeOutput) Action() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleType) string { return v.Action }).(pulumi.StringOutput) +} + +// An optional description of this rule. Max size is 64. +func (o GetSecurityPolicyRuleTypeOutput) Description() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleType) string { return v.Description }).(pulumi.StringOutput) +} + +// Additional actions that are performed on headers. +func (o GetSecurityPolicyRuleTypeOutput) HeaderActions() GetSecurityPolicyRuleHeaderActionArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleType) []GetSecurityPolicyRuleHeaderAction { return v.HeaderActions }).(GetSecurityPolicyRuleHeaderActionArrayOutput) +} + +// A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding action is enforced. +func (o GetSecurityPolicyRuleTypeOutput) Matches() GetSecurityPolicyRuleMatchArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleType) []GetSecurityPolicyRuleMatch { return v.Matches }).(GetSecurityPolicyRuleMatchArrayOutput) +} + +// Preconfigured WAF configuration to be applied for the rule. If the rule does not evaluate preconfigured WAF rules, i.e., if evaluatePreconfiguredWaf() is not used, this field will have no effect. +func (o GetSecurityPolicyRuleTypeOutput) PreconfiguredWafConfigs() GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleType) []GetSecurityPolicyRulePreconfiguredWafConfig { + return v.PreconfiguredWafConfigs + }).(GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput) +} + +// When set to true, the action specified above is not enforced. Stackdriver logs for requests that trigger a preview action are annotated as such. +func (o GetSecurityPolicyRuleTypeOutput) Preview() pulumi.BoolOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleType) bool { return v.Preview }).(pulumi.BoolOutput) +} + +// An unique positive integer indicating the priority of evaluation for a rule. Rules are evaluated from highest priority (lowest numerically) to lowest priority (highest numerically) in order. +func (o GetSecurityPolicyRuleTypeOutput) Priority() pulumi.IntOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleType) int { return v.Priority }).(pulumi.IntOutput) +} + +// Rate limit threshold for this security policy. Must be specified if the action is "rateBasedBan" or "throttle". Cannot be specified for any other actions. +func (o GetSecurityPolicyRuleTypeOutput) RateLimitOptions() GetSecurityPolicyRuleRateLimitOptionArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleType) []GetSecurityPolicyRuleRateLimitOption { return v.RateLimitOptions }).(GetSecurityPolicyRuleRateLimitOptionArrayOutput) +} + +// Parameters defining the redirect action. Cannot be specified for any other actions. +func (o GetSecurityPolicyRuleTypeOutput) RedirectOptions() GetSecurityPolicyRuleRedirectOptionArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleType) []GetSecurityPolicyRuleRedirectOption { return v.RedirectOptions }).(GetSecurityPolicyRuleRedirectOptionArrayOutput) +} + +type GetSecurityPolicyRuleTypeArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleTypeArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleType)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleTypeArrayOutput) ToGetSecurityPolicyRuleTypeArrayOutput() GetSecurityPolicyRuleTypeArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleTypeArrayOutput) ToGetSecurityPolicyRuleTypeArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleTypeArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleTypeArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRuleTypeOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRuleType { + return vs[0].([]GetSecurityPolicyRuleType)[vs[1].(int)] + }).(GetSecurityPolicyRuleTypeOutput) +} + +type GetSecurityPolicyRuleHeaderAction struct { + // The list of request headers to add or overwrite if they're already present. + RequestHeadersToAdds []GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd `pulumi:"requestHeadersToAdds"` +} + +// GetSecurityPolicyRuleHeaderActionInput is an input type that accepts GetSecurityPolicyRuleHeaderActionArgs and GetSecurityPolicyRuleHeaderActionOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleHeaderActionInput` via: +// +// GetSecurityPolicyRuleHeaderActionArgs{...} +type GetSecurityPolicyRuleHeaderActionInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleHeaderActionOutput() GetSecurityPolicyRuleHeaderActionOutput + ToGetSecurityPolicyRuleHeaderActionOutputWithContext(context.Context) GetSecurityPolicyRuleHeaderActionOutput +} + +type GetSecurityPolicyRuleHeaderActionArgs struct { + // The list of request headers to add or overwrite if they're already present. + RequestHeadersToAdds GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayInput `pulumi:"requestHeadersToAdds"` +} + +func (GetSecurityPolicyRuleHeaderActionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleHeaderAction)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleHeaderActionArgs) ToGetSecurityPolicyRuleHeaderActionOutput() GetSecurityPolicyRuleHeaderActionOutput { + return i.ToGetSecurityPolicyRuleHeaderActionOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleHeaderActionArgs) ToGetSecurityPolicyRuleHeaderActionOutputWithContext(ctx context.Context) GetSecurityPolicyRuleHeaderActionOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleHeaderActionOutput) +} + +// GetSecurityPolicyRuleHeaderActionArrayInput is an input type that accepts GetSecurityPolicyRuleHeaderActionArray and GetSecurityPolicyRuleHeaderActionArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleHeaderActionArrayInput` via: +// +// GetSecurityPolicyRuleHeaderActionArray{ GetSecurityPolicyRuleHeaderActionArgs{...} } +type GetSecurityPolicyRuleHeaderActionArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleHeaderActionArrayOutput() GetSecurityPolicyRuleHeaderActionArrayOutput + ToGetSecurityPolicyRuleHeaderActionArrayOutputWithContext(context.Context) GetSecurityPolicyRuleHeaderActionArrayOutput +} + +type GetSecurityPolicyRuleHeaderActionArray []GetSecurityPolicyRuleHeaderActionInput + +func (GetSecurityPolicyRuleHeaderActionArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleHeaderAction)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleHeaderActionArray) ToGetSecurityPolicyRuleHeaderActionArrayOutput() GetSecurityPolicyRuleHeaderActionArrayOutput { + return i.ToGetSecurityPolicyRuleHeaderActionArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleHeaderActionArray) ToGetSecurityPolicyRuleHeaderActionArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleHeaderActionArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleHeaderActionArrayOutput) +} + +type GetSecurityPolicyRuleHeaderActionOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleHeaderActionOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleHeaderAction)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleHeaderActionOutput) ToGetSecurityPolicyRuleHeaderActionOutput() GetSecurityPolicyRuleHeaderActionOutput { + return o +} + +func (o GetSecurityPolicyRuleHeaderActionOutput) ToGetSecurityPolicyRuleHeaderActionOutputWithContext(ctx context.Context) GetSecurityPolicyRuleHeaderActionOutput { + return o +} + +// The list of request headers to add or overwrite if they're already present. +func (o GetSecurityPolicyRuleHeaderActionOutput) RequestHeadersToAdds() GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleHeaderAction) []GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd { + return v.RequestHeadersToAdds + }).(GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput) +} + +type GetSecurityPolicyRuleHeaderActionArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleHeaderActionArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleHeaderAction)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleHeaderActionArrayOutput) ToGetSecurityPolicyRuleHeaderActionArrayOutput() GetSecurityPolicyRuleHeaderActionArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleHeaderActionArrayOutput) ToGetSecurityPolicyRuleHeaderActionArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleHeaderActionArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleHeaderActionArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRuleHeaderActionOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRuleHeaderAction { + return vs[0].([]GetSecurityPolicyRuleHeaderAction)[vs[1].(int)] + }).(GetSecurityPolicyRuleHeaderActionOutput) +} + +type GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd struct { + // The name of the header to set. + HeaderName string `pulumi:"headerName"` + // The value to set the named header to. + HeaderValue string `pulumi:"headerValue"` +} + +// GetSecurityPolicyRuleHeaderActionRequestHeadersToAddInput is an input type that accepts GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArgs and GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleHeaderActionRequestHeadersToAddInput` via: +// +// GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArgs{...} +type GetSecurityPolicyRuleHeaderActionRequestHeadersToAddInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput() GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput + ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutputWithContext(context.Context) GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput +} + +type GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArgs struct { + // The name of the header to set. + HeaderName pulumi.StringInput `pulumi:"headerName"` + // The value to set the named header to. + HeaderValue pulumi.StringInput `pulumi:"headerValue"` +} + +func (GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArgs) ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput() GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput { + return i.ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArgs) ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutputWithContext(ctx context.Context) GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput) +} + +// GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayInput is an input type that accepts GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArray and GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayInput` via: +// +// GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArray{ GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArgs{...} } +type GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput() GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput + ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutputWithContext(context.Context) GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput +} + +type GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArray []GetSecurityPolicyRuleHeaderActionRequestHeadersToAddInput + +func (GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArray) ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput() GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput { + return i.ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArray) ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput) +} + +type GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput) ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput() GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput { + return o +} + +func (o GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput) ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutputWithContext(ctx context.Context) GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput { + return o +} + +// The name of the header to set. +func (o GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput) HeaderName() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd) string { return v.HeaderName }).(pulumi.StringOutput) +} + +// The value to set the named header to. +func (o GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput) HeaderValue() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd) string { return v.HeaderValue }).(pulumi.StringOutput) +} + +type GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput) ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput() GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput) ToGetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd { + return vs[0].([]GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd)[vs[1].(int)] + }).(GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput) +} + +type GetSecurityPolicyRuleMatch struct { + // The configuration options available when specifying versioned_expr. This field must be specified if versionedExpr is specified and cannot be specified if versionedExpr is not specified. + Configs []GetSecurityPolicyRuleMatchConfig `pulumi:"configs"` + // User defined CEVAL expression. A CEVAL expression is used to specify match criteria such as origin.ip, source.region_code and contents in the request header. + Exprs []GetSecurityPolicyRuleMatchExpr `pulumi:"exprs"` + // Predefined rule expression. If this field is specified, config must also be specified. Available options: SRC_IPS_V1: Must specify the corresponding srcIpRanges field in config. + VersionedExpr string `pulumi:"versionedExpr"` +} + +// GetSecurityPolicyRuleMatchInput is an input type that accepts GetSecurityPolicyRuleMatchArgs and GetSecurityPolicyRuleMatchOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleMatchInput` via: +// +// GetSecurityPolicyRuleMatchArgs{...} +type GetSecurityPolicyRuleMatchInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleMatchOutput() GetSecurityPolicyRuleMatchOutput + ToGetSecurityPolicyRuleMatchOutputWithContext(context.Context) GetSecurityPolicyRuleMatchOutput +} + +type GetSecurityPolicyRuleMatchArgs struct { + // The configuration options available when specifying versioned_expr. This field must be specified if versionedExpr is specified and cannot be specified if versionedExpr is not specified. + Configs GetSecurityPolicyRuleMatchConfigArrayInput `pulumi:"configs"` + // User defined CEVAL expression. A CEVAL expression is used to specify match criteria such as origin.ip, source.region_code and contents in the request header. + Exprs GetSecurityPolicyRuleMatchExprArrayInput `pulumi:"exprs"` + // Predefined rule expression. If this field is specified, config must also be specified. Available options: SRC_IPS_V1: Must specify the corresponding srcIpRanges field in config. + VersionedExpr pulumi.StringInput `pulumi:"versionedExpr"` +} + +func (GetSecurityPolicyRuleMatchArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleMatch)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleMatchArgs) ToGetSecurityPolicyRuleMatchOutput() GetSecurityPolicyRuleMatchOutput { + return i.ToGetSecurityPolicyRuleMatchOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleMatchArgs) ToGetSecurityPolicyRuleMatchOutputWithContext(ctx context.Context) GetSecurityPolicyRuleMatchOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleMatchOutput) +} + +// GetSecurityPolicyRuleMatchArrayInput is an input type that accepts GetSecurityPolicyRuleMatchArray and GetSecurityPolicyRuleMatchArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleMatchArrayInput` via: +// +// GetSecurityPolicyRuleMatchArray{ GetSecurityPolicyRuleMatchArgs{...} } +type GetSecurityPolicyRuleMatchArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleMatchArrayOutput() GetSecurityPolicyRuleMatchArrayOutput + ToGetSecurityPolicyRuleMatchArrayOutputWithContext(context.Context) GetSecurityPolicyRuleMatchArrayOutput +} + +type GetSecurityPolicyRuleMatchArray []GetSecurityPolicyRuleMatchInput + +func (GetSecurityPolicyRuleMatchArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleMatch)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleMatchArray) ToGetSecurityPolicyRuleMatchArrayOutput() GetSecurityPolicyRuleMatchArrayOutput { + return i.ToGetSecurityPolicyRuleMatchArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleMatchArray) ToGetSecurityPolicyRuleMatchArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleMatchArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleMatchArrayOutput) +} + +type GetSecurityPolicyRuleMatchOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleMatchOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleMatch)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleMatchOutput) ToGetSecurityPolicyRuleMatchOutput() GetSecurityPolicyRuleMatchOutput { + return o +} + +func (o GetSecurityPolicyRuleMatchOutput) ToGetSecurityPolicyRuleMatchOutputWithContext(ctx context.Context) GetSecurityPolicyRuleMatchOutput { + return o +} + +// The configuration options available when specifying versioned_expr. This field must be specified if versionedExpr is specified and cannot be specified if versionedExpr is not specified. +func (o GetSecurityPolicyRuleMatchOutput) Configs() GetSecurityPolicyRuleMatchConfigArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleMatch) []GetSecurityPolicyRuleMatchConfig { return v.Configs }).(GetSecurityPolicyRuleMatchConfigArrayOutput) +} + +// User defined CEVAL expression. A CEVAL expression is used to specify match criteria such as origin.ip, source.region_code and contents in the request header. +func (o GetSecurityPolicyRuleMatchOutput) Exprs() GetSecurityPolicyRuleMatchExprArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleMatch) []GetSecurityPolicyRuleMatchExpr { return v.Exprs }).(GetSecurityPolicyRuleMatchExprArrayOutput) +} + +// Predefined rule expression. If this field is specified, config must also be specified. Available options: SRC_IPS_V1: Must specify the corresponding srcIpRanges field in config. +func (o GetSecurityPolicyRuleMatchOutput) VersionedExpr() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleMatch) string { return v.VersionedExpr }).(pulumi.StringOutput) +} + +type GetSecurityPolicyRuleMatchArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleMatchArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleMatch)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleMatchArrayOutput) ToGetSecurityPolicyRuleMatchArrayOutput() GetSecurityPolicyRuleMatchArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleMatchArrayOutput) ToGetSecurityPolicyRuleMatchArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleMatchArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleMatchArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRuleMatchOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRuleMatch { + return vs[0].([]GetSecurityPolicyRuleMatch)[vs[1].(int)] + }).(GetSecurityPolicyRuleMatchOutput) +} + +type GetSecurityPolicyRuleMatchConfig struct { + // Set of IP addresses or ranges (IPV4 or IPV6) in CIDR notation to match against inbound traffic. There is a limit of 10 IP ranges per rule. A value of '*' matches all IPs (can be used to override the default behavior). + SrcIpRanges []string `pulumi:"srcIpRanges"` +} + +// GetSecurityPolicyRuleMatchConfigInput is an input type that accepts GetSecurityPolicyRuleMatchConfigArgs and GetSecurityPolicyRuleMatchConfigOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleMatchConfigInput` via: +// +// GetSecurityPolicyRuleMatchConfigArgs{...} +type GetSecurityPolicyRuleMatchConfigInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleMatchConfigOutput() GetSecurityPolicyRuleMatchConfigOutput + ToGetSecurityPolicyRuleMatchConfigOutputWithContext(context.Context) GetSecurityPolicyRuleMatchConfigOutput +} + +type GetSecurityPolicyRuleMatchConfigArgs struct { + // Set of IP addresses or ranges (IPV4 or IPV6) in CIDR notation to match against inbound traffic. There is a limit of 10 IP ranges per rule. A value of '*' matches all IPs (can be used to override the default behavior). + SrcIpRanges pulumi.StringArrayInput `pulumi:"srcIpRanges"` +} + +func (GetSecurityPolicyRuleMatchConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleMatchConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleMatchConfigArgs) ToGetSecurityPolicyRuleMatchConfigOutput() GetSecurityPolicyRuleMatchConfigOutput { + return i.ToGetSecurityPolicyRuleMatchConfigOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleMatchConfigArgs) ToGetSecurityPolicyRuleMatchConfigOutputWithContext(ctx context.Context) GetSecurityPolicyRuleMatchConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleMatchConfigOutput) +} + +// GetSecurityPolicyRuleMatchConfigArrayInput is an input type that accepts GetSecurityPolicyRuleMatchConfigArray and GetSecurityPolicyRuleMatchConfigArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleMatchConfigArrayInput` via: +// +// GetSecurityPolicyRuleMatchConfigArray{ GetSecurityPolicyRuleMatchConfigArgs{...} } +type GetSecurityPolicyRuleMatchConfigArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleMatchConfigArrayOutput() GetSecurityPolicyRuleMatchConfigArrayOutput + ToGetSecurityPolicyRuleMatchConfigArrayOutputWithContext(context.Context) GetSecurityPolicyRuleMatchConfigArrayOutput +} + +type GetSecurityPolicyRuleMatchConfigArray []GetSecurityPolicyRuleMatchConfigInput + +func (GetSecurityPolicyRuleMatchConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleMatchConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleMatchConfigArray) ToGetSecurityPolicyRuleMatchConfigArrayOutput() GetSecurityPolicyRuleMatchConfigArrayOutput { + return i.ToGetSecurityPolicyRuleMatchConfigArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleMatchConfigArray) ToGetSecurityPolicyRuleMatchConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleMatchConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleMatchConfigArrayOutput) +} + +type GetSecurityPolicyRuleMatchConfigOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleMatchConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleMatchConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleMatchConfigOutput) ToGetSecurityPolicyRuleMatchConfigOutput() GetSecurityPolicyRuleMatchConfigOutput { + return o +} + +func (o GetSecurityPolicyRuleMatchConfigOutput) ToGetSecurityPolicyRuleMatchConfigOutputWithContext(ctx context.Context) GetSecurityPolicyRuleMatchConfigOutput { + return o +} + +// Set of IP addresses or ranges (IPV4 or IPV6) in CIDR notation to match against inbound traffic. There is a limit of 10 IP ranges per rule. A value of '*' matches all IPs (can be used to override the default behavior). +func (o GetSecurityPolicyRuleMatchConfigOutput) SrcIpRanges() pulumi.StringArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleMatchConfig) []string { return v.SrcIpRanges }).(pulumi.StringArrayOutput) +} + +type GetSecurityPolicyRuleMatchConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleMatchConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleMatchConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleMatchConfigArrayOutput) ToGetSecurityPolicyRuleMatchConfigArrayOutput() GetSecurityPolicyRuleMatchConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleMatchConfigArrayOutput) ToGetSecurityPolicyRuleMatchConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleMatchConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleMatchConfigArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRuleMatchConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRuleMatchConfig { + return vs[0].([]GetSecurityPolicyRuleMatchConfig)[vs[1].(int)] + }).(GetSecurityPolicyRuleMatchConfigOutput) +} + +type GetSecurityPolicyRuleMatchExpr struct { + // Textual representation of an expression in Common Expression Language syntax. The application context of the containing message determines which well-known feature set of CEL is supported. + Expression string `pulumi:"expression"` +} + +// GetSecurityPolicyRuleMatchExprInput is an input type that accepts GetSecurityPolicyRuleMatchExprArgs and GetSecurityPolicyRuleMatchExprOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleMatchExprInput` via: +// +// GetSecurityPolicyRuleMatchExprArgs{...} +type GetSecurityPolicyRuleMatchExprInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleMatchExprOutput() GetSecurityPolicyRuleMatchExprOutput + ToGetSecurityPolicyRuleMatchExprOutputWithContext(context.Context) GetSecurityPolicyRuleMatchExprOutput +} + +type GetSecurityPolicyRuleMatchExprArgs struct { + // Textual representation of an expression in Common Expression Language syntax. The application context of the containing message determines which well-known feature set of CEL is supported. + Expression pulumi.StringInput `pulumi:"expression"` +} + +func (GetSecurityPolicyRuleMatchExprArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleMatchExpr)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleMatchExprArgs) ToGetSecurityPolicyRuleMatchExprOutput() GetSecurityPolicyRuleMatchExprOutput { + return i.ToGetSecurityPolicyRuleMatchExprOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleMatchExprArgs) ToGetSecurityPolicyRuleMatchExprOutputWithContext(ctx context.Context) GetSecurityPolicyRuleMatchExprOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleMatchExprOutput) +} + +// GetSecurityPolicyRuleMatchExprArrayInput is an input type that accepts GetSecurityPolicyRuleMatchExprArray and GetSecurityPolicyRuleMatchExprArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleMatchExprArrayInput` via: +// +// GetSecurityPolicyRuleMatchExprArray{ GetSecurityPolicyRuleMatchExprArgs{...} } +type GetSecurityPolicyRuleMatchExprArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleMatchExprArrayOutput() GetSecurityPolicyRuleMatchExprArrayOutput + ToGetSecurityPolicyRuleMatchExprArrayOutputWithContext(context.Context) GetSecurityPolicyRuleMatchExprArrayOutput +} + +type GetSecurityPolicyRuleMatchExprArray []GetSecurityPolicyRuleMatchExprInput + +func (GetSecurityPolicyRuleMatchExprArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleMatchExpr)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleMatchExprArray) ToGetSecurityPolicyRuleMatchExprArrayOutput() GetSecurityPolicyRuleMatchExprArrayOutput { + return i.ToGetSecurityPolicyRuleMatchExprArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleMatchExprArray) ToGetSecurityPolicyRuleMatchExprArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleMatchExprArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleMatchExprArrayOutput) +} + +type GetSecurityPolicyRuleMatchExprOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleMatchExprOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleMatchExpr)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleMatchExprOutput) ToGetSecurityPolicyRuleMatchExprOutput() GetSecurityPolicyRuleMatchExprOutput { + return o +} + +func (o GetSecurityPolicyRuleMatchExprOutput) ToGetSecurityPolicyRuleMatchExprOutputWithContext(ctx context.Context) GetSecurityPolicyRuleMatchExprOutput { + return o +} + +// Textual representation of an expression in Common Expression Language syntax. The application context of the containing message determines which well-known feature set of CEL is supported. +func (o GetSecurityPolicyRuleMatchExprOutput) Expression() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleMatchExpr) string { return v.Expression }).(pulumi.StringOutput) +} + +type GetSecurityPolicyRuleMatchExprArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleMatchExprArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleMatchExpr)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleMatchExprArrayOutput) ToGetSecurityPolicyRuleMatchExprArrayOutput() GetSecurityPolicyRuleMatchExprArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleMatchExprArrayOutput) ToGetSecurityPolicyRuleMatchExprArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleMatchExprArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleMatchExprArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRuleMatchExprOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRuleMatchExpr { + return vs[0].([]GetSecurityPolicyRuleMatchExpr)[vs[1].(int)] + }).(GetSecurityPolicyRuleMatchExprOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfig struct { + // An exclusion to apply during preconfigured WAF evaluation. + Exclusions []GetSecurityPolicyRulePreconfiguredWafConfigExclusion `pulumi:"exclusions"` +} + +// GetSecurityPolicyRulePreconfiguredWafConfigInput is an input type that accepts GetSecurityPolicyRulePreconfiguredWafConfigArgs and GetSecurityPolicyRulePreconfiguredWafConfigOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRulePreconfiguredWafConfigInput` via: +// +// GetSecurityPolicyRulePreconfiguredWafConfigArgs{...} +type GetSecurityPolicyRulePreconfiguredWafConfigInput interface { + pulumi.Input + + ToGetSecurityPolicyRulePreconfiguredWafConfigOutput() GetSecurityPolicyRulePreconfiguredWafConfigOutput + ToGetSecurityPolicyRulePreconfiguredWafConfigOutputWithContext(context.Context) GetSecurityPolicyRulePreconfiguredWafConfigOutput +} + +type GetSecurityPolicyRulePreconfiguredWafConfigArgs struct { + // An exclusion to apply during preconfigured WAF evaluation. + Exclusions GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayInput `pulumi:"exclusions"` +} + +func (GetSecurityPolicyRulePreconfiguredWafConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigArgs) ToGetSecurityPolicyRulePreconfiguredWafConfigOutput() GetSecurityPolicyRulePreconfiguredWafConfigOutput { + return i.ToGetSecurityPolicyRulePreconfiguredWafConfigOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigArgs) ToGetSecurityPolicyRulePreconfiguredWafConfigOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRulePreconfiguredWafConfigOutput) +} + +// GetSecurityPolicyRulePreconfiguredWafConfigArrayInput is an input type that accepts GetSecurityPolicyRulePreconfiguredWafConfigArray and GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRulePreconfiguredWafConfigArrayInput` via: +// +// GetSecurityPolicyRulePreconfiguredWafConfigArray{ GetSecurityPolicyRulePreconfiguredWafConfigArgs{...} } +type GetSecurityPolicyRulePreconfiguredWafConfigArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRulePreconfiguredWafConfigArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput + ToGetSecurityPolicyRulePreconfiguredWafConfigArrayOutputWithContext(context.Context) GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput +} + +type GetSecurityPolicyRulePreconfiguredWafConfigArray []GetSecurityPolicyRulePreconfiguredWafConfigInput + +func (GetSecurityPolicyRulePreconfiguredWafConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRulePreconfiguredWafConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigArray) ToGetSecurityPolicyRulePreconfiguredWafConfigArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput { + return i.ToGetSecurityPolicyRulePreconfiguredWafConfigArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigArray) ToGetSecurityPolicyRulePreconfiguredWafConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRulePreconfiguredWafConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigOutput() GetSecurityPolicyRulePreconfiguredWafConfigOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigOutput { + return o +} + +// An exclusion to apply during preconfigured WAF evaluation. +func (o GetSecurityPolicyRulePreconfiguredWafConfigOutput) Exclusions() GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfig) []GetSecurityPolicyRulePreconfiguredWafConfigExclusion { + return v.Exclusions + }).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRulePreconfiguredWafConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRulePreconfiguredWafConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRulePreconfiguredWafConfig { + return vs[0].([]GetSecurityPolicyRulePreconfiguredWafConfig)[vs[1].(int)] + }).(GetSecurityPolicyRulePreconfiguredWafConfigOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusion struct { + // Request cookie whose value will be excluded from inspection during preconfigured WAF evaluation. + RequestCookies []GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky `pulumi:"requestCookies"` + // Request header whose value will be excluded from inspection during preconfigured WAF evaluation. + RequestHeaders []GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader `pulumi:"requestHeaders"` + // Request query parameter whose value will be excluded from inspection during preconfigured WAF evaluation. Note that the parameter can be in the query string or in the POST body. + RequestQueryParams []GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam `pulumi:"requestQueryParams"` + // Request URI from the request line to be excluded from inspection during preconfigured WAF evaluation. When specifying this field, the query or fragment part should be excluded. + RequestUris []GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri `pulumi:"requestUris"` + // A list of target rule IDs under the WAF rule set to apply the preconfigured WAF exclusion. If omitted, it refers to all the rule IDs under the WAF rule set. + TargetRuleIds []string `pulumi:"targetRuleIds"` + // Target WAF rule set to apply the preconfigured WAF exclusion. + TargetRuleSet string `pulumi:"targetRuleSet"` +} + +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionInput is an input type that accepts GetSecurityPolicyRulePreconfiguredWafConfigExclusionArgs and GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRulePreconfiguredWafConfigExclusionInput` via: +// +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionArgs{...} +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionInput interface { + pulumi.Input + + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionOutputWithContext(context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionArgs struct { + // Request cookie whose value will be excluded from inspection during preconfigured WAF evaluation. + RequestCookies GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayInput `pulumi:"requestCookies"` + // Request header whose value will be excluded from inspection during preconfigured WAF evaluation. + RequestHeaders GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayInput `pulumi:"requestHeaders"` + // Request query parameter whose value will be excluded from inspection during preconfigured WAF evaluation. Note that the parameter can be in the query string or in the POST body. + RequestQueryParams GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayInput `pulumi:"requestQueryParams"` + // Request URI from the request line to be excluded from inspection during preconfigured WAF evaluation. When specifying this field, the query or fragment part should be excluded. + RequestUris GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayInput `pulumi:"requestUris"` + // A list of target rule IDs under the WAF rule set to apply the preconfigured WAF exclusion. If omitted, it refers to all the rule IDs under the WAF rule set. + TargetRuleIds pulumi.StringArrayInput `pulumi:"targetRuleIds"` + // Target WAF rule set to apply the preconfigured WAF exclusion. + TargetRuleSet pulumi.StringInput `pulumi:"targetRuleSet"` +} + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusion)(nil)).Elem() +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionArgs) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput { + return i.ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionArgs) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput) +} + +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayInput is an input type that accepts GetSecurityPolicyRulePreconfiguredWafConfigExclusionArray and GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayInput` via: +// +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionArray{ GetSecurityPolicyRulePreconfiguredWafConfigExclusionArgs{...} } +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutputWithContext(context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionArray []GetSecurityPolicyRulePreconfiguredWafConfigExclusionInput + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRulePreconfiguredWafConfigExclusion)(nil)).Elem() +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionArray) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput { + return i.ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionArray) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusion)(nil)).Elem() +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput { + return o +} + +// Request cookie whose value will be excluded from inspection during preconfigured WAF evaluation. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput) RequestCookies() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusion) []GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky { + return v.RequestCookies + }).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput) +} + +// Request header whose value will be excluded from inspection during preconfigured WAF evaluation. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput) RequestHeaders() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusion) []GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader { + return v.RequestHeaders + }).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput) +} + +// Request query parameter whose value will be excluded from inspection during preconfigured WAF evaluation. Note that the parameter can be in the query string or in the POST body. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput) RequestQueryParams() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusion) []GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam { + return v.RequestQueryParams + }).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput) +} + +// Request URI from the request line to be excluded from inspection during preconfigured WAF evaluation. When specifying this field, the query or fragment part should be excluded. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput) RequestUris() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusion) []GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri { + return v.RequestUris + }).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput) +} + +// A list of target rule IDs under the WAF rule set to apply the preconfigured WAF exclusion. If omitted, it refers to all the rule IDs under the WAF rule set. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput) TargetRuleIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusion) []string { return v.TargetRuleIds }).(pulumi.StringArrayOutput) +} + +// Target WAF rule set to apply the preconfigured WAF exclusion. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput) TargetRuleSet() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusion) string { return v.TargetRuleSet }).(pulumi.StringOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRulePreconfiguredWafConfigExclusion)(nil)).Elem() +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRulePreconfiguredWafConfigExclusion { + return vs[0].([]GetSecurityPolicyRulePreconfiguredWafConfigExclusion)[vs[1].(int)] + }).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky struct { + // You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + Operator string `pulumi:"operator"` + // A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + Value string `pulumi:"value"` +} + +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyInput is an input type that accepts GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArgs and GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyInput` via: +// +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArgs{...} +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyInput interface { + pulumi.Input + + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutputWithContext(context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArgs struct { + // You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + Operator pulumi.StringInput `pulumi:"operator"` + // A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + Value pulumi.StringInput `pulumi:"value"` +} + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky)(nil)).Elem() +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArgs) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput { + return i.ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArgs) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput) +} + +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayInput is an input type that accepts GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArray and GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayInput` via: +// +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArray{ GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArgs{...} } +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutputWithContext(context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArray []GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyInput + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky)(nil)).Elem() +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArray) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput { + return i.ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArray) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky)(nil)).Elem() +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput { + return o +} + +// You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput) Operator() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky) string { return v.Operator }).(pulumi.StringOutput) +} + +// A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput) Value() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky) string { return v.Value }).(pulumi.StringOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky)(nil)).Elem() +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky { + return vs[0].([]GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky)[vs[1].(int)] + }).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader struct { + // You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + Operator string `pulumi:"operator"` + // A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + Value string `pulumi:"value"` +} + +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderInput is an input type that accepts GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArgs and GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderInput` via: +// +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArgs{...} +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderInput interface { + pulumi.Input + + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutputWithContext(context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArgs struct { + // You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + Operator pulumi.StringInput `pulumi:"operator"` + // A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + Value pulumi.StringInput `pulumi:"value"` +} + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader)(nil)).Elem() +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArgs) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput { + return i.ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArgs) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput) +} + +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayInput is an input type that accepts GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArray and GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayInput` via: +// +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArray{ GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArgs{...} } +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutputWithContext(context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArray []GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderInput + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader)(nil)).Elem() +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArray) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput { + return i.ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArray) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader)(nil)).Elem() +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput { + return o +} + +// You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput) Operator() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader) string { return v.Operator }).(pulumi.StringOutput) +} + +// A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput) Value() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader) string { return v.Value }).(pulumi.StringOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader)(nil)).Elem() +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader { + return vs[0].([]GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader)[vs[1].(int)] + }).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam struct { + // You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + Operator string `pulumi:"operator"` + // A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + Value string `pulumi:"value"` +} + +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamInput is an input type that accepts GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArgs and GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamInput` via: +// +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArgs{...} +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamInput interface { + pulumi.Input + + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutputWithContext(context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArgs struct { + // You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + Operator pulumi.StringInput `pulumi:"operator"` + // A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + Value pulumi.StringInput `pulumi:"value"` +} + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam)(nil)).Elem() +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArgs) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput { + return i.ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArgs) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput) +} + +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayInput is an input type that accepts GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArray and GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayInput` via: +// +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArray{ GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArgs{...} } +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutputWithContext(context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArray []GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamInput + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam)(nil)).Elem() +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArray) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput { + return i.ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArray) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam)(nil)).Elem() +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput { + return o +} + +// You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput) Operator() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam) string { + return v.Operator + }).(pulumi.StringOutput) +} + +// A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput) Value() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam) string { return v.Value }).(pulumi.StringOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam)(nil)).Elem() +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam { + return vs[0].([]GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam)[vs[1].(int)] + }).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri struct { + // You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + Operator string `pulumi:"operator"` + // A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + Value string `pulumi:"value"` +} + +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriInput is an input type that accepts GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArgs and GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriInput` via: +// +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArgs{...} +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriInput interface { + pulumi.Input + + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutputWithContext(context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArgs struct { + // You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + Operator pulumi.StringInput `pulumi:"operator"` + // A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + Value pulumi.StringInput `pulumi:"value"` +} + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri)(nil)).Elem() +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArgs) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput { + return i.ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArgs) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput) +} + +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayInput is an input type that accepts GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArray and GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayInput` via: +// +// GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArray{ GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArgs{...} } +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput + ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutputWithContext(context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArray []GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriInput + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri)(nil)).Elem() +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArray) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput { + return i.ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArray) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri)(nil)).Elem() +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput { + return o +} + +// You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput) Operator() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri) string { return v.Operator }).(pulumi.StringOutput) +} + +// A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput) Value() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri) string { return v.Value }).(pulumi.StringOutput) +} + +type GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri)(nil)).Elem() +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput() GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput) ToGetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput { + return o +} + +func (o GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri { + return vs[0].([]GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri)[vs[1].(int)] + }).(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput) +} + +type GetSecurityPolicyRuleRateLimitOption struct { + // Can only be specified if the action for the rule is "rateBasedBan". If specified, determines the time (in seconds) the traffic will continue to be banned by the rate limit after the rate falls below the threshold. + BanDurationSec int `pulumi:"banDurationSec"` + // Can only be specified if the action for the rule is "rateBasedBan". If specified, the key will be banned for the configured 'banDurationSec' when the number of requests that exceed the 'rateLimitThreshold' also exceed this 'banThreshold'. + BanThresholds []GetSecurityPolicyRuleRateLimitOptionBanThreshold `pulumi:"banThresholds"` + // Action to take for requests that are under the configured rate limit threshold. Valid option is "allow" only. + ConformAction string `pulumi:"conformAction"` + // Determines the key to enforce the rateLimitThreshold on + EnforceOnKey string `pulumi:"enforceOnKey"` + // Enforce On Key Config of this security policy + EnforceOnKeyConfigs []GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig `pulumi:"enforceOnKeyConfigs"` + // Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + EnforceOnKeyName string `pulumi:"enforceOnKeyName"` + // Action to take for requests that are above the configured rate limit threshold, to either deny with a specified HTTP response code, or redirect to a different endpoint. Valid options are "deny()" where valid values for status are 403, 404, 429, and 502, and "redirect" where the redirect parameters come from exceedRedirectOptions below. + ExceedAction string `pulumi:"exceedAction"` + // Parameters defining the redirect action that is used as the exceed action. Cannot be specified if the exceed action is not redirect. + ExceedRedirectOptions []GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption `pulumi:"exceedRedirectOptions"` + // Threshold at which to begin ratelimiting. + RateLimitThresholds []GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold `pulumi:"rateLimitThresholds"` +} + +// GetSecurityPolicyRuleRateLimitOptionInput is an input type that accepts GetSecurityPolicyRuleRateLimitOptionArgs and GetSecurityPolicyRuleRateLimitOptionOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleRateLimitOptionInput` via: +// +// GetSecurityPolicyRuleRateLimitOptionArgs{...} +type GetSecurityPolicyRuleRateLimitOptionInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleRateLimitOptionOutput() GetSecurityPolicyRuleRateLimitOptionOutput + ToGetSecurityPolicyRuleRateLimitOptionOutputWithContext(context.Context) GetSecurityPolicyRuleRateLimitOptionOutput +} + +type GetSecurityPolicyRuleRateLimitOptionArgs struct { + // Can only be specified if the action for the rule is "rateBasedBan". If specified, determines the time (in seconds) the traffic will continue to be banned by the rate limit after the rate falls below the threshold. + BanDurationSec pulumi.IntInput `pulumi:"banDurationSec"` + // Can only be specified if the action for the rule is "rateBasedBan". If specified, the key will be banned for the configured 'banDurationSec' when the number of requests that exceed the 'rateLimitThreshold' also exceed this 'banThreshold'. + BanThresholds GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayInput `pulumi:"banThresholds"` + // Action to take for requests that are under the configured rate limit threshold. Valid option is "allow" only. + ConformAction pulumi.StringInput `pulumi:"conformAction"` + // Determines the key to enforce the rateLimitThreshold on + EnforceOnKey pulumi.StringInput `pulumi:"enforceOnKey"` + // Enforce On Key Config of this security policy + EnforceOnKeyConfigs GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayInput `pulumi:"enforceOnKeyConfigs"` + // Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + EnforceOnKeyName pulumi.StringInput `pulumi:"enforceOnKeyName"` + // Action to take for requests that are above the configured rate limit threshold, to either deny with a specified HTTP response code, or redirect to a different endpoint. Valid options are "deny()" where valid values for status are 403, 404, 429, and 502, and "redirect" where the redirect parameters come from exceedRedirectOptions below. + ExceedAction pulumi.StringInput `pulumi:"exceedAction"` + // Parameters defining the redirect action that is used as the exceed action. Cannot be specified if the exceed action is not redirect. + ExceedRedirectOptions GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayInput `pulumi:"exceedRedirectOptions"` + // Threshold at which to begin ratelimiting. + RateLimitThresholds GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayInput `pulumi:"rateLimitThresholds"` +} + +func (GetSecurityPolicyRuleRateLimitOptionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOption)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleRateLimitOptionArgs) ToGetSecurityPolicyRuleRateLimitOptionOutput() GetSecurityPolicyRuleRateLimitOptionOutput { + return i.ToGetSecurityPolicyRuleRateLimitOptionOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleRateLimitOptionArgs) ToGetSecurityPolicyRuleRateLimitOptionOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleRateLimitOptionOutput) +} + +// GetSecurityPolicyRuleRateLimitOptionArrayInput is an input type that accepts GetSecurityPolicyRuleRateLimitOptionArray and GetSecurityPolicyRuleRateLimitOptionArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleRateLimitOptionArrayInput` via: +// +// GetSecurityPolicyRuleRateLimitOptionArray{ GetSecurityPolicyRuleRateLimitOptionArgs{...} } +type GetSecurityPolicyRuleRateLimitOptionArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleRateLimitOptionArrayOutput() GetSecurityPolicyRuleRateLimitOptionArrayOutput + ToGetSecurityPolicyRuleRateLimitOptionArrayOutputWithContext(context.Context) GetSecurityPolicyRuleRateLimitOptionArrayOutput +} + +type GetSecurityPolicyRuleRateLimitOptionArray []GetSecurityPolicyRuleRateLimitOptionInput + +func (GetSecurityPolicyRuleRateLimitOptionArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleRateLimitOption)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleRateLimitOptionArray) ToGetSecurityPolicyRuleRateLimitOptionArrayOutput() GetSecurityPolicyRuleRateLimitOptionArrayOutput { + return i.ToGetSecurityPolicyRuleRateLimitOptionArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleRateLimitOptionArray) ToGetSecurityPolicyRuleRateLimitOptionArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleRateLimitOptionArrayOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleRateLimitOptionOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOption)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleRateLimitOptionOutput) ToGetSecurityPolicyRuleRateLimitOptionOutput() GetSecurityPolicyRuleRateLimitOptionOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionOutput) ToGetSecurityPolicyRuleRateLimitOptionOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionOutput { + return o +} + +// Can only be specified if the action for the rule is "rateBasedBan". If specified, determines the time (in seconds) the traffic will continue to be banned by the rate limit after the rate falls below the threshold. +func (o GetSecurityPolicyRuleRateLimitOptionOutput) BanDurationSec() pulumi.IntOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOption) int { return v.BanDurationSec }).(pulumi.IntOutput) +} + +// Can only be specified if the action for the rule is "rateBasedBan". If specified, the key will be banned for the configured 'banDurationSec' when the number of requests that exceed the 'rateLimitThreshold' also exceed this 'banThreshold'. +func (o GetSecurityPolicyRuleRateLimitOptionOutput) BanThresholds() GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOption) []GetSecurityPolicyRuleRateLimitOptionBanThreshold { + return v.BanThresholds + }).(GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput) +} + +// Action to take for requests that are under the configured rate limit threshold. Valid option is "allow" only. +func (o GetSecurityPolicyRuleRateLimitOptionOutput) ConformAction() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOption) string { return v.ConformAction }).(pulumi.StringOutput) +} + +// Determines the key to enforce the rateLimitThreshold on +func (o GetSecurityPolicyRuleRateLimitOptionOutput) EnforceOnKey() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOption) string { return v.EnforceOnKey }).(pulumi.StringOutput) +} + +// Enforce On Key Config of this security policy +func (o GetSecurityPolicyRuleRateLimitOptionOutput) EnforceOnKeyConfigs() GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOption) []GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig { + return v.EnforceOnKeyConfigs + }).(GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput) +} + +// Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. +func (o GetSecurityPolicyRuleRateLimitOptionOutput) EnforceOnKeyName() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOption) string { return v.EnforceOnKeyName }).(pulumi.StringOutput) +} + +// Action to take for requests that are above the configured rate limit threshold, to either deny with a specified HTTP response code, or redirect to a different endpoint. Valid options are "deny()" where valid values for status are 403, 404, 429, and 502, and "redirect" where the redirect parameters come from exceedRedirectOptions below. +func (o GetSecurityPolicyRuleRateLimitOptionOutput) ExceedAction() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOption) string { return v.ExceedAction }).(pulumi.StringOutput) +} + +// Parameters defining the redirect action that is used as the exceed action. Cannot be specified if the exceed action is not redirect. +func (o GetSecurityPolicyRuleRateLimitOptionOutput) ExceedRedirectOptions() GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOption) []GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption { + return v.ExceedRedirectOptions + }).(GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput) +} + +// Threshold at which to begin ratelimiting. +func (o GetSecurityPolicyRuleRateLimitOptionOutput) RateLimitThresholds() GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOption) []GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold { + return v.RateLimitThresholds + }).(GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleRateLimitOptionArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleRateLimitOption)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleRateLimitOptionArrayOutput) ToGetSecurityPolicyRuleRateLimitOptionArrayOutput() GetSecurityPolicyRuleRateLimitOptionArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionArrayOutput) ToGetSecurityPolicyRuleRateLimitOptionArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRuleRateLimitOptionOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRuleRateLimitOption { + return vs[0].([]GetSecurityPolicyRuleRateLimitOption)[vs[1].(int)] + }).(GetSecurityPolicyRuleRateLimitOptionOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionBanThreshold struct { + // Number of HTTP(S) requests for calculating the threshold. + Count int `pulumi:"count"` + // Interval over which the threshold is computed. + IntervalSec int `pulumi:"intervalSec"` +} + +// GetSecurityPolicyRuleRateLimitOptionBanThresholdInput is an input type that accepts GetSecurityPolicyRuleRateLimitOptionBanThresholdArgs and GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleRateLimitOptionBanThresholdInput` via: +// +// GetSecurityPolicyRuleRateLimitOptionBanThresholdArgs{...} +type GetSecurityPolicyRuleRateLimitOptionBanThresholdInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleRateLimitOptionBanThresholdOutput() GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput + ToGetSecurityPolicyRuleRateLimitOptionBanThresholdOutputWithContext(context.Context) GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput +} + +type GetSecurityPolicyRuleRateLimitOptionBanThresholdArgs struct { + // Number of HTTP(S) requests for calculating the threshold. + Count pulumi.IntInput `pulumi:"count"` + // Interval over which the threshold is computed. + IntervalSec pulumi.IntInput `pulumi:"intervalSec"` +} + +func (GetSecurityPolicyRuleRateLimitOptionBanThresholdArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionBanThreshold)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleRateLimitOptionBanThresholdArgs) ToGetSecurityPolicyRuleRateLimitOptionBanThresholdOutput() GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput { + return i.ToGetSecurityPolicyRuleRateLimitOptionBanThresholdOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleRateLimitOptionBanThresholdArgs) ToGetSecurityPolicyRuleRateLimitOptionBanThresholdOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput) +} + +// GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayInput is an input type that accepts GetSecurityPolicyRuleRateLimitOptionBanThresholdArray and GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayInput` via: +// +// GetSecurityPolicyRuleRateLimitOptionBanThresholdArray{ GetSecurityPolicyRuleRateLimitOptionBanThresholdArgs{...} } +type GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput() GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput + ToGetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutputWithContext(context.Context) GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput +} + +type GetSecurityPolicyRuleRateLimitOptionBanThresholdArray []GetSecurityPolicyRuleRateLimitOptionBanThresholdInput + +func (GetSecurityPolicyRuleRateLimitOptionBanThresholdArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleRateLimitOptionBanThreshold)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleRateLimitOptionBanThresholdArray) ToGetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput() GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput { + return i.ToGetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleRateLimitOptionBanThresholdArray) ToGetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionBanThreshold)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput) ToGetSecurityPolicyRuleRateLimitOptionBanThresholdOutput() GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput) ToGetSecurityPolicyRuleRateLimitOptionBanThresholdOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput { + return o +} + +// Number of HTTP(S) requests for calculating the threshold. +func (o GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput) Count() pulumi.IntOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOptionBanThreshold) int { return v.Count }).(pulumi.IntOutput) +} + +// Interval over which the threshold is computed. +func (o GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput) IntervalSec() pulumi.IntOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOptionBanThreshold) int { return v.IntervalSec }).(pulumi.IntOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleRateLimitOptionBanThreshold)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput) ToGetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput() GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput) ToGetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRuleRateLimitOptionBanThreshold { + return vs[0].([]GetSecurityPolicyRuleRateLimitOptionBanThreshold)[vs[1].(int)] + }).(GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig struct { + // Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + EnforceOnKeyName string `pulumi:"enforceOnKeyName"` + // Determines the key to enforce the rateLimitThreshold on + EnforceOnKeyType string `pulumi:"enforceOnKeyType"` +} + +// GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigInput is an input type that accepts GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArgs and GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigInput` via: +// +// GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArgs{...} +type GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput() GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput + ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutputWithContext(context.Context) GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput +} + +type GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArgs struct { + // Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + EnforceOnKeyName pulumi.StringInput `pulumi:"enforceOnKeyName"` + // Determines the key to enforce the rateLimitThreshold on + EnforceOnKeyType pulumi.StringInput `pulumi:"enforceOnKeyType"` +} + +func (GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArgs) ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput() GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput { + return i.ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArgs) ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput) +} + +// GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayInput is an input type that accepts GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArray and GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayInput` via: +// +// GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArray{ GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArgs{...} } +type GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput() GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput + ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutputWithContext(context.Context) GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput +} + +type GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArray []GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigInput + +func (GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArray) ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput() GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput { + return i.ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArray) ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput) ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput() GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput) ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput { + return o +} + +// Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. +func (o GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput) EnforceOnKeyName() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig) string { return v.EnforceOnKeyName }).(pulumi.StringOutput) +} + +// Determines the key to enforce the rateLimitThreshold on +func (o GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput) EnforceOnKeyType() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig) string { return v.EnforceOnKeyType }).(pulumi.StringOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput) ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput() GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput) ToGetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig { + return vs[0].([]GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig)[vs[1].(int)] + }).(GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption struct { + // Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + Target string `pulumi:"target"` + // Type of the redirect action. + Type string `pulumi:"type"` +} + +// GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionInput is an input type that accepts GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArgs and GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionInput` via: +// +// GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArgs{...} +type GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput() GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput + ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutputWithContext(context.Context) GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput +} + +type GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArgs struct { + // Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + Target pulumi.StringInput `pulumi:"target"` + // Type of the redirect action. + Type pulumi.StringInput `pulumi:"type"` +} + +func (GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArgs) ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput() GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput { + return i.ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArgs) ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput) +} + +// GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayInput is an input type that accepts GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArray and GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayInput` via: +// +// GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArray{ GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArgs{...} } +type GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput() GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput + ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutputWithContext(context.Context) GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput +} + +type GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArray []GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionInput + +func (GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArray) ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput() GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput { + return i.ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArray) ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput) ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput() GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput) ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput { + return o +} + +// Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. +func (o GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput) Target() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption) string { return v.Target }).(pulumi.StringOutput) +} + +// Type of the redirect action. +func (o GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption) string { return v.Type }).(pulumi.StringOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput) ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput() GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput) ToGetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption { + return vs[0].([]GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption)[vs[1].(int)] + }).(GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold struct { + // Number of HTTP(S) requests for calculating the threshold. + Count int `pulumi:"count"` + // Interval over which the threshold is computed. + IntervalSec int `pulumi:"intervalSec"` +} + +// GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdInput is an input type that accepts GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArgs and GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdInput` via: +// +// GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArgs{...} +type GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput() GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput + ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutputWithContext(context.Context) GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput +} + +type GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArgs struct { + // Number of HTTP(S) requests for calculating the threshold. + Count pulumi.IntInput `pulumi:"count"` + // Interval over which the threshold is computed. + IntervalSec pulumi.IntInput `pulumi:"intervalSec"` +} + +func (GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArgs) ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput() GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput { + return i.ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArgs) ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput) +} + +// GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayInput is an input type that accepts GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArray and GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayInput` via: +// +// GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArray{ GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArgs{...} } +type GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput() GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput + ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutputWithContext(context.Context) GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput +} + +type GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArray []GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdInput + +func (GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArray) ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput() GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput { + return i.ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArray) ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput) ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput() GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput) ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput { + return o +} + +// Number of HTTP(S) requests for calculating the threshold. +func (o GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput) Count() pulumi.IntOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold) int { return v.Count }).(pulumi.IntOutput) +} + +// Interval over which the threshold is computed. +func (o GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput) IntervalSec() pulumi.IntOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold) int { return v.IntervalSec }).(pulumi.IntOutput) +} + +type GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput) ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput() GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput) ToGetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold { + return vs[0].([]GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold)[vs[1].(int)] + }).(GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput) +} + +type GetSecurityPolicyRuleRedirectOption struct { + // Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + Target string `pulumi:"target"` + // Type of the redirect action. Available options: EXTERNAL_302: Must specify the corresponding target field in config. GOOGLE_RECAPTCHA: Cannot specify target field in config. + Type string `pulumi:"type"` +} + +// GetSecurityPolicyRuleRedirectOptionInput is an input type that accepts GetSecurityPolicyRuleRedirectOptionArgs and GetSecurityPolicyRuleRedirectOptionOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleRedirectOptionInput` via: +// +// GetSecurityPolicyRuleRedirectOptionArgs{...} +type GetSecurityPolicyRuleRedirectOptionInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleRedirectOptionOutput() GetSecurityPolicyRuleRedirectOptionOutput + ToGetSecurityPolicyRuleRedirectOptionOutputWithContext(context.Context) GetSecurityPolicyRuleRedirectOptionOutput +} + +type GetSecurityPolicyRuleRedirectOptionArgs struct { + // Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + Target pulumi.StringInput `pulumi:"target"` + // Type of the redirect action. Available options: EXTERNAL_302: Must specify the corresponding target field in config. GOOGLE_RECAPTCHA: Cannot specify target field in config. + Type pulumi.StringInput `pulumi:"type"` +} + +func (GetSecurityPolicyRuleRedirectOptionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleRedirectOption)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleRedirectOptionArgs) ToGetSecurityPolicyRuleRedirectOptionOutput() GetSecurityPolicyRuleRedirectOptionOutput { + return i.ToGetSecurityPolicyRuleRedirectOptionOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleRedirectOptionArgs) ToGetSecurityPolicyRuleRedirectOptionOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRedirectOptionOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleRedirectOptionOutput) +} + +// GetSecurityPolicyRuleRedirectOptionArrayInput is an input type that accepts GetSecurityPolicyRuleRedirectOptionArray and GetSecurityPolicyRuleRedirectOptionArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyRuleRedirectOptionArrayInput` via: +// +// GetSecurityPolicyRuleRedirectOptionArray{ GetSecurityPolicyRuleRedirectOptionArgs{...} } +type GetSecurityPolicyRuleRedirectOptionArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyRuleRedirectOptionArrayOutput() GetSecurityPolicyRuleRedirectOptionArrayOutput + ToGetSecurityPolicyRuleRedirectOptionArrayOutputWithContext(context.Context) GetSecurityPolicyRuleRedirectOptionArrayOutput +} + +type GetSecurityPolicyRuleRedirectOptionArray []GetSecurityPolicyRuleRedirectOptionInput + +func (GetSecurityPolicyRuleRedirectOptionArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleRedirectOption)(nil)).Elem() +} + +func (i GetSecurityPolicyRuleRedirectOptionArray) ToGetSecurityPolicyRuleRedirectOptionArrayOutput() GetSecurityPolicyRuleRedirectOptionArrayOutput { + return i.ToGetSecurityPolicyRuleRedirectOptionArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyRuleRedirectOptionArray) ToGetSecurityPolicyRuleRedirectOptionArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRedirectOptionArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyRuleRedirectOptionArrayOutput) +} + +type GetSecurityPolicyRuleRedirectOptionOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleRedirectOptionOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyRuleRedirectOption)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleRedirectOptionOutput) ToGetSecurityPolicyRuleRedirectOptionOutput() GetSecurityPolicyRuleRedirectOptionOutput { + return o +} + +func (o GetSecurityPolicyRuleRedirectOptionOutput) ToGetSecurityPolicyRuleRedirectOptionOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRedirectOptionOutput { + return o +} + +// Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. +func (o GetSecurityPolicyRuleRedirectOptionOutput) Target() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRedirectOption) string { return v.Target }).(pulumi.StringOutput) +} + +// Type of the redirect action. Available options: EXTERNAL_302: Must specify the corresponding target field in config. GOOGLE_RECAPTCHA: Cannot specify target field in config. +func (o GetSecurityPolicyRuleRedirectOptionOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyRuleRedirectOption) string { return v.Type }).(pulumi.StringOutput) +} + +type GetSecurityPolicyRuleRedirectOptionArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyRuleRedirectOptionArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyRuleRedirectOption)(nil)).Elem() +} + +func (o GetSecurityPolicyRuleRedirectOptionArrayOutput) ToGetSecurityPolicyRuleRedirectOptionArrayOutput() GetSecurityPolicyRuleRedirectOptionArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleRedirectOptionArrayOutput) ToGetSecurityPolicyRuleRedirectOptionArrayOutputWithContext(ctx context.Context) GetSecurityPolicyRuleRedirectOptionArrayOutput { + return o +} + +func (o GetSecurityPolicyRuleRedirectOptionArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyRuleRedirectOptionOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyRuleRedirectOption { + return vs[0].([]GetSecurityPolicyRuleRedirectOption)[vs[1].(int)] + }).(GetSecurityPolicyRuleRedirectOptionOutput) +} + type GetSnapshotSnapshotEncryptionKey struct { // The name of the encryption key that is stored in Google Cloud KMS. KmsKeySelfLink string `pulumi:"kmsKeySelfLink"` @@ -30513,6 +33684,10 @@ func (o GetSubnetworksSubnetworkArrayOutput) Index(i pulumi.IntInput) GetSubnetw } func init() { + pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionRequestMirrorPolicyInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionRequestMirrorPolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionRequestMirrorPolicyPtrInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionRequestMirrorPolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*URLMapPathMatcherPathRuleRouteActionRetryPolicyInput)(nil)).Elem(), URLMapPathMatcherPathRuleRouteActionRetryPolicyArgs{}) @@ -30693,6 +33868,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerNamedPortArrayInput)(nil)).Elem(), GetInstanceGroupManagerNamedPortArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerParamInput)(nil)).Elem(), GetInstanceGroupManagerParamArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerParamArrayInput)(nil)).Elem(), GetInstanceGroupManagerParamArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerStandbyPolicyInput)(nil)).Elem(), GetInstanceGroupManagerStandbyPolicyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerStandbyPolicyArrayInput)(nil)).Elem(), GetInstanceGroupManagerStandbyPolicyArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerStatefulDiskInput)(nil)).Elem(), GetInstanceGroupManagerStatefulDiskArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerStatefulDiskArrayInput)(nil)).Elem(), GetInstanceGroupManagerStatefulDiskArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerStatefulExternalIpInput)(nil)).Elem(), GetInstanceGroupManagerStatefulExternalIpArgs{}) @@ -30917,6 +34094,54 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetRouterStatusBestRouteArrayInput)(nil)).Elem(), GetRouterStatusBestRouteArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetRouterStatusBestRoutesForRouterInput)(nil)).Elem(), GetRouterStatusBestRoutesForRouterArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetRouterStatusBestRoutesForRouterArrayInput)(nil)).Elem(), GetRouterStatusBestRoutesForRouterArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigInput)(nil)).Elem(), GetSecurityPolicyAdaptiveProtectionConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigArrayInput)(nil)).Elem(), GetSecurityPolicyAdaptiveProtectionConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigInput)(nil)).Elem(), GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayInput)(nil)).Elem(), GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigInput)(nil)).Elem(), GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayInput)(nil)).Elem(), GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdvancedOptionsConfigInput)(nil)).Elem(), GetSecurityPolicyAdvancedOptionsConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdvancedOptionsConfigArrayInput)(nil)).Elem(), GetSecurityPolicyAdvancedOptionsConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput)(nil)).Elem(), GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayInput)(nil)).Elem(), GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRecaptchaOptionsConfigInput)(nil)).Elem(), GetSecurityPolicyRecaptchaOptionsConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRecaptchaOptionsConfigArrayInput)(nil)).Elem(), GetSecurityPolicyRecaptchaOptionsConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleTypeInput)(nil)).Elem(), GetSecurityPolicyRuleTypeArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleTypeArrayInput)(nil)).Elem(), GetSecurityPolicyRuleTypeArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleHeaderActionInput)(nil)).Elem(), GetSecurityPolicyRuleHeaderActionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleHeaderActionArrayInput)(nil)).Elem(), GetSecurityPolicyRuleHeaderActionArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleHeaderActionRequestHeadersToAddInput)(nil)).Elem(), GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayInput)(nil)).Elem(), GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleMatchInput)(nil)).Elem(), GetSecurityPolicyRuleMatchArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleMatchArrayInput)(nil)).Elem(), GetSecurityPolicyRuleMatchArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleMatchConfigInput)(nil)).Elem(), GetSecurityPolicyRuleMatchConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleMatchConfigArrayInput)(nil)).Elem(), GetSecurityPolicyRuleMatchConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleMatchExprInput)(nil)).Elem(), GetSecurityPolicyRuleMatchExprArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleMatchExprArrayInput)(nil)).Elem(), GetSecurityPolicyRuleMatchExprArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigInput)(nil)).Elem(), GetSecurityPolicyRulePreconfiguredWafConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigArrayInput)(nil)).Elem(), GetSecurityPolicyRulePreconfiguredWafConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionInput)(nil)).Elem(), GetSecurityPolicyRulePreconfiguredWafConfigExclusionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayInput)(nil)).Elem(), GetSecurityPolicyRulePreconfiguredWafConfigExclusionArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyInput)(nil)).Elem(), GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayInput)(nil)).Elem(), GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderInput)(nil)).Elem(), GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayInput)(nil)).Elem(), GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamInput)(nil)).Elem(), GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayInput)(nil)).Elem(), GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriInput)(nil)).Elem(), GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayInput)(nil)).Elem(), GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionInput)(nil)).Elem(), GetSecurityPolicyRuleRateLimitOptionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionArrayInput)(nil)).Elem(), GetSecurityPolicyRuleRateLimitOptionArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionBanThresholdInput)(nil)).Elem(), GetSecurityPolicyRuleRateLimitOptionBanThresholdArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayInput)(nil)).Elem(), GetSecurityPolicyRuleRateLimitOptionBanThresholdArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigInput)(nil)).Elem(), GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayInput)(nil)).Elem(), GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionInput)(nil)).Elem(), GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayInput)(nil)).Elem(), GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdInput)(nil)).Elem(), GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayInput)(nil)).Elem(), GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleRedirectOptionInput)(nil)).Elem(), GetSecurityPolicyRuleRedirectOptionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyRuleRedirectOptionArrayInput)(nil)).Elem(), GetSecurityPolicyRuleRedirectOptionArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSnapshotSnapshotEncryptionKeyInput)(nil)).Elem(), GetSnapshotSnapshotEncryptionKeyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSnapshotSnapshotEncryptionKeyArrayInput)(nil)).Elem(), GetSnapshotSnapshotEncryptionKeyArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSnapshotSourceDiskEncryptionKeyInput)(nil)).Elem(), GetSnapshotSourceDiskEncryptionKeyArgs{}) @@ -30925,6 +34150,10 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetSubnetworkSecondaryIpRangeArrayInput)(nil)).Elem(), GetSubnetworkSecondaryIpRangeArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSubnetworksSubnetworkInput)(nil)).Elem(), GetSubnetworksSubnetworkArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSubnetworksSubnetworkArrayInput)(nil)).Elem(), GetSubnetworksSubnetworkArray{}) + pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayOutput{}) + pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayPtrOutput{}) + pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayOutput{}) + pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayPtrOutput{}) pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionRequestMirrorPolicyOutput{}) pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionRequestMirrorPolicyPtrOutput{}) pulumi.RegisterOutputType(URLMapPathMatcherPathRuleRouteActionRetryPolicyOutput{}) @@ -31105,6 +34334,8 @@ func init() { pulumi.RegisterOutputType(GetInstanceGroupManagerNamedPortArrayOutput{}) pulumi.RegisterOutputType(GetInstanceGroupManagerParamOutput{}) pulumi.RegisterOutputType(GetInstanceGroupManagerParamArrayOutput{}) + pulumi.RegisterOutputType(GetInstanceGroupManagerStandbyPolicyOutput{}) + pulumi.RegisterOutputType(GetInstanceGroupManagerStandbyPolicyArrayOutput{}) pulumi.RegisterOutputType(GetInstanceGroupManagerStatefulDiskOutput{}) pulumi.RegisterOutputType(GetInstanceGroupManagerStatefulDiskArrayOutput{}) pulumi.RegisterOutputType(GetInstanceGroupManagerStatefulExternalIpOutput{}) @@ -31329,6 +34560,54 @@ func init() { pulumi.RegisterOutputType(GetRouterStatusBestRouteArrayOutput{}) pulumi.RegisterOutputType(GetRouterStatusBestRoutesForRouterOutput{}) pulumi.RegisterOutputType(GetRouterStatusBestRoutesForRouterArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdaptiveProtectionConfigOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdaptiveProtectionConfigArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdvancedOptionsConfigOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdvancedOptionsConfigArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRecaptchaOptionsConfigOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRecaptchaOptionsConfigArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleTypeOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleTypeArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleHeaderActionOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleHeaderActionArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleHeaderActionRequestHeadersToAddOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleMatchOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleMatchArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleMatchConfigOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleMatchConfigArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleMatchExprOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleMatchExprArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRulePreconfiguredWafConfigOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRulePreconfiguredWafConfigArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRulePreconfiguredWafConfigExclusionOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRulePreconfiguredWafConfigExclusionArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleRateLimitOptionOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleRateLimitOptionArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleRateLimitOptionBanThresholdOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleRateLimitOptionBanThresholdArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleRedirectOptionOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyRuleRedirectOptionArrayOutput{}) pulumi.RegisterOutputType(GetSnapshotSnapshotEncryptionKeyOutput{}) pulumi.RegisterOutputType(GetSnapshotSnapshotEncryptionKeyArrayOutput{}) pulumi.RegisterOutputType(GetSnapshotSourceDiskEncryptionKeyOutput{}) diff --git a/sdk/go/gcp/compute/regionInstanceGroupManager.go b/sdk/go/gcp/compute/regionInstanceGroupManager.go index 4688144933..62f11e31fb 100644 --- a/sdk/go/gcp/compute/regionInstanceGroupManager.go +++ b/sdk/go/gcp/compute/regionInstanceGroupManager.go @@ -138,6 +138,46 @@ import ( // // ``` // +// ### With Standby Policy (`Google-Beta` Provider) +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := compute.NewRegionInstanceGroupManager(ctx, "igm-sr", &compute.RegionInstanceGroupManagerArgs{ +// Name: pulumi.String("tf-sr-igm"), +// BaseInstanceName: pulumi.String("tf-sr-igm-instance"), +// Region: pulumi.String("us-central1"), +// TargetSize: pulumi.Int(5), +// Versions: compute.RegionInstanceGroupManagerVersionArray{ +// &compute.RegionInstanceGroupManagerVersionArgs{ +// InstanceTemplate: pulumi.Any(sr_igm.SelfLink), +// Name: pulumi.String("primary"), +// }, +// }, +// StandbyPolicy: &compute.RegionInstanceGroupManagerStandbyPolicyArgs{ +// InitialDelaySec: pulumi.Int(50), +// Mode: pulumi.String("SCALE_OUT_POOL"), +// }, +// TargetSuspendedSize: pulumi.Int(1), +// TargetStoppedSize: pulumi.Int(1), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// // ## Import // // Instance group managers can be imported using any of these accepted formats: @@ -210,6 +250,8 @@ type RegionInstanceGroupManager struct { Region pulumi.StringOutput `pulumi:"region"` // The URL of the created resource. SelfLink pulumi.StringOutput `pulumi:"selfLink"` + // The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + StandbyPolicy RegionInstanceGroupManagerStandbyPolicyOutput `pulumi:"standbyPolicy"` // Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `updatePolicy`. StatefulDisks RegionInstanceGroupManagerStatefulDiskArrayOutput `pulumi:"statefulDisks"` // External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -225,6 +267,10 @@ type RegionInstanceGroupManager struct { // The target number of running instances for this managed 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. TargetSize pulumi.IntOutput `pulumi:"targetSize"` + // The target number of stopped instances for this managed instance group. + TargetStoppedSize pulumi.IntOutput `pulumi:"targetStoppedSize"` + // The target number of suspended instances for this managed instance group. + TargetSuspendedSize pulumi.IntOutput `pulumi:"targetSuspendedSize"` // 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) UpdatePolicy RegionInstanceGroupManagerUpdatePolicyOutput `pulumi:"updatePolicy"` // Application versions managed by this instance group. Each @@ -336,6 +382,8 @@ type regionInstanceGroupManagerState struct { Region *string `pulumi:"region"` // The URL of the created resource. SelfLink *string `pulumi:"selfLink"` + // The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + StandbyPolicy *RegionInstanceGroupManagerStandbyPolicy `pulumi:"standbyPolicy"` // Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `updatePolicy`. StatefulDisks []RegionInstanceGroupManagerStatefulDisk `pulumi:"statefulDisks"` // External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -351,6 +399,10 @@ type regionInstanceGroupManagerState struct { // The target number of running instances for this managed 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. TargetSize *int `pulumi:"targetSize"` + // The target number of stopped instances for this managed instance group. + TargetStoppedSize *int `pulumi:"targetStoppedSize"` + // The target number of suspended instances for this managed instance group. + TargetSuspendedSize *int `pulumi:"targetSuspendedSize"` // 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) UpdatePolicy *RegionInstanceGroupManagerUpdatePolicy `pulumi:"updatePolicy"` // Application versions managed by this instance group. Each @@ -427,6 +479,8 @@ type RegionInstanceGroupManagerState struct { Region pulumi.StringPtrInput // The URL of the created resource. SelfLink pulumi.StringPtrInput + // The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + StandbyPolicy RegionInstanceGroupManagerStandbyPolicyPtrInput // Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `updatePolicy`. StatefulDisks RegionInstanceGroupManagerStatefulDiskArrayInput // External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -442,6 +496,10 @@ type RegionInstanceGroupManagerState struct { // The target number of running instances for this managed 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. TargetSize pulumi.IntPtrInput + // The target number of stopped instances for this managed instance group. + TargetStoppedSize pulumi.IntPtrInput + // The target number of suspended instances for this managed instance group. + TargetSuspendedSize pulumi.IntPtrInput // 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) UpdatePolicy RegionInstanceGroupManagerUpdatePolicyPtrInput // Application versions managed by this instance group. Each @@ -514,6 +572,8 @@ type regionInstanceGroupManagerArgs struct { // // *** Region *string `pulumi:"region"` + // The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + StandbyPolicy *RegionInstanceGroupManagerStandbyPolicy `pulumi:"standbyPolicy"` // Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `updatePolicy`. StatefulDisks []RegionInstanceGroupManagerStatefulDisk `pulumi:"statefulDisks"` // External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -527,6 +587,10 @@ type regionInstanceGroupManagerArgs struct { // The target number of running instances for this managed 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. TargetSize *int `pulumi:"targetSize"` + // The target number of stopped instances for this managed instance group. + TargetStoppedSize *int `pulumi:"targetStoppedSize"` + // The target number of suspended instances for this managed instance group. + TargetSuspendedSize *int `pulumi:"targetSuspendedSize"` // 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) UpdatePolicy *RegionInstanceGroupManagerUpdatePolicy `pulumi:"updatePolicy"` // Application versions managed by this instance group. Each @@ -596,6 +660,8 @@ type RegionInstanceGroupManagerArgs struct { // // *** Region pulumi.StringPtrInput + // The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + StandbyPolicy RegionInstanceGroupManagerStandbyPolicyPtrInput // Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `updatePolicy`. StatefulDisks RegionInstanceGroupManagerStatefulDiskArrayInput // External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -609,6 +675,10 @@ type RegionInstanceGroupManagerArgs struct { // The target number of running instances for this managed 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. TargetSize pulumi.IntPtrInput + // The target number of stopped instances for this managed instance group. + TargetStoppedSize pulumi.IntPtrInput + // The target number of suspended instances for this managed instance group. + TargetSuspendedSize pulumi.IntPtrInput // 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) UpdatePolicy RegionInstanceGroupManagerUpdatePolicyPtrInput // Application versions managed by this instance group. Each @@ -830,6 +900,13 @@ func (o RegionInstanceGroupManagerOutput) SelfLink() pulumi.StringOutput { return o.ApplyT(func(v *RegionInstanceGroupManager) pulumi.StringOutput { return v.SelfLink }).(pulumi.StringOutput) } +// The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) +func (o RegionInstanceGroupManagerOutput) StandbyPolicy() RegionInstanceGroupManagerStandbyPolicyOutput { + return o.ApplyT(func(v *RegionInstanceGroupManager) RegionInstanceGroupManagerStandbyPolicyOutput { + return v.StandbyPolicy + }).(RegionInstanceGroupManagerStandbyPolicyOutput) +} + // Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `updatePolicy`. func (o RegionInstanceGroupManagerOutput) StatefulDisks() RegionInstanceGroupManagerStatefulDiskArrayOutput { return o.ApplyT(func(v *RegionInstanceGroupManager) RegionInstanceGroupManagerStatefulDiskArrayOutput { @@ -869,6 +946,16 @@ func (o RegionInstanceGroupManagerOutput) TargetSize() pulumi.IntOutput { return o.ApplyT(func(v *RegionInstanceGroupManager) pulumi.IntOutput { return v.TargetSize }).(pulumi.IntOutput) } +// The target number of stopped instances for this managed instance group. +func (o RegionInstanceGroupManagerOutput) TargetStoppedSize() pulumi.IntOutput { + return o.ApplyT(func(v *RegionInstanceGroupManager) pulumi.IntOutput { return v.TargetStoppedSize }).(pulumi.IntOutput) +} + +// The target number of suspended instances for this managed instance group. +func (o RegionInstanceGroupManagerOutput) TargetSuspendedSize() pulumi.IntOutput { + return o.ApplyT(func(v *RegionInstanceGroupManager) pulumi.IntOutput { return v.TargetSuspendedSize }).(pulumi.IntOutput) +} + // 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) func (o RegionInstanceGroupManagerOutput) UpdatePolicy() RegionInstanceGroupManagerUpdatePolicyOutput { return o.ApplyT(func(v *RegionInstanceGroupManager) RegionInstanceGroupManagerUpdatePolicyOutput { diff --git a/sdk/go/gcp/compute/regionInstanceTemplate.go b/sdk/go/gcp/compute/regionInstanceTemplate.go index 18e519c6b7..641f66000a 100644 --- a/sdk/go/gcp/compute/regionInstanceTemplate.go +++ b/sdk/go/gcp/compute/regionInstanceTemplate.go @@ -101,6 +101,8 @@ type RegionInstanceTemplate struct { // in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` // in order for this setting to take effect. NetworkPerformanceConfig RegionInstanceTemplateNetworkPerformanceConfigPtrOutput `pulumi:"networkPerformanceConfig"` + // Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata pulumi.StringMapOutput `pulumi:"partnerMetadata"` // 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"` @@ -236,6 +238,8 @@ type regionInstanceTemplateState struct { // in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` // in order for this setting to take effect. NetworkPerformanceConfig *RegionInstanceTemplateNetworkPerformanceConfig `pulumi:"networkPerformanceConfig"` + // Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata map[string]string `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project *string `pulumi:"project"` @@ -331,6 +335,8 @@ type RegionInstanceTemplateState struct { // in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` // in order for this setting to take effect. NetworkPerformanceConfig RegionInstanceTemplateNetworkPerformanceConfigPtrInput + // Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata pulumi.StringMapInput // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project pulumi.StringPtrInput @@ -426,6 +432,8 @@ type regionInstanceTemplateArgs struct { // in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` // in order for this setting to take effect. NetworkPerformanceConfig *RegionInstanceTemplateNetworkPerformanceConfig `pulumi:"networkPerformanceConfig"` + // Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata map[string]string `pulumi:"partnerMetadata"` // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project *string `pulumi:"project"` @@ -512,6 +520,8 @@ type RegionInstanceTemplateArgs struct { // in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` // in order for this setting to take effect. NetworkPerformanceConfig RegionInstanceTemplateNetworkPerformanceConfigPtrInput + // Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + PartnerMetadata pulumi.StringMapInput // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project pulumi.StringPtrInput @@ -754,6 +764,11 @@ func (o RegionInstanceTemplateOutput) NetworkPerformanceConfig() RegionInstanceT }).(RegionInstanceTemplateNetworkPerformanceConfigPtrOutput) } +// Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. +func (o RegionInstanceTemplateOutput) PartnerMetadata() pulumi.StringMapOutput { + return o.ApplyT(func(v *RegionInstanceTemplate) pulumi.StringMapOutput { return v.PartnerMetadata }).(pulumi.StringMapOutput) +} + // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. func (o RegionInstanceTemplateOutput) Project() pulumi.StringOutput { diff --git a/sdk/go/gcp/config/config.go b/sdk/go/gcp/config/config.go index 6820183548..3f86ec963a 100644 --- a/sdk/go/gcp/config/config.go +++ b/sdk/go/gcp/config/config.go @@ -456,6 +456,9 @@ func GetSecureSourceManagerCustomEndpoint(ctx *pulumi.Context) string { func GetSecurityCenterCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:securityCenterCustomEndpoint") } +func GetSecurityCenterManagementCustomEndpoint(ctx *pulumi.Context) string { + return config.Get(ctx, "gcp:securityCenterManagementCustomEndpoint") +} func GetSecurityScannerCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:securityScannerCustomEndpoint") } diff --git a/sdk/go/gcp/container/cluster.go b/sdk/go/gcp/container/cluster.go index 0fa687006c..480641941e 100644 --- a/sdk/go/gcp/container/cluster.go +++ b/sdk/go/gcp/container/cluster.go @@ -463,6 +463,10 @@ type Cluster struct { // [ResourceUsageExportConfig](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-usage-metering) feature. // Structure is documented below. ResourceUsageExportConfig ClusterResourceUsageExportConfigPtrOutput `pulumi:"resourceUsageExportConfig"` + // Configuration for the + // [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + // Structure is documented below. + SecretManagerConfig ClusterSecretManagerConfigPtrOutput `pulumi:"secretManagerConfig"` // Enable/Disable Security Posture API features for the cluster. Structure is documented below. SecurityPostureConfig ClusterSecurityPostureConfigOutput `pulumi:"securityPostureConfig"` // The server-defined URL for the resource. @@ -785,6 +789,10 @@ type clusterState struct { // [ResourceUsageExportConfig](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-usage-metering) feature. // Structure is documented below. ResourceUsageExportConfig *ClusterResourceUsageExportConfig `pulumi:"resourceUsageExportConfig"` + // Configuration for the + // [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + // Structure is documented below. + SecretManagerConfig *ClusterSecretManagerConfig `pulumi:"secretManagerConfig"` // Enable/Disable Security Posture API features for the cluster. Structure is documented below. SecurityPostureConfig *ClusterSecurityPostureConfig `pulumi:"securityPostureConfig"` // The server-defined URL for the resource. @@ -1078,6 +1086,10 @@ type ClusterState struct { // [ResourceUsageExportConfig](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-usage-metering) feature. // Structure is documented below. ResourceUsageExportConfig ClusterResourceUsageExportConfigPtrInput + // Configuration for the + // [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + // Structure is documented below. + SecretManagerConfig ClusterSecretManagerConfigPtrInput // Enable/Disable Security Posture API features for the cluster. Structure is documented below. SecurityPostureConfig ClusterSecurityPostureConfigPtrInput // The server-defined URL for the resource. @@ -1366,6 +1378,10 @@ type clusterArgs struct { // [ResourceUsageExportConfig](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-usage-metering) feature. // Structure is documented below. ResourceUsageExportConfig *ClusterResourceUsageExportConfig `pulumi:"resourceUsageExportConfig"` + // Configuration for the + // [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + // Structure is documented below. + SecretManagerConfig *ClusterSecretManagerConfig `pulumi:"secretManagerConfig"` // Enable/Disable Security Posture API features for the cluster. Structure is documented below. SecurityPostureConfig *ClusterSecurityPostureConfig `pulumi:"securityPostureConfig"` // Structure is documented below. @@ -1640,6 +1656,10 @@ type ClusterArgs struct { // [ResourceUsageExportConfig](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-usage-metering) feature. // Structure is documented below. ResourceUsageExportConfig ClusterResourceUsageExportConfigPtrInput + // Configuration for the + // [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + // Structure is documented below. + SecretManagerConfig ClusterSecretManagerConfigPtrInput // Enable/Disable Security Posture API features for the cluster. Structure is documented below. SecurityPostureConfig ClusterSecurityPostureConfigPtrInput // Structure is documented below. @@ -2206,6 +2226,13 @@ func (o ClusterOutput) ResourceUsageExportConfig() ClusterResourceUsageExportCon return o.ApplyT(func(v *Cluster) ClusterResourceUsageExportConfigPtrOutput { return v.ResourceUsageExportConfig }).(ClusterResourceUsageExportConfigPtrOutput) } +// Configuration for the +// [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. +// Structure is documented below. +func (o ClusterOutput) SecretManagerConfig() ClusterSecretManagerConfigPtrOutput { + return o.ApplyT(func(v *Cluster) ClusterSecretManagerConfigPtrOutput { return v.SecretManagerConfig }).(ClusterSecretManagerConfigPtrOutput) +} + // Enable/Disable Security Posture API features for the cluster. Structure is documented below. func (o ClusterOutput) SecurityPostureConfig() ClusterSecurityPostureConfigOutput { return o.ApplyT(func(v *Cluster) ClusterSecurityPostureConfigOutput { return v.SecurityPostureConfig }).(ClusterSecurityPostureConfigOutput) diff --git a/sdk/go/gcp/container/getCluster.go b/sdk/go/gcp/container/getCluster.go index 7a64b6a1e6..d541affdb5 100644 --- a/sdk/go/gcp/container/getCluster.go +++ b/sdk/go/gcp/container/getCluster.go @@ -107,6 +107,7 @@ type LookupClusterResult struct { RemoveDefaultNodePool bool `pulumi:"removeDefaultNodePool"` ResourceLabels map[string]string `pulumi:"resourceLabels"` ResourceUsageExportConfigs []GetClusterResourceUsageExportConfig `pulumi:"resourceUsageExportConfigs"` + SecretManagerConfigs []GetClusterSecretManagerConfig `pulumi:"secretManagerConfigs"` SecurityPostureConfigs []GetClusterSecurityPostureConfig `pulumi:"securityPostureConfigs"` SelfLink string `pulumi:"selfLink"` ServiceExternalIpsConfigs []GetClusterServiceExternalIpsConfig `pulumi:"serviceExternalIpsConfigs"` @@ -435,6 +436,10 @@ func (o LookupClusterResultOutput) ResourceUsageExportConfigs() GetClusterResour return o.ApplyT(func(v LookupClusterResult) []GetClusterResourceUsageExportConfig { return v.ResourceUsageExportConfigs }).(GetClusterResourceUsageExportConfigArrayOutput) } +func (o LookupClusterResultOutput) SecretManagerConfigs() GetClusterSecretManagerConfigArrayOutput { + return o.ApplyT(func(v LookupClusterResult) []GetClusterSecretManagerConfig { return v.SecretManagerConfigs }).(GetClusterSecretManagerConfigArrayOutput) +} + func (o LookupClusterResultOutput) SecurityPostureConfigs() GetClusterSecurityPostureConfigArrayOutput { return o.ApplyT(func(v LookupClusterResult) []GetClusterSecurityPostureConfig { return v.SecurityPostureConfigs }).(GetClusterSecurityPostureConfigArrayOutput) } diff --git a/sdk/go/gcp/container/pulumiTypes.go b/sdk/go/gcp/container/pulumiTypes.go index 709176facc..f749502461 100644 --- a/sdk/go/gcp/container/pulumiTypes.go +++ b/sdk/go/gcp/container/pulumiTypes.go @@ -34527,6 +34527,143 @@ func (o ClusterResourceUsageExportConfigBigqueryDestinationPtrOutput) DatasetId( }).(pulumi.StringPtrOutput) } +type ClusterSecretManagerConfig struct { + // Enable the Secret Manager add-on for this cluster. + Enabled bool `pulumi:"enabled"` +} + +// ClusterSecretManagerConfigInput is an input type that accepts ClusterSecretManagerConfigArgs and ClusterSecretManagerConfigOutput values. +// You can construct a concrete instance of `ClusterSecretManagerConfigInput` via: +// +// ClusterSecretManagerConfigArgs{...} +type ClusterSecretManagerConfigInput interface { + pulumi.Input + + ToClusterSecretManagerConfigOutput() ClusterSecretManagerConfigOutput + ToClusterSecretManagerConfigOutputWithContext(context.Context) ClusterSecretManagerConfigOutput +} + +type ClusterSecretManagerConfigArgs struct { + // Enable the Secret Manager add-on for this cluster. + Enabled pulumi.BoolInput `pulumi:"enabled"` +} + +func (ClusterSecretManagerConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterSecretManagerConfig)(nil)).Elem() +} + +func (i ClusterSecretManagerConfigArgs) ToClusterSecretManagerConfigOutput() ClusterSecretManagerConfigOutput { + return i.ToClusterSecretManagerConfigOutputWithContext(context.Background()) +} + +func (i ClusterSecretManagerConfigArgs) ToClusterSecretManagerConfigOutputWithContext(ctx context.Context) ClusterSecretManagerConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterSecretManagerConfigOutput) +} + +func (i ClusterSecretManagerConfigArgs) ToClusterSecretManagerConfigPtrOutput() ClusterSecretManagerConfigPtrOutput { + return i.ToClusterSecretManagerConfigPtrOutputWithContext(context.Background()) +} + +func (i ClusterSecretManagerConfigArgs) ToClusterSecretManagerConfigPtrOutputWithContext(ctx context.Context) ClusterSecretManagerConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterSecretManagerConfigOutput).ToClusterSecretManagerConfigPtrOutputWithContext(ctx) +} + +// ClusterSecretManagerConfigPtrInput is an input type that accepts ClusterSecretManagerConfigArgs, ClusterSecretManagerConfigPtr and ClusterSecretManagerConfigPtrOutput values. +// You can construct a concrete instance of `ClusterSecretManagerConfigPtrInput` via: +// +// ClusterSecretManagerConfigArgs{...} +// +// or: +// +// nil +type ClusterSecretManagerConfigPtrInput interface { + pulumi.Input + + ToClusterSecretManagerConfigPtrOutput() ClusterSecretManagerConfigPtrOutput + ToClusterSecretManagerConfigPtrOutputWithContext(context.Context) ClusterSecretManagerConfigPtrOutput +} + +type clusterSecretManagerConfigPtrType ClusterSecretManagerConfigArgs + +func ClusterSecretManagerConfigPtr(v *ClusterSecretManagerConfigArgs) ClusterSecretManagerConfigPtrInput { + return (*clusterSecretManagerConfigPtrType)(v) +} + +func (*clusterSecretManagerConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterSecretManagerConfig)(nil)).Elem() +} + +func (i *clusterSecretManagerConfigPtrType) ToClusterSecretManagerConfigPtrOutput() ClusterSecretManagerConfigPtrOutput { + return i.ToClusterSecretManagerConfigPtrOutputWithContext(context.Background()) +} + +func (i *clusterSecretManagerConfigPtrType) ToClusterSecretManagerConfigPtrOutputWithContext(ctx context.Context) ClusterSecretManagerConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterSecretManagerConfigPtrOutput) +} + +type ClusterSecretManagerConfigOutput struct{ *pulumi.OutputState } + +func (ClusterSecretManagerConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterSecretManagerConfig)(nil)).Elem() +} + +func (o ClusterSecretManagerConfigOutput) ToClusterSecretManagerConfigOutput() ClusterSecretManagerConfigOutput { + return o +} + +func (o ClusterSecretManagerConfigOutput) ToClusterSecretManagerConfigOutputWithContext(ctx context.Context) ClusterSecretManagerConfigOutput { + return o +} + +func (o ClusterSecretManagerConfigOutput) ToClusterSecretManagerConfigPtrOutput() ClusterSecretManagerConfigPtrOutput { + return o.ToClusterSecretManagerConfigPtrOutputWithContext(context.Background()) +} + +func (o ClusterSecretManagerConfigOutput) ToClusterSecretManagerConfigPtrOutputWithContext(ctx context.Context) ClusterSecretManagerConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClusterSecretManagerConfig) *ClusterSecretManagerConfig { + return &v + }).(ClusterSecretManagerConfigPtrOutput) +} + +// Enable the Secret Manager add-on for this cluster. +func (o ClusterSecretManagerConfigOutput) Enabled() pulumi.BoolOutput { + return o.ApplyT(func(v ClusterSecretManagerConfig) bool { return v.Enabled }).(pulumi.BoolOutput) +} + +type ClusterSecretManagerConfigPtrOutput struct{ *pulumi.OutputState } + +func (ClusterSecretManagerConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterSecretManagerConfig)(nil)).Elem() +} + +func (o ClusterSecretManagerConfigPtrOutput) ToClusterSecretManagerConfigPtrOutput() ClusterSecretManagerConfigPtrOutput { + return o +} + +func (o ClusterSecretManagerConfigPtrOutput) ToClusterSecretManagerConfigPtrOutputWithContext(ctx context.Context) ClusterSecretManagerConfigPtrOutput { + return o +} + +func (o ClusterSecretManagerConfigPtrOutput) Elem() ClusterSecretManagerConfigOutput { + return o.ApplyT(func(v *ClusterSecretManagerConfig) ClusterSecretManagerConfig { + if v != nil { + return *v + } + var ret ClusterSecretManagerConfig + return ret + }).(ClusterSecretManagerConfigOutput) +} + +// Enable the Secret Manager add-on for this cluster. +func (o ClusterSecretManagerConfigPtrOutput) Enabled() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ClusterSecretManagerConfig) *bool { + if v == nil { + return nil + } + return &v.Enabled + }).(pulumi.BoolPtrOutput) +} + type ClusterSecurityPostureConfig struct { // Sets the mode of the Kubernetes security posture API's off-cluster features. Available options include `DISABLED` and `BASIC`. Mode *string `pulumi:"mode"` @@ -35826,9 +35963,9 @@ type NodePoolNetworkConfig struct { CreatePodRange *bool `pulumi:"createPodRange"` // Whether nodes have internal IP addresses only. EnablePrivateNodes *bool `pulumi:"enablePrivateNodes"` - // Network bandwidth tier configuration. + // Network bandwidth tier configuration. Structure is documented below. NetworkPerformanceConfig *NodePoolNetworkConfigNetworkPerformanceConfig `pulumi:"networkPerformanceConfig"` - // Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + // Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. PodCidrOverprovisionConfig *NodePoolNetworkConfigPodCidrOverprovisionConfig `pulumi:"podCidrOverprovisionConfig"` // 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"` @@ -35858,9 +35995,9 @@ type NodePoolNetworkConfigArgs struct { CreatePodRange pulumi.BoolPtrInput `pulumi:"createPodRange"` // Whether nodes have internal IP addresses only. EnablePrivateNodes pulumi.BoolPtrInput `pulumi:"enablePrivateNodes"` - // Network bandwidth tier configuration. + // Network bandwidth tier configuration. Structure is documented below. NetworkPerformanceConfig NodePoolNetworkConfigNetworkPerformanceConfigPtrInput `pulumi:"networkPerformanceConfig"` - // Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + // Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. PodCidrOverprovisionConfig NodePoolNetworkConfigPodCidrOverprovisionConfigPtrInput `pulumi:"podCidrOverprovisionConfig"` // 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"` @@ -35971,14 +36108,14 @@ func (o NodePoolNetworkConfigOutput) EnablePrivateNodes() pulumi.BoolPtrOutput { return o.ApplyT(func(v NodePoolNetworkConfig) *bool { return v.EnablePrivateNodes }).(pulumi.BoolPtrOutput) } -// Network bandwidth tier configuration. +// Network bandwidth tier configuration. Structure is documented below. func (o NodePoolNetworkConfigOutput) NetworkPerformanceConfig() NodePoolNetworkConfigNetworkPerformanceConfigPtrOutput { return o.ApplyT(func(v NodePoolNetworkConfig) *NodePoolNetworkConfigNetworkPerformanceConfig { return v.NetworkPerformanceConfig }).(NodePoolNetworkConfigNetworkPerformanceConfigPtrOutput) } -// Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited +// Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. func (o NodePoolNetworkConfigOutput) PodCidrOverprovisionConfig() NodePoolNetworkConfigPodCidrOverprovisionConfigPtrOutput { return o.ApplyT(func(v NodePoolNetworkConfig) *NodePoolNetworkConfigPodCidrOverprovisionConfig { return v.PodCidrOverprovisionConfig @@ -36061,7 +36198,7 @@ func (o NodePoolNetworkConfigPtrOutput) EnablePrivateNodes() pulumi.BoolPtrOutpu }).(pulumi.BoolPtrOutput) } -// Network bandwidth tier configuration. +// Network bandwidth tier configuration. Structure is documented below. func (o NodePoolNetworkConfigPtrOutput) NetworkPerformanceConfig() NodePoolNetworkConfigNetworkPerformanceConfigPtrOutput { return o.ApplyT(func(v *NodePoolNetworkConfig) *NodePoolNetworkConfigNetworkPerformanceConfig { if v == nil { @@ -36071,7 +36208,7 @@ func (o NodePoolNetworkConfigPtrOutput) NetworkPerformanceConfig() NodePoolNetwo }).(NodePoolNetworkConfigNetworkPerformanceConfigPtrOutput) } -// Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited +// Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. func (o NodePoolNetworkConfigPtrOutput) PodCidrOverprovisionConfig() NodePoolNetworkConfigPodCidrOverprovisionConfigPtrOutput { return o.ApplyT(func(v *NodePoolNetworkConfig) *NodePoolNetworkConfigPodCidrOverprovisionConfig { if v == nil { @@ -36460,6 +36597,7 @@ func (o NodePoolNetworkConfigNetworkPerformanceConfigPtrOutput) TotalEgressBandw } type NodePoolNetworkConfigPodCidrOverprovisionConfig struct { + // Whether pod cidr overprovision is disabled. Disabled bool `pulumi:"disabled"` } @@ -36475,6 +36613,7 @@ type NodePoolNetworkConfigPodCidrOverprovisionConfigInput interface { } type NodePoolNetworkConfigPodCidrOverprovisionConfigArgs struct { + // Whether pod cidr overprovision is disabled. Disabled pulumi.BoolInput `pulumi:"disabled"` } @@ -36555,6 +36694,7 @@ func (o NodePoolNetworkConfigPodCidrOverprovisionConfigOutput) ToNodePoolNetwork }).(NodePoolNetworkConfigPodCidrOverprovisionConfigPtrOutput) } +// Whether pod cidr overprovision is disabled. func (o NodePoolNetworkConfigPodCidrOverprovisionConfigOutput) Disabled() pulumi.BoolOutput { return o.ApplyT(func(v NodePoolNetworkConfigPodCidrOverprovisionConfig) bool { return v.Disabled }).(pulumi.BoolOutput) } @@ -36583,6 +36723,7 @@ func (o NodePoolNetworkConfigPodCidrOverprovisionConfigPtrOutput) Elem() NodePoo }).(NodePoolNetworkConfigPodCidrOverprovisionConfigOutput) } +// Whether pod cidr overprovision is disabled. func (o NodePoolNetworkConfigPodCidrOverprovisionConfigPtrOutput) Disabled() pulumi.BoolPtrOutput { return o.ApplyT(func(v *NodePoolNetworkConfigPodCidrOverprovisionConfig) *bool { if v == nil { @@ -58220,6 +58361,103 @@ func (o GetClusterResourceUsageExportConfigBigqueryDestinationArrayOutput) Index }).(GetClusterResourceUsageExportConfigBigqueryDestinationOutput) } +type GetClusterSecretManagerConfig struct { + // Enable the Secret manager csi component. + Enabled bool `pulumi:"enabled"` +} + +// GetClusterSecretManagerConfigInput is an input type that accepts GetClusterSecretManagerConfigArgs and GetClusterSecretManagerConfigOutput values. +// You can construct a concrete instance of `GetClusterSecretManagerConfigInput` via: +// +// GetClusterSecretManagerConfigArgs{...} +type GetClusterSecretManagerConfigInput interface { + pulumi.Input + + ToGetClusterSecretManagerConfigOutput() GetClusterSecretManagerConfigOutput + ToGetClusterSecretManagerConfigOutputWithContext(context.Context) GetClusterSecretManagerConfigOutput +} + +type GetClusterSecretManagerConfigArgs struct { + // Enable the Secret manager csi component. + Enabled pulumi.BoolInput `pulumi:"enabled"` +} + +func (GetClusterSecretManagerConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetClusterSecretManagerConfig)(nil)).Elem() +} + +func (i GetClusterSecretManagerConfigArgs) ToGetClusterSecretManagerConfigOutput() GetClusterSecretManagerConfigOutput { + return i.ToGetClusterSecretManagerConfigOutputWithContext(context.Background()) +} + +func (i GetClusterSecretManagerConfigArgs) ToGetClusterSecretManagerConfigOutputWithContext(ctx context.Context) GetClusterSecretManagerConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetClusterSecretManagerConfigOutput) +} + +// GetClusterSecretManagerConfigArrayInput is an input type that accepts GetClusterSecretManagerConfigArray and GetClusterSecretManagerConfigArrayOutput values. +// You can construct a concrete instance of `GetClusterSecretManagerConfigArrayInput` via: +// +// GetClusterSecretManagerConfigArray{ GetClusterSecretManagerConfigArgs{...} } +type GetClusterSecretManagerConfigArrayInput interface { + pulumi.Input + + ToGetClusterSecretManagerConfigArrayOutput() GetClusterSecretManagerConfigArrayOutput + ToGetClusterSecretManagerConfigArrayOutputWithContext(context.Context) GetClusterSecretManagerConfigArrayOutput +} + +type GetClusterSecretManagerConfigArray []GetClusterSecretManagerConfigInput + +func (GetClusterSecretManagerConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetClusterSecretManagerConfig)(nil)).Elem() +} + +func (i GetClusterSecretManagerConfigArray) ToGetClusterSecretManagerConfigArrayOutput() GetClusterSecretManagerConfigArrayOutput { + return i.ToGetClusterSecretManagerConfigArrayOutputWithContext(context.Background()) +} + +func (i GetClusterSecretManagerConfigArray) ToGetClusterSecretManagerConfigArrayOutputWithContext(ctx context.Context) GetClusterSecretManagerConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetClusterSecretManagerConfigArrayOutput) +} + +type GetClusterSecretManagerConfigOutput struct{ *pulumi.OutputState } + +func (GetClusterSecretManagerConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetClusterSecretManagerConfig)(nil)).Elem() +} + +func (o GetClusterSecretManagerConfigOutput) ToGetClusterSecretManagerConfigOutput() GetClusterSecretManagerConfigOutput { + return o +} + +func (o GetClusterSecretManagerConfigOutput) ToGetClusterSecretManagerConfigOutputWithContext(ctx context.Context) GetClusterSecretManagerConfigOutput { + return o +} + +// Enable the Secret manager csi component. +func (o GetClusterSecretManagerConfigOutput) Enabled() pulumi.BoolOutput { + return o.ApplyT(func(v GetClusterSecretManagerConfig) bool { return v.Enabled }).(pulumi.BoolOutput) +} + +type GetClusterSecretManagerConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetClusterSecretManagerConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetClusterSecretManagerConfig)(nil)).Elem() +} + +func (o GetClusterSecretManagerConfigArrayOutput) ToGetClusterSecretManagerConfigArrayOutput() GetClusterSecretManagerConfigArrayOutput { + return o +} + +func (o GetClusterSecretManagerConfigArrayOutput) ToGetClusterSecretManagerConfigArrayOutputWithContext(ctx context.Context) GetClusterSecretManagerConfigArrayOutput { + return o +} + +func (o GetClusterSecretManagerConfigArrayOutput) Index(i pulumi.IntInput) GetClusterSecretManagerConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetClusterSecretManagerConfig { + return vs[0].([]GetClusterSecretManagerConfig)[vs[1].(int)] + }).(GetClusterSecretManagerConfigOutput) +} + type GetClusterSecurityPostureConfig struct { // Sets the mode of the Kubernetes security posture API's off-cluster features. Available options include DISABLED and BASIC. Mode string `pulumi:"mode"` @@ -59245,6 +59483,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ClusterResourceUsageExportConfigPtrInput)(nil)).Elem(), ClusterResourceUsageExportConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterResourceUsageExportConfigBigqueryDestinationInput)(nil)).Elem(), ClusterResourceUsageExportConfigBigqueryDestinationArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterResourceUsageExportConfigBigqueryDestinationPtrInput)(nil)).Elem(), ClusterResourceUsageExportConfigBigqueryDestinationArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterSecretManagerConfigInput)(nil)).Elem(), ClusterSecretManagerConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterSecretManagerConfigPtrInput)(nil)).Elem(), ClusterSecretManagerConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterSecurityPostureConfigInput)(nil)).Elem(), ClusterSecurityPostureConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterSecurityPostureConfigPtrInput)(nil)).Elem(), ClusterSecurityPostureConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterServiceExternalIpsConfigInput)(nil)).Elem(), ClusterServiceExternalIpsConfigArgs{}) @@ -59620,6 +59860,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetClusterResourceUsageExportConfigArrayInput)(nil)).Elem(), GetClusterResourceUsageExportConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterResourceUsageExportConfigBigqueryDestinationInput)(nil)).Elem(), GetClusterResourceUsageExportConfigBigqueryDestinationArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterResourceUsageExportConfigBigqueryDestinationArrayInput)(nil)).Elem(), GetClusterResourceUsageExportConfigBigqueryDestinationArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetClusterSecretManagerConfigInput)(nil)).Elem(), GetClusterSecretManagerConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetClusterSecretManagerConfigArrayInput)(nil)).Elem(), GetClusterSecretManagerConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterSecurityPostureConfigInput)(nil)).Elem(), GetClusterSecurityPostureConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterSecurityPostureConfigArrayInput)(nil)).Elem(), GetClusterSecurityPostureConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterServiceExternalIpsConfigInput)(nil)).Elem(), GetClusterServiceExternalIpsConfigArgs{}) @@ -60047,6 +60289,8 @@ func init() { pulumi.RegisterOutputType(ClusterResourceUsageExportConfigPtrOutput{}) pulumi.RegisterOutputType(ClusterResourceUsageExportConfigBigqueryDestinationOutput{}) pulumi.RegisterOutputType(ClusterResourceUsageExportConfigBigqueryDestinationPtrOutput{}) + pulumi.RegisterOutputType(ClusterSecretManagerConfigOutput{}) + pulumi.RegisterOutputType(ClusterSecretManagerConfigPtrOutput{}) pulumi.RegisterOutputType(ClusterSecurityPostureConfigOutput{}) pulumi.RegisterOutputType(ClusterSecurityPostureConfigPtrOutput{}) pulumi.RegisterOutputType(ClusterServiceExternalIpsConfigOutput{}) @@ -60422,6 +60666,8 @@ func init() { pulumi.RegisterOutputType(GetClusterResourceUsageExportConfigArrayOutput{}) pulumi.RegisterOutputType(GetClusterResourceUsageExportConfigBigqueryDestinationOutput{}) pulumi.RegisterOutputType(GetClusterResourceUsageExportConfigBigqueryDestinationArrayOutput{}) + pulumi.RegisterOutputType(GetClusterSecretManagerConfigOutput{}) + pulumi.RegisterOutputType(GetClusterSecretManagerConfigArrayOutput{}) pulumi.RegisterOutputType(GetClusterSecurityPostureConfigOutput{}) pulumi.RegisterOutputType(GetClusterSecurityPostureConfigArrayOutput{}) pulumi.RegisterOutputType(GetClusterServiceExternalIpsConfigOutput{}) diff --git a/sdk/go/gcp/dataloss/preventionInspectTemplate.go b/sdk/go/gcp/dataloss/preventionInspectTemplate.go index 9925646c7f..5dd4e51a92 100644 --- a/sdk/go/gcp/dataloss/preventionInspectTemplate.go +++ b/sdk/go/gcp/dataloss/preventionInspectTemplate.go @@ -344,6 +344,51 @@ import ( // } // // ``` +// ### Dlp Inspect Template Max Infotype Per Finding Default +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/dataloss" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := dataloss.NewPreventionInspectTemplate(ctx, "max_infotype_per_finding_default", &dataloss.PreventionInspectTemplateArgs{ +// Parent: pulumi.String("projects/my-project-name"), +// InspectConfig: &dataloss.PreventionInspectTemplateInspectConfigArgs{ +// InfoTypes: dataloss.PreventionInspectTemplateInspectConfigInfoTypeArray{ +// &dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{ +// Name: pulumi.String("EMAIL_ADDRESS"), +// }, +// &dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs{ +// Name: pulumi.String("PERSON_NAME"), +// }, +// }, +// MinLikelihood: pulumi.String("UNLIKELY"), +// Limits: &dataloss.PreventionInspectTemplateInspectConfigLimitsArgs{ +// MaxFindingsPerRequest: pulumi.Int(333), +// MaxFindingsPerItem: pulumi.Int(222), +// MaxFindingsPerInfoTypes: dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArray{ +// &dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs{ +// MaxFindings: pulumi.Int(111), +// }, +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // // ## Import // diff --git a/sdk/go/gcp/dataloss/pulumiTypes.go b/sdk/go/gcp/dataloss/pulumiTypes.go index a0d64ba641..76eccdc53d 100644 --- a/sdk/go/gcp/dataloss/pulumiTypes.go +++ b/sdk/go/gcp/dataloss/pulumiTypes.go @@ -36379,6 +36379,8 @@ type PreventionDiscoveryConfigTarget struct { // Cloud SQL target for Discovery. The first target to match a table will be the one applied. // Structure is documented below. CloudSqlTarget *PreventionDiscoveryConfigTargetCloudSqlTarget `pulumi:"cloudSqlTarget"` + // Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + SecretsTarget *PreventionDiscoveryConfigTargetSecretsTarget `pulumi:"secretsTarget"` } // PreventionDiscoveryConfigTargetInput is an input type that accepts PreventionDiscoveryConfigTargetArgs and PreventionDiscoveryConfigTargetOutput values. @@ -36399,6 +36401,8 @@ type PreventionDiscoveryConfigTargetArgs struct { // Cloud SQL target for Discovery. The first target to match a table will be the one applied. // Structure is documented below. CloudSqlTarget PreventionDiscoveryConfigTargetCloudSqlTargetPtrInput `pulumi:"cloudSqlTarget"` + // Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + SecretsTarget PreventionDiscoveryConfigTargetSecretsTargetPtrInput `pulumi:"secretsTarget"` } func (PreventionDiscoveryConfigTargetArgs) ElementType() reflect.Type { @@ -36468,6 +36472,13 @@ func (o PreventionDiscoveryConfigTargetOutput) CloudSqlTarget() PreventionDiscov }).(PreventionDiscoveryConfigTargetCloudSqlTargetPtrOutput) } +// Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. +func (o PreventionDiscoveryConfigTargetOutput) SecretsTarget() PreventionDiscoveryConfigTargetSecretsTargetPtrOutput { + return o.ApplyT(func(v PreventionDiscoveryConfigTarget) *PreventionDiscoveryConfigTargetSecretsTarget { + return v.SecretsTarget + }).(PreventionDiscoveryConfigTargetSecretsTargetPtrOutput) +} + type PreventionDiscoveryConfigTargetArrayOutput struct{ *pulumi.OutputState } func (PreventionDiscoveryConfigTargetArrayOutput) ElementType() reflect.Type { @@ -37834,6 +37845,9 @@ func (o PreventionDiscoveryConfigTargetBigQueryTargetDisabledPtrOutput) Elem() P type PreventionDiscoveryConfigTargetBigQueryTargetFilter struct { // Catch-all. This should always be the last filter in the list because anything above it will apply first. OtherTables *PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables `pulumi:"otherTables"` + // The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + // Structure is documented below. + TableReference *PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference `pulumi:"tableReference"` // A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. // Structure is documented below. Tables *PreventionDiscoveryConfigTargetBigQueryTargetFilterTables `pulumi:"tables"` @@ -37853,6 +37867,9 @@ type PreventionDiscoveryConfigTargetBigQueryTargetFilterInput interface { type PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs struct { // Catch-all. This should always be the last filter in the list because anything above it will apply first. OtherTables PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesPtrInput `pulumi:"otherTables"` + // The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + // Structure is documented below. + TableReference PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrInput `pulumi:"tableReference"` // A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. // Structure is documented below. Tables PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesPtrInput `pulumi:"tables"` @@ -37942,6 +37959,14 @@ func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterOutput) OtherTables() }).(PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesPtrOutput) } +// The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). +// Structure is documented below. +func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterOutput) TableReference() PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput { + return o.ApplyT(func(v PreventionDiscoveryConfigTargetBigQueryTargetFilter) *PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference { + return v.TableReference + }).(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput) +} + // A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. // Structure is documented below. func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterOutput) Tables() PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesPtrOutput { @@ -37984,6 +38009,17 @@ func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterPtrOutput) OtherTable }).(PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesPtrOutput) } +// The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). +// Structure is documented below. +func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterPtrOutput) TableReference() PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput { + return o.ApplyT(func(v *PreventionDiscoveryConfigTargetBigQueryTargetFilter) *PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference { + if v == nil { + return nil + } + return v.TableReference + }).(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput) +} + // A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. // Structure is documented below. func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterPtrOutput) Tables() PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesPtrOutput { @@ -38113,6 +38149,162 @@ func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesPtrOutput) }).(PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesOutput) } +type PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference struct { + // Dataset ID of the table. + DatasetId string `pulumi:"datasetId"` + // Name of the table. + TableId string `pulumi:"tableId"` +} + +// PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceInput is an input type that accepts PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs and PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput values. +// You can construct a concrete instance of `PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceInput` via: +// +// PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs{...} +type PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceInput interface { + pulumi.Input + + ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput() PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput + ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutputWithContext(context.Context) PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput +} + +type PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs struct { + // Dataset ID of the table. + DatasetId pulumi.StringInput `pulumi:"datasetId"` + // Name of the table. + TableId pulumi.StringInput `pulumi:"tableId"` +} + +func (PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs) ElementType() reflect.Type { + return reflect.TypeOf((*PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference)(nil)).Elem() +} + +func (i PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs) ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput() PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput { + return i.ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutputWithContext(context.Background()) +} + +func (i PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs) ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput) +} + +func (i PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs) ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput() PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput { + return i.ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutputWithContext(context.Background()) +} + +func (i PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs) ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput).ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutputWithContext(ctx) +} + +// PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrInput is an input type that accepts PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs, PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtr and PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput values. +// You can construct a concrete instance of `PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrInput` via: +// +// PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs{...} +// +// or: +// +// nil +type PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrInput interface { + pulumi.Input + + ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput() PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput + ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutputWithContext(context.Context) PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput +} + +type preventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrType PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs + +func PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtr(v *PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs) PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrInput { + return (*preventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrType)(v) +} + +func (*preventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrType) ElementType() reflect.Type { + return reflect.TypeOf((**PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference)(nil)).Elem() +} + +func (i *preventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrType) ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput() PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput { + return i.ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutputWithContext(context.Background()) +} + +func (i *preventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrType) ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput) +} + +type PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput struct{ *pulumi.OutputState } + +func (PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput) ElementType() reflect.Type { + return reflect.TypeOf((*PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference)(nil)).Elem() +} + +func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput) ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput() PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput { + return o +} + +func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput) ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput { + return o +} + +func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput) ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput() PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput { + return o.ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutputWithContext(context.Background()) +} + +func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput) ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference) *PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference { + return &v + }).(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput) +} + +// Dataset ID of the table. +func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput) DatasetId() pulumi.StringOutput { + return o.ApplyT(func(v PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference) string { return v.DatasetId }).(pulumi.StringOutput) +} + +// Name of the table. +func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput) TableId() pulumi.StringOutput { + return o.ApplyT(func(v PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference) string { return v.TableId }).(pulumi.StringOutput) +} + +type PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput struct{ *pulumi.OutputState } + +func (PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference)(nil)).Elem() +} + +func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput) ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput() PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput { + return o +} + +func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput) ToPreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput { + return o +} + +func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput) Elem() PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput { + return o.ApplyT(func(v *PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference) PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference { + if v != nil { + return *v + } + var ret PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference + return ret + }).(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput) +} + +// Dataset ID of the table. +func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput) DatasetId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference) *string { + if v == nil { + return nil + } + return &v.DatasetId + }).(pulumi.StringPtrOutput) +} + +// Name of the table. +func (o PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput) TableId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference) *string { + if v == nil { + return nil + } + return &v.TableId + }).(pulumi.StringPtrOutput) +} + type PreventionDiscoveryConfigTargetBigQueryTargetFilterTables struct { // A collection of regular expressions to match a BQ table against. // Structure is documented below. @@ -39020,6 +39212,9 @@ type PreventionDiscoveryConfigTargetCloudSqlTargetFilter struct { // A specific set of database resources for this filter to apply to. // Structure is documented below. Collection *PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollection `pulumi:"collection"` + // The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + // Structure is documented below. + DatabaseResourceReference *PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference `pulumi:"databaseResourceReference"` // Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. Others *PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers `pulumi:"others"` } @@ -39039,6 +39234,9 @@ type PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs struct { // A specific set of database resources for this filter to apply to. // Structure is documented below. Collection PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionPtrInput `pulumi:"collection"` + // The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + // Structure is documented below. + DatabaseResourceReference PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrInput `pulumi:"databaseResourceReference"` // Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. Others PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersPtrInput `pulumi:"others"` } @@ -39128,6 +39326,14 @@ func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterOutput) Collection() }).(PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionPtrOutput) } +// The database resource to scan. Targets including this can only include one target (the target with this database resource reference). +// Structure is documented below. +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterOutput) DatabaseResourceReference() PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput { + return o.ApplyT(func(v PreventionDiscoveryConfigTargetCloudSqlTargetFilter) *PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference { + return v.DatabaseResourceReference + }).(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput) +} + // Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterOutput) Others() PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersPtrOutput { return o.ApplyT(func(v PreventionDiscoveryConfigTargetCloudSqlTargetFilter) *PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers { @@ -39170,6 +39376,17 @@ func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterPtrOutput) Collection }).(PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionPtrOutput) } +// The database resource to scan. Targets including this can only include one target (the target with this database resource reference). +// Structure is documented below. +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterPtrOutput) DatabaseResourceReference() PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput { + return o.ApplyT(func(v *PreventionDiscoveryConfigTargetCloudSqlTargetFilter) *PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference { + if v == nil { + return nil + } + return v.DatabaseResourceReference + }).(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput) +} + // Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterPtrOutput) Others() PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersPtrOutput { return o.ApplyT(func(v *PreventionDiscoveryConfigTargetCloudSqlTargetFilter) *PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers { @@ -39598,6 +39815,208 @@ func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRege }).(PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexesPatternOutput) } +type PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference struct { + // Required. Name of a database within the instance. + Database string `pulumi:"database"` + // Required. Name of a database resource, for example, a table within the database. + DatabaseResource string `pulumi:"databaseResource"` + // Required. The instance where this resource is located. For example: Cloud SQL instance ID. + Instance string `pulumi:"instance"` + // Required. If within a project-level config, then this must match the config's project ID. + ProjectId string `pulumi:"projectId"` +} + +// PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceInput is an input type that accepts PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs and PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput values. +// You can construct a concrete instance of `PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceInput` via: +// +// PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs{...} +type PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceInput interface { + pulumi.Input + + ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput() PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput + ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutputWithContext(context.Context) PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput +} + +type PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs struct { + // Required. Name of a database within the instance. + Database pulumi.StringInput `pulumi:"database"` + // Required. Name of a database resource, for example, a table within the database. + DatabaseResource pulumi.StringInput `pulumi:"databaseResource"` + // Required. The instance where this resource is located. For example: Cloud SQL instance ID. + Instance pulumi.StringInput `pulumi:"instance"` + // Required. If within a project-level config, then this must match the config's project ID. + ProjectId pulumi.StringInput `pulumi:"projectId"` +} + +func (PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs) ElementType() reflect.Type { + return reflect.TypeOf((*PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference)(nil)).Elem() +} + +func (i PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs) ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput() PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput { + return i.ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutputWithContext(context.Background()) +} + +func (i PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs) ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput) +} + +func (i PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs) ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput() PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput { + return i.ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutputWithContext(context.Background()) +} + +func (i PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs) ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput).ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutputWithContext(ctx) +} + +// PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrInput is an input type that accepts PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs, PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtr and PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput values. +// You can construct a concrete instance of `PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrInput` via: +// +// PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs{...} +// +// or: +// +// nil +type PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrInput interface { + pulumi.Input + + ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput() PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput + ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutputWithContext(context.Context) PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput +} + +type preventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrType PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs + +func PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtr(v *PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs) PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrInput { + return (*preventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrType)(v) +} + +func (*preventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrType) ElementType() reflect.Type { + return reflect.TypeOf((**PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference)(nil)).Elem() +} + +func (i *preventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrType) ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput() PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput { + return i.ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutputWithContext(context.Background()) +} + +func (i *preventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrType) ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput) +} + +type PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput struct{ *pulumi.OutputState } + +func (PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput) ElementType() reflect.Type { + return reflect.TypeOf((*PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference)(nil)).Elem() +} + +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput) ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput() PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput { + return o +} + +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput) ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput { + return o +} + +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput) ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput() PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput { + return o.ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutputWithContext(context.Background()) +} + +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput) ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference) *PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference { + return &v + }).(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput) +} + +// Required. Name of a database within the instance. +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput) Database() pulumi.StringOutput { + return o.ApplyT(func(v PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference) string { + return v.Database + }).(pulumi.StringOutput) +} + +// Required. Name of a database resource, for example, a table within the database. +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput) DatabaseResource() pulumi.StringOutput { + return o.ApplyT(func(v PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference) string { + return v.DatabaseResource + }).(pulumi.StringOutput) +} + +// Required. The instance where this resource is located. For example: Cloud SQL instance ID. +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput) Instance() pulumi.StringOutput { + return o.ApplyT(func(v PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference) string { + return v.Instance + }).(pulumi.StringOutput) +} + +// Required. If within a project-level config, then this must match the config's project ID. +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput) ProjectId() pulumi.StringOutput { + return o.ApplyT(func(v PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference) string { + return v.ProjectId + }).(pulumi.StringOutput) +} + +type PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput struct{ *pulumi.OutputState } + +func (PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference)(nil)).Elem() +} + +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput) ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput() PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput { + return o +} + +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput) ToPreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput { + return o +} + +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput) Elem() PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput { + return o.ApplyT(func(v *PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference) PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference { + if v != nil { + return *v + } + var ret PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference + return ret + }).(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput) +} + +// Required. Name of a database within the instance. +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput) Database() pulumi.StringPtrOutput { + return o.ApplyT(func(v *PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference) *string { + if v == nil { + return nil + } + return &v.Database + }).(pulumi.StringPtrOutput) +} + +// Required. Name of a database resource, for example, a table within the database. +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput) DatabaseResource() pulumi.StringPtrOutput { + return o.ApplyT(func(v *PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference) *string { + if v == nil { + return nil + } + return &v.DatabaseResource + }).(pulumi.StringPtrOutput) +} + +// Required. The instance where this resource is located. For example: Cloud SQL instance ID. +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput) Instance() pulumi.StringPtrOutput { + return o.ApplyT(func(v *PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference) *string { + if v == nil { + return nil + } + return &v.Instance + }).(pulumi.StringPtrOutput) +} + +// Required. If within a project-level config, then this must match the config's project ID. +func (o PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput) ProjectId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference) *string { + if v == nil { + return nil + } + return &v.ProjectId + }).(pulumi.StringPtrOutput) +} + type PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers struct { } @@ -40052,6 +40471,124 @@ func (o PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceSchemaModi }).(pulumi.StringArrayOutput) } +type PreventionDiscoveryConfigTargetSecretsTarget struct { +} + +// PreventionDiscoveryConfigTargetSecretsTargetInput is an input type that accepts PreventionDiscoveryConfigTargetSecretsTargetArgs and PreventionDiscoveryConfigTargetSecretsTargetOutput values. +// You can construct a concrete instance of `PreventionDiscoveryConfigTargetSecretsTargetInput` via: +// +// PreventionDiscoveryConfigTargetSecretsTargetArgs{...} +type PreventionDiscoveryConfigTargetSecretsTargetInput interface { + pulumi.Input + + ToPreventionDiscoveryConfigTargetSecretsTargetOutput() PreventionDiscoveryConfigTargetSecretsTargetOutput + ToPreventionDiscoveryConfigTargetSecretsTargetOutputWithContext(context.Context) PreventionDiscoveryConfigTargetSecretsTargetOutput +} + +type PreventionDiscoveryConfigTargetSecretsTargetArgs struct { +} + +func (PreventionDiscoveryConfigTargetSecretsTargetArgs) ElementType() reflect.Type { + return reflect.TypeOf((*PreventionDiscoveryConfigTargetSecretsTarget)(nil)).Elem() +} + +func (i PreventionDiscoveryConfigTargetSecretsTargetArgs) ToPreventionDiscoveryConfigTargetSecretsTargetOutput() PreventionDiscoveryConfigTargetSecretsTargetOutput { + return i.ToPreventionDiscoveryConfigTargetSecretsTargetOutputWithContext(context.Background()) +} + +func (i PreventionDiscoveryConfigTargetSecretsTargetArgs) ToPreventionDiscoveryConfigTargetSecretsTargetOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetSecretsTargetOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionDiscoveryConfigTargetSecretsTargetOutput) +} + +func (i PreventionDiscoveryConfigTargetSecretsTargetArgs) ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutput() PreventionDiscoveryConfigTargetSecretsTargetPtrOutput { + return i.ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutputWithContext(context.Background()) +} + +func (i PreventionDiscoveryConfigTargetSecretsTargetArgs) ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetSecretsTargetPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionDiscoveryConfigTargetSecretsTargetOutput).ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutputWithContext(ctx) +} + +// PreventionDiscoveryConfigTargetSecretsTargetPtrInput is an input type that accepts PreventionDiscoveryConfigTargetSecretsTargetArgs, PreventionDiscoveryConfigTargetSecretsTargetPtr and PreventionDiscoveryConfigTargetSecretsTargetPtrOutput values. +// You can construct a concrete instance of `PreventionDiscoveryConfigTargetSecretsTargetPtrInput` via: +// +// PreventionDiscoveryConfigTargetSecretsTargetArgs{...} +// +// or: +// +// nil +type PreventionDiscoveryConfigTargetSecretsTargetPtrInput interface { + pulumi.Input + + ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutput() PreventionDiscoveryConfigTargetSecretsTargetPtrOutput + ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutputWithContext(context.Context) PreventionDiscoveryConfigTargetSecretsTargetPtrOutput +} + +type preventionDiscoveryConfigTargetSecretsTargetPtrType PreventionDiscoveryConfigTargetSecretsTargetArgs + +func PreventionDiscoveryConfigTargetSecretsTargetPtr(v *PreventionDiscoveryConfigTargetSecretsTargetArgs) PreventionDiscoveryConfigTargetSecretsTargetPtrInput { + return (*preventionDiscoveryConfigTargetSecretsTargetPtrType)(v) +} + +func (*preventionDiscoveryConfigTargetSecretsTargetPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**PreventionDiscoveryConfigTargetSecretsTarget)(nil)).Elem() +} + +func (i *preventionDiscoveryConfigTargetSecretsTargetPtrType) ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutput() PreventionDiscoveryConfigTargetSecretsTargetPtrOutput { + return i.ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutputWithContext(context.Background()) +} + +func (i *preventionDiscoveryConfigTargetSecretsTargetPtrType) ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetSecretsTargetPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionDiscoveryConfigTargetSecretsTargetPtrOutput) +} + +type PreventionDiscoveryConfigTargetSecretsTargetOutput struct{ *pulumi.OutputState } + +func (PreventionDiscoveryConfigTargetSecretsTargetOutput) ElementType() reflect.Type { + return reflect.TypeOf((*PreventionDiscoveryConfigTargetSecretsTarget)(nil)).Elem() +} + +func (o PreventionDiscoveryConfigTargetSecretsTargetOutput) ToPreventionDiscoveryConfigTargetSecretsTargetOutput() PreventionDiscoveryConfigTargetSecretsTargetOutput { + return o +} + +func (o PreventionDiscoveryConfigTargetSecretsTargetOutput) ToPreventionDiscoveryConfigTargetSecretsTargetOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetSecretsTargetOutput { + return o +} + +func (o PreventionDiscoveryConfigTargetSecretsTargetOutput) ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutput() PreventionDiscoveryConfigTargetSecretsTargetPtrOutput { + return o.ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutputWithContext(context.Background()) +} + +func (o PreventionDiscoveryConfigTargetSecretsTargetOutput) ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetSecretsTargetPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v PreventionDiscoveryConfigTargetSecretsTarget) *PreventionDiscoveryConfigTargetSecretsTarget { + return &v + }).(PreventionDiscoveryConfigTargetSecretsTargetPtrOutput) +} + +type PreventionDiscoveryConfigTargetSecretsTargetPtrOutput struct{ *pulumi.OutputState } + +func (PreventionDiscoveryConfigTargetSecretsTargetPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**PreventionDiscoveryConfigTargetSecretsTarget)(nil)).Elem() +} + +func (o PreventionDiscoveryConfigTargetSecretsTargetPtrOutput) ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutput() PreventionDiscoveryConfigTargetSecretsTargetPtrOutput { + return o +} + +func (o PreventionDiscoveryConfigTargetSecretsTargetPtrOutput) ToPreventionDiscoveryConfigTargetSecretsTargetPtrOutputWithContext(ctx context.Context) PreventionDiscoveryConfigTargetSecretsTargetPtrOutput { + return o +} + +func (o PreventionDiscoveryConfigTargetSecretsTargetPtrOutput) Elem() PreventionDiscoveryConfigTargetSecretsTargetOutput { + return o.ApplyT(func(v *PreventionDiscoveryConfigTargetSecretsTarget) PreventionDiscoveryConfigTargetSecretsTarget { + if v != nil { + return *v + } + var ret PreventionDiscoveryConfigTargetSecretsTarget + return ret + }).(PreventionDiscoveryConfigTargetSecretsTargetOutput) +} + type PreventionInspectTemplateInspectConfig struct { // List of options defining data content to scan. If empty, text, images, and other content will be included. // Each value may be one of: `CONTENT_TEXT`, `CONTENT_IMAGE`. @@ -42263,7 +42800,7 @@ type PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType struct { // not have an infoType, the DLP API applies the limit against all infoTypes that are found but not // specified in another InfoTypeLimit. // Structure is documented below. - InfoType PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType `pulumi:"infoType"` + InfoType *PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType `pulumi:"infoType"` // Max findings limit for the given infoType. MaxFindings int `pulumi:"maxFindings"` } @@ -42284,7 +42821,7 @@ type PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs stru // not have an infoType, the DLP API applies the limit against all infoTypes that are found but not // specified in another InfoTypeLimit. // Structure is documented below. - InfoType PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeInput `pulumi:"infoType"` + InfoType PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrInput `pulumi:"infoType"` // Max findings limit for the given infoType. MaxFindings pulumi.IntInput `pulumi:"maxFindings"` } @@ -42344,10 +42881,10 @@ func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeOutput // not have an infoType, the DLP API applies the limit against all infoTypes that are found but not // specified in another InfoTypeLimit. // Structure is documented below. -func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeOutput) InfoType() PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeOutput { - return o.ApplyT(func(v PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType) PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType { +func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeOutput) InfoType() PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput { + return o.ApplyT(func(v PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType) *PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType { return v.InfoType - }).(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeOutput) + }).(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput) } // Max findings limit for the given infoType. @@ -42420,6 +42957,47 @@ func (i PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTy return pulumi.ToOutputWithContext(ctx, i).(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeOutput) } +func (i PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs) ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput() PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput { + return i.ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutputWithContext(context.Background()) +} + +func (i PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs) ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutputWithContext(ctx context.Context) PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeOutput).ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutputWithContext(ctx) +} + +// PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrInput is an input type that accepts PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs, PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtr and PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput values. +// You can construct a concrete instance of `PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrInput` via: +// +// PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs{...} +// +// or: +// +// nil +type PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrInput interface { + pulumi.Input + + ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput() PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput + ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutputWithContext(context.Context) PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput +} + +type preventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrType PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs + +func PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtr(v *PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs) PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrInput { + return (*preventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrType)(v) +} + +func (*preventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrType) ElementType() reflect.Type { + return reflect.TypeOf((**PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType)(nil)).Elem() +} + +func (i *preventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrType) ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput() PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput { + return i.ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutputWithContext(context.Background()) +} + +func (i *preventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrType) ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutputWithContext(ctx context.Context) PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput) +} + type PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeOutput struct{ *pulumi.OutputState } func (PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeOutput) ElementType() reflect.Type { @@ -42434,6 +43012,16 @@ func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTy return o } +func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeOutput) ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput() PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput { + return o.ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutputWithContext(context.Background()) +} + +func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeOutput) ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutputWithContext(ctx context.Context) PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType) *PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType { + return &v + }).(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput) +} + // Name of the information type. Either a name of your choosing when creating a CustomInfoType, or one of the names // listed at https://cloud.google.com/dlp/docs/infotypes-reference when specifying a built-in type. func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeOutput) Name() pulumi.StringOutput { @@ -42457,6 +43045,62 @@ func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTy }).(pulumi.StringPtrOutput) } +type PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput struct{ *pulumi.OutputState } + +func (PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType)(nil)).Elem() +} + +func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput) ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput() PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput { + return o +} + +func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput) ToPreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutputWithContext(ctx context.Context) PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput { + return o +} + +func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput) Elem() PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeOutput { + return o.ApplyT(func(v *PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType) PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType { + if v != nil { + return *v + } + var ret PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType + return ret + }).(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeOutput) +} + +// Name of the information type. Either a name of your choosing when creating a CustomInfoType, or one of the names +// listed at https://cloud.google.com/dlp/docs/infotypes-reference when specifying a built-in type. +func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput) Name() pulumi.StringPtrOutput { + return o.ApplyT(func(v *PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType) *string { + if v == nil { + return nil + } + return &v.Name + }).(pulumi.StringPtrOutput) +} + +// Optional custom sensitivity for this InfoType. This only applies to data profiling. +// Structure is documented below. +func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput) SensitivityScore() PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeSensitivityScorePtrOutput { + return o.ApplyT(func(v *PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType) *PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeSensitivityScore { + if v == nil { + return nil + } + return v.SensitivityScore + }).(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeSensitivityScorePtrOutput) +} + +// Version name for this InfoType. +func (o PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput) Version() pulumi.StringPtrOutput { + return o.ApplyT(func(v *PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType) *string { + if v == nil { + return nil + } + return v.Version + }).(pulumi.StringPtrOutput) +} + type PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeSensitivityScore struct { // The sensitivity score applied to the resource. // Possible values are: `SENSITIVITY_LOW`, `SENSITIVITY_MODERATE`, `SENSITIVITY_HIGH`. @@ -58899,6 +59543,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetBigQueryTargetFilterPtrInput)(nil)).Elem(), PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesInput)(nil)).Elem(), PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesPtrInput)(nil)).Elem(), PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceInput)(nil)).Elem(), PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrInput)(nil)).Elem(), PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesInput)(nil)).Elem(), PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesPtrInput)(nil)).Elem(), PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesIncludeRegexesInput)(nil)).Elem(), PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesIncludeRegexesArgs{}) @@ -58919,12 +59565,16 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexesPtrInput)(nil)).Elem(), PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexesArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexesPatternInput)(nil)).Elem(), PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexesPatternArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexesPatternArrayInput)(nil)).Elem(), PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexesPatternArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceInput)(nil)).Elem(), PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrInput)(nil)).Elem(), PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersInput)(nil)).Elem(), PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersPtrInput)(nil)).Elem(), PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceInput)(nil)).Elem(), PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadencePtrInput)(nil)).Elem(), PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceSchemaModifiedCadenceInput)(nil)).Elem(), PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceSchemaModifiedCadenceArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceSchemaModifiedCadencePtrInput)(nil)).Elem(), PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceSchemaModifiedCadenceArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetSecretsTargetInput)(nil)).Elem(), PreventionDiscoveryConfigTargetSecretsTargetArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*PreventionDiscoveryConfigTargetSecretsTargetPtrInput)(nil)).Elem(), PreventionDiscoveryConfigTargetSecretsTargetArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionInspectTemplateInspectConfigInput)(nil)).Elem(), PreventionInspectTemplateInspectConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionInspectTemplateInspectConfigPtrInput)(nil)).Elem(), PreventionInspectTemplateInspectConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionInspectTemplateInspectConfigCustomInfoTypeInput)(nil)).Elem(), PreventionInspectTemplateInspectConfigCustomInfoTypeArgs{}) @@ -58955,6 +59605,7 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInput)(nil)).Elem(), PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArrayInput)(nil)).Elem(), PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArray{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeInput)(nil)).Elem(), PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrInput)(nil)).Elem(), PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeSensitivityScoreInput)(nil)).Elem(), PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeSensitivityScoreArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeSensitivityScorePtrInput)(nil)).Elem(), PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeSensitivityScoreArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionInspectTemplateInspectConfigRuleSetInput)(nil)).Elem(), PreventionInspectTemplateInspectConfigRuleSetArgs{}) @@ -59587,6 +60238,8 @@ func init() { pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetBigQueryTargetFilterPtrOutput{}) pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesOutput{}) pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesPtrOutput{}) + pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceOutput{}) + pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferencePtrOutput{}) pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesOutput{}) pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesPtrOutput{}) pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesIncludeRegexesOutput{}) @@ -59607,12 +60260,16 @@ func init() { pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexesPtrOutput{}) pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexesPatternOutput{}) pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexesPatternArrayOutput{}) + pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceOutput{}) + pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferencePtrOutput{}) pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersOutput{}) pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersPtrOutput{}) pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceOutput{}) pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadencePtrOutput{}) pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceSchemaModifiedCadenceOutput{}) pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceSchemaModifiedCadencePtrOutput{}) + pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetSecretsTargetOutput{}) + pulumi.RegisterOutputType(PreventionDiscoveryConfigTargetSecretsTargetPtrOutput{}) pulumi.RegisterOutputType(PreventionInspectTemplateInspectConfigOutput{}) pulumi.RegisterOutputType(PreventionInspectTemplateInspectConfigPtrOutput{}) pulumi.RegisterOutputType(PreventionInspectTemplateInspectConfigCustomInfoTypeOutput{}) @@ -59643,6 +60300,7 @@ func init() { pulumi.RegisterOutputType(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeOutput{}) pulumi.RegisterOutputType(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArrayOutput{}) pulumi.RegisterOutputType(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeOutput{}) + pulumi.RegisterOutputType(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypePtrOutput{}) pulumi.RegisterOutputType(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeSensitivityScoreOutput{}) pulumi.RegisterOutputType(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeSensitivityScorePtrOutput{}) pulumi.RegisterOutputType(PreventionInspectTemplateInspectConfigRuleSetOutput{}) diff --git a/sdk/go/gcp/gkebackup/backupPlan.go b/sdk/go/gcp/gkebackup/backupPlan.go index 96a367ce18..6556ae9bb2 100644 --- a/sdk/go/gcp/gkebackup/backupPlan.go +++ b/sdk/go/gcp/gkebackup/backupPlan.go @@ -272,6 +272,77 @@ import ( // } // // ``` +// ### Gkebackup Backupplan Permissive +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ +// Name: pulumi.String("permissive-cluster"), +// Location: pulumi.String("us-central1"), +// InitialNodeCount: pulumi.Int(1), +// WorkloadIdentityConfig: &container.ClusterWorkloadIdentityConfigArgs{ +// WorkloadPool: pulumi.String("my-project-name.svc.id.goog"), +// }, +// AddonsConfig: &container.ClusterAddonsConfigArgs{ +// GkeBackupAgentConfig: &container.ClusterAddonsConfigGkeBackupAgentConfigArgs{ +// Enabled: pulumi.Bool(true), +// }, +// }, +// DeletionProtection: pulumi.Bool(true), +// Network: pulumi.String("default"), +// Subnetwork: pulumi.String("default"), +// }) +// if err != nil { +// return err +// } +// _, err = gkebackup.NewBackupPlan(ctx, "permissive", &gkebackup.BackupPlanArgs{ +// Name: pulumi.String("permissive-plan"), +// Cluster: primary.ID(), +// Location: pulumi.String("us-central1"), +// RetentionPolicy: &gkebackup.BackupPlanRetentionPolicyArgs{ +// BackupDeleteLockDays: pulumi.Int(30), +// BackupRetainDays: pulumi.Int(180), +// }, +// BackupSchedule: &gkebackup.BackupPlanBackupScheduleArgs{ +// CronSchedule: pulumi.String("0 9 * * 1"), +// }, +// BackupConfig: &gkebackup.BackupPlanBackupConfigArgs{ +// IncludeVolumeData: pulumi.Bool(true), +// IncludeSecrets: pulumi.Bool(true), +// PermissiveMode: pulumi.Bool(true), +// SelectedApplications: &gkebackup.BackupPlanBackupConfigSelectedApplicationsArgs{ +// NamespacedNames: gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArray{ +// &gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{ +// Name: pulumi.String("app1"), +// Namespace: pulumi.String("ns1"), +// }, +// &gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{ +// Name: pulumi.String("app2"), +// Namespace: pulumi.String("ns2"), +// }, +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // ### Gkebackup Backupplan Rpo Daily Window // // ```go diff --git a/sdk/go/gcp/gkebackup/pulumiTypes.go b/sdk/go/gcp/gkebackup/pulumiTypes.go index 1193e11533..0c499dcc07 100644 --- a/sdk/go/gcp/gkebackup/pulumiTypes.go +++ b/sdk/go/gcp/gkebackup/pulumiTypes.go @@ -26,6 +26,10 @@ type BackupPlanBackupConfig struct { // This flag specifies whether volume data should be backed up when PVCs are // included in the scope of a Backup. IncludeVolumeData *bool `pulumi:"includeVolumeData"` + // This flag specifies whether Backups will not fail when + // Backup for GKE detects Kubernetes configuration that is + // non-standard or requires additional setup to restore. + PermissiveMode *bool `pulumi:"permissiveMode"` // A list of namespaced Kubernetes Resources. // Structure is documented below. SelectedApplications *BackupPlanBackupConfigSelectedApplications `pulumi:"selectedApplications"` @@ -58,6 +62,10 @@ type BackupPlanBackupConfigArgs struct { // This flag specifies whether volume data should be backed up when PVCs are // included in the scope of a Backup. IncludeVolumeData pulumi.BoolPtrInput `pulumi:"includeVolumeData"` + // This flag specifies whether Backups will not fail when + // Backup for GKE detects Kubernetes configuration that is + // non-standard or requires additional setup to restore. + PermissiveMode pulumi.BoolPtrInput `pulumi:"permissiveMode"` // A list of namespaced Kubernetes Resources. // Structure is documented below. SelectedApplications BackupPlanBackupConfigSelectedApplicationsPtrInput `pulumi:"selectedApplications"` @@ -167,6 +175,13 @@ func (o BackupPlanBackupConfigOutput) IncludeVolumeData() pulumi.BoolPtrOutput { return o.ApplyT(func(v BackupPlanBackupConfig) *bool { return v.IncludeVolumeData }).(pulumi.BoolPtrOutput) } +// This flag specifies whether Backups will not fail when +// Backup for GKE detects Kubernetes configuration that is +// non-standard or requires additional setup to restore. +func (o BackupPlanBackupConfigOutput) PermissiveMode() pulumi.BoolPtrOutput { + return o.ApplyT(func(v BackupPlanBackupConfig) *bool { return v.PermissiveMode }).(pulumi.BoolPtrOutput) +} + // A list of namespaced Kubernetes Resources. // Structure is documented below. func (o BackupPlanBackupConfigOutput) SelectedApplications() BackupPlanBackupConfigSelectedApplicationsPtrOutput { @@ -249,6 +264,18 @@ func (o BackupPlanBackupConfigPtrOutput) IncludeVolumeData() pulumi.BoolPtrOutpu }).(pulumi.BoolPtrOutput) } +// This flag specifies whether Backups will not fail when +// Backup for GKE detects Kubernetes configuration that is +// non-standard or requires additional setup to restore. +func (o BackupPlanBackupConfigPtrOutput) PermissiveMode() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *BackupPlanBackupConfig) *bool { + if v == nil { + return nil + } + return v.PermissiveMode + }).(pulumi.BoolPtrOutput) +} + // A list of namespaced Kubernetes Resources. // Structure is documented below. func (o BackupPlanBackupConfigPtrOutput) SelectedApplications() BackupPlanBackupConfigSelectedApplicationsPtrOutput { @@ -2691,11 +2718,14 @@ type RestorePlanRestoreConfig struct { // if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. // See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode // for more information on each mode. - // Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + // Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. NamespacedResourceRestoreMode *string `pulumi:"namespacedResourceRestoreMode"` // Do not restore any namespaced resources if set to "True". // Specifying this field to "False" is not allowed. NoNamespaces *bool `pulumi:"noNamespaces"` + // It contains custom ordering to use on a Restore. + // Structure is documented below. + RestoreOrder *RestorePlanRestoreConfigRestoreOrder `pulumi:"restoreOrder"` // A list of selected ProtectedApplications to restore. // The listed ProtectedApplications and all the resources // to which they refer will be restored. @@ -2720,6 +2750,11 @@ type RestorePlanRestoreConfig struct { // for more information on each policy option. // Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. VolumeDataRestorePolicy *string `pulumi:"volumeDataRestorePolicy"` + // A table that binds volumes by their scope to a restore policy. Bindings + // must have a unique scope. Any volumes not scoped in the bindings are + // subject to the policy defined in volume_data_restore_policy. + // Structure is documented below. + VolumeDataRestorePolicyBindings []RestorePlanRestoreConfigVolumeDataRestorePolicyBinding `pulumi:"volumeDataRestorePolicyBindings"` } // RestorePlanRestoreConfigInput is an input type that accepts RestorePlanRestoreConfigArgs and RestorePlanRestoreConfigOutput values. @@ -2758,11 +2793,14 @@ type RestorePlanRestoreConfigArgs struct { // if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. // See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode // for more information on each mode. - // Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + // Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. NamespacedResourceRestoreMode pulumi.StringPtrInput `pulumi:"namespacedResourceRestoreMode"` // Do not restore any namespaced resources if set to "True". // Specifying this field to "False" is not allowed. NoNamespaces pulumi.BoolPtrInput `pulumi:"noNamespaces"` + // It contains custom ordering to use on a Restore. + // Structure is documented below. + RestoreOrder RestorePlanRestoreConfigRestoreOrderPtrInput `pulumi:"restoreOrder"` // A list of selected ProtectedApplications to restore. // The listed ProtectedApplications and all the resources // to which they refer will be restored. @@ -2787,6 +2825,11 @@ type RestorePlanRestoreConfigArgs struct { // for more information on each policy option. // Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. VolumeDataRestorePolicy pulumi.StringPtrInput `pulumi:"volumeDataRestorePolicy"` + // A table that binds volumes by their scope to a restore policy. Bindings + // must have a unique scope. Any volumes not scoped in the bindings are + // subject to the policy defined in volume_data_restore_policy. + // Structure is documented below. + VolumeDataRestorePolicyBindings RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayInput `pulumi:"volumeDataRestorePolicyBindings"` } func (RestorePlanRestoreConfigArgs) ElementType() reflect.Type { @@ -2906,7 +2949,7 @@ func (o RestorePlanRestoreConfigOutput) ExcludedNamespaces() RestorePlanRestoreC // if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. // See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode // for more information on each mode. -// Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. +// Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. func (o RestorePlanRestoreConfigOutput) NamespacedResourceRestoreMode() pulumi.StringPtrOutput { return o.ApplyT(func(v RestorePlanRestoreConfig) *string { return v.NamespacedResourceRestoreMode }).(pulumi.StringPtrOutput) } @@ -2917,6 +2960,12 @@ func (o RestorePlanRestoreConfigOutput) NoNamespaces() pulumi.BoolPtrOutput { return o.ApplyT(func(v RestorePlanRestoreConfig) *bool { return v.NoNamespaces }).(pulumi.BoolPtrOutput) } +// It contains custom ordering to use on a Restore. +// Structure is documented below. +func (o RestorePlanRestoreConfigOutput) RestoreOrder() RestorePlanRestoreConfigRestoreOrderPtrOutput { + return o.ApplyT(func(v RestorePlanRestoreConfig) *RestorePlanRestoreConfigRestoreOrder { return v.RestoreOrder }).(RestorePlanRestoreConfigRestoreOrderPtrOutput) +} + // A list of selected ProtectedApplications to restore. // The listed ProtectedApplications and all the resources // to which they refer will be restored. @@ -2959,6 +3008,16 @@ func (o RestorePlanRestoreConfigOutput) VolumeDataRestorePolicy() pulumi.StringP return o.ApplyT(func(v RestorePlanRestoreConfig) *string { return v.VolumeDataRestorePolicy }).(pulumi.StringPtrOutput) } +// A table that binds volumes by their scope to a restore policy. Bindings +// must have a unique scope. Any volumes not scoped in the bindings are +// subject to the policy defined in volume_data_restore_policy. +// Structure is documented below. +func (o RestorePlanRestoreConfigOutput) VolumeDataRestorePolicyBindings() RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput { + return o.ApplyT(func(v RestorePlanRestoreConfig) []RestorePlanRestoreConfigVolumeDataRestorePolicyBinding { + return v.VolumeDataRestorePolicyBindings + }).(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput) +} + type RestorePlanRestoreConfigPtrOutput struct{ *pulumi.OutputState } func (RestorePlanRestoreConfigPtrOutput) ElementType() reflect.Type { @@ -3039,7 +3098,7 @@ func (o RestorePlanRestoreConfigPtrOutput) ExcludedNamespaces() RestorePlanResto // if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. // See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode // for more information on each mode. -// Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. +// Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. func (o RestorePlanRestoreConfigPtrOutput) NamespacedResourceRestoreMode() pulumi.StringPtrOutput { return o.ApplyT(func(v *RestorePlanRestoreConfig) *string { if v == nil { @@ -3060,6 +3119,17 @@ func (o RestorePlanRestoreConfigPtrOutput) NoNamespaces() pulumi.BoolPtrOutput { }).(pulumi.BoolPtrOutput) } +// It contains custom ordering to use on a Restore. +// Structure is documented below. +func (o RestorePlanRestoreConfigPtrOutput) RestoreOrder() RestorePlanRestoreConfigRestoreOrderPtrOutput { + return o.ApplyT(func(v *RestorePlanRestoreConfig) *RestorePlanRestoreConfigRestoreOrder { + if v == nil { + return nil + } + return v.RestoreOrder + }).(RestorePlanRestoreConfigRestoreOrderPtrOutput) +} + // A list of selected ProtectedApplications to restore. // The listed ProtectedApplications and all the resources // to which they refer will be restored. @@ -3116,6 +3186,19 @@ func (o RestorePlanRestoreConfigPtrOutput) VolumeDataRestorePolicy() pulumi.Stri }).(pulumi.StringPtrOutput) } +// A table that binds volumes by their scope to a restore policy. Bindings +// must have a unique scope. Any volumes not scoped in the bindings are +// subject to the policy defined in volume_data_restore_policy. +// Structure is documented below. +func (o RestorePlanRestoreConfigPtrOutput) VolumeDataRestorePolicyBindings() RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput { + return o.ApplyT(func(v *RestorePlanRestoreConfig) []RestorePlanRestoreConfigVolumeDataRestorePolicyBinding { + if v == nil { + return nil + } + return v.VolumeDataRestorePolicyBindings + }).(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput) +} + type RestorePlanRestoreConfigClusterResourceRestoreScope struct { // If True, all valid cluster-scoped resources will be restored. // Mutually exclusive to any other field in `clusterResourceRestoreScope`. @@ -3725,6 +3808,433 @@ func (o RestorePlanRestoreConfigExcludedNamespacesPtrOutput) Namespaces() pulumi }).(pulumi.StringArrayOutput) } +type RestorePlanRestoreConfigRestoreOrder struct { + // A list of group kind dependency pairs + // that is used by Backup for GKE to + // generate a group kind restore order. + // Structure is documented below. + GroupKindDependencies []RestorePlanRestoreConfigRestoreOrderGroupKindDependency `pulumi:"groupKindDependencies"` +} + +// RestorePlanRestoreConfigRestoreOrderInput is an input type that accepts RestorePlanRestoreConfigRestoreOrderArgs and RestorePlanRestoreConfigRestoreOrderOutput values. +// You can construct a concrete instance of `RestorePlanRestoreConfigRestoreOrderInput` via: +// +// RestorePlanRestoreConfigRestoreOrderArgs{...} +type RestorePlanRestoreConfigRestoreOrderInput interface { + pulumi.Input + + ToRestorePlanRestoreConfigRestoreOrderOutput() RestorePlanRestoreConfigRestoreOrderOutput + ToRestorePlanRestoreConfigRestoreOrderOutputWithContext(context.Context) RestorePlanRestoreConfigRestoreOrderOutput +} + +type RestorePlanRestoreConfigRestoreOrderArgs struct { + // A list of group kind dependency pairs + // that is used by Backup for GKE to + // generate a group kind restore order. + // Structure is documented below. + GroupKindDependencies RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayInput `pulumi:"groupKindDependencies"` +} + +func (RestorePlanRestoreConfigRestoreOrderArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrder)(nil)).Elem() +} + +func (i RestorePlanRestoreConfigRestoreOrderArgs) ToRestorePlanRestoreConfigRestoreOrderOutput() RestorePlanRestoreConfigRestoreOrderOutput { + return i.ToRestorePlanRestoreConfigRestoreOrderOutputWithContext(context.Background()) +} + +func (i RestorePlanRestoreConfigRestoreOrderArgs) ToRestorePlanRestoreConfigRestoreOrderOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderOutput { + return pulumi.ToOutputWithContext(ctx, i).(RestorePlanRestoreConfigRestoreOrderOutput) +} + +func (i RestorePlanRestoreConfigRestoreOrderArgs) ToRestorePlanRestoreConfigRestoreOrderPtrOutput() RestorePlanRestoreConfigRestoreOrderPtrOutput { + return i.ToRestorePlanRestoreConfigRestoreOrderPtrOutputWithContext(context.Background()) +} + +func (i RestorePlanRestoreConfigRestoreOrderArgs) ToRestorePlanRestoreConfigRestoreOrderPtrOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RestorePlanRestoreConfigRestoreOrderOutput).ToRestorePlanRestoreConfigRestoreOrderPtrOutputWithContext(ctx) +} + +// RestorePlanRestoreConfigRestoreOrderPtrInput is an input type that accepts RestorePlanRestoreConfigRestoreOrderArgs, RestorePlanRestoreConfigRestoreOrderPtr and RestorePlanRestoreConfigRestoreOrderPtrOutput values. +// You can construct a concrete instance of `RestorePlanRestoreConfigRestoreOrderPtrInput` via: +// +// RestorePlanRestoreConfigRestoreOrderArgs{...} +// +// or: +// +// nil +type RestorePlanRestoreConfigRestoreOrderPtrInput interface { + pulumi.Input + + ToRestorePlanRestoreConfigRestoreOrderPtrOutput() RestorePlanRestoreConfigRestoreOrderPtrOutput + ToRestorePlanRestoreConfigRestoreOrderPtrOutputWithContext(context.Context) RestorePlanRestoreConfigRestoreOrderPtrOutput +} + +type restorePlanRestoreConfigRestoreOrderPtrType RestorePlanRestoreConfigRestoreOrderArgs + +func RestorePlanRestoreConfigRestoreOrderPtr(v *RestorePlanRestoreConfigRestoreOrderArgs) RestorePlanRestoreConfigRestoreOrderPtrInput { + return (*restorePlanRestoreConfigRestoreOrderPtrType)(v) +} + +func (*restorePlanRestoreConfigRestoreOrderPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**RestorePlanRestoreConfigRestoreOrder)(nil)).Elem() +} + +func (i *restorePlanRestoreConfigRestoreOrderPtrType) ToRestorePlanRestoreConfigRestoreOrderPtrOutput() RestorePlanRestoreConfigRestoreOrderPtrOutput { + return i.ToRestorePlanRestoreConfigRestoreOrderPtrOutputWithContext(context.Background()) +} + +func (i *restorePlanRestoreConfigRestoreOrderPtrType) ToRestorePlanRestoreConfigRestoreOrderPtrOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RestorePlanRestoreConfigRestoreOrderPtrOutput) +} + +type RestorePlanRestoreConfigRestoreOrderOutput struct{ *pulumi.OutputState } + +func (RestorePlanRestoreConfigRestoreOrderOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrder)(nil)).Elem() +} + +func (o RestorePlanRestoreConfigRestoreOrderOutput) ToRestorePlanRestoreConfigRestoreOrderOutput() RestorePlanRestoreConfigRestoreOrderOutput { + return o +} + +func (o RestorePlanRestoreConfigRestoreOrderOutput) ToRestorePlanRestoreConfigRestoreOrderOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderOutput { + return o +} + +func (o RestorePlanRestoreConfigRestoreOrderOutput) ToRestorePlanRestoreConfigRestoreOrderPtrOutput() RestorePlanRestoreConfigRestoreOrderPtrOutput { + return o.ToRestorePlanRestoreConfigRestoreOrderPtrOutputWithContext(context.Background()) +} + +func (o RestorePlanRestoreConfigRestoreOrderOutput) ToRestorePlanRestoreConfigRestoreOrderPtrOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v RestorePlanRestoreConfigRestoreOrder) *RestorePlanRestoreConfigRestoreOrder { + return &v + }).(RestorePlanRestoreConfigRestoreOrderPtrOutput) +} + +// A list of group kind dependency pairs +// that is used by Backup for GKE to +// generate a group kind restore order. +// Structure is documented below. +func (o RestorePlanRestoreConfigRestoreOrderOutput) GroupKindDependencies() RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput { + return o.ApplyT(func(v RestorePlanRestoreConfigRestoreOrder) []RestorePlanRestoreConfigRestoreOrderGroupKindDependency { + return v.GroupKindDependencies + }).(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput) +} + +type RestorePlanRestoreConfigRestoreOrderPtrOutput struct{ *pulumi.OutputState } + +func (RestorePlanRestoreConfigRestoreOrderPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RestorePlanRestoreConfigRestoreOrder)(nil)).Elem() +} + +func (o RestorePlanRestoreConfigRestoreOrderPtrOutput) ToRestorePlanRestoreConfigRestoreOrderPtrOutput() RestorePlanRestoreConfigRestoreOrderPtrOutput { + return o +} + +func (o RestorePlanRestoreConfigRestoreOrderPtrOutput) ToRestorePlanRestoreConfigRestoreOrderPtrOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderPtrOutput { + return o +} + +func (o RestorePlanRestoreConfigRestoreOrderPtrOutput) Elem() RestorePlanRestoreConfigRestoreOrderOutput { + return o.ApplyT(func(v *RestorePlanRestoreConfigRestoreOrder) RestorePlanRestoreConfigRestoreOrder { + if v != nil { + return *v + } + var ret RestorePlanRestoreConfigRestoreOrder + return ret + }).(RestorePlanRestoreConfigRestoreOrderOutput) +} + +// A list of group kind dependency pairs +// that is used by Backup for GKE to +// generate a group kind restore order. +// Structure is documented below. +func (o RestorePlanRestoreConfigRestoreOrderPtrOutput) GroupKindDependencies() RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput { + return o.ApplyT(func(v *RestorePlanRestoreConfigRestoreOrder) []RestorePlanRestoreConfigRestoreOrderGroupKindDependency { + if v == nil { + return nil + } + return v.GroupKindDependencies + }).(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput) +} + +type RestorePlanRestoreConfigRestoreOrderGroupKindDependency struct { + // The requiring group kind requires that the satisfying + // group kind be restored first. + // Structure is documented below. + Requiring RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring `pulumi:"requiring"` + // The satisfying group kind must be restored first + // in order to satisfy the dependency. + // Structure is documented below. + Satisfying RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying `pulumi:"satisfying"` +} + +// RestorePlanRestoreConfigRestoreOrderGroupKindDependencyInput is an input type that accepts RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs and RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput values. +// You can construct a concrete instance of `RestorePlanRestoreConfigRestoreOrderGroupKindDependencyInput` via: +// +// RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{...} +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencyInput interface { + pulumi.Input + + ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput() RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput + ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutputWithContext(context.Context) RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput +} + +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs struct { + // The requiring group kind requires that the satisfying + // group kind be restored first. + // Structure is documented below. + Requiring RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringInput `pulumi:"requiring"` + // The satisfying group kind must be restored first + // in order to satisfy the dependency. + // Structure is documented below. + Satisfying RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingInput `pulumi:"satisfying"` +} + +func (RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrderGroupKindDependency)(nil)).Elem() +} + +func (i RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput() RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput { + return i.ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutputWithContext(context.Background()) +} + +func (i RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput { + return pulumi.ToOutputWithContext(ctx, i).(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput) +} + +// RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayInput is an input type that accepts RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray and RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput values. +// You can construct a concrete instance of `RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayInput` via: +// +// RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray{ RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{...} } +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayInput interface { + pulumi.Input + + ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput() RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput + ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutputWithContext(context.Context) RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput +} + +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray []RestorePlanRestoreConfigRestoreOrderGroupKindDependencyInput + +func (RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]RestorePlanRestoreConfigRestoreOrderGroupKindDependency)(nil)).Elem() +} + +func (i RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput() RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput { + return i.ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutputWithContext(context.Background()) +} + +func (i RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput) +} + +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput struct{ *pulumi.OutputState } + +func (RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrderGroupKindDependency)(nil)).Elem() +} + +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput() RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput { + return o +} + +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput { + return o +} + +// The requiring group kind requires that the satisfying +// group kind be restored first. +// Structure is documented below. +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput) Requiring() RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput { + return o.ApplyT(func(v RestorePlanRestoreConfigRestoreOrderGroupKindDependency) RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring { + return v.Requiring + }).(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput) +} + +// The satisfying group kind must be restored first +// in order to satisfy the dependency. +// Structure is documented below. +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput) Satisfying() RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput { + return o.ApplyT(func(v RestorePlanRestoreConfigRestoreOrderGroupKindDependency) RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying { + return v.Satisfying + }).(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput) +} + +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput struct{ *pulumi.OutputState } + +func (RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]RestorePlanRestoreConfigRestoreOrderGroupKindDependency)(nil)).Elem() +} + +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput() RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput { + return o +} + +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput { + return o +} + +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput) Index(i pulumi.IntInput) RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) RestorePlanRestoreConfigRestoreOrderGroupKindDependency { + return vs[0].([]RestorePlanRestoreConfigRestoreOrderGroupKindDependency)[vs[1].(int)] + }).(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput) +} + +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring struct { + // API Group of a Kubernetes resource, e.g. + // "apiextensions.k8s.io", "storage.k8s.io", etc. + // Use empty string for core group. + ResourceGroup *string `pulumi:"resourceGroup"` + // Kind of a Kubernetes resource, e.g. + // "CustomResourceDefinition", "StorageClass", etc. + // + // *** + ResourceKind *string `pulumi:"resourceKind"` +} + +// RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringInput is an input type that accepts RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs and RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput values. +// You can construct a concrete instance of `RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringInput` via: +// +// RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{...} +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringInput interface { + pulumi.Input + + ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput() RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput + ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutputWithContext(context.Context) RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput +} + +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs struct { + // API Group of a Kubernetes resource, e.g. + // "apiextensions.k8s.io", "storage.k8s.io", etc. + // Use empty string for core group. + ResourceGroup pulumi.StringPtrInput `pulumi:"resourceGroup"` + // Kind of a Kubernetes resource, e.g. + // "CustomResourceDefinition", "StorageClass", etc. + // + // *** + ResourceKind pulumi.StringPtrInput `pulumi:"resourceKind"` +} + +func (RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring)(nil)).Elem() +} + +func (i RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput() RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput { + return i.ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutputWithContext(context.Background()) +} + +func (i RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput { + return pulumi.ToOutputWithContext(ctx, i).(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput) +} + +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput struct{ *pulumi.OutputState } + +func (RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring)(nil)).Elem() +} + +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput() RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput { + return o +} + +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput { + return o +} + +// API Group of a Kubernetes resource, e.g. +// "apiextensions.k8s.io", "storage.k8s.io", etc. +// Use empty string for core group. +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput) ResourceGroup() pulumi.StringPtrOutput { + return o.ApplyT(func(v RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring) *string { + return v.ResourceGroup + }).(pulumi.StringPtrOutput) +} + +// Kind of a Kubernetes resource, e.g. +// "CustomResourceDefinition", "StorageClass", etc. +// +// *** +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput) ResourceKind() pulumi.StringPtrOutput { + return o.ApplyT(func(v RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring) *string { + return v.ResourceKind + }).(pulumi.StringPtrOutput) +} + +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying struct { + // API Group of a Kubernetes resource, e.g. + // "apiextensions.k8s.io", "storage.k8s.io", etc. + // Use empty string for core group. + ResourceGroup *string `pulumi:"resourceGroup"` + // Kind of a Kubernetes resource, e.g. + // "CustomResourceDefinition", "StorageClass", etc. + ResourceKind *string `pulumi:"resourceKind"` +} + +// RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingInput is an input type that accepts RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs and RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput values. +// You can construct a concrete instance of `RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingInput` via: +// +// RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{...} +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingInput interface { + pulumi.Input + + ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput() RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput + ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutputWithContext(context.Context) RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput +} + +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs struct { + // API Group of a Kubernetes resource, e.g. + // "apiextensions.k8s.io", "storage.k8s.io", etc. + // Use empty string for core group. + ResourceGroup pulumi.StringPtrInput `pulumi:"resourceGroup"` + // Kind of a Kubernetes resource, e.g. + // "CustomResourceDefinition", "StorageClass", etc. + ResourceKind pulumi.StringPtrInput `pulumi:"resourceKind"` +} + +func (RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying)(nil)).Elem() +} + +func (i RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput() RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput { + return i.ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutputWithContext(context.Background()) +} + +func (i RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput { + return pulumi.ToOutputWithContext(ctx, i).(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput) +} + +type RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput struct{ *pulumi.OutputState } + +func (RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying)(nil)).Elem() +} + +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput() RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput { + return o +} + +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput) ToRestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutputWithContext(ctx context.Context) RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput { + return o +} + +// API Group of a Kubernetes resource, e.g. +// "apiextensions.k8s.io", "storage.k8s.io", etc. +// Use empty string for core group. +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput) ResourceGroup() pulumi.StringPtrOutput { + return o.ApplyT(func(v RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying) *string { + return v.ResourceGroup + }).(pulumi.StringPtrOutput) +} + +// Kind of a Kubernetes resource, e.g. +// "CustomResourceDefinition", "StorageClass", etc. +func (o RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput) ResourceKind() pulumi.StringPtrOutput { + return o.ApplyT(func(v RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying) *string { + return v.ResourceKind + }).(pulumi.StringPtrOutput) +} + type RestorePlanRestoreConfigSelectedApplications struct { // A list of namespaced Kubernetes resources. // Structure is documented below. @@ -4269,8 +4779,6 @@ type RestorePlanRestoreConfigTransformationRuleFieldAction struct { Path *string `pulumi:"path"` // A string that specifies the desired value in string format // to use for transformation. - // - // *** Value *string `pulumi:"value"` } @@ -4297,8 +4805,6 @@ type RestorePlanRestoreConfigTransformationRuleFieldActionArgs struct { Path pulumi.StringPtrInput `pulumi:"path"` // A string that specifies the desired value in string format // to use for transformation. - // - // *** Value pulumi.StringPtrInput `pulumi:"value"` } @@ -4373,8 +4879,6 @@ func (o RestorePlanRestoreConfigTransformationRuleFieldActionOutput) Path() pulu // A string that specifies the desired value in string format // to use for transformation. -// -// *** func (o RestorePlanRestoreConfigTransformationRuleFieldActionOutput) Value() pulumi.StringPtrOutput { return o.ApplyT(func(v RestorePlanRestoreConfigTransformationRuleFieldAction) *string { return v.Value }).(pulumi.StringPtrOutput) } @@ -4751,6 +5255,127 @@ func (o RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArrayOu }).(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindOutput) } +type RestorePlanRestoreConfigVolumeDataRestorePolicyBinding struct { + // Specifies the mechanism to be used to restore this volume data. + // See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + // for more information on each policy option. + // Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + Policy string `pulumi:"policy"` + // The volume type, as determined by the PVC's + // bound PV, to apply the policy to. + // Possible values are: `GCE_PERSISTENT_DISK`. + VolumeType string `pulumi:"volumeType"` +} + +// RestorePlanRestoreConfigVolumeDataRestorePolicyBindingInput is an input type that accepts RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs and RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput values. +// You can construct a concrete instance of `RestorePlanRestoreConfigVolumeDataRestorePolicyBindingInput` via: +// +// RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs{...} +type RestorePlanRestoreConfigVolumeDataRestorePolicyBindingInput interface { + pulumi.Input + + ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput() RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput + ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutputWithContext(context.Context) RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput +} + +type RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs struct { + // Specifies the mechanism to be used to restore this volume data. + // See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + // for more information on each policy option. + // Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + Policy pulumi.StringInput `pulumi:"policy"` + // The volume type, as determined by the PVC's + // bound PV, to apply the policy to. + // Possible values are: `GCE_PERSISTENT_DISK`. + VolumeType pulumi.StringInput `pulumi:"volumeType"` +} + +func (RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RestorePlanRestoreConfigVolumeDataRestorePolicyBinding)(nil)).Elem() +} + +func (i RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs) ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput() RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput { + return i.ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutputWithContext(context.Background()) +} + +func (i RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs) ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutputWithContext(ctx context.Context) RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput { + return pulumi.ToOutputWithContext(ctx, i).(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput) +} + +// RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayInput is an input type that accepts RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray and RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput values. +// You can construct a concrete instance of `RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayInput` via: +// +// RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray{ RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs{...} } +type RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayInput interface { + pulumi.Input + + ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput() RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput + ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutputWithContext(context.Context) RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput +} + +type RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray []RestorePlanRestoreConfigVolumeDataRestorePolicyBindingInput + +func (RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]RestorePlanRestoreConfigVolumeDataRestorePolicyBinding)(nil)).Elem() +} + +func (i RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray) ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput() RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput { + return i.ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutputWithContext(context.Background()) +} + +func (i RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray) ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutputWithContext(ctx context.Context) RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput) +} + +type RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput struct{ *pulumi.OutputState } + +func (RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RestorePlanRestoreConfigVolumeDataRestorePolicyBinding)(nil)).Elem() +} + +func (o RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput) ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput() RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput { + return o +} + +func (o RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput) ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutputWithContext(ctx context.Context) RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput { + return o +} + +// Specifies the mechanism to be used to restore this volume data. +// See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy +// for more information on each policy option. +// Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. +func (o RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput) Policy() pulumi.StringOutput { + return o.ApplyT(func(v RestorePlanRestoreConfigVolumeDataRestorePolicyBinding) string { return v.Policy }).(pulumi.StringOutput) +} + +// The volume type, as determined by the PVC's +// bound PV, to apply the policy to. +// Possible values are: `GCE_PERSISTENT_DISK`. +func (o RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput) VolumeType() pulumi.StringOutput { + return o.ApplyT(func(v RestorePlanRestoreConfigVolumeDataRestorePolicyBinding) string { return v.VolumeType }).(pulumi.StringOutput) +} + +type RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput struct{ *pulumi.OutputState } + +func (RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]RestorePlanRestoreConfigVolumeDataRestorePolicyBinding)(nil)).Elem() +} + +func (o RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput) ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput() RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput { + return o +} + +func (o RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput) ToRestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutputWithContext(ctx context.Context) RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput { + return o +} + +func (o RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput) Index(i pulumi.IntInput) RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) RestorePlanRestoreConfigVolumeDataRestorePolicyBinding { + return vs[0].([]RestorePlanRestoreConfigVolumeDataRestorePolicyBinding)[vs[1].(int)] + }).(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput) +} + func init() { pulumi.RegisterInputType(reflect.TypeOf((*BackupPlanBackupConfigInput)(nil)).Elem(), BackupPlanBackupConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*BackupPlanBackupConfigPtrInput)(nil)).Elem(), BackupPlanBackupConfigArgs{}) @@ -4793,6 +5418,12 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArrayInput)(nil)).Elem(), RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArray{}) pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigExcludedNamespacesInput)(nil)).Elem(), RestorePlanRestoreConfigExcludedNamespacesArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigExcludedNamespacesPtrInput)(nil)).Elem(), RestorePlanRestoreConfigExcludedNamespacesArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrderInput)(nil)).Elem(), RestorePlanRestoreConfigRestoreOrderArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrderPtrInput)(nil)).Elem(), RestorePlanRestoreConfigRestoreOrderArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrderGroupKindDependencyInput)(nil)).Elem(), RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayInput)(nil)).Elem(), RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringInput)(nil)).Elem(), RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingInput)(nil)).Elem(), RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigSelectedApplicationsInput)(nil)).Elem(), RestorePlanRestoreConfigSelectedApplicationsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigSelectedApplicationsPtrInput)(nil)).Elem(), RestorePlanRestoreConfigSelectedApplicationsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigSelectedApplicationsNamespacedNameInput)(nil)).Elem(), RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs{}) @@ -4807,6 +5438,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigTransformationRuleResourceFilterPtrInput)(nil)).Elem(), RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindInput)(nil)).Elem(), RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArrayInput)(nil)).Elem(), RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigVolumeDataRestorePolicyBindingInput)(nil)).Elem(), RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayInput)(nil)).Elem(), RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray{}) pulumi.RegisterOutputType(BackupPlanBackupConfigOutput{}) pulumi.RegisterOutputType(BackupPlanBackupConfigPtrOutput{}) pulumi.RegisterOutputType(BackupPlanBackupConfigEncryptionKeyOutput{}) @@ -4848,6 +5481,12 @@ func init() { pulumi.RegisterOutputType(RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArrayOutput{}) pulumi.RegisterOutputType(RestorePlanRestoreConfigExcludedNamespacesOutput{}) pulumi.RegisterOutputType(RestorePlanRestoreConfigExcludedNamespacesPtrOutput{}) + pulumi.RegisterOutputType(RestorePlanRestoreConfigRestoreOrderOutput{}) + pulumi.RegisterOutputType(RestorePlanRestoreConfigRestoreOrderPtrOutput{}) + pulumi.RegisterOutputType(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyOutput{}) + pulumi.RegisterOutputType(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArrayOutput{}) + pulumi.RegisterOutputType(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringOutput{}) + pulumi.RegisterOutputType(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingOutput{}) pulumi.RegisterOutputType(RestorePlanRestoreConfigSelectedApplicationsOutput{}) pulumi.RegisterOutputType(RestorePlanRestoreConfigSelectedApplicationsPtrOutput{}) pulumi.RegisterOutputType(RestorePlanRestoreConfigSelectedApplicationsNamespacedNameOutput{}) @@ -4862,4 +5501,6 @@ func init() { pulumi.RegisterOutputType(RestorePlanRestoreConfigTransformationRuleResourceFilterPtrOutput{}) pulumi.RegisterOutputType(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindOutput{}) pulumi.RegisterOutputType(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArrayOutput{}) + pulumi.RegisterOutputType(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingOutput{}) + pulumi.RegisterOutputType(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArrayOutput{}) } diff --git a/sdk/go/gcp/gkebackup/restorePlan.go b/sdk/go/gcp/gkebackup/restorePlan.go index 13527a9a8c..44434e132e 100644 --- a/sdk/go/gcp/gkebackup/restorePlan.go +++ b/sdk/go/gcp/gkebackup/restorePlan.go @@ -532,6 +532,246 @@ import ( // } // // ``` +// ### Gkebackup Restoreplan Gitops Mode +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ +// Name: pulumi.String("gitops-mode-cluster"), +// Location: pulumi.String("us-central1"), +// InitialNodeCount: pulumi.Int(1), +// WorkloadIdentityConfig: &container.ClusterWorkloadIdentityConfigArgs{ +// WorkloadPool: pulumi.String("my-project-name.svc.id.goog"), +// }, +// AddonsConfig: &container.ClusterAddonsConfigArgs{ +// GkeBackupAgentConfig: &container.ClusterAddonsConfigGkeBackupAgentConfigArgs{ +// Enabled: pulumi.Bool(true), +// }, +// }, +// DeletionProtection: pulumi.Bool(""), +// Network: pulumi.String("default"), +// Subnetwork: pulumi.String("default"), +// }) +// if err != nil { +// return err +// } +// basic, err := gkebackup.NewBackupPlan(ctx, "basic", &gkebackup.BackupPlanArgs{ +// Name: pulumi.String("gitops-mode"), +// Cluster: primary.ID(), +// Location: pulumi.String("us-central1"), +// BackupConfig: &gkebackup.BackupPlanBackupConfigArgs{ +// IncludeVolumeData: pulumi.Bool(true), +// IncludeSecrets: pulumi.Bool(true), +// AllNamespaces: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = gkebackup.NewRestorePlan(ctx, "gitops_mode", &gkebackup.RestorePlanArgs{ +// Name: pulumi.String("gitops-mode"), +// Location: pulumi.String("us-central1"), +// BackupPlan: basic.ID(), +// Cluster: primary.ID(), +// RestoreConfig: &gkebackup.RestorePlanRestoreConfigArgs{ +// AllNamespaces: pulumi.Bool(true), +// NamespacedResourceRestoreMode: pulumi.String("MERGE_SKIP_ON_CONFLICT"), +// VolumeDataRestorePolicy: pulumi.String("RESTORE_VOLUME_DATA_FROM_BACKUP"), +// ClusterResourceRestoreScope: &gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{ +// AllGroupKinds: pulumi.Bool(true), +// }, +// ClusterResourceConflictPolicy: pulumi.String("USE_EXISTING_VERSION"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Gkebackup Restoreplan Restore Order +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ +// Name: pulumi.String("restore-order-cluster"), +// Location: pulumi.String("us-central1"), +// InitialNodeCount: pulumi.Int(1), +// WorkloadIdentityConfig: &container.ClusterWorkloadIdentityConfigArgs{ +// WorkloadPool: pulumi.String("my-project-name.svc.id.goog"), +// }, +// AddonsConfig: &container.ClusterAddonsConfigArgs{ +// GkeBackupAgentConfig: &container.ClusterAddonsConfigGkeBackupAgentConfigArgs{ +// Enabled: pulumi.Bool(true), +// }, +// }, +// DeletionProtection: pulumi.Bool(""), +// Network: pulumi.String("default"), +// Subnetwork: pulumi.String("default"), +// }) +// if err != nil { +// return err +// } +// basic, err := gkebackup.NewBackupPlan(ctx, "basic", &gkebackup.BackupPlanArgs{ +// Name: pulumi.String("restore-order"), +// Cluster: primary.ID(), +// Location: pulumi.String("us-central1"), +// BackupConfig: &gkebackup.BackupPlanBackupConfigArgs{ +// IncludeVolumeData: pulumi.Bool(true), +// IncludeSecrets: pulumi.Bool(true), +// AllNamespaces: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = gkebackup.NewRestorePlan(ctx, "restore_order", &gkebackup.RestorePlanArgs{ +// Name: pulumi.String("restore-order"), +// Location: pulumi.String("us-central1"), +// BackupPlan: basic.ID(), +// Cluster: primary.ID(), +// RestoreConfig: &gkebackup.RestorePlanRestoreConfigArgs{ +// AllNamespaces: pulumi.Bool(true), +// NamespacedResourceRestoreMode: pulumi.String("FAIL_ON_CONFLICT"), +// VolumeDataRestorePolicy: pulumi.String("RESTORE_VOLUME_DATA_FROM_BACKUP"), +// ClusterResourceRestoreScope: &gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{ +// AllGroupKinds: pulumi.Bool(true), +// }, +// ClusterResourceConflictPolicy: pulumi.String("USE_EXISTING_VERSION"), +// RestoreOrder: &gkebackup.RestorePlanRestoreConfigRestoreOrderArgs{ +// GroupKindDependencies: gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray{ +// &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{ +// Satisfying: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindA"), +// }, +// Requiring: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindB"), +// }, +// }, +// &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{ +// Satisfying: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindB"), +// }, +// Requiring: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindC"), +// }, +// }, +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Gkebackup Restoreplan Volume Res +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ +// Name: pulumi.String("volume-res-cluster"), +// Location: pulumi.String("us-central1"), +// InitialNodeCount: pulumi.Int(1), +// WorkloadIdentityConfig: &container.ClusterWorkloadIdentityConfigArgs{ +// WorkloadPool: pulumi.String("my-project-name.svc.id.goog"), +// }, +// AddonsConfig: &container.ClusterAddonsConfigArgs{ +// GkeBackupAgentConfig: &container.ClusterAddonsConfigGkeBackupAgentConfigArgs{ +// Enabled: pulumi.Bool(true), +// }, +// }, +// DeletionProtection: pulumi.Bool(""), +// Network: pulumi.String("default"), +// Subnetwork: pulumi.String("default"), +// }) +// if err != nil { +// return err +// } +// basic, err := gkebackup.NewBackupPlan(ctx, "basic", &gkebackup.BackupPlanArgs{ +// Name: pulumi.String("volume-res"), +// Cluster: primary.ID(), +// Location: pulumi.String("us-central1"), +// BackupConfig: &gkebackup.BackupPlanBackupConfigArgs{ +// IncludeVolumeData: pulumi.Bool(true), +// IncludeSecrets: pulumi.Bool(true), +// AllNamespaces: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = gkebackup.NewRestorePlan(ctx, "volume_res", &gkebackup.RestorePlanArgs{ +// Name: pulumi.String("volume-res"), +// Location: pulumi.String("us-central1"), +// BackupPlan: basic.ID(), +// Cluster: primary.ID(), +// RestoreConfig: &gkebackup.RestorePlanRestoreConfigArgs{ +// AllNamespaces: pulumi.Bool(true), +// NamespacedResourceRestoreMode: pulumi.String("FAIL_ON_CONFLICT"), +// VolumeDataRestorePolicy: pulumi.String("NO_VOLUME_DATA_RESTORATION"), +// ClusterResourceRestoreScope: &gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{ +// AllGroupKinds: pulumi.Bool(true), +// }, +// ClusterResourceConflictPolicy: pulumi.String("USE_EXISTING_VERSION"), +// VolumeDataRestorePolicyBindings: gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray{ +// &gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs{ +// Policy: pulumi.String("RESTORE_VOLUME_DATA_FROM_BACKUP"), +// VolumeType: pulumi.String("GCE_PERSISTENT_DISK"), +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // // ## Import // diff --git a/sdk/go/gcp/gkebackup/restorePlanIamBinding.go b/sdk/go/gcp/gkebackup/restorePlanIamBinding.go index 91f2ac3e53..83a4d9488a 100644 --- a/sdk/go/gcp/gkebackup/restorePlanIamBinding.go +++ b/sdk/go/gcp/gkebackup/restorePlanIamBinding.go @@ -532,6 +532,246 @@ import ( // } // // ``` +// ### Gkebackup Restoreplan Gitops Mode +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ +// Name: pulumi.String("gitops-mode-cluster"), +// Location: pulumi.String("us-central1"), +// InitialNodeCount: pulumi.Int(1), +// WorkloadIdentityConfig: &container.ClusterWorkloadIdentityConfigArgs{ +// WorkloadPool: pulumi.String("my-project-name.svc.id.goog"), +// }, +// AddonsConfig: &container.ClusterAddonsConfigArgs{ +// GkeBackupAgentConfig: &container.ClusterAddonsConfigGkeBackupAgentConfigArgs{ +// Enabled: pulumi.Bool(true), +// }, +// }, +// DeletionProtection: pulumi.Bool(""), +// Network: pulumi.String("default"), +// Subnetwork: pulumi.String("default"), +// }) +// if err != nil { +// return err +// } +// basic, err := gkebackup.NewBackupPlan(ctx, "basic", &gkebackup.BackupPlanArgs{ +// Name: pulumi.String("gitops-mode"), +// Cluster: primary.ID(), +// Location: pulumi.String("us-central1"), +// BackupConfig: &gkebackup.BackupPlanBackupConfigArgs{ +// IncludeVolumeData: pulumi.Bool(true), +// IncludeSecrets: pulumi.Bool(true), +// AllNamespaces: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = gkebackup.NewRestorePlan(ctx, "gitops_mode", &gkebackup.RestorePlanArgs{ +// Name: pulumi.String("gitops-mode"), +// Location: pulumi.String("us-central1"), +// BackupPlan: basic.ID(), +// Cluster: primary.ID(), +// RestoreConfig: &gkebackup.RestorePlanRestoreConfigArgs{ +// AllNamespaces: pulumi.Bool(true), +// NamespacedResourceRestoreMode: pulumi.String("MERGE_SKIP_ON_CONFLICT"), +// VolumeDataRestorePolicy: pulumi.String("RESTORE_VOLUME_DATA_FROM_BACKUP"), +// ClusterResourceRestoreScope: &gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{ +// AllGroupKinds: pulumi.Bool(true), +// }, +// ClusterResourceConflictPolicy: pulumi.String("USE_EXISTING_VERSION"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Gkebackup Restoreplan Restore Order +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ +// Name: pulumi.String("restore-order-cluster"), +// Location: pulumi.String("us-central1"), +// InitialNodeCount: pulumi.Int(1), +// WorkloadIdentityConfig: &container.ClusterWorkloadIdentityConfigArgs{ +// WorkloadPool: pulumi.String("my-project-name.svc.id.goog"), +// }, +// AddonsConfig: &container.ClusterAddonsConfigArgs{ +// GkeBackupAgentConfig: &container.ClusterAddonsConfigGkeBackupAgentConfigArgs{ +// Enabled: pulumi.Bool(true), +// }, +// }, +// DeletionProtection: pulumi.Bool(""), +// Network: pulumi.String("default"), +// Subnetwork: pulumi.String("default"), +// }) +// if err != nil { +// return err +// } +// basic, err := gkebackup.NewBackupPlan(ctx, "basic", &gkebackup.BackupPlanArgs{ +// Name: pulumi.String("restore-order"), +// Cluster: primary.ID(), +// Location: pulumi.String("us-central1"), +// BackupConfig: &gkebackup.BackupPlanBackupConfigArgs{ +// IncludeVolumeData: pulumi.Bool(true), +// IncludeSecrets: pulumi.Bool(true), +// AllNamespaces: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = gkebackup.NewRestorePlan(ctx, "restore_order", &gkebackup.RestorePlanArgs{ +// Name: pulumi.String("restore-order"), +// Location: pulumi.String("us-central1"), +// BackupPlan: basic.ID(), +// Cluster: primary.ID(), +// RestoreConfig: &gkebackup.RestorePlanRestoreConfigArgs{ +// AllNamespaces: pulumi.Bool(true), +// NamespacedResourceRestoreMode: pulumi.String("FAIL_ON_CONFLICT"), +// VolumeDataRestorePolicy: pulumi.String("RESTORE_VOLUME_DATA_FROM_BACKUP"), +// ClusterResourceRestoreScope: &gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{ +// AllGroupKinds: pulumi.Bool(true), +// }, +// ClusterResourceConflictPolicy: pulumi.String("USE_EXISTING_VERSION"), +// RestoreOrder: &gkebackup.RestorePlanRestoreConfigRestoreOrderArgs{ +// GroupKindDependencies: gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray{ +// &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{ +// Satisfying: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindA"), +// }, +// Requiring: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindB"), +// }, +// }, +// &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{ +// Satisfying: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindB"), +// }, +// Requiring: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindC"), +// }, +// }, +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Gkebackup Restoreplan Volume Res +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ +// Name: pulumi.String("volume-res-cluster"), +// Location: pulumi.String("us-central1"), +// InitialNodeCount: pulumi.Int(1), +// WorkloadIdentityConfig: &container.ClusterWorkloadIdentityConfigArgs{ +// WorkloadPool: pulumi.String("my-project-name.svc.id.goog"), +// }, +// AddonsConfig: &container.ClusterAddonsConfigArgs{ +// GkeBackupAgentConfig: &container.ClusterAddonsConfigGkeBackupAgentConfigArgs{ +// Enabled: pulumi.Bool(true), +// }, +// }, +// DeletionProtection: pulumi.Bool(""), +// Network: pulumi.String("default"), +// Subnetwork: pulumi.String("default"), +// }) +// if err != nil { +// return err +// } +// basic, err := gkebackup.NewBackupPlan(ctx, "basic", &gkebackup.BackupPlanArgs{ +// Name: pulumi.String("volume-res"), +// Cluster: primary.ID(), +// Location: pulumi.String("us-central1"), +// BackupConfig: &gkebackup.BackupPlanBackupConfigArgs{ +// IncludeVolumeData: pulumi.Bool(true), +// IncludeSecrets: pulumi.Bool(true), +// AllNamespaces: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = gkebackup.NewRestorePlan(ctx, "volume_res", &gkebackup.RestorePlanArgs{ +// Name: pulumi.String("volume-res"), +// Location: pulumi.String("us-central1"), +// BackupPlan: basic.ID(), +// Cluster: primary.ID(), +// RestoreConfig: &gkebackup.RestorePlanRestoreConfigArgs{ +// AllNamespaces: pulumi.Bool(true), +// NamespacedResourceRestoreMode: pulumi.String("FAIL_ON_CONFLICT"), +// VolumeDataRestorePolicy: pulumi.String("NO_VOLUME_DATA_RESTORATION"), +// ClusterResourceRestoreScope: &gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{ +// AllGroupKinds: pulumi.Bool(true), +// }, +// ClusterResourceConflictPolicy: pulumi.String("USE_EXISTING_VERSION"), +// VolumeDataRestorePolicyBindings: gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray{ +// &gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs{ +// Policy: pulumi.String("RESTORE_VOLUME_DATA_FROM_BACKUP"), +// VolumeType: pulumi.String("GCE_PERSISTENT_DISK"), +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // // ## Import // diff --git a/sdk/go/gcp/gkebackup/restorePlanIamMember.go b/sdk/go/gcp/gkebackup/restorePlanIamMember.go index bd1823864f..b53927d50d 100644 --- a/sdk/go/gcp/gkebackup/restorePlanIamMember.go +++ b/sdk/go/gcp/gkebackup/restorePlanIamMember.go @@ -532,6 +532,246 @@ import ( // } // // ``` +// ### Gkebackup Restoreplan Gitops Mode +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ +// Name: pulumi.String("gitops-mode-cluster"), +// Location: pulumi.String("us-central1"), +// InitialNodeCount: pulumi.Int(1), +// WorkloadIdentityConfig: &container.ClusterWorkloadIdentityConfigArgs{ +// WorkloadPool: pulumi.String("my-project-name.svc.id.goog"), +// }, +// AddonsConfig: &container.ClusterAddonsConfigArgs{ +// GkeBackupAgentConfig: &container.ClusterAddonsConfigGkeBackupAgentConfigArgs{ +// Enabled: pulumi.Bool(true), +// }, +// }, +// DeletionProtection: pulumi.Bool(""), +// Network: pulumi.String("default"), +// Subnetwork: pulumi.String("default"), +// }) +// if err != nil { +// return err +// } +// basic, err := gkebackup.NewBackupPlan(ctx, "basic", &gkebackup.BackupPlanArgs{ +// Name: pulumi.String("gitops-mode"), +// Cluster: primary.ID(), +// Location: pulumi.String("us-central1"), +// BackupConfig: &gkebackup.BackupPlanBackupConfigArgs{ +// IncludeVolumeData: pulumi.Bool(true), +// IncludeSecrets: pulumi.Bool(true), +// AllNamespaces: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = gkebackup.NewRestorePlan(ctx, "gitops_mode", &gkebackup.RestorePlanArgs{ +// Name: pulumi.String("gitops-mode"), +// Location: pulumi.String("us-central1"), +// BackupPlan: basic.ID(), +// Cluster: primary.ID(), +// RestoreConfig: &gkebackup.RestorePlanRestoreConfigArgs{ +// AllNamespaces: pulumi.Bool(true), +// NamespacedResourceRestoreMode: pulumi.String("MERGE_SKIP_ON_CONFLICT"), +// VolumeDataRestorePolicy: pulumi.String("RESTORE_VOLUME_DATA_FROM_BACKUP"), +// ClusterResourceRestoreScope: &gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{ +// AllGroupKinds: pulumi.Bool(true), +// }, +// ClusterResourceConflictPolicy: pulumi.String("USE_EXISTING_VERSION"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Gkebackup Restoreplan Restore Order +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ +// Name: pulumi.String("restore-order-cluster"), +// Location: pulumi.String("us-central1"), +// InitialNodeCount: pulumi.Int(1), +// WorkloadIdentityConfig: &container.ClusterWorkloadIdentityConfigArgs{ +// WorkloadPool: pulumi.String("my-project-name.svc.id.goog"), +// }, +// AddonsConfig: &container.ClusterAddonsConfigArgs{ +// GkeBackupAgentConfig: &container.ClusterAddonsConfigGkeBackupAgentConfigArgs{ +// Enabled: pulumi.Bool(true), +// }, +// }, +// DeletionProtection: pulumi.Bool(""), +// Network: pulumi.String("default"), +// Subnetwork: pulumi.String("default"), +// }) +// if err != nil { +// return err +// } +// basic, err := gkebackup.NewBackupPlan(ctx, "basic", &gkebackup.BackupPlanArgs{ +// Name: pulumi.String("restore-order"), +// Cluster: primary.ID(), +// Location: pulumi.String("us-central1"), +// BackupConfig: &gkebackup.BackupPlanBackupConfigArgs{ +// IncludeVolumeData: pulumi.Bool(true), +// IncludeSecrets: pulumi.Bool(true), +// AllNamespaces: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = gkebackup.NewRestorePlan(ctx, "restore_order", &gkebackup.RestorePlanArgs{ +// Name: pulumi.String("restore-order"), +// Location: pulumi.String("us-central1"), +// BackupPlan: basic.ID(), +// Cluster: primary.ID(), +// RestoreConfig: &gkebackup.RestorePlanRestoreConfigArgs{ +// AllNamespaces: pulumi.Bool(true), +// NamespacedResourceRestoreMode: pulumi.String("FAIL_ON_CONFLICT"), +// VolumeDataRestorePolicy: pulumi.String("RESTORE_VOLUME_DATA_FROM_BACKUP"), +// ClusterResourceRestoreScope: &gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{ +// AllGroupKinds: pulumi.Bool(true), +// }, +// ClusterResourceConflictPolicy: pulumi.String("USE_EXISTING_VERSION"), +// RestoreOrder: &gkebackup.RestorePlanRestoreConfigRestoreOrderArgs{ +// GroupKindDependencies: gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray{ +// &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{ +// Satisfying: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindA"), +// }, +// Requiring: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindB"), +// }, +// }, +// &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{ +// Satisfying: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindB"), +// }, +// Requiring: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindC"), +// }, +// }, +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Gkebackup Restoreplan Volume Res +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ +// Name: pulumi.String("volume-res-cluster"), +// Location: pulumi.String("us-central1"), +// InitialNodeCount: pulumi.Int(1), +// WorkloadIdentityConfig: &container.ClusterWorkloadIdentityConfigArgs{ +// WorkloadPool: pulumi.String("my-project-name.svc.id.goog"), +// }, +// AddonsConfig: &container.ClusterAddonsConfigArgs{ +// GkeBackupAgentConfig: &container.ClusterAddonsConfigGkeBackupAgentConfigArgs{ +// Enabled: pulumi.Bool(true), +// }, +// }, +// DeletionProtection: pulumi.Bool(""), +// Network: pulumi.String("default"), +// Subnetwork: pulumi.String("default"), +// }) +// if err != nil { +// return err +// } +// basic, err := gkebackup.NewBackupPlan(ctx, "basic", &gkebackup.BackupPlanArgs{ +// Name: pulumi.String("volume-res"), +// Cluster: primary.ID(), +// Location: pulumi.String("us-central1"), +// BackupConfig: &gkebackup.BackupPlanBackupConfigArgs{ +// IncludeVolumeData: pulumi.Bool(true), +// IncludeSecrets: pulumi.Bool(true), +// AllNamespaces: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = gkebackup.NewRestorePlan(ctx, "volume_res", &gkebackup.RestorePlanArgs{ +// Name: pulumi.String("volume-res"), +// Location: pulumi.String("us-central1"), +// BackupPlan: basic.ID(), +// Cluster: primary.ID(), +// RestoreConfig: &gkebackup.RestorePlanRestoreConfigArgs{ +// AllNamespaces: pulumi.Bool(true), +// NamespacedResourceRestoreMode: pulumi.String("FAIL_ON_CONFLICT"), +// VolumeDataRestorePolicy: pulumi.String("NO_VOLUME_DATA_RESTORATION"), +// ClusterResourceRestoreScope: &gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{ +// AllGroupKinds: pulumi.Bool(true), +// }, +// ClusterResourceConflictPolicy: pulumi.String("USE_EXISTING_VERSION"), +// VolumeDataRestorePolicyBindings: gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray{ +// &gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs{ +// Policy: pulumi.String("RESTORE_VOLUME_DATA_FROM_BACKUP"), +// VolumeType: pulumi.String("GCE_PERSISTENT_DISK"), +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // // ## Import // diff --git a/sdk/go/gcp/gkebackup/restorePlanIamPolicy.go b/sdk/go/gcp/gkebackup/restorePlanIamPolicy.go index f011d626ba..c253130211 100644 --- a/sdk/go/gcp/gkebackup/restorePlanIamPolicy.go +++ b/sdk/go/gcp/gkebackup/restorePlanIamPolicy.go @@ -532,6 +532,246 @@ import ( // } // // ``` +// ### Gkebackup Restoreplan Gitops Mode +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ +// Name: pulumi.String("gitops-mode-cluster"), +// Location: pulumi.String("us-central1"), +// InitialNodeCount: pulumi.Int(1), +// WorkloadIdentityConfig: &container.ClusterWorkloadIdentityConfigArgs{ +// WorkloadPool: pulumi.String("my-project-name.svc.id.goog"), +// }, +// AddonsConfig: &container.ClusterAddonsConfigArgs{ +// GkeBackupAgentConfig: &container.ClusterAddonsConfigGkeBackupAgentConfigArgs{ +// Enabled: pulumi.Bool(true), +// }, +// }, +// DeletionProtection: pulumi.Bool(""), +// Network: pulumi.String("default"), +// Subnetwork: pulumi.String("default"), +// }) +// if err != nil { +// return err +// } +// basic, err := gkebackup.NewBackupPlan(ctx, "basic", &gkebackup.BackupPlanArgs{ +// Name: pulumi.String("gitops-mode"), +// Cluster: primary.ID(), +// Location: pulumi.String("us-central1"), +// BackupConfig: &gkebackup.BackupPlanBackupConfigArgs{ +// IncludeVolumeData: pulumi.Bool(true), +// IncludeSecrets: pulumi.Bool(true), +// AllNamespaces: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = gkebackup.NewRestorePlan(ctx, "gitops_mode", &gkebackup.RestorePlanArgs{ +// Name: pulumi.String("gitops-mode"), +// Location: pulumi.String("us-central1"), +// BackupPlan: basic.ID(), +// Cluster: primary.ID(), +// RestoreConfig: &gkebackup.RestorePlanRestoreConfigArgs{ +// AllNamespaces: pulumi.Bool(true), +// NamespacedResourceRestoreMode: pulumi.String("MERGE_SKIP_ON_CONFLICT"), +// VolumeDataRestorePolicy: pulumi.String("RESTORE_VOLUME_DATA_FROM_BACKUP"), +// ClusterResourceRestoreScope: &gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{ +// AllGroupKinds: pulumi.Bool(true), +// }, +// ClusterResourceConflictPolicy: pulumi.String("USE_EXISTING_VERSION"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Gkebackup Restoreplan Restore Order +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ +// Name: pulumi.String("restore-order-cluster"), +// Location: pulumi.String("us-central1"), +// InitialNodeCount: pulumi.Int(1), +// WorkloadIdentityConfig: &container.ClusterWorkloadIdentityConfigArgs{ +// WorkloadPool: pulumi.String("my-project-name.svc.id.goog"), +// }, +// AddonsConfig: &container.ClusterAddonsConfigArgs{ +// GkeBackupAgentConfig: &container.ClusterAddonsConfigGkeBackupAgentConfigArgs{ +// Enabled: pulumi.Bool(true), +// }, +// }, +// DeletionProtection: pulumi.Bool(""), +// Network: pulumi.String("default"), +// Subnetwork: pulumi.String("default"), +// }) +// if err != nil { +// return err +// } +// basic, err := gkebackup.NewBackupPlan(ctx, "basic", &gkebackup.BackupPlanArgs{ +// Name: pulumi.String("restore-order"), +// Cluster: primary.ID(), +// Location: pulumi.String("us-central1"), +// BackupConfig: &gkebackup.BackupPlanBackupConfigArgs{ +// IncludeVolumeData: pulumi.Bool(true), +// IncludeSecrets: pulumi.Bool(true), +// AllNamespaces: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = gkebackup.NewRestorePlan(ctx, "restore_order", &gkebackup.RestorePlanArgs{ +// Name: pulumi.String("restore-order"), +// Location: pulumi.String("us-central1"), +// BackupPlan: basic.ID(), +// Cluster: primary.ID(), +// RestoreConfig: &gkebackup.RestorePlanRestoreConfigArgs{ +// AllNamespaces: pulumi.Bool(true), +// NamespacedResourceRestoreMode: pulumi.String("FAIL_ON_CONFLICT"), +// VolumeDataRestorePolicy: pulumi.String("RESTORE_VOLUME_DATA_FROM_BACKUP"), +// ClusterResourceRestoreScope: &gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{ +// AllGroupKinds: pulumi.Bool(true), +// }, +// ClusterResourceConflictPolicy: pulumi.String("USE_EXISTING_VERSION"), +// RestoreOrder: &gkebackup.RestorePlanRestoreConfigRestoreOrderArgs{ +// GroupKindDependencies: gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray{ +// &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{ +// Satisfying: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindA"), +// }, +// Requiring: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindB"), +// }, +// }, +// &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{ +// Satisfying: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindB"), +// }, +// Requiring: &gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{ +// ResourceGroup: pulumi.String("stable.example.com"), +// ResourceKind: pulumi.String("kindC"), +// }, +// }, +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Gkebackup Restoreplan Volume Res +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/gkebackup" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ +// Name: pulumi.String("volume-res-cluster"), +// Location: pulumi.String("us-central1"), +// InitialNodeCount: pulumi.Int(1), +// WorkloadIdentityConfig: &container.ClusterWorkloadIdentityConfigArgs{ +// WorkloadPool: pulumi.String("my-project-name.svc.id.goog"), +// }, +// AddonsConfig: &container.ClusterAddonsConfigArgs{ +// GkeBackupAgentConfig: &container.ClusterAddonsConfigGkeBackupAgentConfigArgs{ +// Enabled: pulumi.Bool(true), +// }, +// }, +// DeletionProtection: pulumi.Bool(""), +// Network: pulumi.String("default"), +// Subnetwork: pulumi.String("default"), +// }) +// if err != nil { +// return err +// } +// basic, err := gkebackup.NewBackupPlan(ctx, "basic", &gkebackup.BackupPlanArgs{ +// Name: pulumi.String("volume-res"), +// Cluster: primary.ID(), +// Location: pulumi.String("us-central1"), +// BackupConfig: &gkebackup.BackupPlanBackupConfigArgs{ +// IncludeVolumeData: pulumi.Bool(true), +// IncludeSecrets: pulumi.Bool(true), +// AllNamespaces: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = gkebackup.NewRestorePlan(ctx, "volume_res", &gkebackup.RestorePlanArgs{ +// Name: pulumi.String("volume-res"), +// Location: pulumi.String("us-central1"), +// BackupPlan: basic.ID(), +// Cluster: primary.ID(), +// RestoreConfig: &gkebackup.RestorePlanRestoreConfigArgs{ +// AllNamespaces: pulumi.Bool(true), +// NamespacedResourceRestoreMode: pulumi.String("FAIL_ON_CONFLICT"), +// VolumeDataRestorePolicy: pulumi.String("NO_VOLUME_DATA_RESTORATION"), +// ClusterResourceRestoreScope: &gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{ +// AllGroupKinds: pulumi.Bool(true), +// }, +// ClusterResourceConflictPolicy: pulumi.String("USE_EXISTING_VERSION"), +// VolumeDataRestorePolicyBindings: gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray{ +// &gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs{ +// Policy: pulumi.String("RESTORE_VOLUME_DATA_FROM_BACKUP"), +// VolumeType: pulumi.String("GCE_PERSISTENT_DISK"), +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // // ## Import // diff --git a/sdk/go/gcp/healthcare/dicomStore.go b/sdk/go/gcp/healthcare/dicomStore.go index 5e9b9033fa..345cba8e15 100644 --- a/sdk/go/gcp/healthcare/dicomStore.go +++ b/sdk/go/gcp/healthcare/dicomStore.go @@ -122,7 +122,8 @@ import ( // Name: pulumi.String("example-dicom-store"), // Dataset: dataset.ID(), // NotificationConfig: &healthcare.DicomStoreNotificationConfigArgs{ -// PubsubTopic: topic.ID(), +// PubsubTopic: topic.ID(), +// SendForBulkImport: pulumi.Bool(true), // }, // Labels: pulumi.StringMap{ // "label1": pulumi.String("labelvalue1"), diff --git a/sdk/go/gcp/healthcare/fhirStore.go b/sdk/go/gcp/healthcare/fhirStore.go index bbbc017cfe..c7a9d444c2 100644 --- a/sdk/go/gcp/healthcare/fhirStore.go +++ b/sdk/go/gcp/healthcare/fhirStore.go @@ -61,8 +61,10 @@ import ( // DisableResourceVersioning: pulumi.Bool(false), // EnableHistoryImport: pulumi.Bool(false), // DefaultSearchHandlingStrict: pulumi.Bool(false), -// NotificationConfig: &healthcare.FhirStoreNotificationConfigArgs{ -// PubsubTopic: topic.ID(), +// NotificationConfigs: healthcare.FhirStoreNotificationConfigArray{ +// &healthcare.FhirStoreNotificationConfigArgs{ +// PubsubTopic: topic.ID(), +// }, // }, // Labels: pulumi.StringMap{ // "label1": pulumi.String("labelvalue1"), @@ -158,57 +160,6 @@ import ( // } // // ``` -// ### Healthcare Fhir Store Notification Config -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/healthcare" -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/pubsub" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// topic, err := pubsub.NewTopic(ctx, "topic", &pubsub.TopicArgs{ -// Name: pulumi.String("fhir-notifications"), -// }) -// if err != nil { -// return err -// } -// dataset, err := healthcare.NewDataset(ctx, "dataset", &healthcare.DatasetArgs{ -// Name: pulumi.String("example-dataset"), -// Location: pulumi.String("us-central1"), -// }) -// if err != nil { -// return err -// } -// _, err = healthcare.NewFhirStore(ctx, "default", &healthcare.FhirStoreArgs{ -// Name: pulumi.String("example-fhir-store"), -// Dataset: dataset.ID(), -// Version: pulumi.String("R4"), -// EnableUpdateCreate: pulumi.Bool(false), -// DisableReferentialIntegrity: pulumi.Bool(false), -// DisableResourceVersioning: pulumi.Bool(false), -// EnableHistoryImport: pulumi.Bool(false), -// Labels: pulumi.StringMap{ -// "label1": pulumi.String("labelvalue1"), -// }, -// NotificationConfig: &healthcare.FhirStoreNotificationConfigArgs{ -// PubsubTopic: topic.ID(), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // ### Healthcare Fhir Store Notification Configs // // ```go @@ -245,7 +196,6 @@ import ( // DisableReferentialIntegrity: pulumi.Bool(false), // DisableResourceVersioning: pulumi.Bool(false), // EnableHistoryImport: pulumi.Bool(false), -// EnableHistoryModifications: pulumi.Bool(false), // Labels: pulumi.StringMap{ // "label1": pulumi.String("labelvalue1"), // }, @@ -346,8 +296,13 @@ type FhirStore struct { // The resource name for the FhirStore. // ** Changing this property may recreate the FHIR store (removing all data) ** Name pulumi.StringOutput `pulumi:"name"` + // (Optional, Deprecated) // A nested object resource // Structure is documented below. + // + // > **Warning:** `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. + // + // Deprecated: `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. NotificationConfig FhirStoreNotificationConfigPtrOutput `pulumi:"notificationConfig"` // A list of notifcation configs that configure the notification for every resource mutation in this FHIR store. // Structure is documented below. @@ -469,8 +424,13 @@ type fhirStoreState struct { // The resource name for the FhirStore. // ** Changing this property may recreate the FHIR store (removing all data) ** Name *string `pulumi:"name"` + // (Optional, Deprecated) // A nested object resource // Structure is documented below. + // + // > **Warning:** `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. + // + // Deprecated: `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. NotificationConfig *FhirStoreNotificationConfig `pulumi:"notificationConfig"` // A list of notifcation configs that configure the notification for every resource mutation in this FHIR store. // Structure is documented below. @@ -555,8 +515,13 @@ type FhirStoreState struct { // The resource name for the FhirStore. // ** Changing this property may recreate the FHIR store (removing all data) ** Name pulumi.StringPtrInput + // (Optional, Deprecated) // A nested object resource // Structure is documented below. + // + // > **Warning:** `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. + // + // Deprecated: `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. NotificationConfig FhirStoreNotificationConfigPtrInput // A list of notifcation configs that configure the notification for every resource mutation in this FHIR store. // Structure is documented below. @@ -643,8 +608,13 @@ type fhirStoreArgs struct { // The resource name for the FhirStore. // ** Changing this property may recreate the FHIR store (removing all data) ** Name *string `pulumi:"name"` + // (Optional, Deprecated) // A nested object resource // Structure is documented below. + // + // > **Warning:** `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. + // + // Deprecated: `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. NotificationConfig *FhirStoreNotificationConfig `pulumi:"notificationConfig"` // A list of notifcation configs that configure the notification for every resource mutation in this FHIR store. // Structure is documented below. @@ -723,8 +693,13 @@ type FhirStoreArgs struct { // The resource name for the FhirStore. // ** Changing this property may recreate the FHIR store (removing all data) ** Name pulumi.StringPtrInput + // (Optional, Deprecated) // A nested object resource // Structure is documented below. + // + // > **Warning:** `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. + // + // Deprecated: `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. NotificationConfig FhirStoreNotificationConfigPtrInput // A list of notifcation configs that configure the notification for every resource mutation in this FHIR store. // Structure is documented below. @@ -923,8 +898,13 @@ func (o FhirStoreOutput) Name() pulumi.StringOutput { return o.ApplyT(func(v *FhirStore) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) } +// (Optional, Deprecated) // A nested object resource // Structure is documented below. +// +// > **Warning:** `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. +// +// Deprecated: `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. func (o FhirStoreOutput) NotificationConfig() FhirStoreNotificationConfigPtrOutput { return o.ApplyT(func(v *FhirStore) FhirStoreNotificationConfigPtrOutput { return v.NotificationConfig }).(FhirStoreNotificationConfigPtrOutput) } diff --git a/sdk/go/gcp/healthcare/pulumiTypes.go b/sdk/go/gcp/healthcare/pulumiTypes.go index 8aa9d780c7..9af919a185 100644 --- a/sdk/go/gcp/healthcare/pulumiTypes.go +++ b/sdk/go/gcp/healthcare/pulumiTypes.go @@ -999,6 +999,8 @@ type DicomStoreNotificationConfig struct { // project. service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com must have publisher permissions on the given // Cloud Pub/Sub topic. Not having adequate permissions will cause the calls that send notifications to fail. PubsubTopic string `pulumi:"pubsubTopic"` + // Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + SendForBulkImport *bool `pulumi:"sendForBulkImport"` } // DicomStoreNotificationConfigInput is an input type that accepts DicomStoreNotificationConfigArgs and DicomStoreNotificationConfigOutput values. @@ -1020,6 +1022,8 @@ type DicomStoreNotificationConfigArgs struct { // project. service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com must have publisher permissions on the given // Cloud Pub/Sub topic. Not having adequate permissions will cause the calls that send notifications to fail. PubsubTopic pulumi.StringInput `pulumi:"pubsubTopic"` + // Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + SendForBulkImport pulumi.BoolPtrInput `pulumi:"sendForBulkImport"` } func (DicomStoreNotificationConfigArgs) ElementType() reflect.Type { @@ -1109,6 +1113,11 @@ func (o DicomStoreNotificationConfigOutput) PubsubTopic() pulumi.StringOutput { return o.ApplyT(func(v DicomStoreNotificationConfig) string { return v.PubsubTopic }).(pulumi.StringOutput) } +// Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. +func (o DicomStoreNotificationConfigOutput) SendForBulkImport() pulumi.BoolPtrOutput { + return o.ApplyT(func(v DicomStoreNotificationConfig) *bool { return v.SendForBulkImport }).(pulumi.BoolPtrOutput) +} + type DicomStoreNotificationConfigPtrOutput struct{ *pulumi.OutputState } func (DicomStoreNotificationConfigPtrOutput) ElementType() reflect.Type { @@ -1148,6 +1157,16 @@ func (o DicomStoreNotificationConfigPtrOutput) PubsubTopic() pulumi.StringPtrOut }).(pulumi.StringPtrOutput) } +// Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. +func (o DicomStoreNotificationConfigPtrOutput) SendForBulkImport() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *DicomStoreNotificationConfig) *bool { + if v == nil { + return nil + } + return v.SendForBulkImport + }).(pulumi.BoolPtrOutput) +} + type DicomStoreStreamConfig struct { // BigQueryDestination to include a fully qualified BigQuery table URI where DICOM instance metadata will be streamed. // Structure is documented below. diff --git a/sdk/go/gcp/integrationconnectors/endpointAttachment.go b/sdk/go/gcp/integrationconnectors/endpointAttachment.go index 8495fa3d9a..164d85a51d 100644 --- a/sdk/go/gcp/integrationconnectors/endpointAttachment.go +++ b/sdk/go/gcp/integrationconnectors/endpointAttachment.go @@ -86,6 +86,8 @@ type EndpointAttachment struct { Description pulumi.StringPtrOutput `pulumi:"description"` // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // Enable global access for endpoint attachment. + EndpointGlobalAccess pulumi.BoolPtrOutput `pulumi:"endpointGlobalAccess"` // The Private Service Connect connection endpoint ip. EndpointIp pulumi.StringOutput `pulumi:"endpointIp"` // Resource labels to represent user provided metadata. @@ -158,6 +160,8 @@ type endpointAttachmentState struct { Description *string `pulumi:"description"` // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // Enable global access for endpoint attachment. + EndpointGlobalAccess *bool `pulumi:"endpointGlobalAccess"` // The Private Service Connect connection endpoint ip. EndpointIp *string `pulumi:"endpointIp"` // Resource labels to represent user provided metadata. @@ -190,6 +194,8 @@ type EndpointAttachmentState struct { Description pulumi.StringPtrInput // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. EffectiveLabels pulumi.StringMapInput + // Enable global access for endpoint attachment. + EndpointGlobalAccess pulumi.BoolPtrInput // The Private Service Connect connection endpoint ip. EndpointIp pulumi.StringPtrInput // Resource labels to represent user provided metadata. @@ -222,6 +228,8 @@ func (EndpointAttachmentState) ElementType() reflect.Type { type endpointAttachmentArgs struct { // Description of the resource. Description *string `pulumi:"description"` + // Enable global access for endpoint attachment. + EndpointGlobalAccess *bool `pulumi:"endpointGlobalAccess"` // Resource labels to represent user provided metadata. // // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. @@ -244,6 +252,8 @@ type endpointAttachmentArgs struct { type EndpointAttachmentArgs struct { // Description of the resource. Description pulumi.StringPtrInput + // Enable global access for endpoint attachment. + EndpointGlobalAccess pulumi.BoolPtrInput // Resource labels to represent user provided metadata. // // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. @@ -364,6 +374,11 @@ func (o EndpointAttachmentOutput) EffectiveLabels() pulumi.StringMapOutput { return o.ApplyT(func(v *EndpointAttachment) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) } +// Enable global access for endpoint attachment. +func (o EndpointAttachmentOutput) EndpointGlobalAccess() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *EndpointAttachment) pulumi.BoolPtrOutput { return v.EndpointGlobalAccess }).(pulumi.BoolPtrOutput) +} + // The Private Service Connect connection endpoint ip. func (o EndpointAttachmentOutput) EndpointIp() pulumi.StringOutput { return o.ApplyT(func(v *EndpointAttachment) pulumi.StringOutput { return v.EndpointIp }).(pulumi.StringOutput) diff --git a/sdk/go/gcp/kms/cryptoKey.go b/sdk/go/gcp/kms/cryptoKey.go index ed6d447fd8..e06d2d7dd0 100644 --- a/sdk/go/gcp/kms/cryptoKey.go +++ b/sdk/go/gcp/kms/cryptoKey.go @@ -163,7 +163,8 @@ type CryptoKey struct { // letter `s` (seconds). It must be greater than a day (ie, 86400). RotationPeriod pulumi.StringPtrOutput `pulumi:"rotationPeriod"` // If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - // You must use the `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + // You must use the `kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + // or `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. SkipInitialVersionCreation pulumi.BoolPtrOutput `pulumi:"skipInitialVersionCreation"` // A template describing settings for new crypto key versions. // Structure is documented below. @@ -248,7 +249,8 @@ type cryptoKeyState struct { // letter `s` (seconds). It must be greater than a day (ie, 86400). RotationPeriod *string `pulumi:"rotationPeriod"` // If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - // You must use the `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + // You must use the `kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + // or `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. SkipInitialVersionCreation *bool `pulumi:"skipInitialVersionCreation"` // A template describing settings for new crypto key versions. // Structure is documented below. @@ -296,7 +298,8 @@ type CryptoKeyState struct { // letter `s` (seconds). It must be greater than a day (ie, 86400). RotationPeriod pulumi.StringPtrInput // If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - // You must use the `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + // You must use the `kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + // or `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. SkipInitialVersionCreation pulumi.BoolPtrInput // A template describing settings for new crypto key versions. // Structure is documented below. @@ -339,7 +342,8 @@ type cryptoKeyArgs struct { // letter `s` (seconds). It must be greater than a day (ie, 86400). RotationPeriod *string `pulumi:"rotationPeriod"` // If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - // You must use the `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + // You must use the `kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + // or `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. SkipInitialVersionCreation *bool `pulumi:"skipInitialVersionCreation"` // A template describing settings for new crypto key versions. // Structure is documented below. @@ -379,7 +383,8 @@ type CryptoKeyArgs struct { // letter `s` (seconds). It must be greater than a day (ie, 86400). RotationPeriod pulumi.StringPtrInput // If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - // You must use the `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + // You must use the `kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + // or `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. SkipInitialVersionCreation pulumi.BoolPtrInput // A template describing settings for new crypto key versions. // Structure is documented below. @@ -546,7 +551,8 @@ func (o CryptoKeyOutput) RotationPeriod() pulumi.StringPtrOutput { } // If set to true, the request will create a CryptoKey without any CryptoKeyVersions. -// You must use the `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. +// You must use the `kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion +// or `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. func (o CryptoKeyOutput) SkipInitialVersionCreation() pulumi.BoolPtrOutput { return o.ApplyT(func(v *CryptoKey) pulumi.BoolPtrOutput { return v.SkipInitialVersionCreation }).(pulumi.BoolPtrOutput) } diff --git a/sdk/go/gcp/netapp/pulumiTypes.go b/sdk/go/gcp/netapp/pulumiTypes.go index 8057824ba0..6d32fd1eb8 100644 --- a/sdk/go/gcp/netapp/pulumiTypes.go +++ b/sdk/go/gcp/netapp/pulumiTypes.go @@ -13,6 +13,185 @@ import ( var _ = internal.GetEnvOrDefault +type VolumeBackupConfig struct { + // Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + BackupPolicies []string `pulumi:"backupPolicies"` + // ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + // Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + BackupVault *string `pulumi:"backupVault"` + // When set to true, scheduled backup is enabled on the volume. Omit if no backupPolicy is specified. + ScheduledBackupEnabled *bool `pulumi:"scheduledBackupEnabled"` +} + +// VolumeBackupConfigInput is an input type that accepts VolumeBackupConfigArgs and VolumeBackupConfigOutput values. +// You can construct a concrete instance of `VolumeBackupConfigInput` via: +// +// VolumeBackupConfigArgs{...} +type VolumeBackupConfigInput interface { + pulumi.Input + + ToVolumeBackupConfigOutput() VolumeBackupConfigOutput + ToVolumeBackupConfigOutputWithContext(context.Context) VolumeBackupConfigOutput +} + +type VolumeBackupConfigArgs struct { + // Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + BackupPolicies pulumi.StringArrayInput `pulumi:"backupPolicies"` + // ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + // Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + BackupVault pulumi.StringPtrInput `pulumi:"backupVault"` + // When set to true, scheduled backup is enabled on the volume. Omit if no backupPolicy is specified. + ScheduledBackupEnabled pulumi.BoolPtrInput `pulumi:"scheduledBackupEnabled"` +} + +func (VolumeBackupConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*VolumeBackupConfig)(nil)).Elem() +} + +func (i VolumeBackupConfigArgs) ToVolumeBackupConfigOutput() VolumeBackupConfigOutput { + return i.ToVolumeBackupConfigOutputWithContext(context.Background()) +} + +func (i VolumeBackupConfigArgs) ToVolumeBackupConfigOutputWithContext(ctx context.Context) VolumeBackupConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(VolumeBackupConfigOutput) +} + +func (i VolumeBackupConfigArgs) ToVolumeBackupConfigPtrOutput() VolumeBackupConfigPtrOutput { + return i.ToVolumeBackupConfigPtrOutputWithContext(context.Background()) +} + +func (i VolumeBackupConfigArgs) ToVolumeBackupConfigPtrOutputWithContext(ctx context.Context) VolumeBackupConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(VolumeBackupConfigOutput).ToVolumeBackupConfigPtrOutputWithContext(ctx) +} + +// VolumeBackupConfigPtrInput is an input type that accepts VolumeBackupConfigArgs, VolumeBackupConfigPtr and VolumeBackupConfigPtrOutput values. +// You can construct a concrete instance of `VolumeBackupConfigPtrInput` via: +// +// VolumeBackupConfigArgs{...} +// +// or: +// +// nil +type VolumeBackupConfigPtrInput interface { + pulumi.Input + + ToVolumeBackupConfigPtrOutput() VolumeBackupConfigPtrOutput + ToVolumeBackupConfigPtrOutputWithContext(context.Context) VolumeBackupConfigPtrOutput +} + +type volumeBackupConfigPtrType VolumeBackupConfigArgs + +func VolumeBackupConfigPtr(v *VolumeBackupConfigArgs) VolumeBackupConfigPtrInput { + return (*volumeBackupConfigPtrType)(v) +} + +func (*volumeBackupConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**VolumeBackupConfig)(nil)).Elem() +} + +func (i *volumeBackupConfigPtrType) ToVolumeBackupConfigPtrOutput() VolumeBackupConfigPtrOutput { + return i.ToVolumeBackupConfigPtrOutputWithContext(context.Background()) +} + +func (i *volumeBackupConfigPtrType) ToVolumeBackupConfigPtrOutputWithContext(ctx context.Context) VolumeBackupConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(VolumeBackupConfigPtrOutput) +} + +type VolumeBackupConfigOutput struct{ *pulumi.OutputState } + +func (VolumeBackupConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*VolumeBackupConfig)(nil)).Elem() +} + +func (o VolumeBackupConfigOutput) ToVolumeBackupConfigOutput() VolumeBackupConfigOutput { + return o +} + +func (o VolumeBackupConfigOutput) ToVolumeBackupConfigOutputWithContext(ctx context.Context) VolumeBackupConfigOutput { + return o +} + +func (o VolumeBackupConfigOutput) ToVolumeBackupConfigPtrOutput() VolumeBackupConfigPtrOutput { + return o.ToVolumeBackupConfigPtrOutputWithContext(context.Background()) +} + +func (o VolumeBackupConfigOutput) ToVolumeBackupConfigPtrOutputWithContext(ctx context.Context) VolumeBackupConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v VolumeBackupConfig) *VolumeBackupConfig { + return &v + }).(VolumeBackupConfigPtrOutput) +} + +// Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` +func (o VolumeBackupConfigOutput) BackupPolicies() pulumi.StringArrayOutput { + return o.ApplyT(func(v VolumeBackupConfig) []string { return v.BackupPolicies }).(pulumi.StringArrayOutput) +} + +// ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. +// Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` +func (o VolumeBackupConfigOutput) BackupVault() pulumi.StringPtrOutput { + return o.ApplyT(func(v VolumeBackupConfig) *string { return v.BackupVault }).(pulumi.StringPtrOutput) +} + +// When set to true, scheduled backup is enabled on the volume. Omit if no backupPolicy is specified. +func (o VolumeBackupConfigOutput) ScheduledBackupEnabled() pulumi.BoolPtrOutput { + return o.ApplyT(func(v VolumeBackupConfig) *bool { return v.ScheduledBackupEnabled }).(pulumi.BoolPtrOutput) +} + +type VolumeBackupConfigPtrOutput struct{ *pulumi.OutputState } + +func (VolumeBackupConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**VolumeBackupConfig)(nil)).Elem() +} + +func (o VolumeBackupConfigPtrOutput) ToVolumeBackupConfigPtrOutput() VolumeBackupConfigPtrOutput { + return o +} + +func (o VolumeBackupConfigPtrOutput) ToVolumeBackupConfigPtrOutputWithContext(ctx context.Context) VolumeBackupConfigPtrOutput { + return o +} + +func (o VolumeBackupConfigPtrOutput) Elem() VolumeBackupConfigOutput { + return o.ApplyT(func(v *VolumeBackupConfig) VolumeBackupConfig { + if v != nil { + return *v + } + var ret VolumeBackupConfig + return ret + }).(VolumeBackupConfigOutput) +} + +// Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` +func (o VolumeBackupConfigPtrOutput) BackupPolicies() pulumi.StringArrayOutput { + return o.ApplyT(func(v *VolumeBackupConfig) []string { + if v == nil { + return nil + } + return v.BackupPolicies + }).(pulumi.StringArrayOutput) +} + +// ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. +// Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` +func (o VolumeBackupConfigPtrOutput) BackupVault() pulumi.StringPtrOutput { + return o.ApplyT(func(v *VolumeBackupConfig) *string { + if v == nil { + return nil + } + return v.BackupVault + }).(pulumi.StringPtrOutput) +} + +// When set to true, scheduled backup is enabled on the volume. Omit if no backupPolicy is specified. +func (o VolumeBackupConfigPtrOutput) ScheduledBackupEnabled() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *VolumeBackupConfig) *bool { + if v == nil { + return nil + } + return v.ScheduledBackupEnabled + }).(pulumi.BoolPtrOutput) +} + type VolumeExportPolicy struct { // Export rules (up to 5) control NFS volume access. // Structure is documented below. @@ -1995,6 +2174,8 @@ func (o VolumeSnapshotPolicyWeeklySchedulePtrOutput) SnapshotsToKeep() pulumi.In } func init() { + pulumi.RegisterInputType(reflect.TypeOf((*VolumeBackupConfigInput)(nil)).Elem(), VolumeBackupConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*VolumeBackupConfigPtrInput)(nil)).Elem(), VolumeBackupConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*VolumeExportPolicyInput)(nil)).Elem(), VolumeExportPolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*VolumeExportPolicyPtrInput)(nil)).Elem(), VolumeExportPolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*VolumeExportPolicyRuleInput)(nil)).Elem(), VolumeExportPolicyRuleArgs{}) @@ -2017,6 +2198,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*VolumeSnapshotPolicyMonthlySchedulePtrInput)(nil)).Elem(), VolumeSnapshotPolicyMonthlyScheduleArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*VolumeSnapshotPolicyWeeklyScheduleInput)(nil)).Elem(), VolumeSnapshotPolicyWeeklyScheduleArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*VolumeSnapshotPolicyWeeklySchedulePtrInput)(nil)).Elem(), VolumeSnapshotPolicyWeeklyScheduleArgs{}) + pulumi.RegisterOutputType(VolumeBackupConfigOutput{}) + pulumi.RegisterOutputType(VolumeBackupConfigPtrOutput{}) pulumi.RegisterOutputType(VolumeExportPolicyOutput{}) pulumi.RegisterOutputType(VolumeExportPolicyPtrOutput{}) pulumi.RegisterOutputType(VolumeExportPolicyRuleOutput{}) diff --git a/sdk/go/gcp/netapp/volume.go b/sdk/go/gcp/netapp/volume.go index 4bc7eecc36..de98ff251e 100644 --- a/sdk/go/gcp/netapp/volume.go +++ b/sdk/go/gcp/netapp/volume.go @@ -106,6 +106,9 @@ type Volume struct { // Reports the resource name of the Active Directory policy being used. Inherited from storage pool. ActiveDirectory pulumi.StringOutput `pulumi:"activeDirectory"` + // Backup configuration for the volume. + // Structure is documented below. + BackupConfig VolumeBackupConfigPtrOutput `pulumi:"backupConfig"` // Capacity of the volume (in GiB). CapacityGib pulumi.StringOutput `pulumi:"capacityGib"` // Create time of the volume. A timestamp in RFC3339 UTC "Zulu" format. Examples: "2023-06-22T09:13:01.617Z". @@ -245,6 +248,9 @@ func GetVolume(ctx *pulumi.Context, type volumeState struct { // Reports the resource name of the Active Directory policy being used. Inherited from storage pool. ActiveDirectory *string `pulumi:"activeDirectory"` + // Backup configuration for the volume. + // Structure is documented below. + BackupConfig *VolumeBackupConfig `pulumi:"backupConfig"` // Capacity of the volume (in GiB). CapacityGib *string `pulumi:"capacityGib"` // Create time of the volume. A timestamp in RFC3339 UTC "Zulu" format. Examples: "2023-06-22T09:13:01.617Z". @@ -335,6 +341,9 @@ type volumeState struct { type VolumeState struct { // Reports the resource name of the Active Directory policy being used. Inherited from storage pool. ActiveDirectory pulumi.StringPtrInput + // Backup configuration for the volume. + // Structure is documented below. + BackupConfig VolumeBackupConfigPtrInput // Capacity of the volume (in GiB). CapacityGib pulumi.StringPtrInput // Create time of the volume. A timestamp in RFC3339 UTC "Zulu" format. Examples: "2023-06-22T09:13:01.617Z". @@ -427,6 +436,9 @@ func (VolumeState) ElementType() reflect.Type { } type volumeArgs struct { + // Backup configuration for the volume. + // Structure is documented below. + BackupConfig *VolumeBackupConfig `pulumi:"backupConfig"` // Capacity of the volume (in GiB). CapacityGib string `pulumi:"capacityGib"` // Policy to determine if the volume should be deleted forcefully. @@ -486,6 +498,9 @@ type volumeArgs struct { // The set of arguments for constructing a Volume resource. type VolumeArgs struct { + // Backup configuration for the volume. + // Structure is documented below. + BackupConfig VolumeBackupConfigPtrInput // Capacity of the volume (in GiB). CapacityGib pulumi.StringInput // Policy to determine if the volume should be deleted forcefully. @@ -635,6 +650,12 @@ func (o VolumeOutput) ActiveDirectory() pulumi.StringOutput { return o.ApplyT(func(v *Volume) pulumi.StringOutput { return v.ActiveDirectory }).(pulumi.StringOutput) } +// Backup configuration for the volume. +// Structure is documented below. +func (o VolumeOutput) BackupConfig() VolumeBackupConfigPtrOutput { + return o.ApplyT(func(v *Volume) VolumeBackupConfigPtrOutput { return v.BackupConfig }).(VolumeBackupConfigPtrOutput) +} + // Capacity of the volume (in GiB). func (o VolumeOutput) CapacityGib() pulumi.StringOutput { return o.ApplyT(func(v *Volume) pulumi.StringOutput { return v.CapacityGib }).(pulumi.StringOutput) diff --git a/sdk/go/gcp/networkservices/init.go b/sdk/go/gcp/networkservices/init.go index dff32e32d6..6429c2936f 100644 --- a/sdk/go/gcp/networkservices/init.go +++ b/sdk/go/gcp/networkservices/init.go @@ -43,6 +43,8 @@ func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi r = &Mesh{} case "gcp:networkservices/serviceBinding:ServiceBinding": r = &ServiceBinding{} + case "gcp:networkservices/serviceLbPolicies:ServiceLbPolicies": + r = &ServiceLbPolicies{} case "gcp:networkservices/tcpRoute:TcpRoute": r = &TcpRoute{} case "gcp:networkservices/tlsRoute:TlsRoute": @@ -115,6 +117,11 @@ func init() { "networkservices/serviceBinding", &module{version}, ) + pulumi.RegisterResourceModule( + "gcp", + "networkservices/serviceLbPolicies", + &module{version}, + ) pulumi.RegisterResourceModule( "gcp", "networkservices/tcpRoute", diff --git a/sdk/go/gcp/networkservices/pulumiTypes.go b/sdk/go/gcp/networkservices/pulumiTypes.go index a34f0cd2e7..c02b59e170 100644 --- a/sdk/go/gcp/networkservices/pulumiTypes.go +++ b/sdk/go/gcp/networkservices/pulumiTypes.go @@ -11595,6 +11595,280 @@ func (o LbTrafficExtensionExtensionChainMatchConditionOutput) CelExpression() pu return o.ApplyT(func(v LbTrafficExtensionExtensionChainMatchCondition) string { return v.CelExpression }).(pulumi.StringOutput) } +type ServiceLbPoliciesAutoCapacityDrain struct { + // Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + Enable *bool `pulumi:"enable"` +} + +// ServiceLbPoliciesAutoCapacityDrainInput is an input type that accepts ServiceLbPoliciesAutoCapacityDrainArgs and ServiceLbPoliciesAutoCapacityDrainOutput values. +// You can construct a concrete instance of `ServiceLbPoliciesAutoCapacityDrainInput` via: +// +// ServiceLbPoliciesAutoCapacityDrainArgs{...} +type ServiceLbPoliciesAutoCapacityDrainInput interface { + pulumi.Input + + ToServiceLbPoliciesAutoCapacityDrainOutput() ServiceLbPoliciesAutoCapacityDrainOutput + ToServiceLbPoliciesAutoCapacityDrainOutputWithContext(context.Context) ServiceLbPoliciesAutoCapacityDrainOutput +} + +type ServiceLbPoliciesAutoCapacityDrainArgs struct { + // Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + Enable pulumi.BoolPtrInput `pulumi:"enable"` +} + +func (ServiceLbPoliciesAutoCapacityDrainArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ServiceLbPoliciesAutoCapacityDrain)(nil)).Elem() +} + +func (i ServiceLbPoliciesAutoCapacityDrainArgs) ToServiceLbPoliciesAutoCapacityDrainOutput() ServiceLbPoliciesAutoCapacityDrainOutput { + return i.ToServiceLbPoliciesAutoCapacityDrainOutputWithContext(context.Background()) +} + +func (i ServiceLbPoliciesAutoCapacityDrainArgs) ToServiceLbPoliciesAutoCapacityDrainOutputWithContext(ctx context.Context) ServiceLbPoliciesAutoCapacityDrainOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceLbPoliciesAutoCapacityDrainOutput) +} + +func (i ServiceLbPoliciesAutoCapacityDrainArgs) ToServiceLbPoliciesAutoCapacityDrainPtrOutput() ServiceLbPoliciesAutoCapacityDrainPtrOutput { + return i.ToServiceLbPoliciesAutoCapacityDrainPtrOutputWithContext(context.Background()) +} + +func (i ServiceLbPoliciesAutoCapacityDrainArgs) ToServiceLbPoliciesAutoCapacityDrainPtrOutputWithContext(ctx context.Context) ServiceLbPoliciesAutoCapacityDrainPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceLbPoliciesAutoCapacityDrainOutput).ToServiceLbPoliciesAutoCapacityDrainPtrOutputWithContext(ctx) +} + +// ServiceLbPoliciesAutoCapacityDrainPtrInput is an input type that accepts ServiceLbPoliciesAutoCapacityDrainArgs, ServiceLbPoliciesAutoCapacityDrainPtr and ServiceLbPoliciesAutoCapacityDrainPtrOutput values. +// You can construct a concrete instance of `ServiceLbPoliciesAutoCapacityDrainPtrInput` via: +// +// ServiceLbPoliciesAutoCapacityDrainArgs{...} +// +// or: +// +// nil +type ServiceLbPoliciesAutoCapacityDrainPtrInput interface { + pulumi.Input + + ToServiceLbPoliciesAutoCapacityDrainPtrOutput() ServiceLbPoliciesAutoCapacityDrainPtrOutput + ToServiceLbPoliciesAutoCapacityDrainPtrOutputWithContext(context.Context) ServiceLbPoliciesAutoCapacityDrainPtrOutput +} + +type serviceLbPoliciesAutoCapacityDrainPtrType ServiceLbPoliciesAutoCapacityDrainArgs + +func ServiceLbPoliciesAutoCapacityDrainPtr(v *ServiceLbPoliciesAutoCapacityDrainArgs) ServiceLbPoliciesAutoCapacityDrainPtrInput { + return (*serviceLbPoliciesAutoCapacityDrainPtrType)(v) +} + +func (*serviceLbPoliciesAutoCapacityDrainPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ServiceLbPoliciesAutoCapacityDrain)(nil)).Elem() +} + +func (i *serviceLbPoliciesAutoCapacityDrainPtrType) ToServiceLbPoliciesAutoCapacityDrainPtrOutput() ServiceLbPoliciesAutoCapacityDrainPtrOutput { + return i.ToServiceLbPoliciesAutoCapacityDrainPtrOutputWithContext(context.Background()) +} + +func (i *serviceLbPoliciesAutoCapacityDrainPtrType) ToServiceLbPoliciesAutoCapacityDrainPtrOutputWithContext(ctx context.Context) ServiceLbPoliciesAutoCapacityDrainPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceLbPoliciesAutoCapacityDrainPtrOutput) +} + +type ServiceLbPoliciesAutoCapacityDrainOutput struct{ *pulumi.OutputState } + +func (ServiceLbPoliciesAutoCapacityDrainOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ServiceLbPoliciesAutoCapacityDrain)(nil)).Elem() +} + +func (o ServiceLbPoliciesAutoCapacityDrainOutput) ToServiceLbPoliciesAutoCapacityDrainOutput() ServiceLbPoliciesAutoCapacityDrainOutput { + return o +} + +func (o ServiceLbPoliciesAutoCapacityDrainOutput) ToServiceLbPoliciesAutoCapacityDrainOutputWithContext(ctx context.Context) ServiceLbPoliciesAutoCapacityDrainOutput { + return o +} + +func (o ServiceLbPoliciesAutoCapacityDrainOutput) ToServiceLbPoliciesAutoCapacityDrainPtrOutput() ServiceLbPoliciesAutoCapacityDrainPtrOutput { + return o.ToServiceLbPoliciesAutoCapacityDrainPtrOutputWithContext(context.Background()) +} + +func (o ServiceLbPoliciesAutoCapacityDrainOutput) ToServiceLbPoliciesAutoCapacityDrainPtrOutputWithContext(ctx context.Context) ServiceLbPoliciesAutoCapacityDrainPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ServiceLbPoliciesAutoCapacityDrain) *ServiceLbPoliciesAutoCapacityDrain { + return &v + }).(ServiceLbPoliciesAutoCapacityDrainPtrOutput) +} + +// Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. +func (o ServiceLbPoliciesAutoCapacityDrainOutput) Enable() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ServiceLbPoliciesAutoCapacityDrain) *bool { return v.Enable }).(pulumi.BoolPtrOutput) +} + +type ServiceLbPoliciesAutoCapacityDrainPtrOutput struct{ *pulumi.OutputState } + +func (ServiceLbPoliciesAutoCapacityDrainPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ServiceLbPoliciesAutoCapacityDrain)(nil)).Elem() +} + +func (o ServiceLbPoliciesAutoCapacityDrainPtrOutput) ToServiceLbPoliciesAutoCapacityDrainPtrOutput() ServiceLbPoliciesAutoCapacityDrainPtrOutput { + return o +} + +func (o ServiceLbPoliciesAutoCapacityDrainPtrOutput) ToServiceLbPoliciesAutoCapacityDrainPtrOutputWithContext(ctx context.Context) ServiceLbPoliciesAutoCapacityDrainPtrOutput { + return o +} + +func (o ServiceLbPoliciesAutoCapacityDrainPtrOutput) Elem() ServiceLbPoliciesAutoCapacityDrainOutput { + return o.ApplyT(func(v *ServiceLbPoliciesAutoCapacityDrain) ServiceLbPoliciesAutoCapacityDrain { + if v != nil { + return *v + } + var ret ServiceLbPoliciesAutoCapacityDrain + return ret + }).(ServiceLbPoliciesAutoCapacityDrainOutput) +} + +// Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. +func (o ServiceLbPoliciesAutoCapacityDrainPtrOutput) Enable() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ServiceLbPoliciesAutoCapacityDrain) *bool { + if v == nil { + return nil + } + return v.Enable + }).(pulumi.BoolPtrOutput) +} + +type ServiceLbPoliciesFailoverConfig struct { + // Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + FailoverHealthThreshold int `pulumi:"failoverHealthThreshold"` +} + +// ServiceLbPoliciesFailoverConfigInput is an input type that accepts ServiceLbPoliciesFailoverConfigArgs and ServiceLbPoliciesFailoverConfigOutput values. +// You can construct a concrete instance of `ServiceLbPoliciesFailoverConfigInput` via: +// +// ServiceLbPoliciesFailoverConfigArgs{...} +type ServiceLbPoliciesFailoverConfigInput interface { + pulumi.Input + + ToServiceLbPoliciesFailoverConfigOutput() ServiceLbPoliciesFailoverConfigOutput + ToServiceLbPoliciesFailoverConfigOutputWithContext(context.Context) ServiceLbPoliciesFailoverConfigOutput +} + +type ServiceLbPoliciesFailoverConfigArgs struct { + // Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + FailoverHealthThreshold pulumi.IntInput `pulumi:"failoverHealthThreshold"` +} + +func (ServiceLbPoliciesFailoverConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ServiceLbPoliciesFailoverConfig)(nil)).Elem() +} + +func (i ServiceLbPoliciesFailoverConfigArgs) ToServiceLbPoliciesFailoverConfigOutput() ServiceLbPoliciesFailoverConfigOutput { + return i.ToServiceLbPoliciesFailoverConfigOutputWithContext(context.Background()) +} + +func (i ServiceLbPoliciesFailoverConfigArgs) ToServiceLbPoliciesFailoverConfigOutputWithContext(ctx context.Context) ServiceLbPoliciesFailoverConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceLbPoliciesFailoverConfigOutput) +} + +func (i ServiceLbPoliciesFailoverConfigArgs) ToServiceLbPoliciesFailoverConfigPtrOutput() ServiceLbPoliciesFailoverConfigPtrOutput { + return i.ToServiceLbPoliciesFailoverConfigPtrOutputWithContext(context.Background()) +} + +func (i ServiceLbPoliciesFailoverConfigArgs) ToServiceLbPoliciesFailoverConfigPtrOutputWithContext(ctx context.Context) ServiceLbPoliciesFailoverConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceLbPoliciesFailoverConfigOutput).ToServiceLbPoliciesFailoverConfigPtrOutputWithContext(ctx) +} + +// ServiceLbPoliciesFailoverConfigPtrInput is an input type that accepts ServiceLbPoliciesFailoverConfigArgs, ServiceLbPoliciesFailoverConfigPtr and ServiceLbPoliciesFailoverConfigPtrOutput values. +// You can construct a concrete instance of `ServiceLbPoliciesFailoverConfigPtrInput` via: +// +// ServiceLbPoliciesFailoverConfigArgs{...} +// +// or: +// +// nil +type ServiceLbPoliciesFailoverConfigPtrInput interface { + pulumi.Input + + ToServiceLbPoliciesFailoverConfigPtrOutput() ServiceLbPoliciesFailoverConfigPtrOutput + ToServiceLbPoliciesFailoverConfigPtrOutputWithContext(context.Context) ServiceLbPoliciesFailoverConfigPtrOutput +} + +type serviceLbPoliciesFailoverConfigPtrType ServiceLbPoliciesFailoverConfigArgs + +func ServiceLbPoliciesFailoverConfigPtr(v *ServiceLbPoliciesFailoverConfigArgs) ServiceLbPoliciesFailoverConfigPtrInput { + return (*serviceLbPoliciesFailoverConfigPtrType)(v) +} + +func (*serviceLbPoliciesFailoverConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ServiceLbPoliciesFailoverConfig)(nil)).Elem() +} + +func (i *serviceLbPoliciesFailoverConfigPtrType) ToServiceLbPoliciesFailoverConfigPtrOutput() ServiceLbPoliciesFailoverConfigPtrOutput { + return i.ToServiceLbPoliciesFailoverConfigPtrOutputWithContext(context.Background()) +} + +func (i *serviceLbPoliciesFailoverConfigPtrType) ToServiceLbPoliciesFailoverConfigPtrOutputWithContext(ctx context.Context) ServiceLbPoliciesFailoverConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceLbPoliciesFailoverConfigPtrOutput) +} + +type ServiceLbPoliciesFailoverConfigOutput struct{ *pulumi.OutputState } + +func (ServiceLbPoliciesFailoverConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ServiceLbPoliciesFailoverConfig)(nil)).Elem() +} + +func (o ServiceLbPoliciesFailoverConfigOutput) ToServiceLbPoliciesFailoverConfigOutput() ServiceLbPoliciesFailoverConfigOutput { + return o +} + +func (o ServiceLbPoliciesFailoverConfigOutput) ToServiceLbPoliciesFailoverConfigOutputWithContext(ctx context.Context) ServiceLbPoliciesFailoverConfigOutput { + return o +} + +func (o ServiceLbPoliciesFailoverConfigOutput) ToServiceLbPoliciesFailoverConfigPtrOutput() ServiceLbPoliciesFailoverConfigPtrOutput { + return o.ToServiceLbPoliciesFailoverConfigPtrOutputWithContext(context.Background()) +} + +func (o ServiceLbPoliciesFailoverConfigOutput) ToServiceLbPoliciesFailoverConfigPtrOutputWithContext(ctx context.Context) ServiceLbPoliciesFailoverConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ServiceLbPoliciesFailoverConfig) *ServiceLbPoliciesFailoverConfig { + return &v + }).(ServiceLbPoliciesFailoverConfigPtrOutput) +} + +// Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. +func (o ServiceLbPoliciesFailoverConfigOutput) FailoverHealthThreshold() pulumi.IntOutput { + return o.ApplyT(func(v ServiceLbPoliciesFailoverConfig) int { return v.FailoverHealthThreshold }).(pulumi.IntOutput) +} + +type ServiceLbPoliciesFailoverConfigPtrOutput struct{ *pulumi.OutputState } + +func (ServiceLbPoliciesFailoverConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ServiceLbPoliciesFailoverConfig)(nil)).Elem() +} + +func (o ServiceLbPoliciesFailoverConfigPtrOutput) ToServiceLbPoliciesFailoverConfigPtrOutput() ServiceLbPoliciesFailoverConfigPtrOutput { + return o +} + +func (o ServiceLbPoliciesFailoverConfigPtrOutput) ToServiceLbPoliciesFailoverConfigPtrOutputWithContext(ctx context.Context) ServiceLbPoliciesFailoverConfigPtrOutput { + return o +} + +func (o ServiceLbPoliciesFailoverConfigPtrOutput) Elem() ServiceLbPoliciesFailoverConfigOutput { + return o.ApplyT(func(v *ServiceLbPoliciesFailoverConfig) ServiceLbPoliciesFailoverConfig { + if v != nil { + return *v + } + var ret ServiceLbPoliciesFailoverConfig + return ret + }).(ServiceLbPoliciesFailoverConfigOutput) +} + +// Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. +func (o ServiceLbPoliciesFailoverConfigPtrOutput) FailoverHealthThreshold() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ServiceLbPoliciesFailoverConfig) *int { + if v == nil { + return nil + } + return &v.FailoverHealthThreshold + }).(pulumi.IntPtrOutput) +} + type TcpRouteRule struct { // A detailed rule defining how to route traffic. // Structure is documented below. @@ -12527,6 +12801,10 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*LbTrafficExtensionExtensionChainExtensionInput)(nil)).Elem(), LbTrafficExtensionExtensionChainExtensionArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*LbTrafficExtensionExtensionChainExtensionArrayInput)(nil)).Elem(), LbTrafficExtensionExtensionChainExtensionArray{}) pulumi.RegisterInputType(reflect.TypeOf((*LbTrafficExtensionExtensionChainMatchConditionInput)(nil)).Elem(), LbTrafficExtensionExtensionChainMatchConditionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceLbPoliciesAutoCapacityDrainInput)(nil)).Elem(), ServiceLbPoliciesAutoCapacityDrainArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceLbPoliciesAutoCapacityDrainPtrInput)(nil)).Elem(), ServiceLbPoliciesAutoCapacityDrainArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceLbPoliciesFailoverConfigInput)(nil)).Elem(), ServiceLbPoliciesFailoverConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceLbPoliciesFailoverConfigPtrInput)(nil)).Elem(), ServiceLbPoliciesFailoverConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*TcpRouteRuleInput)(nil)).Elem(), TcpRouteRuleArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*TcpRouteRuleArrayInput)(nil)).Elem(), TcpRouteRuleArray{}) pulumi.RegisterInputType(reflect.TypeOf((*TcpRouteRuleActionInput)(nil)).Elem(), TcpRouteRuleActionArgs{}) @@ -12675,6 +12953,10 @@ func init() { pulumi.RegisterOutputType(LbTrafficExtensionExtensionChainExtensionOutput{}) pulumi.RegisterOutputType(LbTrafficExtensionExtensionChainExtensionArrayOutput{}) pulumi.RegisterOutputType(LbTrafficExtensionExtensionChainMatchConditionOutput{}) + pulumi.RegisterOutputType(ServiceLbPoliciesAutoCapacityDrainOutput{}) + pulumi.RegisterOutputType(ServiceLbPoliciesAutoCapacityDrainPtrOutput{}) + pulumi.RegisterOutputType(ServiceLbPoliciesFailoverConfigOutput{}) + pulumi.RegisterOutputType(ServiceLbPoliciesFailoverConfigPtrOutput{}) pulumi.RegisterOutputType(TcpRouteRuleOutput{}) pulumi.RegisterOutputType(TcpRouteRuleArrayOutput{}) pulumi.RegisterOutputType(TcpRouteRuleActionOutput{}) diff --git a/sdk/go/gcp/networkservices/serviceLbPolicies.go b/sdk/go/gcp/networkservices/serviceLbPolicies.go new file mode 100644 index 0000000000..3dd566f927 --- /dev/null +++ b/sdk/go/gcp/networkservices/serviceLbPolicies.go @@ -0,0 +1,528 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package networkservices + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ### Network Services Service Lb Policies Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkservices" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := networkservices.NewServiceLbPolicies(ctx, "default", &networkservices.ServiceLbPoliciesArgs{ +// Name: pulumi.String("my-lb-policy"), +// Location: pulumi.String("global"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Network Services Service Lb Policies Advanced +// +// ```go +// package main +// +// import ( +// +// "fmt" +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkservices" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := networkservices.NewServiceLbPolicies(ctx, "default", &networkservices.ServiceLbPoliciesArgs{ +// Name: pulumi.String("my-lb-policy"), +// Location: pulumi.String("global"), +// Description: pulumi.String("my description"), +// LoadBalancingAlgorithm: pulumi.String("SPRAY_TO_REGION"), +// AutoCapacityDrain: &networkservices.ServiceLbPoliciesAutoCapacityDrainArgs{ +// Enable: pulumi.Bool(true), +// }, +// FailoverConfig: &networkservices.ServiceLbPoliciesFailoverConfigArgs{ +// FailoverHealthThreshold: pulumi.Int(70), +// }, +// Labels: pulumi.StringMap{ +// "foo": pulumi.String("bar"), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = compute.NewBackendService(ctx, "default", &compute.BackendServiceArgs{ +// Name: pulumi.String("my-lb-backend"), +// Description: pulumi.String("my description"), +// LoadBalancingScheme: pulumi.String("INTERNAL_SELF_MANAGED"), +// Protocol: pulumi.String("HTTP"), +// ServiceLbPolicy: _default.ID().ApplyT(func(id string) (string, error) { +// return fmt.Sprintf("//networkservices.googleapis.com/%v", id), nil +// }).(pulumi.StringOutput), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// ServiceLbPolicies can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}}` +// +// * `{{project}}/{{location}}/{{name}}` +// +// * `{{location}}/{{name}}` +// +// When using the `pulumi import` command, ServiceLbPolicies can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}} +// ``` +// +// ```sh +// $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{project}}/{{location}}/{{name}} +// ``` +// +// ```sh +// $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{location}}/{{name}} +// ``` +type ServiceLbPolicies struct { + pulumi.CustomResourceState + + // Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + // Structure is documented below. + AutoCapacityDrain ServiceLbPoliciesAutoCapacityDrainPtrOutput `pulumi:"autoCapacityDrain"` + // Time the ServiceLbPolicy was created in UTC. + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // A free-text description of the resource. Max length 1024 characters. + Description pulumi.StringPtrOutput `pulumi:"description"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + // Structure is documented below. + FailoverConfig ServiceLbPoliciesFailoverConfigPtrOutput `pulumi:"failoverConfig"` + // Set of label tags associated with the ServiceLbPolicy resource. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapOutput `pulumi:"labels"` + // The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + // Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + LoadBalancingAlgorithm pulumi.StringPtrOutput `pulumi:"loadBalancingAlgorithm"` + // The location of the service lb policy. + // + // *** + Location pulumi.StringOutput `pulumi:"location"` + // Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + Name pulumi.StringOutput `pulumi:"name"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringOutput `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapOutput `pulumi:"pulumiLabels"` + // Time the ServiceLbPolicy was updated in UTC. + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewServiceLbPolicies registers a new resource with the given unique name, arguments, and options. +func NewServiceLbPolicies(ctx *pulumi.Context, + name string, args *ServiceLbPoliciesArgs, opts ...pulumi.ResourceOption) (*ServiceLbPolicies, 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'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "effectiveLabels", + "pulumiLabels", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource ServiceLbPolicies + err := ctx.RegisterResource("gcp:networkservices/serviceLbPolicies:ServiceLbPolicies", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetServiceLbPolicies gets an existing ServiceLbPolicies 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 GetServiceLbPolicies(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ServiceLbPoliciesState, opts ...pulumi.ResourceOption) (*ServiceLbPolicies, error) { + var resource ServiceLbPolicies + err := ctx.ReadResource("gcp:networkservices/serviceLbPolicies:ServiceLbPolicies", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering ServiceLbPolicies resources. +type serviceLbPoliciesState struct { + // Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + // Structure is documented below. + AutoCapacityDrain *ServiceLbPoliciesAutoCapacityDrain `pulumi:"autoCapacityDrain"` + // Time the ServiceLbPolicy was created in UTC. + CreateTime *string `pulumi:"createTime"` + // A free-text description of the resource. Max length 1024 characters. + Description *string `pulumi:"description"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + // Structure is documented below. + FailoverConfig *ServiceLbPoliciesFailoverConfig `pulumi:"failoverConfig"` + // Set of label tags associated with the ServiceLbPolicy resource. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + // Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + LoadBalancingAlgorithm *string `pulumi:"loadBalancingAlgorithm"` + // The location of the service lb policy. + // + // *** + Location *string `pulumi:"location"` + // Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + Name *string `pulumi:"name"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + // Time the ServiceLbPolicy was updated in UTC. + UpdateTime *string `pulumi:"updateTime"` +} + +type ServiceLbPoliciesState struct { + // Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + // Structure is documented below. + AutoCapacityDrain ServiceLbPoliciesAutoCapacityDrainPtrInput + // Time the ServiceLbPolicy was created in UTC. + CreateTime pulumi.StringPtrInput + // A free-text description of the resource. Max length 1024 characters. + Description pulumi.StringPtrInput + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapInput + // Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + // Structure is documented below. + FailoverConfig ServiceLbPoliciesFailoverConfigPtrInput + // Set of label tags associated with the ServiceLbPolicy resource. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + // Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + LoadBalancingAlgorithm pulumi.StringPtrInput + // The location of the service lb policy. + // + // *** + Location pulumi.StringPtrInput + // Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + Name pulumi.StringPtrInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapInput + // Time the ServiceLbPolicy was updated in UTC. + UpdateTime pulumi.StringPtrInput +} + +func (ServiceLbPoliciesState) ElementType() reflect.Type { + return reflect.TypeOf((*serviceLbPoliciesState)(nil)).Elem() +} + +type serviceLbPoliciesArgs struct { + // Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + // Structure is documented below. + AutoCapacityDrain *ServiceLbPoliciesAutoCapacityDrain `pulumi:"autoCapacityDrain"` + // A free-text description of the resource. Max length 1024 characters. + Description *string `pulumi:"description"` + // Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + // Structure is documented below. + FailoverConfig *ServiceLbPoliciesFailoverConfig `pulumi:"failoverConfig"` + // Set of label tags associated with the ServiceLbPolicy resource. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + // Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + LoadBalancingAlgorithm *string `pulumi:"loadBalancingAlgorithm"` + // The location of the service lb policy. + // + // *** + Location string `pulumi:"location"` + // Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + Name *string `pulumi:"name"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` +} + +// The set of arguments for constructing a ServiceLbPolicies resource. +type ServiceLbPoliciesArgs struct { + // Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + // Structure is documented below. + AutoCapacityDrain ServiceLbPoliciesAutoCapacityDrainPtrInput + // A free-text description of the resource. Max length 1024 characters. + Description pulumi.StringPtrInput + // Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + // Structure is documented below. + FailoverConfig ServiceLbPoliciesFailoverConfigPtrInput + // Set of label tags associated with the ServiceLbPolicy resource. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + // Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + LoadBalancingAlgorithm pulumi.StringPtrInput + // The location of the service lb policy. + // + // *** + Location pulumi.StringInput + // Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + Name pulumi.StringPtrInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput +} + +func (ServiceLbPoliciesArgs) ElementType() reflect.Type { + return reflect.TypeOf((*serviceLbPoliciesArgs)(nil)).Elem() +} + +type ServiceLbPoliciesInput interface { + pulumi.Input + + ToServiceLbPoliciesOutput() ServiceLbPoliciesOutput + ToServiceLbPoliciesOutputWithContext(ctx context.Context) ServiceLbPoliciesOutput +} + +func (*ServiceLbPolicies) ElementType() reflect.Type { + return reflect.TypeOf((**ServiceLbPolicies)(nil)).Elem() +} + +func (i *ServiceLbPolicies) ToServiceLbPoliciesOutput() ServiceLbPoliciesOutput { + return i.ToServiceLbPoliciesOutputWithContext(context.Background()) +} + +func (i *ServiceLbPolicies) ToServiceLbPoliciesOutputWithContext(ctx context.Context) ServiceLbPoliciesOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceLbPoliciesOutput) +} + +// ServiceLbPoliciesArrayInput is an input type that accepts ServiceLbPoliciesArray and ServiceLbPoliciesArrayOutput values. +// You can construct a concrete instance of `ServiceLbPoliciesArrayInput` via: +// +// ServiceLbPoliciesArray{ ServiceLbPoliciesArgs{...} } +type ServiceLbPoliciesArrayInput interface { + pulumi.Input + + ToServiceLbPoliciesArrayOutput() ServiceLbPoliciesArrayOutput + ToServiceLbPoliciesArrayOutputWithContext(context.Context) ServiceLbPoliciesArrayOutput +} + +type ServiceLbPoliciesArray []ServiceLbPoliciesInput + +func (ServiceLbPoliciesArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ServiceLbPolicies)(nil)).Elem() +} + +func (i ServiceLbPoliciesArray) ToServiceLbPoliciesArrayOutput() ServiceLbPoliciesArrayOutput { + return i.ToServiceLbPoliciesArrayOutputWithContext(context.Background()) +} + +func (i ServiceLbPoliciesArray) ToServiceLbPoliciesArrayOutputWithContext(ctx context.Context) ServiceLbPoliciesArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceLbPoliciesArrayOutput) +} + +// ServiceLbPoliciesMapInput is an input type that accepts ServiceLbPoliciesMap and ServiceLbPoliciesMapOutput values. +// You can construct a concrete instance of `ServiceLbPoliciesMapInput` via: +// +// ServiceLbPoliciesMap{ "key": ServiceLbPoliciesArgs{...} } +type ServiceLbPoliciesMapInput interface { + pulumi.Input + + ToServiceLbPoliciesMapOutput() ServiceLbPoliciesMapOutput + ToServiceLbPoliciesMapOutputWithContext(context.Context) ServiceLbPoliciesMapOutput +} + +type ServiceLbPoliciesMap map[string]ServiceLbPoliciesInput + +func (ServiceLbPoliciesMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ServiceLbPolicies)(nil)).Elem() +} + +func (i ServiceLbPoliciesMap) ToServiceLbPoliciesMapOutput() ServiceLbPoliciesMapOutput { + return i.ToServiceLbPoliciesMapOutputWithContext(context.Background()) +} + +func (i ServiceLbPoliciesMap) ToServiceLbPoliciesMapOutputWithContext(ctx context.Context) ServiceLbPoliciesMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceLbPoliciesMapOutput) +} + +type ServiceLbPoliciesOutput struct{ *pulumi.OutputState } + +func (ServiceLbPoliciesOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ServiceLbPolicies)(nil)).Elem() +} + +func (o ServiceLbPoliciesOutput) ToServiceLbPoliciesOutput() ServiceLbPoliciesOutput { + return o +} + +func (o ServiceLbPoliciesOutput) ToServiceLbPoliciesOutputWithContext(ctx context.Context) ServiceLbPoliciesOutput { + return o +} + +// Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. +// Structure is documented below. +func (o ServiceLbPoliciesOutput) AutoCapacityDrain() ServiceLbPoliciesAutoCapacityDrainPtrOutput { + return o.ApplyT(func(v *ServiceLbPolicies) ServiceLbPoliciesAutoCapacityDrainPtrOutput { return v.AutoCapacityDrain }).(ServiceLbPoliciesAutoCapacityDrainPtrOutput) +} + +// Time the ServiceLbPolicy was created in UTC. +func (o ServiceLbPoliciesOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *ServiceLbPolicies) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// A free-text description of the resource. Max length 1024 characters. +func (o ServiceLbPoliciesOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ServiceLbPolicies) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. +func (o ServiceLbPoliciesOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *ServiceLbPolicies) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +// Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. +// Structure is documented below. +func (o ServiceLbPoliciesOutput) FailoverConfig() ServiceLbPoliciesFailoverConfigPtrOutput { + return o.ApplyT(func(v *ServiceLbPolicies) ServiceLbPoliciesFailoverConfigPtrOutput { return v.FailoverConfig }).(ServiceLbPoliciesFailoverConfigPtrOutput) +} + +// Set of label tags associated with the ServiceLbPolicy resource. +// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. +// Please refer to the field `effectiveLabels` for all of the labels present on the resource. +func (o ServiceLbPoliciesOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *ServiceLbPolicies) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + +// The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. +// Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. +func (o ServiceLbPoliciesOutput) LoadBalancingAlgorithm() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ServiceLbPolicies) pulumi.StringPtrOutput { return v.LoadBalancingAlgorithm }).(pulumi.StringPtrOutput) +} + +// The location of the service lb policy. +// +// *** +func (o ServiceLbPoliciesOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *ServiceLbPolicies) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. +func (o ServiceLbPoliciesOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *ServiceLbPolicies) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o ServiceLbPoliciesOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *ServiceLbPolicies) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// The combination of labels configured directly on the resource +// and default labels configured on the provider. +func (o ServiceLbPoliciesOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *ServiceLbPolicies) pulumi.StringMapOutput { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +// Time the ServiceLbPolicy was updated in UTC. +func (o ServiceLbPoliciesOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *ServiceLbPolicies) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type ServiceLbPoliciesArrayOutput struct{ *pulumi.OutputState } + +func (ServiceLbPoliciesArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ServiceLbPolicies)(nil)).Elem() +} + +func (o ServiceLbPoliciesArrayOutput) ToServiceLbPoliciesArrayOutput() ServiceLbPoliciesArrayOutput { + return o +} + +func (o ServiceLbPoliciesArrayOutput) ToServiceLbPoliciesArrayOutputWithContext(ctx context.Context) ServiceLbPoliciesArrayOutput { + return o +} + +func (o ServiceLbPoliciesArrayOutput) Index(i pulumi.IntInput) ServiceLbPoliciesOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *ServiceLbPolicies { + return vs[0].([]*ServiceLbPolicies)[vs[1].(int)] + }).(ServiceLbPoliciesOutput) +} + +type ServiceLbPoliciesMapOutput struct{ *pulumi.OutputState } + +func (ServiceLbPoliciesMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ServiceLbPolicies)(nil)).Elem() +} + +func (o ServiceLbPoliciesMapOutput) ToServiceLbPoliciesMapOutput() ServiceLbPoliciesMapOutput { + return o +} + +func (o ServiceLbPoliciesMapOutput) ToServiceLbPoliciesMapOutputWithContext(ctx context.Context) ServiceLbPoliciesMapOutput { + return o +} + +func (o ServiceLbPoliciesMapOutput) MapIndex(k pulumi.StringInput) ServiceLbPoliciesOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *ServiceLbPolicies { + return vs[0].(map[string]*ServiceLbPolicies)[vs[1].(string)] + }).(ServiceLbPoliciesOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ServiceLbPoliciesInput)(nil)).Elem(), &ServiceLbPolicies{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceLbPoliciesArrayInput)(nil)).Elem(), ServiceLbPoliciesArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceLbPoliciesMapInput)(nil)).Elem(), ServiceLbPoliciesMap{}) + pulumi.RegisterOutputType(ServiceLbPoliciesOutput{}) + pulumi.RegisterOutputType(ServiceLbPoliciesArrayOutput{}) + pulumi.RegisterOutputType(ServiceLbPoliciesMapOutput{}) +} diff --git a/sdk/go/gcp/provider.go b/sdk/go/gcp/provider.go index 29c04ddd92..0cd6d1f788 100644 --- a/sdk/go/gcp/provider.go +++ b/sdk/go/gcp/provider.go @@ -155,6 +155,7 @@ type Provider struct { SecretManagerCustomEndpoint pulumi.StringPtrOutput `pulumi:"secretManagerCustomEndpoint"` SecureSourceManagerCustomEndpoint pulumi.StringPtrOutput `pulumi:"secureSourceManagerCustomEndpoint"` SecurityCenterCustomEndpoint pulumi.StringPtrOutput `pulumi:"securityCenterCustomEndpoint"` + SecurityCenterManagementCustomEndpoint pulumi.StringPtrOutput `pulumi:"securityCenterManagementCustomEndpoint"` SecurityScannerCustomEndpoint pulumi.StringPtrOutput `pulumi:"securityScannerCustomEndpoint"` SecuritypostureCustomEndpoint pulumi.StringPtrOutput `pulumi:"securitypostureCustomEndpoint"` ServiceDirectoryCustomEndpoint pulumi.StringPtrOutput `pulumi:"serviceDirectoryCustomEndpoint"` @@ -364,6 +365,7 @@ type providerArgs struct { SecretManagerCustomEndpoint *string `pulumi:"secretManagerCustomEndpoint"` SecureSourceManagerCustomEndpoint *string `pulumi:"secureSourceManagerCustomEndpoint"` SecurityCenterCustomEndpoint *string `pulumi:"securityCenterCustomEndpoint"` + SecurityCenterManagementCustomEndpoint *string `pulumi:"securityCenterManagementCustomEndpoint"` SecurityScannerCustomEndpoint *string `pulumi:"securityScannerCustomEndpoint"` SecuritypostureCustomEndpoint *string `pulumi:"securitypostureCustomEndpoint"` ServiceDirectoryCustomEndpoint *string `pulumi:"serviceDirectoryCustomEndpoint"` @@ -537,6 +539,7 @@ type ProviderArgs struct { SecretManagerCustomEndpoint pulumi.StringPtrInput SecureSourceManagerCustomEndpoint pulumi.StringPtrInput SecurityCenterCustomEndpoint pulumi.StringPtrInput + SecurityCenterManagementCustomEndpoint pulumi.StringPtrInput SecurityScannerCustomEndpoint pulumi.StringPtrInput SecuritypostureCustomEndpoint pulumi.StringPtrInput ServiceDirectoryCustomEndpoint pulumi.StringPtrInput @@ -1150,6 +1153,10 @@ func (o ProviderOutput) SecurityCenterCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.SecurityCenterCustomEndpoint }).(pulumi.StringPtrOutput) } +func (o ProviderOutput) SecurityCenterManagementCustomEndpoint() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.SecurityCenterManagementCustomEndpoint }).(pulumi.StringPtrOutput) +} + func (o ProviderOutput) SecurityScannerCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.SecurityScannerCustomEndpoint }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/redis/cluster.go b/sdk/go/gcp/redis/cluster.go index 5b4ffb4413..a7297e8f65 100644 --- a/sdk/go/gcp/redis/cluster.go +++ b/sdk/go/gcp/redis/cluster.go @@ -85,6 +85,80 @@ import ( // RedisConfigs: pulumi.StringMap{ // "maxmemory-policy": pulumi.String("volatile-ttl"), // }, +// ZoneDistributionConfig: &redis.ClusterZoneDistributionConfigArgs{ +// Mode: pulumi.String("MULTI_ZONE"), +// }, +// }, pulumi.DependsOn([]pulumi.Resource{ +// _default, +// })) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Redis Cluster Ha Single Zone +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkconnectivity" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/redis" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// producerNet, err := compute.NewNetwork(ctx, "producer_net", &compute.NetworkArgs{ +// Name: pulumi.String("mynetwork"), +// AutoCreateSubnetworks: pulumi.Bool(false), +// }) +// if err != nil { +// return err +// } +// producerSubnet, err := compute.NewSubnetwork(ctx, "producer_subnet", &compute.SubnetworkArgs{ +// Name: pulumi.String("mysubnet"), +// IpCidrRange: pulumi.String("10.0.0.248/29"), +// Region: pulumi.String("us-central1"), +// Network: producerNet.ID(), +// }) +// if err != nil { +// return err +// } +// _, err = networkconnectivity.NewServiceConnectionPolicy(ctx, "default", &networkconnectivity.ServiceConnectionPolicyArgs{ +// Name: pulumi.String("mypolicy"), +// Location: pulumi.String("us-central1"), +// ServiceClass: pulumi.String("gcp-memorystore-redis"), +// Description: pulumi.String("my basic service connection policy"), +// Network: producerNet.ID(), +// PscConfig: &networkconnectivity.ServiceConnectionPolicyPscConfigArgs{ +// Subnetworks: pulumi.StringArray{ +// producerSubnet.ID(), +// }, +// }, +// }) +// if err != nil { +// return err +// } +// _, err = redis.NewCluster(ctx, "cluster-ha-single-zone", &redis.ClusterArgs{ +// Name: pulumi.String("ha-cluster-single-zone"), +// ShardCount: pulumi.Int(3), +// PscConfigs: redis.ClusterPscConfigArray{ +// &redis.ClusterPscConfigArgs{ +// Network: producerNet.ID(), +// }, +// }, +// Region: pulumi.String("us-central1"), +// ZoneDistributionConfig: &redis.ClusterZoneDistributionConfigArgs{ +// Mode: pulumi.String("SINGLE_ZONE"), +// Zone: pulumi.String("us-central1-f"), +// }, // }, pulumi.DependsOn([]pulumi.Resource{ // _default, // })) @@ -182,6 +256,8 @@ type Cluster struct { TransitEncryptionMode pulumi.StringPtrOutput `pulumi:"transitEncryptionMode"` // System assigned, unique identifier for the cluster. Uid pulumi.StringOutput `pulumi:"uid"` + // Immutable. Zone distribution config for Memorystore Redis cluster. + ZoneDistributionConfig ClusterZoneDistributionConfigPtrOutput `pulumi:"zoneDistributionConfig"` } // NewCluster registers a new resource with the given unique name, arguments, and options. @@ -273,6 +349,8 @@ type clusterState struct { TransitEncryptionMode *string `pulumi:"transitEncryptionMode"` // System assigned, unique identifier for the cluster. Uid *string `pulumi:"uid"` + // Immutable. Zone distribution config for Memorystore Redis cluster. + ZoneDistributionConfig *ClusterZoneDistributionConfig `pulumi:"zoneDistributionConfig"` } type ClusterState struct { @@ -329,6 +407,8 @@ type ClusterState struct { TransitEncryptionMode pulumi.StringPtrInput // System assigned, unique identifier for the cluster. Uid pulumi.StringPtrInput + // Immutable. Zone distribution config for Memorystore Redis cluster. + ZoneDistributionConfig ClusterZoneDistributionConfigPtrInput } func (ClusterState) ElementType() reflect.Type { @@ -366,6 +446,8 @@ type clusterArgs struct { // Default value: "TRANSIT_ENCRYPTION_MODE_DISABLED" Possible values: ["TRANSIT_ENCRYPTION_MODE_UNSPECIFIED", // "TRANSIT_ENCRYPTION_MODE_DISABLED", "TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION"] TransitEncryptionMode *string `pulumi:"transitEncryptionMode"` + // Immutable. Zone distribution config for Memorystore Redis cluster. + ZoneDistributionConfig *ClusterZoneDistributionConfig `pulumi:"zoneDistributionConfig"` } // The set of arguments for constructing a Cluster resource. @@ -400,6 +482,8 @@ type ClusterArgs struct { // Default value: "TRANSIT_ENCRYPTION_MODE_DISABLED" Possible values: ["TRANSIT_ENCRYPTION_MODE_UNSPECIFIED", // "TRANSIT_ENCRYPTION_MODE_DISABLED", "TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION"] TransitEncryptionMode pulumi.StringPtrInput + // Immutable. Zone distribution config for Memorystore Redis cluster. + ZoneDistributionConfig ClusterZoneDistributionConfigPtrInput } func (ClusterArgs) ElementType() reflect.Type { @@ -596,6 +680,11 @@ func (o ClusterOutput) Uid() pulumi.StringOutput { return o.ApplyT(func(v *Cluster) pulumi.StringOutput { return v.Uid }).(pulumi.StringOutput) } +// Immutable. Zone distribution config for Memorystore Redis cluster. +func (o ClusterOutput) ZoneDistributionConfig() ClusterZoneDistributionConfigPtrOutput { + return o.ApplyT(func(v *Cluster) ClusterZoneDistributionConfigPtrOutput { return v.ZoneDistributionConfig }).(ClusterZoneDistributionConfigPtrOutput) +} + type ClusterArrayOutput struct{ *pulumi.OutputState } func (ClusterArrayOutput) ElementType() reflect.Type { diff --git a/sdk/go/gcp/redis/pulumiTypes.go b/sdk/go/gcp/redis/pulumiTypes.go index 4ca541bbb7..054ac29880 100644 --- a/sdk/go/gcp/redis/pulumiTypes.go +++ b/sdk/go/gcp/redis/pulumiTypes.go @@ -769,6 +769,170 @@ func (o ClusterStateInfoUpdateInfoPtrOutput) TargetShardCount() pulumi.IntPtrOut }).(pulumi.IntPtrOutput) } +type ClusterZoneDistributionConfig struct { + // Immutable. The mode for zone distribution for Memorystore Redis cluster. + // If not provided, MULTI_ZONE will be used as default + // Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`. + Mode *string `pulumi:"mode"` + // Immutable. The zone for single zone Memorystore Redis cluster. + Zone *string `pulumi:"zone"` +} + +// ClusterZoneDistributionConfigInput is an input type that accepts ClusterZoneDistributionConfigArgs and ClusterZoneDistributionConfigOutput values. +// You can construct a concrete instance of `ClusterZoneDistributionConfigInput` via: +// +// ClusterZoneDistributionConfigArgs{...} +type ClusterZoneDistributionConfigInput interface { + pulumi.Input + + ToClusterZoneDistributionConfigOutput() ClusterZoneDistributionConfigOutput + ToClusterZoneDistributionConfigOutputWithContext(context.Context) ClusterZoneDistributionConfigOutput +} + +type ClusterZoneDistributionConfigArgs struct { + // Immutable. The mode for zone distribution for Memorystore Redis cluster. + // If not provided, MULTI_ZONE will be used as default + // Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`. + Mode pulumi.StringPtrInput `pulumi:"mode"` + // Immutable. The zone for single zone Memorystore Redis cluster. + Zone pulumi.StringPtrInput `pulumi:"zone"` +} + +func (ClusterZoneDistributionConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterZoneDistributionConfig)(nil)).Elem() +} + +func (i ClusterZoneDistributionConfigArgs) ToClusterZoneDistributionConfigOutput() ClusterZoneDistributionConfigOutput { + return i.ToClusterZoneDistributionConfigOutputWithContext(context.Background()) +} + +func (i ClusterZoneDistributionConfigArgs) ToClusterZoneDistributionConfigOutputWithContext(ctx context.Context) ClusterZoneDistributionConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterZoneDistributionConfigOutput) +} + +func (i ClusterZoneDistributionConfigArgs) ToClusterZoneDistributionConfigPtrOutput() ClusterZoneDistributionConfigPtrOutput { + return i.ToClusterZoneDistributionConfigPtrOutputWithContext(context.Background()) +} + +func (i ClusterZoneDistributionConfigArgs) ToClusterZoneDistributionConfigPtrOutputWithContext(ctx context.Context) ClusterZoneDistributionConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterZoneDistributionConfigOutput).ToClusterZoneDistributionConfigPtrOutputWithContext(ctx) +} + +// ClusterZoneDistributionConfigPtrInput is an input type that accepts ClusterZoneDistributionConfigArgs, ClusterZoneDistributionConfigPtr and ClusterZoneDistributionConfigPtrOutput values. +// You can construct a concrete instance of `ClusterZoneDistributionConfigPtrInput` via: +// +// ClusterZoneDistributionConfigArgs{...} +// +// or: +// +// nil +type ClusterZoneDistributionConfigPtrInput interface { + pulumi.Input + + ToClusterZoneDistributionConfigPtrOutput() ClusterZoneDistributionConfigPtrOutput + ToClusterZoneDistributionConfigPtrOutputWithContext(context.Context) ClusterZoneDistributionConfigPtrOutput +} + +type clusterZoneDistributionConfigPtrType ClusterZoneDistributionConfigArgs + +func ClusterZoneDistributionConfigPtr(v *ClusterZoneDistributionConfigArgs) ClusterZoneDistributionConfigPtrInput { + return (*clusterZoneDistributionConfigPtrType)(v) +} + +func (*clusterZoneDistributionConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterZoneDistributionConfig)(nil)).Elem() +} + +func (i *clusterZoneDistributionConfigPtrType) ToClusterZoneDistributionConfigPtrOutput() ClusterZoneDistributionConfigPtrOutput { + return i.ToClusterZoneDistributionConfigPtrOutputWithContext(context.Background()) +} + +func (i *clusterZoneDistributionConfigPtrType) ToClusterZoneDistributionConfigPtrOutputWithContext(ctx context.Context) ClusterZoneDistributionConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterZoneDistributionConfigPtrOutput) +} + +type ClusterZoneDistributionConfigOutput struct{ *pulumi.OutputState } + +func (ClusterZoneDistributionConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterZoneDistributionConfig)(nil)).Elem() +} + +func (o ClusterZoneDistributionConfigOutput) ToClusterZoneDistributionConfigOutput() ClusterZoneDistributionConfigOutput { + return o +} + +func (o ClusterZoneDistributionConfigOutput) ToClusterZoneDistributionConfigOutputWithContext(ctx context.Context) ClusterZoneDistributionConfigOutput { + return o +} + +func (o ClusterZoneDistributionConfigOutput) ToClusterZoneDistributionConfigPtrOutput() ClusterZoneDistributionConfigPtrOutput { + return o.ToClusterZoneDistributionConfigPtrOutputWithContext(context.Background()) +} + +func (o ClusterZoneDistributionConfigOutput) ToClusterZoneDistributionConfigPtrOutputWithContext(ctx context.Context) ClusterZoneDistributionConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClusterZoneDistributionConfig) *ClusterZoneDistributionConfig { + return &v + }).(ClusterZoneDistributionConfigPtrOutput) +} + +// Immutable. The mode for zone distribution for Memorystore Redis cluster. +// If not provided, MULTI_ZONE will be used as default +// Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`. +func (o ClusterZoneDistributionConfigOutput) Mode() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterZoneDistributionConfig) *string { return v.Mode }).(pulumi.StringPtrOutput) +} + +// Immutable. The zone for single zone Memorystore Redis cluster. +func (o ClusterZoneDistributionConfigOutput) Zone() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterZoneDistributionConfig) *string { return v.Zone }).(pulumi.StringPtrOutput) +} + +type ClusterZoneDistributionConfigPtrOutput struct{ *pulumi.OutputState } + +func (ClusterZoneDistributionConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterZoneDistributionConfig)(nil)).Elem() +} + +func (o ClusterZoneDistributionConfigPtrOutput) ToClusterZoneDistributionConfigPtrOutput() ClusterZoneDistributionConfigPtrOutput { + return o +} + +func (o ClusterZoneDistributionConfigPtrOutput) ToClusterZoneDistributionConfigPtrOutputWithContext(ctx context.Context) ClusterZoneDistributionConfigPtrOutput { + return o +} + +func (o ClusterZoneDistributionConfigPtrOutput) Elem() ClusterZoneDistributionConfigOutput { + return o.ApplyT(func(v *ClusterZoneDistributionConfig) ClusterZoneDistributionConfig { + if v != nil { + return *v + } + var ret ClusterZoneDistributionConfig + return ret + }).(ClusterZoneDistributionConfigOutput) +} + +// Immutable. The mode for zone distribution for Memorystore Redis cluster. +// If not provided, MULTI_ZONE will be used as default +// Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`. +func (o ClusterZoneDistributionConfigPtrOutput) Mode() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterZoneDistributionConfig) *string { + if v == nil { + return nil + } + return v.Mode + }).(pulumi.StringPtrOutput) +} + +// Immutable. The zone for single zone Memorystore Redis cluster. +func (o ClusterZoneDistributionConfigPtrOutput) Zone() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterZoneDistributionConfig) *string { + if v == nil { + return nil + } + return v.Zone + }).(pulumi.StringPtrOutput) +} + type InstanceMaintenancePolicy struct { // (Output) // Output only. The time when the policy was created. @@ -2913,6 +3077,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ClusterStateInfoArrayInput)(nil)).Elem(), ClusterStateInfoArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterStateInfoUpdateInfoInput)(nil)).Elem(), ClusterStateInfoUpdateInfoArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterStateInfoUpdateInfoPtrInput)(nil)).Elem(), ClusterStateInfoUpdateInfoArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterZoneDistributionConfigInput)(nil)).Elem(), ClusterZoneDistributionConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterZoneDistributionConfigPtrInput)(nil)).Elem(), ClusterZoneDistributionConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*InstanceMaintenancePolicyInput)(nil)).Elem(), InstanceMaintenancePolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*InstanceMaintenancePolicyPtrInput)(nil)).Elem(), InstanceMaintenancePolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*InstanceMaintenancePolicyWeeklyMaintenanceWindowInput)(nil)).Elem(), InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs{}) @@ -2952,6 +3118,8 @@ func init() { pulumi.RegisterOutputType(ClusterStateInfoArrayOutput{}) pulumi.RegisterOutputType(ClusterStateInfoUpdateInfoOutput{}) pulumi.RegisterOutputType(ClusterStateInfoUpdateInfoPtrOutput{}) + pulumi.RegisterOutputType(ClusterZoneDistributionConfigOutput{}) + pulumi.RegisterOutputType(ClusterZoneDistributionConfigPtrOutput{}) pulumi.RegisterOutputType(InstanceMaintenancePolicyOutput{}) pulumi.RegisterOutputType(InstanceMaintenancePolicyPtrOutput{}) pulumi.RegisterOutputType(InstanceMaintenancePolicyWeeklyMaintenanceWindowOutput{}) diff --git a/sdk/go/gcp/secretmanager/pulumiTypes.go b/sdk/go/gcp/secretmanager/pulumiTypes.go index 53f7785d1c..ae9c1551d6 100644 --- a/sdk/go/gcp/secretmanager/pulumiTypes.go +++ b/sdk/go/gcp/secretmanager/pulumiTypes.go @@ -15,8 +15,10 @@ var _ = internal.GetEnvOrDefault type SecretIamBindingCondition struct { 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"` } // SecretIamBindingConditionInput is an input type that accepts SecretIamBindingConditionArgs and SecretIamBindingConditionOutput values. @@ -32,8 +34,10 @@ type SecretIamBindingConditionInput interface { type SecretIamBindingConditionArgs struct { 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 (SecretIamBindingConditionArgs) ElementType() reflect.Type { @@ -117,10 +121,12 @@ func (o SecretIamBindingConditionOutput) Description() pulumi.StringPtrOutput { return o.ApplyT(func(v SecretIamBindingCondition) *string { return v.Description }).(pulumi.StringPtrOutput) } +// Textual representation of an expression in Common Expression Language syntax. func (o SecretIamBindingConditionOutput) Expression() pulumi.StringOutput { return o.ApplyT(func(v SecretIamBindingCondition) string { return v.Expression }).(pulumi.StringOutput) } +// A title for the expression, i.e. a short string describing its purpose. func (o SecretIamBindingConditionOutput) Title() pulumi.StringOutput { return o.ApplyT(func(v SecretIamBindingCondition) string { return v.Title }).(pulumi.StringOutput) } @@ -158,6 +164,7 @@ func (o SecretIamBindingConditionPtrOutput) Description() pulumi.StringPtrOutput }).(pulumi.StringPtrOutput) } +// Textual representation of an expression in Common Expression Language syntax. func (o SecretIamBindingConditionPtrOutput) Expression() pulumi.StringPtrOutput { return o.ApplyT(func(v *SecretIamBindingCondition) *string { if v == nil { @@ -167,6 +174,7 @@ func (o SecretIamBindingConditionPtrOutput) Expression() pulumi.StringPtrOutput }).(pulumi.StringPtrOutput) } +// A title for the expression, i.e. a short string describing its purpose. func (o SecretIamBindingConditionPtrOutput) Title() pulumi.StringPtrOutput { return o.ApplyT(func(v *SecretIamBindingCondition) *string { if v == nil { @@ -178,8 +186,10 @@ func (o SecretIamBindingConditionPtrOutput) Title() pulumi.StringPtrOutput { type SecretIamMemberCondition struct { 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"` } // SecretIamMemberConditionInput is an input type that accepts SecretIamMemberConditionArgs and SecretIamMemberConditionOutput values. @@ -195,8 +205,10 @@ type SecretIamMemberConditionInput interface { type SecretIamMemberConditionArgs struct { 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 (SecretIamMemberConditionArgs) ElementType() reflect.Type { @@ -280,10 +292,12 @@ func (o SecretIamMemberConditionOutput) Description() pulumi.StringPtrOutput { return o.ApplyT(func(v SecretIamMemberCondition) *string { return v.Description }).(pulumi.StringPtrOutput) } +// Textual representation of an expression in Common Expression Language syntax. func (o SecretIamMemberConditionOutput) Expression() pulumi.StringOutput { return o.ApplyT(func(v SecretIamMemberCondition) string { return v.Expression }).(pulumi.StringOutput) } +// A title for the expression, i.e. a short string describing its purpose. func (o SecretIamMemberConditionOutput) Title() pulumi.StringOutput { return o.ApplyT(func(v SecretIamMemberCondition) string { return v.Title }).(pulumi.StringOutput) } @@ -321,6 +335,7 @@ func (o SecretIamMemberConditionPtrOutput) Description() pulumi.StringPtrOutput }).(pulumi.StringPtrOutput) } +// Textual representation of an expression in Common Expression Language syntax. func (o SecretIamMemberConditionPtrOutput) Expression() pulumi.StringPtrOutput { return o.ApplyT(func(v *SecretIamMemberCondition) *string { if v == nil { @@ -330,6 +345,7 @@ func (o SecretIamMemberConditionPtrOutput) Expression() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } +// A title for the expression, i.e. a short string describing its purpose. func (o SecretIamMemberConditionPtrOutput) Title() pulumi.StringPtrOutput { return o.ApplyT(func(v *SecretIamMemberCondition) *string { if v == nil { diff --git a/sdk/go/gcp/secretmanager/secretIamBinding.go b/sdk/go/gcp/secretmanager/secretIamBinding.go index dfa80579e5..b6ed8b82c7 100644 --- a/sdk/go/gcp/secretmanager/secretIamBinding.go +++ b/sdk/go/gcp/secretmanager/secretIamBinding.go @@ -26,6 +26,8 @@ import ( // // > **Note:** `secretmanager.SecretIamBinding` resources **can be** used in conjunction with `secretmanager.SecretIamMember` 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. +// // ## secretmanager.SecretIamPolicy // // ```go @@ -68,6 +70,52 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "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/secretmanager.secretAccessor", +// 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 = secretmanager.NewSecretIamPolicy(ctx, "policy", &secretmanager.SecretIamPolicyArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// PolicyData: pulumi.String(admin.PolicyData), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // ## secretmanager.SecretIamBinding // // ```go @@ -99,6 +147,41 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecretIamBinding(ctx, "binding", &secretmanager.SecretIamBindingArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// Role: pulumi.String("roles/secretmanager.secretAccessor"), +// Members: pulumi.StringArray{ +// pulumi.String("user:jane@example.com"), +// }, +// Condition: &secretmanager.SecretIamBindingConditionArgs{ +// 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 +// }) +// } +// +// ``` // ## secretmanager.SecretIamMember // // ```go @@ -128,6 +211,40 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecretIamMember(ctx, "member", &secretmanager.SecretIamMemberArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// Role: pulumi.String("roles/secretmanager.secretAccessor"), +// Member: pulumi.String("user:jane@example.com"), +// Condition: &secretmanager.SecretIamMemberConditionArgs{ +// 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 +// }) +// } +// +// ``` +// // ## secretmanager.SecretIamPolicy // // ```go @@ -170,6 +287,52 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "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/secretmanager.secretAccessor", +// 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 = secretmanager.NewSecretIamPolicy(ctx, "policy", &secretmanager.SecretIamPolicyArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// PolicyData: pulumi.String(admin.PolicyData), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // ## secretmanager.SecretIamBinding // // ```go @@ -201,6 +364,41 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecretIamBinding(ctx, "binding", &secretmanager.SecretIamBindingArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// Role: pulumi.String("roles/secretmanager.secretAccessor"), +// Members: pulumi.StringArray{ +// pulumi.String("user:jane@example.com"), +// }, +// Condition: &secretmanager.SecretIamBindingConditionArgs{ +// 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 +// }) +// } +// +// ``` // ## secretmanager.SecretIamMember // // ```go @@ -230,6 +428,40 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecretIamMember(ctx, "member", &secretmanager.SecretIamMemberArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// Role: pulumi.String("roles/secretmanager.secretAccessor"), +// Member: pulumi.String("user:jane@example.com"), +// Condition: &secretmanager.SecretIamMemberConditionArgs{ +// 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 // // For all import syntaxes, the "resource in question" can take any of the following forms: @@ -268,6 +500,8 @@ import ( type SecretIamBinding struct { pulumi.CustomResourceState + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition SecretIamBindingConditionPtrOutput `pulumi:"condition"` // (Computed) The etag of the IAM policy. Etag pulumi.StringOutput `pulumi:"etag"` @@ -332,6 +566,8 @@ func GetSecretIamBinding(ctx *pulumi.Context, // Input properties used for looking up and filtering SecretIamBinding resources. type secretIamBindingState struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition *SecretIamBindingCondition `pulumi:"condition"` // (Computed) The etag of the IAM policy. Etag *string `pulumi:"etag"` @@ -358,6 +594,8 @@ type secretIamBindingState struct { } type SecretIamBindingState struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition SecretIamBindingConditionPtrInput // (Computed) The etag of the IAM policy. Etag pulumi.StringPtrInput @@ -388,6 +626,8 @@ func (SecretIamBindingState) ElementType() reflect.Type { } type secretIamBindingArgs struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition *SecretIamBindingCondition `pulumi:"condition"` // Identities that will be granted the privilege in `role`. // Each entry can have one of the following values: @@ -413,6 +653,8 @@ type secretIamBindingArgs struct { // The set of arguments for constructing a SecretIamBinding resource. type SecretIamBindingArgs struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition SecretIamBindingConditionPtrInput // Identities that will be granted the privilege in `role`. // Each entry can have one of the following values: @@ -523,6 +765,8 @@ func (o SecretIamBindingOutput) ToSecretIamBindingOutputWithContext(ctx context. return o } +// An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. +// Structure is documented below. func (o SecretIamBindingOutput) Condition() SecretIamBindingConditionPtrOutput { return o.ApplyT(func(v *SecretIamBinding) SecretIamBindingConditionPtrOutput { return v.Condition }).(SecretIamBindingConditionPtrOutput) } diff --git a/sdk/go/gcp/secretmanager/secretIamMember.go b/sdk/go/gcp/secretmanager/secretIamMember.go index 83e93bb26a..46f1ee6a98 100644 --- a/sdk/go/gcp/secretmanager/secretIamMember.go +++ b/sdk/go/gcp/secretmanager/secretIamMember.go @@ -26,6 +26,8 @@ import ( // // > **Note:** `secretmanager.SecretIamBinding` resources **can be** used in conjunction with `secretmanager.SecretIamMember` 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. +// // ## secretmanager.SecretIamPolicy // // ```go @@ -68,6 +70,52 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "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/secretmanager.secretAccessor", +// 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 = secretmanager.NewSecretIamPolicy(ctx, "policy", &secretmanager.SecretIamPolicyArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// PolicyData: pulumi.String(admin.PolicyData), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // ## secretmanager.SecretIamBinding // // ```go @@ -99,6 +147,41 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecretIamBinding(ctx, "binding", &secretmanager.SecretIamBindingArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// Role: pulumi.String("roles/secretmanager.secretAccessor"), +// Members: pulumi.StringArray{ +// pulumi.String("user:jane@example.com"), +// }, +// Condition: &secretmanager.SecretIamBindingConditionArgs{ +// 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 +// }) +// } +// +// ``` // ## secretmanager.SecretIamMember // // ```go @@ -128,6 +211,40 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecretIamMember(ctx, "member", &secretmanager.SecretIamMemberArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// Role: pulumi.String("roles/secretmanager.secretAccessor"), +// Member: pulumi.String("user:jane@example.com"), +// Condition: &secretmanager.SecretIamMemberConditionArgs{ +// 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 +// }) +// } +// +// ``` +// // ## secretmanager.SecretIamPolicy // // ```go @@ -170,6 +287,52 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "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/secretmanager.secretAccessor", +// 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 = secretmanager.NewSecretIamPolicy(ctx, "policy", &secretmanager.SecretIamPolicyArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// PolicyData: pulumi.String(admin.PolicyData), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // ## secretmanager.SecretIamBinding // // ```go @@ -201,6 +364,41 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecretIamBinding(ctx, "binding", &secretmanager.SecretIamBindingArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// Role: pulumi.String("roles/secretmanager.secretAccessor"), +// Members: pulumi.StringArray{ +// pulumi.String("user:jane@example.com"), +// }, +// Condition: &secretmanager.SecretIamBindingConditionArgs{ +// 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 +// }) +// } +// +// ``` // ## secretmanager.SecretIamMember // // ```go @@ -230,6 +428,40 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecretIamMember(ctx, "member", &secretmanager.SecretIamMemberArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// Role: pulumi.String("roles/secretmanager.secretAccessor"), +// Member: pulumi.String("user:jane@example.com"), +// Condition: &secretmanager.SecretIamMemberConditionArgs{ +// 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 // // For all import syntaxes, the "resource in question" can take any of the following forms: @@ -268,6 +500,8 @@ import ( type SecretIamMember struct { pulumi.CustomResourceState + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition SecretIamMemberConditionPtrOutput `pulumi:"condition"` // (Computed) The etag of the IAM policy. Etag pulumi.StringOutput `pulumi:"etag"` @@ -332,6 +566,8 @@ func GetSecretIamMember(ctx *pulumi.Context, // Input properties used for looking up and filtering SecretIamMember resources. type secretIamMemberState struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition *SecretIamMemberCondition `pulumi:"condition"` // (Computed) The etag of the IAM policy. Etag *string `pulumi:"etag"` @@ -358,6 +594,8 @@ type secretIamMemberState struct { } type SecretIamMemberState struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition SecretIamMemberConditionPtrInput // (Computed) The etag of the IAM policy. Etag pulumi.StringPtrInput @@ -388,6 +626,8 @@ func (SecretIamMemberState) ElementType() reflect.Type { } type secretIamMemberArgs struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition *SecretIamMemberCondition `pulumi:"condition"` // Identities that will be granted the privilege in `role`. // Each entry can have one of the following values: @@ -413,6 +653,8 @@ type secretIamMemberArgs struct { // The set of arguments for constructing a SecretIamMember resource. type SecretIamMemberArgs struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition SecretIamMemberConditionPtrInput // Identities that will be granted the privilege in `role`. // Each entry can have one of the following values: @@ -523,6 +765,8 @@ func (o SecretIamMemberOutput) ToSecretIamMemberOutputWithContext(ctx context.Co return o } +// An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. +// Structure is documented below. func (o SecretIamMemberOutput) Condition() SecretIamMemberConditionPtrOutput { return o.ApplyT(func(v *SecretIamMember) SecretIamMemberConditionPtrOutput { return v.Condition }).(SecretIamMemberConditionPtrOutput) } diff --git a/sdk/go/gcp/secretmanager/secretIamPolicy.go b/sdk/go/gcp/secretmanager/secretIamPolicy.go index b60d66e5ba..0fe973d35a 100644 --- a/sdk/go/gcp/secretmanager/secretIamPolicy.go +++ b/sdk/go/gcp/secretmanager/secretIamPolicy.go @@ -26,6 +26,8 @@ import ( // // > **Note:** `secretmanager.SecretIamBinding` resources **can be** used in conjunction with `secretmanager.SecretIamMember` 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. +// // ## secretmanager.SecretIamPolicy // // ```go @@ -68,6 +70,52 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "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/secretmanager.secretAccessor", +// 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 = secretmanager.NewSecretIamPolicy(ctx, "policy", &secretmanager.SecretIamPolicyArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// PolicyData: pulumi.String(admin.PolicyData), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // ## secretmanager.SecretIamBinding // // ```go @@ -99,6 +147,41 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecretIamBinding(ctx, "binding", &secretmanager.SecretIamBindingArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// Role: pulumi.String("roles/secretmanager.secretAccessor"), +// Members: pulumi.StringArray{ +// pulumi.String("user:jane@example.com"), +// }, +// Condition: &secretmanager.SecretIamBindingConditionArgs{ +// 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 +// }) +// } +// +// ``` // ## secretmanager.SecretIamMember // // ```go @@ -128,6 +211,40 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecretIamMember(ctx, "member", &secretmanager.SecretIamMemberArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// Role: pulumi.String("roles/secretmanager.secretAccessor"), +// Member: pulumi.String("user:jane@example.com"), +// Condition: &secretmanager.SecretIamMemberConditionArgs{ +// 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 +// }) +// } +// +// ``` +// // ## secretmanager.SecretIamPolicy // // ```go @@ -170,6 +287,52 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "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/secretmanager.secretAccessor", +// 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 = secretmanager.NewSecretIamPolicy(ctx, "policy", &secretmanager.SecretIamPolicyArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// PolicyData: pulumi.String(admin.PolicyData), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // ## secretmanager.SecretIamBinding // // ```go @@ -201,6 +364,41 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecretIamBinding(ctx, "binding", &secretmanager.SecretIamBindingArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// Role: pulumi.String("roles/secretmanager.secretAccessor"), +// Members: pulumi.StringArray{ +// pulumi.String("user:jane@example.com"), +// }, +// Condition: &secretmanager.SecretIamBindingConditionArgs{ +// 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 +// }) +// } +// +// ``` // ## secretmanager.SecretIamMember // // ```go @@ -230,6 +428,40 @@ import ( // // ``` // +// With IAM Conditions: +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecretIamMember(ctx, "member", &secretmanager.SecretIamMemberArgs{ +// Project: pulumi.Any(secret_basic.Project), +// SecretId: pulumi.Any(secret_basic.SecretId), +// Role: pulumi.String("roles/secretmanager.secretAccessor"), +// Member: pulumi.String("user:jane@example.com"), +// Condition: &secretmanager.SecretIamMemberConditionArgs{ +// 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 // // For all import syntaxes, the "resource in question" can take any of the following forms: diff --git a/sdk/go/gcp/securitycenter/init.go b/sdk/go/gcp/securitycenter/init.go index 0c41ef6a57..61b3b9b235 100644 --- a/sdk/go/gcp/securitycenter/init.go +++ b/sdk/go/gcp/securitycenter/init.go @@ -31,6 +31,8 @@ func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi r = &InstanceIamMember{} case "gcp:securitycenter/instanceIamPolicy:InstanceIamPolicy": r = &InstanceIamPolicy{} + case "gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule": + r = &ManagementOrganizationEventThreatDetectionCustomModule{} case "gcp:securitycenter/muteConfig:MuteConfig": r = &MuteConfig{} case "gcp:securitycenter/notificationConfig:NotificationConfig": @@ -85,6 +87,11 @@ func init() { "securitycenter/instanceIamPolicy", &module{version}, ) + pulumi.RegisterResourceModule( + "gcp", + "securitycenter/managementOrganizationEventThreatDetectionCustomModule", + &module{version}, + ) pulumi.RegisterResourceModule( "gcp", "securitycenter/muteConfig", diff --git a/sdk/go/gcp/securitycenter/managementOrganizationEventThreatDetectionCustomModule.go b/sdk/go/gcp/securitycenter/managementOrganizationEventThreatDetectionCustomModule.go new file mode 100644 index 0000000000..8176862e05 --- /dev/null +++ b/sdk/go/gcp/securitycenter/managementOrganizationEventThreatDetectionCustomModule.go @@ -0,0 +1,405 @@ +// 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 securitycenter + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Represents an instance of an Event Threat Detection custom module, including +// its full module name, display name, enablement state, and last updated time. +// You can create a custom module at the organization level only. +// +// To get more information about OrganizationEventThreatDetectionCustomModule, see: +// +// * [API documentation](https://cloud.google.com/security-command-center/docs/reference/security-center-management/rest/v1/organizations.locations.eventThreatDetectionCustomModules) +// * How-to Guides +// - [Overview of custom modules for Event Threat Detection](https://cloud.google.com/security-command-center/docs/custom-modules-etd-overview) +// +// ## Example Usage +// +// ## Import +// +// OrganizationEventThreatDetectionCustomModule can be imported using any of these accepted formats: +// +// * `organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}}` +// +// * `{{organization}}/{{location}}/{{name}}` +// +// When using the `pulumi import` command, OrganizationEventThreatDetectionCustomModule can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}} +// ``` +// +// ```sh +// $ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default {{organization}}/{{location}}/{{name}} +// ``` +type ManagementOrganizationEventThreatDetectionCustomModule struct { + pulumi.CustomResourceState + + // Config for the module. For the resident module, its config value is defined at this level. + // For the inherited module, its config value is inherited from the ancestor module. + Config pulumi.StringPtrOutput `pulumi:"config"` + // The human readable name to be displayed for the module. + DisplayName pulumi.StringPtrOutput `pulumi:"displayName"` + // The state of enablement for the module at the given level of the hierarchy. + // Possible values are: `ENABLED`, `DISABLED`. + EnablementState pulumi.StringPtrOutput `pulumi:"enablementState"` + // The editor that last updated the custom module + LastEditor pulumi.StringOutput `pulumi:"lastEditor"` + // Location ID of the parent organization. Only global is supported at the moment. + Location pulumi.StringPtrOutput `pulumi:"location"` + // The resource name of the Event Threat Detection custom module. + // Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + Name pulumi.StringOutput `pulumi:"name"` + // Numerical ID of the parent organization. + // + // *** + Organization pulumi.StringOutput `pulumi:"organization"` + // Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + Type pulumi.StringPtrOutput `pulumi:"type"` + // The time at which the custom module was last updated. + // A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + // up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewManagementOrganizationEventThreatDetectionCustomModule registers a new resource with the given unique name, arguments, and options. +func NewManagementOrganizationEventThreatDetectionCustomModule(ctx *pulumi.Context, + name string, args *ManagementOrganizationEventThreatDetectionCustomModuleArgs, opts ...pulumi.ResourceOption) (*ManagementOrganizationEventThreatDetectionCustomModule, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Organization == nil { + return nil, errors.New("invalid value for required argument 'Organization'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource ManagementOrganizationEventThreatDetectionCustomModule + err := ctx.RegisterResource("gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetManagementOrganizationEventThreatDetectionCustomModule gets an existing ManagementOrganizationEventThreatDetectionCustomModule 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 GetManagementOrganizationEventThreatDetectionCustomModule(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ManagementOrganizationEventThreatDetectionCustomModuleState, opts ...pulumi.ResourceOption) (*ManagementOrganizationEventThreatDetectionCustomModule, error) { + var resource ManagementOrganizationEventThreatDetectionCustomModule + err := ctx.ReadResource("gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering ManagementOrganizationEventThreatDetectionCustomModule resources. +type managementOrganizationEventThreatDetectionCustomModuleState struct { + // Config for the module. For the resident module, its config value is defined at this level. + // For the inherited module, its config value is inherited from the ancestor module. + Config *string `pulumi:"config"` + // The human readable name to be displayed for the module. + DisplayName *string `pulumi:"displayName"` + // The state of enablement for the module at the given level of the hierarchy. + // Possible values are: `ENABLED`, `DISABLED`. + EnablementState *string `pulumi:"enablementState"` + // The editor that last updated the custom module + LastEditor *string `pulumi:"lastEditor"` + // Location ID of the parent organization. Only global is supported at the moment. + Location *string `pulumi:"location"` + // The resource name of the Event Threat Detection custom module. + // Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + Name *string `pulumi:"name"` + // Numerical ID of the parent organization. + // + // *** + Organization *string `pulumi:"organization"` + // Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + Type *string `pulumi:"type"` + // The time at which the custom module was last updated. + // A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + // up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + UpdateTime *string `pulumi:"updateTime"` +} + +type ManagementOrganizationEventThreatDetectionCustomModuleState struct { + // Config for the module. For the resident module, its config value is defined at this level. + // For the inherited module, its config value is inherited from the ancestor module. + Config pulumi.StringPtrInput + // The human readable name to be displayed for the module. + DisplayName pulumi.StringPtrInput + // The state of enablement for the module at the given level of the hierarchy. + // Possible values are: `ENABLED`, `DISABLED`. + EnablementState pulumi.StringPtrInput + // The editor that last updated the custom module + LastEditor pulumi.StringPtrInput + // Location ID of the parent organization. Only global is supported at the moment. + Location pulumi.StringPtrInput + // The resource name of the Event Threat Detection custom module. + // Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + Name pulumi.StringPtrInput + // Numerical ID of the parent organization. + // + // *** + Organization pulumi.StringPtrInput + // Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + Type pulumi.StringPtrInput + // The time at which the custom module was last updated. + // A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + // up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + UpdateTime pulumi.StringPtrInput +} + +func (ManagementOrganizationEventThreatDetectionCustomModuleState) ElementType() reflect.Type { + return reflect.TypeOf((*managementOrganizationEventThreatDetectionCustomModuleState)(nil)).Elem() +} + +type managementOrganizationEventThreatDetectionCustomModuleArgs struct { + // Config for the module. For the resident module, its config value is defined at this level. + // For the inherited module, its config value is inherited from the ancestor module. + Config *string `pulumi:"config"` + // The human readable name to be displayed for the module. + DisplayName *string `pulumi:"displayName"` + // The state of enablement for the module at the given level of the hierarchy. + // Possible values are: `ENABLED`, `DISABLED`. + EnablementState *string `pulumi:"enablementState"` + // Location ID of the parent organization. Only global is supported at the moment. + Location *string `pulumi:"location"` + // Numerical ID of the parent organization. + // + // *** + Organization string `pulumi:"organization"` + // Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + Type *string `pulumi:"type"` +} + +// The set of arguments for constructing a ManagementOrganizationEventThreatDetectionCustomModule resource. +type ManagementOrganizationEventThreatDetectionCustomModuleArgs struct { + // Config for the module. For the resident module, its config value is defined at this level. + // For the inherited module, its config value is inherited from the ancestor module. + Config pulumi.StringPtrInput + // The human readable name to be displayed for the module. + DisplayName pulumi.StringPtrInput + // The state of enablement for the module at the given level of the hierarchy. + // Possible values are: `ENABLED`, `DISABLED`. + EnablementState pulumi.StringPtrInput + // Location ID of the parent organization. Only global is supported at the moment. + Location pulumi.StringPtrInput + // Numerical ID of the parent organization. + // + // *** + Organization pulumi.StringInput + // Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + Type pulumi.StringPtrInput +} + +func (ManagementOrganizationEventThreatDetectionCustomModuleArgs) ElementType() reflect.Type { + return reflect.TypeOf((*managementOrganizationEventThreatDetectionCustomModuleArgs)(nil)).Elem() +} + +type ManagementOrganizationEventThreatDetectionCustomModuleInput interface { + pulumi.Input + + ToManagementOrganizationEventThreatDetectionCustomModuleOutput() ManagementOrganizationEventThreatDetectionCustomModuleOutput + ToManagementOrganizationEventThreatDetectionCustomModuleOutputWithContext(ctx context.Context) ManagementOrganizationEventThreatDetectionCustomModuleOutput +} + +func (*ManagementOrganizationEventThreatDetectionCustomModule) ElementType() reflect.Type { + return reflect.TypeOf((**ManagementOrganizationEventThreatDetectionCustomModule)(nil)).Elem() +} + +func (i *ManagementOrganizationEventThreatDetectionCustomModule) ToManagementOrganizationEventThreatDetectionCustomModuleOutput() ManagementOrganizationEventThreatDetectionCustomModuleOutput { + return i.ToManagementOrganizationEventThreatDetectionCustomModuleOutputWithContext(context.Background()) +} + +func (i *ManagementOrganizationEventThreatDetectionCustomModule) ToManagementOrganizationEventThreatDetectionCustomModuleOutputWithContext(ctx context.Context) ManagementOrganizationEventThreatDetectionCustomModuleOutput { + return pulumi.ToOutputWithContext(ctx, i).(ManagementOrganizationEventThreatDetectionCustomModuleOutput) +} + +// ManagementOrganizationEventThreatDetectionCustomModuleArrayInput is an input type that accepts ManagementOrganizationEventThreatDetectionCustomModuleArray and ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput values. +// You can construct a concrete instance of `ManagementOrganizationEventThreatDetectionCustomModuleArrayInput` via: +// +// ManagementOrganizationEventThreatDetectionCustomModuleArray{ ManagementOrganizationEventThreatDetectionCustomModuleArgs{...} } +type ManagementOrganizationEventThreatDetectionCustomModuleArrayInput interface { + pulumi.Input + + ToManagementOrganizationEventThreatDetectionCustomModuleArrayOutput() ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput + ToManagementOrganizationEventThreatDetectionCustomModuleArrayOutputWithContext(context.Context) ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput +} + +type ManagementOrganizationEventThreatDetectionCustomModuleArray []ManagementOrganizationEventThreatDetectionCustomModuleInput + +func (ManagementOrganizationEventThreatDetectionCustomModuleArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ManagementOrganizationEventThreatDetectionCustomModule)(nil)).Elem() +} + +func (i ManagementOrganizationEventThreatDetectionCustomModuleArray) ToManagementOrganizationEventThreatDetectionCustomModuleArrayOutput() ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput { + return i.ToManagementOrganizationEventThreatDetectionCustomModuleArrayOutputWithContext(context.Background()) +} + +func (i ManagementOrganizationEventThreatDetectionCustomModuleArray) ToManagementOrganizationEventThreatDetectionCustomModuleArrayOutputWithContext(ctx context.Context) ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput) +} + +// ManagementOrganizationEventThreatDetectionCustomModuleMapInput is an input type that accepts ManagementOrganizationEventThreatDetectionCustomModuleMap and ManagementOrganizationEventThreatDetectionCustomModuleMapOutput values. +// You can construct a concrete instance of `ManagementOrganizationEventThreatDetectionCustomModuleMapInput` via: +// +// ManagementOrganizationEventThreatDetectionCustomModuleMap{ "key": ManagementOrganizationEventThreatDetectionCustomModuleArgs{...} } +type ManagementOrganizationEventThreatDetectionCustomModuleMapInput interface { + pulumi.Input + + ToManagementOrganizationEventThreatDetectionCustomModuleMapOutput() ManagementOrganizationEventThreatDetectionCustomModuleMapOutput + ToManagementOrganizationEventThreatDetectionCustomModuleMapOutputWithContext(context.Context) ManagementOrganizationEventThreatDetectionCustomModuleMapOutput +} + +type ManagementOrganizationEventThreatDetectionCustomModuleMap map[string]ManagementOrganizationEventThreatDetectionCustomModuleInput + +func (ManagementOrganizationEventThreatDetectionCustomModuleMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ManagementOrganizationEventThreatDetectionCustomModule)(nil)).Elem() +} + +func (i ManagementOrganizationEventThreatDetectionCustomModuleMap) ToManagementOrganizationEventThreatDetectionCustomModuleMapOutput() ManagementOrganizationEventThreatDetectionCustomModuleMapOutput { + return i.ToManagementOrganizationEventThreatDetectionCustomModuleMapOutputWithContext(context.Background()) +} + +func (i ManagementOrganizationEventThreatDetectionCustomModuleMap) ToManagementOrganizationEventThreatDetectionCustomModuleMapOutputWithContext(ctx context.Context) ManagementOrganizationEventThreatDetectionCustomModuleMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ManagementOrganizationEventThreatDetectionCustomModuleMapOutput) +} + +type ManagementOrganizationEventThreatDetectionCustomModuleOutput struct{ *pulumi.OutputState } + +func (ManagementOrganizationEventThreatDetectionCustomModuleOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ManagementOrganizationEventThreatDetectionCustomModule)(nil)).Elem() +} + +func (o ManagementOrganizationEventThreatDetectionCustomModuleOutput) ToManagementOrganizationEventThreatDetectionCustomModuleOutput() ManagementOrganizationEventThreatDetectionCustomModuleOutput { + return o +} + +func (o ManagementOrganizationEventThreatDetectionCustomModuleOutput) ToManagementOrganizationEventThreatDetectionCustomModuleOutputWithContext(ctx context.Context) ManagementOrganizationEventThreatDetectionCustomModuleOutput { + return o +} + +// Config for the module. For the resident module, its config value is defined at this level. +// For the inherited module, its config value is inherited from the ancestor module. +func (o ManagementOrganizationEventThreatDetectionCustomModuleOutput) Config() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ManagementOrganizationEventThreatDetectionCustomModule) pulumi.StringPtrOutput { + return v.Config + }).(pulumi.StringPtrOutput) +} + +// The human readable name to be displayed for the module. +func (o ManagementOrganizationEventThreatDetectionCustomModuleOutput) DisplayName() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ManagementOrganizationEventThreatDetectionCustomModule) pulumi.StringPtrOutput { + return v.DisplayName + }).(pulumi.StringPtrOutput) +} + +// The state of enablement for the module at the given level of the hierarchy. +// Possible values are: `ENABLED`, `DISABLED`. +func (o ManagementOrganizationEventThreatDetectionCustomModuleOutput) EnablementState() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ManagementOrganizationEventThreatDetectionCustomModule) pulumi.StringPtrOutput { + return v.EnablementState + }).(pulumi.StringPtrOutput) +} + +// The editor that last updated the custom module +func (o ManagementOrganizationEventThreatDetectionCustomModuleOutput) LastEditor() pulumi.StringOutput { + return o.ApplyT(func(v *ManagementOrganizationEventThreatDetectionCustomModule) pulumi.StringOutput { + return v.LastEditor + }).(pulumi.StringOutput) +} + +// Location ID of the parent organization. Only global is supported at the moment. +func (o ManagementOrganizationEventThreatDetectionCustomModuleOutput) Location() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ManagementOrganizationEventThreatDetectionCustomModule) pulumi.StringPtrOutput { + return v.Location + }).(pulumi.StringPtrOutput) +} + +// The resource name of the Event Threat Detection custom module. +// Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". +func (o ManagementOrganizationEventThreatDetectionCustomModuleOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *ManagementOrganizationEventThreatDetectionCustomModule) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Numerical ID of the parent organization. +// +// *** +func (o ManagementOrganizationEventThreatDetectionCustomModuleOutput) Organization() pulumi.StringOutput { + return o.ApplyT(func(v *ManagementOrganizationEventThreatDetectionCustomModule) pulumi.StringOutput { + return v.Organization + }).(pulumi.StringOutput) +} + +// Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. +func (o ManagementOrganizationEventThreatDetectionCustomModuleOutput) Type() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ManagementOrganizationEventThreatDetectionCustomModule) pulumi.StringPtrOutput { return v.Type }).(pulumi.StringPtrOutput) +} + +// The time at which the custom module was last updated. +// A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and +// up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". +func (o ManagementOrganizationEventThreatDetectionCustomModuleOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *ManagementOrganizationEventThreatDetectionCustomModule) pulumi.StringOutput { + return v.UpdateTime + }).(pulumi.StringOutput) +} + +type ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput struct{ *pulumi.OutputState } + +func (ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ManagementOrganizationEventThreatDetectionCustomModule)(nil)).Elem() +} + +func (o ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput) ToManagementOrganizationEventThreatDetectionCustomModuleArrayOutput() ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput { + return o +} + +func (o ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput) ToManagementOrganizationEventThreatDetectionCustomModuleArrayOutputWithContext(ctx context.Context) ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput { + return o +} + +func (o ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput) Index(i pulumi.IntInput) ManagementOrganizationEventThreatDetectionCustomModuleOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *ManagementOrganizationEventThreatDetectionCustomModule { + return vs[0].([]*ManagementOrganizationEventThreatDetectionCustomModule)[vs[1].(int)] + }).(ManagementOrganizationEventThreatDetectionCustomModuleOutput) +} + +type ManagementOrganizationEventThreatDetectionCustomModuleMapOutput struct{ *pulumi.OutputState } + +func (ManagementOrganizationEventThreatDetectionCustomModuleMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ManagementOrganizationEventThreatDetectionCustomModule)(nil)).Elem() +} + +func (o ManagementOrganizationEventThreatDetectionCustomModuleMapOutput) ToManagementOrganizationEventThreatDetectionCustomModuleMapOutput() ManagementOrganizationEventThreatDetectionCustomModuleMapOutput { + return o +} + +func (o ManagementOrganizationEventThreatDetectionCustomModuleMapOutput) ToManagementOrganizationEventThreatDetectionCustomModuleMapOutputWithContext(ctx context.Context) ManagementOrganizationEventThreatDetectionCustomModuleMapOutput { + return o +} + +func (o ManagementOrganizationEventThreatDetectionCustomModuleMapOutput) MapIndex(k pulumi.StringInput) ManagementOrganizationEventThreatDetectionCustomModuleOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *ManagementOrganizationEventThreatDetectionCustomModule { + return vs[0].(map[string]*ManagementOrganizationEventThreatDetectionCustomModule)[vs[1].(string)] + }).(ManagementOrganizationEventThreatDetectionCustomModuleOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ManagementOrganizationEventThreatDetectionCustomModuleInput)(nil)).Elem(), &ManagementOrganizationEventThreatDetectionCustomModule{}) + pulumi.RegisterInputType(reflect.TypeOf((*ManagementOrganizationEventThreatDetectionCustomModuleArrayInput)(nil)).Elem(), ManagementOrganizationEventThreatDetectionCustomModuleArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ManagementOrganizationEventThreatDetectionCustomModuleMapInput)(nil)).Elem(), ManagementOrganizationEventThreatDetectionCustomModuleMap{}) + pulumi.RegisterOutputType(ManagementOrganizationEventThreatDetectionCustomModuleOutput{}) + pulumi.RegisterOutputType(ManagementOrganizationEventThreatDetectionCustomModuleArrayOutput{}) + pulumi.RegisterOutputType(ManagementOrganizationEventThreatDetectionCustomModuleMapOutput{}) +} diff --git a/sdk/go/gcp/spanner/init.go b/sdk/go/gcp/spanner/init.go index b5fdf5bdd8..0152e63913 100644 --- a/sdk/go/gcp/spanner/init.go +++ b/sdk/go/gcp/spanner/init.go @@ -31,6 +31,8 @@ func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi r = &DatabaseIAMPolicy{} case "gcp:spanner/instance:Instance": r = &Instance{} + case "gcp:spanner/instanceConfig:InstanceConfig": + r = &InstanceConfig{} case "gcp:spanner/instanceIAMBinding:InstanceIAMBinding": r = &InstanceIAMBinding{} case "gcp:spanner/instanceIAMMember:InstanceIAMMember": @@ -75,6 +77,11 @@ func init() { "spanner/instance", &module{version}, ) + pulumi.RegisterResourceModule( + "gcp", + "spanner/instanceConfig", + &module{version}, + ) pulumi.RegisterResourceModule( "gcp", "spanner/instanceIAMBinding", diff --git a/sdk/go/gcp/spanner/instanceConfig.go b/sdk/go/gcp/spanner/instanceConfig.go new file mode 100644 index 0000000000..7053009fd2 --- /dev/null +++ b/sdk/go/gcp/spanner/instanceConfig.go @@ -0,0 +1,402 @@ +// 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 spanner + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// A possible configuration for a Cloud Spanner instance. Configurations +// define the geographic placement of nodes and their replication. +// +// To get more information about InstanceConfig, see: +// +// * [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instanceConfigs) +// * How-to Guides +// - [Official Documentation](https://cloud.google.com/spanner/) +// +// ## Example Usage +// +// ## Import +// +// InstanceConfig can be imported using any of these accepted formats: +// +// * `projects/{{project}}/instanceConfigs/{{name}}` +// +// * `{{project}}/{{name}}` +// +// * `{{name}}` +// +// When using the `pulumi import` command, InstanceConfig can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default projects/{{project}}/instanceConfigs/{{name}} +// ``` +// +// ```sh +// $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{project}}/{{name}} +// ``` +// +// ```sh +// $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{name}} +// ``` +type InstanceConfig struct { + pulumi.CustomResourceState + + // Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + // configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + // configuration. + BaseConfig pulumi.StringOutput `pulumi:"baseConfig"` + // Output only. Whether this instance config is a Google or User Managed Configuration. + ConfigType pulumi.StringOutput `pulumi:"configType"` + // The name of this instance configuration as it appears in UIs. + DisplayName pulumi.StringOutput `pulumi:"displayName"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + // to the field 'effective_labels' for all of the labels present on the resource. + Labels pulumi.StringMapOutput `pulumi:"labels"` + // A unique identifier for the instance configuration. Values are of the + // form projects//instanceConfigs/[a-z][-a-z0-9]* + Name pulumi.StringOutput `pulumi:"name"` + Project pulumi.StringOutput `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapOutput `pulumi:"pulumiLabels"` + // The geographic placement of nodes in this instance configuration and their replication properties. + // Structure is documented below. + Replicas InstanceConfigReplicaArrayOutput `pulumi:"replicas"` +} + +// NewInstanceConfig registers a new resource with the given unique name, arguments, and options. +func NewInstanceConfig(ctx *pulumi.Context, + name string, args *InstanceConfigArgs, opts ...pulumi.ResourceOption) (*InstanceConfig, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.DisplayName == nil { + return nil, errors.New("invalid value for required argument 'DisplayName'") + } + if args.Replicas == nil { + return nil, errors.New("invalid value for required argument 'Replicas'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "effectiveLabels", + "pulumiLabels", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource InstanceConfig + err := ctx.RegisterResource("gcp:spanner/instanceConfig:InstanceConfig", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetInstanceConfig gets an existing InstanceConfig 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 GetInstanceConfig(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *InstanceConfigState, opts ...pulumi.ResourceOption) (*InstanceConfig, error) { + var resource InstanceConfig + err := ctx.ReadResource("gcp:spanner/instanceConfig:InstanceConfig", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering InstanceConfig resources. +type instanceConfigState struct { + // Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + // configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + // configuration. + BaseConfig *string `pulumi:"baseConfig"` + // Output only. Whether this instance config is a Google or User Managed Configuration. + ConfigType *string `pulumi:"configType"` + // The name of this instance configuration as it appears in UIs. + DisplayName *string `pulumi:"displayName"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + // to the field 'effective_labels' for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // A unique identifier for the instance configuration. Values are of the + // form projects//instanceConfigs/[a-z][-a-z0-9]* + Name *string `pulumi:"name"` + Project *string `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + // The geographic placement of nodes in this instance configuration and their replication properties. + // Structure is documented below. + Replicas []InstanceConfigReplica `pulumi:"replicas"` +} + +type InstanceConfigState struct { + // Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + // configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + // configuration. + BaseConfig pulumi.StringPtrInput + // Output only. Whether this instance config is a Google or User Managed Configuration. + ConfigType pulumi.StringPtrInput + // The name of this instance configuration as it appears in UIs. + DisplayName pulumi.StringPtrInput + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapInput + // An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + // to the field 'effective_labels' for all of the labels present on the resource. + Labels pulumi.StringMapInput + // A unique identifier for the instance configuration. Values are of the + // form projects//instanceConfigs/[a-z][-a-z0-9]* + Name pulumi.StringPtrInput + Project pulumi.StringPtrInput + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapInput + // The geographic placement of nodes in this instance configuration and their replication properties. + // Structure is documented below. + Replicas InstanceConfigReplicaArrayInput +} + +func (InstanceConfigState) ElementType() reflect.Type { + return reflect.TypeOf((*instanceConfigState)(nil)).Elem() +} + +type instanceConfigArgs struct { + // Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + // configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + // configuration. + BaseConfig *string `pulumi:"baseConfig"` + // The name of this instance configuration as it appears in UIs. + DisplayName string `pulumi:"displayName"` + // An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + // to the field 'effective_labels' for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // A unique identifier for the instance configuration. Values are of the + // form projects//instanceConfigs/[a-z][-a-z0-9]* + Name *string `pulumi:"name"` + Project *string `pulumi:"project"` + // The geographic placement of nodes in this instance configuration and their replication properties. + // Structure is documented below. + Replicas []InstanceConfigReplica `pulumi:"replicas"` +} + +// The set of arguments for constructing a InstanceConfig resource. +type InstanceConfigArgs struct { + // Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + // configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + // configuration. + BaseConfig pulumi.StringPtrInput + // The name of this instance configuration as it appears in UIs. + DisplayName pulumi.StringInput + // An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + // to the field 'effective_labels' for all of the labels present on the resource. + Labels pulumi.StringMapInput + // A unique identifier for the instance configuration. Values are of the + // form projects//instanceConfigs/[a-z][-a-z0-9]* + Name pulumi.StringPtrInput + Project pulumi.StringPtrInput + // The geographic placement of nodes in this instance configuration and their replication properties. + // Structure is documented below. + Replicas InstanceConfigReplicaArrayInput +} + +func (InstanceConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*instanceConfigArgs)(nil)).Elem() +} + +type InstanceConfigInput interface { + pulumi.Input + + ToInstanceConfigOutput() InstanceConfigOutput + ToInstanceConfigOutputWithContext(ctx context.Context) InstanceConfigOutput +} + +func (*InstanceConfig) ElementType() reflect.Type { + return reflect.TypeOf((**InstanceConfig)(nil)).Elem() +} + +func (i *InstanceConfig) ToInstanceConfigOutput() InstanceConfigOutput { + return i.ToInstanceConfigOutputWithContext(context.Background()) +} + +func (i *InstanceConfig) ToInstanceConfigOutputWithContext(ctx context.Context) InstanceConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(InstanceConfigOutput) +} + +// InstanceConfigArrayInput is an input type that accepts InstanceConfigArray and InstanceConfigArrayOutput values. +// You can construct a concrete instance of `InstanceConfigArrayInput` via: +// +// InstanceConfigArray{ InstanceConfigArgs{...} } +type InstanceConfigArrayInput interface { + pulumi.Input + + ToInstanceConfigArrayOutput() InstanceConfigArrayOutput + ToInstanceConfigArrayOutputWithContext(context.Context) InstanceConfigArrayOutput +} + +type InstanceConfigArray []InstanceConfigInput + +func (InstanceConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*InstanceConfig)(nil)).Elem() +} + +func (i InstanceConfigArray) ToInstanceConfigArrayOutput() InstanceConfigArrayOutput { + return i.ToInstanceConfigArrayOutputWithContext(context.Background()) +} + +func (i InstanceConfigArray) ToInstanceConfigArrayOutputWithContext(ctx context.Context) InstanceConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(InstanceConfigArrayOutput) +} + +// InstanceConfigMapInput is an input type that accepts InstanceConfigMap and InstanceConfigMapOutput values. +// You can construct a concrete instance of `InstanceConfigMapInput` via: +// +// InstanceConfigMap{ "key": InstanceConfigArgs{...} } +type InstanceConfigMapInput interface { + pulumi.Input + + ToInstanceConfigMapOutput() InstanceConfigMapOutput + ToInstanceConfigMapOutputWithContext(context.Context) InstanceConfigMapOutput +} + +type InstanceConfigMap map[string]InstanceConfigInput + +func (InstanceConfigMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*InstanceConfig)(nil)).Elem() +} + +func (i InstanceConfigMap) ToInstanceConfigMapOutput() InstanceConfigMapOutput { + return i.ToInstanceConfigMapOutputWithContext(context.Background()) +} + +func (i InstanceConfigMap) ToInstanceConfigMapOutputWithContext(ctx context.Context) InstanceConfigMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(InstanceConfigMapOutput) +} + +type InstanceConfigOutput struct{ *pulumi.OutputState } + +func (InstanceConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((**InstanceConfig)(nil)).Elem() +} + +func (o InstanceConfigOutput) ToInstanceConfigOutput() InstanceConfigOutput { + return o +} + +func (o InstanceConfigOutput) ToInstanceConfigOutputWithContext(ctx context.Context) InstanceConfigOutput { + return o +} + +// Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed +// configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this +// configuration. +func (o InstanceConfigOutput) BaseConfig() pulumi.StringOutput { + return o.ApplyT(func(v *InstanceConfig) pulumi.StringOutput { return v.BaseConfig }).(pulumi.StringOutput) +} + +// Output only. Whether this instance config is a Google or User Managed Configuration. +func (o InstanceConfigOutput) ConfigType() pulumi.StringOutput { + return o.ApplyT(func(v *InstanceConfig) pulumi.StringOutput { return v.ConfigType }).(pulumi.StringOutput) +} + +// The name of this instance configuration as it appears in UIs. +func (o InstanceConfigOutput) DisplayName() pulumi.StringOutput { + return o.ApplyT(func(v *InstanceConfig) pulumi.StringOutput { return v.DisplayName }).(pulumi.StringOutput) +} + +// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. +func (o InstanceConfigOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *InstanceConfig) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +// An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. +// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer +// to the field 'effective_labels' for all of the labels present on the resource. +func (o InstanceConfigOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *InstanceConfig) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + +// A unique identifier for the instance configuration. Values are of the +// form projects//instanceConfigs/[a-z][-a-z0-9]* +func (o InstanceConfigOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *InstanceConfig) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +func (o InstanceConfigOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *InstanceConfig) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// The combination of labels configured directly on the resource +// and default labels configured on the provider. +func (o InstanceConfigOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *InstanceConfig) pulumi.StringMapOutput { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +// The geographic placement of nodes in this instance configuration and their replication properties. +// Structure is documented below. +func (o InstanceConfigOutput) Replicas() InstanceConfigReplicaArrayOutput { + return o.ApplyT(func(v *InstanceConfig) InstanceConfigReplicaArrayOutput { return v.Replicas }).(InstanceConfigReplicaArrayOutput) +} + +type InstanceConfigArrayOutput struct{ *pulumi.OutputState } + +func (InstanceConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*InstanceConfig)(nil)).Elem() +} + +func (o InstanceConfigArrayOutput) ToInstanceConfigArrayOutput() InstanceConfigArrayOutput { + return o +} + +func (o InstanceConfigArrayOutput) ToInstanceConfigArrayOutputWithContext(ctx context.Context) InstanceConfigArrayOutput { + return o +} + +func (o InstanceConfigArrayOutput) Index(i pulumi.IntInput) InstanceConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *InstanceConfig { + return vs[0].([]*InstanceConfig)[vs[1].(int)] + }).(InstanceConfigOutput) +} + +type InstanceConfigMapOutput struct{ *pulumi.OutputState } + +func (InstanceConfigMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*InstanceConfig)(nil)).Elem() +} + +func (o InstanceConfigMapOutput) ToInstanceConfigMapOutput() InstanceConfigMapOutput { + return o +} + +func (o InstanceConfigMapOutput) ToInstanceConfigMapOutputWithContext(ctx context.Context) InstanceConfigMapOutput { + return o +} + +func (o InstanceConfigMapOutput) MapIndex(k pulumi.StringInput) InstanceConfigOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *InstanceConfig { + return vs[0].(map[string]*InstanceConfig)[vs[1].(string)] + }).(InstanceConfigOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*InstanceConfigInput)(nil)).Elem(), &InstanceConfig{}) + pulumi.RegisterInputType(reflect.TypeOf((*InstanceConfigArrayInput)(nil)).Elem(), InstanceConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*InstanceConfigMapInput)(nil)).Elem(), InstanceConfigMap{}) + pulumi.RegisterOutputType(InstanceConfigOutput{}) + pulumi.RegisterOutputType(InstanceConfigArrayOutput{}) + pulumi.RegisterOutputType(InstanceConfigMapOutput{}) +} diff --git a/sdk/go/gcp/spanner/pulumiTypes.go b/sdk/go/gcp/spanner/pulumiTypes.go index 030ffa002b..21e235a90d 100644 --- a/sdk/go/gcp/spanner/pulumiTypes.go +++ b/sdk/go/gcp/spanner/pulumiTypes.go @@ -1074,6 +1074,139 @@ func (o InstanceAutoscalingConfigAutoscalingTargetsPtrOutput) StorageUtilization }).(pulumi.IntPtrOutput) } +type InstanceConfigReplica struct { + // If true, this location is designated as the default leader location where + // leader replicas are placed. + // + // *** + DefaultLeaderLocation *bool `pulumi:"defaultLeaderLocation"` + // The location of the serving resources, e.g. "us-central1". + Location *string `pulumi:"location"` + // Indicates the type of replica. See the [replica types + // documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + // for more details. + // Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + Type *string `pulumi:"type"` +} + +// InstanceConfigReplicaInput is an input type that accepts InstanceConfigReplicaArgs and InstanceConfigReplicaOutput values. +// You can construct a concrete instance of `InstanceConfigReplicaInput` via: +// +// InstanceConfigReplicaArgs{...} +type InstanceConfigReplicaInput interface { + pulumi.Input + + ToInstanceConfigReplicaOutput() InstanceConfigReplicaOutput + ToInstanceConfigReplicaOutputWithContext(context.Context) InstanceConfigReplicaOutput +} + +type InstanceConfigReplicaArgs struct { + // If true, this location is designated as the default leader location where + // leader replicas are placed. + // + // *** + DefaultLeaderLocation pulumi.BoolPtrInput `pulumi:"defaultLeaderLocation"` + // The location of the serving resources, e.g. "us-central1". + Location pulumi.StringPtrInput `pulumi:"location"` + // Indicates the type of replica. See the [replica types + // documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + // for more details. + // Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + Type pulumi.StringPtrInput `pulumi:"type"` +} + +func (InstanceConfigReplicaArgs) ElementType() reflect.Type { + return reflect.TypeOf((*InstanceConfigReplica)(nil)).Elem() +} + +func (i InstanceConfigReplicaArgs) ToInstanceConfigReplicaOutput() InstanceConfigReplicaOutput { + return i.ToInstanceConfigReplicaOutputWithContext(context.Background()) +} + +func (i InstanceConfigReplicaArgs) ToInstanceConfigReplicaOutputWithContext(ctx context.Context) InstanceConfigReplicaOutput { + return pulumi.ToOutputWithContext(ctx, i).(InstanceConfigReplicaOutput) +} + +// InstanceConfigReplicaArrayInput is an input type that accepts InstanceConfigReplicaArray and InstanceConfigReplicaArrayOutput values. +// You can construct a concrete instance of `InstanceConfigReplicaArrayInput` via: +// +// InstanceConfigReplicaArray{ InstanceConfigReplicaArgs{...} } +type InstanceConfigReplicaArrayInput interface { + pulumi.Input + + ToInstanceConfigReplicaArrayOutput() InstanceConfigReplicaArrayOutput + ToInstanceConfigReplicaArrayOutputWithContext(context.Context) InstanceConfigReplicaArrayOutput +} + +type InstanceConfigReplicaArray []InstanceConfigReplicaInput + +func (InstanceConfigReplicaArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]InstanceConfigReplica)(nil)).Elem() +} + +func (i InstanceConfigReplicaArray) ToInstanceConfigReplicaArrayOutput() InstanceConfigReplicaArrayOutput { + return i.ToInstanceConfigReplicaArrayOutputWithContext(context.Background()) +} + +func (i InstanceConfigReplicaArray) ToInstanceConfigReplicaArrayOutputWithContext(ctx context.Context) InstanceConfigReplicaArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(InstanceConfigReplicaArrayOutput) +} + +type InstanceConfigReplicaOutput struct{ *pulumi.OutputState } + +func (InstanceConfigReplicaOutput) ElementType() reflect.Type { + return reflect.TypeOf((*InstanceConfigReplica)(nil)).Elem() +} + +func (o InstanceConfigReplicaOutput) ToInstanceConfigReplicaOutput() InstanceConfigReplicaOutput { + return o +} + +func (o InstanceConfigReplicaOutput) ToInstanceConfigReplicaOutputWithContext(ctx context.Context) InstanceConfigReplicaOutput { + return o +} + +// If true, this location is designated as the default leader location where +// leader replicas are placed. +// +// *** +func (o InstanceConfigReplicaOutput) DefaultLeaderLocation() pulumi.BoolPtrOutput { + return o.ApplyT(func(v InstanceConfigReplica) *bool { return v.DefaultLeaderLocation }).(pulumi.BoolPtrOutput) +} + +// The location of the serving resources, e.g. "us-central1". +func (o InstanceConfigReplicaOutput) Location() pulumi.StringPtrOutput { + return o.ApplyT(func(v InstanceConfigReplica) *string { return v.Location }).(pulumi.StringPtrOutput) +} + +// Indicates the type of replica. See the [replica types +// documentation](https://cloud.google.com/spanner/docs/replication#replica_types) +// for more details. +// Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. +func (o InstanceConfigReplicaOutput) Type() pulumi.StringPtrOutput { + return o.ApplyT(func(v InstanceConfigReplica) *string { return v.Type }).(pulumi.StringPtrOutput) +} + +type InstanceConfigReplicaArrayOutput struct{ *pulumi.OutputState } + +func (InstanceConfigReplicaArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]InstanceConfigReplica)(nil)).Elem() +} + +func (o InstanceConfigReplicaArrayOutput) ToInstanceConfigReplicaArrayOutput() InstanceConfigReplicaArrayOutput { + return o +} + +func (o InstanceConfigReplicaArrayOutput) ToInstanceConfigReplicaArrayOutputWithContext(ctx context.Context) InstanceConfigReplicaArrayOutput { + return o +} + +func (o InstanceConfigReplicaArrayOutput) Index(i pulumi.IntInput) InstanceConfigReplicaOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) InstanceConfigReplica { + return vs[0].([]InstanceConfigReplica)[vs[1].(int)] + }).(InstanceConfigReplicaOutput) +} + type InstanceIAMBindingCondition struct { Description *string `pulumi:"description"` Expression string `pulumi:"expression"` @@ -1798,6 +1931,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*InstanceAutoscalingConfigAutoscalingLimitsPtrInput)(nil)).Elem(), InstanceAutoscalingConfigAutoscalingLimitsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*InstanceAutoscalingConfigAutoscalingTargetsInput)(nil)).Elem(), InstanceAutoscalingConfigAutoscalingTargetsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*InstanceAutoscalingConfigAutoscalingTargetsPtrInput)(nil)).Elem(), InstanceAutoscalingConfigAutoscalingTargetsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*InstanceConfigReplicaInput)(nil)).Elem(), InstanceConfigReplicaArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*InstanceConfigReplicaArrayInput)(nil)).Elem(), InstanceConfigReplicaArray{}) pulumi.RegisterInputType(reflect.TypeOf((*InstanceIAMBindingConditionInput)(nil)).Elem(), InstanceIAMBindingConditionArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*InstanceIAMBindingConditionPtrInput)(nil)).Elem(), InstanceIAMBindingConditionArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*InstanceIAMMemberConditionInput)(nil)).Elem(), InstanceIAMMemberConditionArgs{}) @@ -1820,6 +1955,8 @@ func init() { pulumi.RegisterOutputType(InstanceAutoscalingConfigAutoscalingLimitsPtrOutput{}) pulumi.RegisterOutputType(InstanceAutoscalingConfigAutoscalingTargetsOutput{}) pulumi.RegisterOutputType(InstanceAutoscalingConfigAutoscalingTargetsPtrOutput{}) + pulumi.RegisterOutputType(InstanceConfigReplicaOutput{}) + pulumi.RegisterOutputType(InstanceConfigReplicaArrayOutput{}) pulumi.RegisterOutputType(InstanceIAMBindingConditionOutput{}) pulumi.RegisterOutputType(InstanceIAMBindingConditionPtrOutput{}) pulumi.RegisterOutputType(InstanceIAMMemberConditionOutput{}) diff --git a/sdk/go/gcp/sql/pulumiTypes.go b/sdk/go/gcp/sql/pulumiTypes.go index c40ec5c68d..6d9de440bf 100644 --- a/sdk/go/gcp/sql/pulumiTypes.go +++ b/sdk/go/gcp/sql/pulumiTypes.go @@ -3053,7 +3053,9 @@ type DatabaseInstanceSettingsIpConfiguration struct { PrivateNetwork *string `pulumi:"privateNetwork"` // PSC settings for a Cloud SQL instance. PscConfigs []DatabaseInstanceSettingsIpConfigurationPscConfig `pulumi:"pscConfigs"` - // Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `sslMode`. + // Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `sslMode`. It will be fully deprecated in a future major release. For now, please use `sslMode` with a compatible `requireSsl` value instead. + // + // Deprecated: `requireSsl` will be fully deprecated in a future major release. For now, please use `sslMode` with a compatible `requireSsl` value instead. RequireSsl *bool `pulumi:"requireSsl"` // Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to `requireSsl`. To change this field, also set the correspoding value in `requireSsl`. // * For PostgreSQL instances, the value pairs are listed in the [API reference doc](https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1beta4/instances#ipconfiguration) for `sslMode` field. @@ -3091,7 +3093,9 @@ type DatabaseInstanceSettingsIpConfigurationArgs struct { PrivateNetwork pulumi.StringPtrInput `pulumi:"privateNetwork"` // PSC settings for a Cloud SQL instance. PscConfigs DatabaseInstanceSettingsIpConfigurationPscConfigArrayInput `pulumi:"pscConfigs"` - // Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `sslMode`. + // Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `sslMode`. It will be fully deprecated in a future major release. For now, please use `sslMode` with a compatible `requireSsl` value instead. + // + // Deprecated: `requireSsl` will be fully deprecated in a future major release. For now, please use `sslMode` with a compatible `requireSsl` value instead. RequireSsl pulumi.BoolPtrInput `pulumi:"requireSsl"` // Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to `requireSsl`. To change this field, also set the correspoding value in `requireSsl`. // * For PostgreSQL instances, the value pairs are listed in the [API reference doc](https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1beta4/instances#ipconfiguration) for `sslMode` field. @@ -3218,7 +3222,9 @@ func (o DatabaseInstanceSettingsIpConfigurationOutput) PscConfigs() DatabaseInst }).(DatabaseInstanceSettingsIpConfigurationPscConfigArrayOutput) } -// Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `sslMode`. +// Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `sslMode`. It will be fully deprecated in a future major release. For now, please use `sslMode` with a compatible `requireSsl` value instead. +// +// Deprecated: `requireSsl` will be fully deprecated in a future major release. For now, please use `sslMode` with a compatible `requireSsl` value instead. func (o DatabaseInstanceSettingsIpConfigurationOutput) RequireSsl() pulumi.BoolPtrOutput { return o.ApplyT(func(v DatabaseInstanceSettingsIpConfiguration) *bool { return v.RequireSsl }).(pulumi.BoolPtrOutput) } @@ -3320,7 +3326,9 @@ func (o DatabaseInstanceSettingsIpConfigurationPtrOutput) PscConfigs() DatabaseI }).(DatabaseInstanceSettingsIpConfigurationPscConfigArrayOutput) } -// Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `sslMode`. +// Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `sslMode`. It will be fully deprecated in a future major release. For now, please use `sslMode` with a compatible `requireSsl` value instead. +// +// Deprecated: `requireSsl` will be fully deprecated in a future major release. For now, please use `sslMode` with a compatible `requireSsl` value instead. func (o DatabaseInstanceSettingsIpConfigurationPtrOutput) RequireSsl() pulumi.BoolPtrOutput { return o.ApplyT(func(v *DatabaseInstanceSettingsIpConfiguration) *bool { if v == nil { @@ -6835,7 +6843,7 @@ type GetDatabaseInstanceSettingIpConfiguration struct { PscConfigs []GetDatabaseInstanceSettingIpConfigurationPscConfig `pulumi:"pscConfigs"` // Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in sslMode if it has been set too. RequireSsl bool `pulumi:"requireSsl"` - // Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + // Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in requireSsl until next major release. SslMode string `pulumi:"sslMode"` } @@ -6864,7 +6872,7 @@ type GetDatabaseInstanceSettingIpConfigurationArgs struct { PscConfigs GetDatabaseInstanceSettingIpConfigurationPscConfigArrayInput `pulumi:"pscConfigs"` // Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in sslMode if it has been set too. RequireSsl pulumi.BoolInput `pulumi:"requireSsl"` - // Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + // Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in requireSsl until next major release. SslMode pulumi.StringInput `pulumi:"sslMode"` } @@ -6959,7 +6967,7 @@ func (o GetDatabaseInstanceSettingIpConfigurationOutput) RequireSsl() pulumi.Boo return o.ApplyT(func(v GetDatabaseInstanceSettingIpConfiguration) bool { return v.RequireSsl }).(pulumi.BoolOutput) } -// Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. +// Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in requireSsl until next major release. func (o GetDatabaseInstanceSettingIpConfigurationOutput) SslMode() pulumi.StringOutput { return o.ApplyT(func(v GetDatabaseInstanceSettingIpConfiguration) string { return v.SslMode }).(pulumi.StringOutput) } @@ -9927,7 +9935,7 @@ type GetDatabaseInstancesInstanceSettingIpConfiguration struct { PscConfigs []GetDatabaseInstancesInstanceSettingIpConfigurationPscConfig `pulumi:"pscConfigs"` // Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in sslMode if it has been set too. RequireSsl bool `pulumi:"requireSsl"` - // Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + // Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in requireSsl until next major release. SslMode string `pulumi:"sslMode"` } @@ -9956,7 +9964,7 @@ type GetDatabaseInstancesInstanceSettingIpConfigurationArgs struct { PscConfigs GetDatabaseInstancesInstanceSettingIpConfigurationPscConfigArrayInput `pulumi:"pscConfigs"` // Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in sslMode if it has been set too. RequireSsl pulumi.BoolInput `pulumi:"requireSsl"` - // Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + // Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in requireSsl until next major release. SslMode pulumi.StringInput `pulumi:"sslMode"` } @@ -10051,7 +10059,7 @@ func (o GetDatabaseInstancesInstanceSettingIpConfigurationOutput) RequireSsl() p return o.ApplyT(func(v GetDatabaseInstancesInstanceSettingIpConfiguration) bool { return v.RequireSsl }).(pulumi.BoolOutput) } -// Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. +// Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in requireSsl until next major release. func (o GetDatabaseInstancesInstanceSettingIpConfigurationOutput) SslMode() pulumi.StringOutput { return o.ApplyT(func(v GetDatabaseInstancesInstanceSettingIpConfiguration) string { return v.SslMode }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/workstations/pulumiTypes.go b/sdk/go/gcp/workstations/pulumiTypes.go index 81aeeb797d..f6ad6fcedb 100644 --- a/sdk/go/gcp/workstations/pulumiTypes.go +++ b/sdk/go/gcp/workstations/pulumiTypes.go @@ -1979,10 +1979,17 @@ type WorkstationConfigHostGceInstanceBoostConfig struct { // An accelerator card attached to the boost instance. // Structure is documented below. Accelerators []WorkstationConfigHostGceInstanceBoostConfigAccelerator `pulumi:"accelerators"` + // Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + BootDiskSizeGb *int `pulumi:"bootDiskSizeGb"` + // Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + // See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + EnableNestedVirtualization *bool `pulumi:"enableNestedVirtualization"` // The id to be used for the boost config. Id string `pulumi:"id"` // The type of machine that boosted VM instances will use—for example, e2-standard-4. For more information about machine types that Cloud Workstations supports, see the list of available machine types https://cloud.google.com/workstations/docs/available-machine-types. Defaults to e2-standard-4. MachineType *string `pulumi:"machineType"` + // Number of instances to pool for faster workstation boosting. + PoolSize *int `pulumi:"poolSize"` } // WorkstationConfigHostGceInstanceBoostConfigInput is an input type that accepts WorkstationConfigHostGceInstanceBoostConfigArgs and WorkstationConfigHostGceInstanceBoostConfigOutput values. @@ -2000,10 +2007,17 @@ type WorkstationConfigHostGceInstanceBoostConfigArgs struct { // An accelerator card attached to the boost instance. // Structure is documented below. Accelerators WorkstationConfigHostGceInstanceBoostConfigAcceleratorArrayInput `pulumi:"accelerators"` + // Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + BootDiskSizeGb pulumi.IntPtrInput `pulumi:"bootDiskSizeGb"` + // Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + // See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + EnableNestedVirtualization pulumi.BoolPtrInput `pulumi:"enableNestedVirtualization"` // The id to be used for the boost config. Id pulumi.StringInput `pulumi:"id"` // The type of machine that boosted VM instances will use—for example, e2-standard-4. For more information about machine types that Cloud Workstations supports, see the list of available machine types https://cloud.google.com/workstations/docs/available-machine-types. Defaults to e2-standard-4. MachineType pulumi.StringPtrInput `pulumi:"machineType"` + // Number of instances to pool for faster workstation boosting. + PoolSize pulumi.IntPtrInput `pulumi:"poolSize"` } func (WorkstationConfigHostGceInstanceBoostConfigArgs) ElementType() reflect.Type { @@ -2065,6 +2079,17 @@ func (o WorkstationConfigHostGceInstanceBoostConfigOutput) Accelerators() Workst }).(WorkstationConfigHostGceInstanceBoostConfigAcceleratorArrayOutput) } +// Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. +func (o WorkstationConfigHostGceInstanceBoostConfigOutput) BootDiskSizeGb() pulumi.IntPtrOutput { + return o.ApplyT(func(v WorkstationConfigHostGceInstanceBoostConfig) *int { return v.BootDiskSizeGb }).(pulumi.IntPtrOutput) +} + +// Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. +// See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization +func (o WorkstationConfigHostGceInstanceBoostConfigOutput) EnableNestedVirtualization() pulumi.BoolPtrOutput { + return o.ApplyT(func(v WorkstationConfigHostGceInstanceBoostConfig) *bool { return v.EnableNestedVirtualization }).(pulumi.BoolPtrOutput) +} + // The id to be used for the boost config. func (o WorkstationConfigHostGceInstanceBoostConfigOutput) Id() pulumi.StringOutput { return o.ApplyT(func(v WorkstationConfigHostGceInstanceBoostConfig) string { return v.Id }).(pulumi.StringOutput) @@ -2075,6 +2100,11 @@ func (o WorkstationConfigHostGceInstanceBoostConfigOutput) MachineType() pulumi. return o.ApplyT(func(v WorkstationConfigHostGceInstanceBoostConfig) *string { return v.MachineType }).(pulumi.StringPtrOutput) } +// Number of instances to pool for faster workstation boosting. +func (o WorkstationConfigHostGceInstanceBoostConfigOutput) PoolSize() pulumi.IntPtrOutput { + return o.ApplyT(func(v WorkstationConfigHostGceInstanceBoostConfig) *int { return v.PoolSize }).(pulumi.IntPtrOutput) +} + type WorkstationConfigHostGceInstanceBoostConfigArrayOutput struct{ *pulumi.OutputState } func (WorkstationConfigHostGceInstanceBoostConfigArrayOutput) ElementType() reflect.Type { diff --git a/sdk/go/gcp/workstations/workstationConfig.go b/sdk/go/gcp/workstations/workstationConfig.go index 010dfa0e32..94b138a198 100644 --- a/sdk/go/gcp/workstations/workstationConfig.go +++ b/sdk/go/gcp/workstations/workstationConfig.go @@ -536,8 +536,11 @@ import ( // }, // }, // &workstations.WorkstationConfigHostGceInstanceBoostConfigArgs{ -// Id: pulumi.String("boost-1"), -// MachineType: pulumi.String("e2-standard-2"), +// Id: pulumi.String("boost-2"), +// MachineType: pulumi.String("n1-standard-2"), +// PoolSize: pulumi.Int(2), +// BootDiskSizeGb: pulumi.Int(30), +// EnableNestedVirtualization: pulumi.Bool(true), // }, // }, // }, 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 33c472e36d..87e9bfe54b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/Config.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/Config.java @@ -444,6 +444,9 @@ public Optional secureSourceManagerCustomEndpoint() { public Optional securityCenterCustomEndpoint() { return Codegen.stringProp("securityCenterCustomEndpoint").config(config).get(); } + public Optional securityCenterManagementCustomEndpoint() { + return Codegen.stringProp("securityCenterManagementCustomEndpoint").config(config).get(); + } public Optional securityScannerCustomEndpoint() { return Codegen.stringProp("securityScannerCustomEndpoint").config(config).get(); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/Provider.java b/sdk/java/src/main/java/com/pulumi/gcp/Provider.java index f05b6c5a22..77943326f1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/Provider.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/Provider.java @@ -845,6 +845,12 @@ public Output> secureSourceManagerCustomEndpoint() { public Output> securityCenterCustomEndpoint() { return Codegen.optional(this.securityCenterCustomEndpoint); } + @Export(name="securityCenterManagementCustomEndpoint", refs={String.class}, tree="[0]") + private Output securityCenterManagementCustomEndpoint; + + public Output> securityCenterManagementCustomEndpoint() { + return Codegen.optional(this.securityCenterManagementCustomEndpoint); + } @Export(name="securityScannerCustomEndpoint", refs={String.class}, tree="[0]") private Output securityScannerCustomEndpoint; 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 108c2dbe74..e0ea1e64ab 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java @@ -1021,6 +1021,13 @@ public Optional> securityCenterCustomEndpoint() { return Optional.ofNullable(this.securityCenterCustomEndpoint); } + @Import(name="securityCenterManagementCustomEndpoint") + private @Nullable Output securityCenterManagementCustomEndpoint; + + public Optional> securityCenterManagementCustomEndpoint() { + return Optional.ofNullable(this.securityCenterManagementCustomEndpoint); + } + @Import(name="securityScannerCustomEndpoint") private @Nullable Output securityScannerCustomEndpoint; @@ -1349,6 +1356,7 @@ private ProviderArgs(ProviderArgs $) { this.secretManagerCustomEndpoint = $.secretManagerCustomEndpoint; this.secureSourceManagerCustomEndpoint = $.secureSourceManagerCustomEndpoint; this.securityCenterCustomEndpoint = $.securityCenterCustomEndpoint; + this.securityCenterManagementCustomEndpoint = $.securityCenterManagementCustomEndpoint; this.securityScannerCustomEndpoint = $.securityScannerCustomEndpoint; this.securitypostureCustomEndpoint = $.securitypostureCustomEndpoint; this.serviceDirectoryCustomEndpoint = $.serviceDirectoryCustomEndpoint; @@ -2690,6 +2698,15 @@ public Builder securityCenterCustomEndpoint(String securityCenterCustomEndpoint) return securityCenterCustomEndpoint(Output.of(securityCenterCustomEndpoint)); } + public Builder securityCenterManagementCustomEndpoint(@Nullable Output securityCenterManagementCustomEndpoint) { + $.securityCenterManagementCustomEndpoint = securityCenterManagementCustomEndpoint; + return this; + } + + public Builder securityCenterManagementCustomEndpoint(String securityCenterManagementCustomEndpoint) { + return securityCenterManagementCustomEndpoint(Output.of(securityCenterManagementCustomEndpoint)); + } + public Builder securityScannerCustomEndpoint(@Nullable Output securityScannerCustomEndpoint) { $.securityScannerCustomEndpoint = securityScannerCustomEndpoint; return this; 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 9cd85cd620..195ecfe380 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 @@ -15,6 +15,7 @@ import com.pulumi.gcp.appengine.outputs.FlexibleAppVersionDeployment; import com.pulumi.gcp.appengine.outputs.FlexibleAppVersionEndpointsApiService; import com.pulumi.gcp.appengine.outputs.FlexibleAppVersionEntrypoint; +import com.pulumi.gcp.appengine.outputs.FlexibleAppVersionFlexibleRuntimeSettings; import com.pulumi.gcp.appengine.outputs.FlexibleAppVersionHandler; import com.pulumi.gcp.appengine.outputs.FlexibleAppVersionLivenessCheck; import com.pulumi.gcp.appengine.outputs.FlexibleAppVersionManualScaling; @@ -346,6 +347,20 @@ public Output> entrypoint() { public Output>> envVariables() { return Codegen.optional(this.envVariables); } + /** + * Runtime settings for App Engine flexible environment. + * + */ + @Export(name="flexibleRuntimeSettings", refs={FlexibleAppVersionFlexibleRuntimeSettings.class}, tree="[0]") + private Output flexibleRuntimeSettings; + + /** + * @return Runtime settings for App Engine flexible environment. + * + */ + public Output> flexibleRuntimeSettings() { + return Codegen.optional(this.flexibleRuntimeSettings); + } /** * 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. 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 0b67f9619b..9abea695bf 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 @@ -11,6 +11,7 @@ import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionDeploymentArgs; import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionEndpointsApiServiceArgs; import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionEntrypointArgs; +import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionFlexibleRuntimeSettingsArgs; import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionHandlerArgs; import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionLivenessCheckArgs; import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionManualScalingArgs; @@ -160,6 +161,21 @@ public Optional>> envVariables() { return Optional.ofNullable(this.envVariables); } + /** + * Runtime settings for App Engine flexible environment. + * + */ + @Import(name="flexibleRuntimeSettings") + private @Nullable Output flexibleRuntimeSettings; + + /** + * @return Runtime settings for App Engine flexible environment. + * + */ + public Optional> flexibleRuntimeSettings() { + return Optional.ofNullable(this.flexibleRuntimeSettings); + } + /** * 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. @@ -490,6 +506,7 @@ private FlexibleAppVersionArgs(FlexibleAppVersionArgs $) { this.endpointsApiService = $.endpointsApiService; this.entrypoint = $.entrypoint; this.envVariables = $.envVariables; + this.flexibleRuntimeSettings = $.flexibleRuntimeSettings; this.handlers = $.handlers; this.inboundServices = $.inboundServices; this.instanceClass = $.instanceClass; @@ -709,6 +726,27 @@ public Builder envVariables(Map envVariables) { return envVariables(Output.of(envVariables)); } + /** + * @param flexibleRuntimeSettings Runtime settings for App Engine flexible environment. + * + * @return builder + * + */ + public Builder flexibleRuntimeSettings(@Nullable Output flexibleRuntimeSettings) { + $.flexibleRuntimeSettings = flexibleRuntimeSettings; + return this; + } + + /** + * @param flexibleRuntimeSettings Runtime settings for App Engine flexible environment. + * + * @return builder + * + */ + public Builder flexibleRuntimeSettings(FlexibleAppVersionFlexibleRuntimeSettingsArgs flexibleRuntimeSettings) { + return flexibleRuntimeSettings(Output.of(flexibleRuntimeSettings)); + } + /** * @param 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. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/appengine/inputs/FlexibleAppVersionFlexibleRuntimeSettingsArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/appengine/inputs/FlexibleAppVersionFlexibleRuntimeSettingsArgs.java new file mode 100644 index 0000000000..d24888a26c --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/appengine/inputs/FlexibleAppVersionFlexibleRuntimeSettingsArgs.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.appengine.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 FlexibleAppVersionFlexibleRuntimeSettingsArgs extends com.pulumi.resources.ResourceArgs { + + public static final FlexibleAppVersionFlexibleRuntimeSettingsArgs Empty = new FlexibleAppVersionFlexibleRuntimeSettingsArgs(); + + /** + * Operating System of the application runtime. + * + */ + @Import(name="operatingSystem") + private @Nullable Output operatingSystem; + + /** + * @return Operating System of the application runtime. + * + */ + public Optional> operatingSystem() { + return Optional.ofNullable(this.operatingSystem); + } + + /** + * The runtime version of an App Engine flexible application. + * + */ + @Import(name="runtimeVersion") + private @Nullable Output runtimeVersion; + + /** + * @return The runtime version of an App Engine flexible application. + * + */ + public Optional> runtimeVersion() { + return Optional.ofNullable(this.runtimeVersion); + } + + private FlexibleAppVersionFlexibleRuntimeSettingsArgs() {} + + private FlexibleAppVersionFlexibleRuntimeSettingsArgs(FlexibleAppVersionFlexibleRuntimeSettingsArgs $) { + this.operatingSystem = $.operatingSystem; + this.runtimeVersion = $.runtimeVersion; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(FlexibleAppVersionFlexibleRuntimeSettingsArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private FlexibleAppVersionFlexibleRuntimeSettingsArgs $; + + public Builder() { + $ = new FlexibleAppVersionFlexibleRuntimeSettingsArgs(); + } + + public Builder(FlexibleAppVersionFlexibleRuntimeSettingsArgs defaults) { + $ = new FlexibleAppVersionFlexibleRuntimeSettingsArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param operatingSystem Operating System of the application runtime. + * + * @return builder + * + */ + public Builder operatingSystem(@Nullable Output operatingSystem) { + $.operatingSystem = operatingSystem; + return this; + } + + /** + * @param operatingSystem Operating System of the application runtime. + * + * @return builder + * + */ + public Builder operatingSystem(String operatingSystem) { + return operatingSystem(Output.of(operatingSystem)); + } + + /** + * @param runtimeVersion The runtime version of an App Engine flexible application. + * + * @return builder + * + */ + public Builder runtimeVersion(@Nullable Output runtimeVersion) { + $.runtimeVersion = runtimeVersion; + return this; + } + + /** + * @param runtimeVersion The runtime version of an App Engine flexible application. + * + * @return builder + * + */ + public Builder runtimeVersion(String runtimeVersion) { + return runtimeVersion(Output.of(runtimeVersion)); + } + + public FlexibleAppVersionFlexibleRuntimeSettingsArgs build() { + return $; + } + } + +} 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 05dd3c00fb..67f4f29f11 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 @@ -10,6 +10,7 @@ import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionDeploymentArgs; import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionEndpointsApiServiceArgs; import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionEntrypointArgs; +import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionFlexibleRuntimeSettingsArgs; import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionHandlerArgs; import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionLivenessCheckArgs; import com.pulumi.gcp.appengine.inputs.FlexibleAppVersionManualScalingArgs; @@ -159,6 +160,21 @@ public Optional>> envVariables() { return Optional.ofNullable(this.envVariables); } + /** + * Runtime settings for App Engine flexible environment. + * + */ + @Import(name="flexibleRuntimeSettings") + private @Nullable Output flexibleRuntimeSettings; + + /** + * @return Runtime settings for App Engine flexible environment. + * + */ + public Optional> flexibleRuntimeSettings() { + return Optional.ofNullable(this.flexibleRuntimeSettings); + } + /** * 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. @@ -504,6 +520,7 @@ private FlexibleAppVersionState(FlexibleAppVersionState $) { this.endpointsApiService = $.endpointsApiService; this.entrypoint = $.entrypoint; this.envVariables = $.envVariables; + this.flexibleRuntimeSettings = $.flexibleRuntimeSettings; this.handlers = $.handlers; this.inboundServices = $.inboundServices; this.instanceClass = $.instanceClass; @@ -724,6 +741,27 @@ public Builder envVariables(Map envVariables) { return envVariables(Output.of(envVariables)); } + /** + * @param flexibleRuntimeSettings Runtime settings for App Engine flexible environment. + * + * @return builder + * + */ + public Builder flexibleRuntimeSettings(@Nullable Output flexibleRuntimeSettings) { + $.flexibleRuntimeSettings = flexibleRuntimeSettings; + return this; + } + + /** + * @param flexibleRuntimeSettings Runtime settings for App Engine flexible environment. + * + * @return builder + * + */ + public Builder flexibleRuntimeSettings(FlexibleAppVersionFlexibleRuntimeSettingsArgs flexibleRuntimeSettings) { + return flexibleRuntimeSettings(Output.of(flexibleRuntimeSettings)); + } + /** * @param 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. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/appengine/outputs/FlexibleAppVersionFlexibleRuntimeSettings.java b/sdk/java/src/main/java/com/pulumi/gcp/appengine/outputs/FlexibleAppVersionFlexibleRuntimeSettings.java new file mode 100644 index 0000000000..3dac3e8109 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/appengine/outputs/FlexibleAppVersionFlexibleRuntimeSettings.java @@ -0,0 +1,78 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.appengine.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 FlexibleAppVersionFlexibleRuntimeSettings { + /** + * @return Operating System of the application runtime. + * + */ + private @Nullable String operatingSystem; + /** + * @return The runtime version of an App Engine flexible application. + * + */ + private @Nullable String runtimeVersion; + + private FlexibleAppVersionFlexibleRuntimeSettings() {} + /** + * @return Operating System of the application runtime. + * + */ + public Optional operatingSystem() { + return Optional.ofNullable(this.operatingSystem); + } + /** + * @return The runtime version of an App Engine flexible application. + * + */ + public Optional runtimeVersion() { + return Optional.ofNullable(this.runtimeVersion); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(FlexibleAppVersionFlexibleRuntimeSettings defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String operatingSystem; + private @Nullable String runtimeVersion; + public Builder() {} + public Builder(FlexibleAppVersionFlexibleRuntimeSettings defaults) { + Objects.requireNonNull(defaults); + this.operatingSystem = defaults.operatingSystem; + this.runtimeVersion = defaults.runtimeVersion; + } + + @CustomType.Setter + public Builder operatingSystem(@Nullable String operatingSystem) { + + this.operatingSystem = operatingSystem; + return this; + } + @CustomType.Setter + public Builder runtimeVersion(@Nullable String runtimeVersion) { + + this.runtimeVersion = runtimeVersion; + return this; + } + public FlexibleAppVersionFlexibleRuntimeSettings build() { + final var _resultValue = new FlexibleAppVersionFlexibleRuntimeSettings(); + _resultValue.operatingSystem = operatingSystem; + _resultValue.runtimeVersion = runtimeVersion; + return _resultValue; + } + } +} 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 b4079a0151..ecfd718ca8 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 @@ -230,6 +230,20 @@ public Output displayName() { public Output> effectiveLabels() { return this.effectiveLabels; } + /** + * Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + * + */ + @Export(name="forceDestroy", refs={Boolean.class}, tree="[0]") + private Output forceDestroy; + + /** + * @return Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + * + */ + public Output> forceDestroy() { + return Codegen.optional(this.forceDestroy); + } /** * 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, 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 fcacba4fcd..eda4119f0c 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 @@ -74,6 +74,21 @@ public Optional> displayName() { return Optional.ofNullable(this.displayName); } + /** + * Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + * + */ + @Import(name="forceDestroy") + private @Nullable Output forceDestroy; + + /** + * @return Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + * + */ + public Optional> forceDestroy() { + return Optional.ofNullable(this.forceDestroy); + } + /** * 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, @@ -164,6 +179,7 @@ private InstanceArgs(InstanceArgs $) { this.clusters = $.clusters; this.deletionProtection = $.deletionProtection; this.displayName = $.displayName; + this.forceDestroy = $.forceDestroy; this.instanceType = $.instanceType; this.labels = $.labels; this.name = $.name; @@ -275,6 +291,27 @@ public Builder displayName(String displayName) { return displayName(Output.of(displayName)); } + /** + * @param forceDestroy Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + * + * @return builder + * + */ + public Builder forceDestroy(@Nullable Output forceDestroy) { + $.forceDestroy = forceDestroy; + return this; + } + + /** + * @param forceDestroy Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + * + * @return builder + * + */ + public Builder forceDestroy(Boolean forceDestroy) { + return forceDestroy(Output.of(forceDestroy)); + } + /** * @param instanceType 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, 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 0dce359ad1..948fe55d12 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 @@ -93,6 +93,21 @@ public Optional>> effectiveLabels() { return Optional.ofNullable(this.effectiveLabels); } + /** + * Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + * + */ + @Import(name="forceDestroy") + private @Nullable Output forceDestroy; + + /** + * @return Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + * + */ + public Optional> forceDestroy() { + return Optional.ofNullable(this.forceDestroy); + } + /** * 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, @@ -199,6 +214,7 @@ private InstanceState(InstanceState $) { this.deletionProtection = $.deletionProtection; this.displayName = $.displayName; this.effectiveLabels = $.effectiveLabels; + this.forceDestroy = $.forceDestroy; this.instanceType = $.instanceType; this.labels = $.labels; this.name = $.name; @@ -336,6 +352,27 @@ public Builder effectiveLabels(Map effectiveLabels) { return effectiveLabels(Output.of(effectiveLabels)); } + /** + * @param forceDestroy Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + * + * @return builder + * + */ + public Builder forceDestroy(@Nullable Output forceDestroy) { + $.forceDestroy = forceDestroy; + return this; + } + + /** + * @param forceDestroy Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + * + * @return builder + * + */ + public Builder forceDestroy(Boolean forceDestroy) { + return forceDestroy(Output.of(forceDestroy)); + } + /** * @param instanceType 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, diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetExecutionConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetExecutionConfigArgs.java index 83f1aafcd9..84ed9e0727 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetExecutionConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetExecutionConfigArgs.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; import java.lang.String; import java.util.List; import java.util.Objects; @@ -77,6 +78,21 @@ public Output> usages() { return this.usages; } + /** + * Optional. If true, additional logging will be enabled when running builds in this execution environment. + * + */ + @Import(name="verbose") + private @Nullable Output verbose; + + /** + * @return Optional. If true, additional logging will be enabled when running builds in this execution environment. + * + */ + public Optional> verbose() { + return Optional.ofNullable(this.verbose); + } + /** * Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. * @@ -99,6 +115,7 @@ private TargetExecutionConfigArgs(TargetExecutionConfigArgs $) { this.executionTimeout = $.executionTimeout; this.serviceAccount = $.serviceAccount; this.usages = $.usages; + this.verbose = $.verbose; this.workerPool = $.workerPool; } @@ -214,6 +231,27 @@ public Builder usages(String... usages) { return usages(List.of(usages)); } + /** + * @param verbose Optional. If true, additional logging will be enabled when running builds in this execution environment. + * + * @return builder + * + */ + public Builder verbose(@Nullable Output verbose) { + $.verbose = verbose; + return this; + } + + /** + * @param verbose Optional. If true, additional logging will be enabled when running builds in this execution environment. + * + * @return builder + * + */ + public Builder verbose(Boolean verbose) { + return verbose(Output.of(verbose)); + } + /** * @param workerPool Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/TargetExecutionConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/TargetExecutionConfig.java index afe9b1e442..d22df38db1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/TargetExecutionConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/TargetExecutionConfig.java @@ -5,6 +5,7 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; import java.lang.String; import java.util.List; import java.util.Objects; @@ -33,6 +34,11 @@ public final class TargetExecutionConfig { * */ private List usages; + /** + * @return Optional. If true, additional logging will be enabled when running builds in this execution environment. + * + */ + private @Nullable Boolean verbose; /** * @return Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. * @@ -68,6 +74,13 @@ public Optional serviceAccount() { public List usages() { return this.usages; } + /** + * @return Optional. If true, additional logging will be enabled when running builds in this execution environment. + * + */ + public Optional verbose() { + return Optional.ofNullable(this.verbose); + } /** * @return Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. * @@ -89,6 +102,7 @@ public static final class Builder { private @Nullable String executionTimeout; private @Nullable String serviceAccount; private List usages; + private @Nullable Boolean verbose; private @Nullable String workerPool; public Builder() {} public Builder(TargetExecutionConfig defaults) { @@ -97,6 +111,7 @@ public Builder(TargetExecutionConfig defaults) { this.executionTimeout = defaults.executionTimeout; this.serviceAccount = defaults.serviceAccount; this.usages = defaults.usages; + this.verbose = defaults.verbose; this.workerPool = defaults.workerPool; } @@ -130,6 +145,12 @@ public Builder usages(String... usages) { return usages(List.of(usages)); } @CustomType.Setter + public Builder verbose(@Nullable Boolean verbose) { + + this.verbose = verbose; + return this; + } + @CustomType.Setter public Builder workerPool(@Nullable String workerPool) { this.workerPool = workerPool; @@ -141,6 +162,7 @@ public TargetExecutionConfig build() { _resultValue.executionTimeout = executionTimeout; _resultValue.serviceAccount = serviceAccount; _resultValue.usages = usages; + _resultValue.verbose = verbose; _resultValue.workerPool = workerPool; return _resultValue; } 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 219a7585e2..a65eec0caf 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 @@ -1260,6 +1260,22 @@ public Output> securitySettings() { public Output selfLink() { return this.selfLink; } + /** + * URL to networkservices.ServiceLbPolicy resource. + * Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + * + */ + @Export(name="serviceLbPolicy", refs={String.class}, tree="[0]") + private Output serviceLbPolicy; + + /** + * @return URL to networkservices.ServiceLbPolicy resource. + * Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + * + */ + public Output> serviceLbPolicy() { + return Codegen.optional(this.serviceLbPolicy); + } /** * Type of session affinity to use. The default is NONE. Session affinity is * not applicable if the protocol is UDP. 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 874db27570..c0e7929bf3 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 @@ -618,6 +618,23 @@ public Optional> securitySettings() { return Optional.ofNullable(this.securitySettings); } + /** + * URL to networkservices.ServiceLbPolicy resource. + * Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + * + */ + @Import(name="serviceLbPolicy") + private @Nullable Output serviceLbPolicy; + + /** + * @return URL to networkservices.ServiceLbPolicy resource. + * Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + * + */ + public Optional> serviceLbPolicy() { + return Optional.ofNullable(this.serviceLbPolicy); + } + /** * Type of session affinity to use. The default is NONE. Session affinity is * not applicable if the protocol is UDP. @@ -682,6 +699,7 @@ private BackendServiceArgs(BackendServiceArgs $) { this.protocol = $.protocol; this.securityPolicy = $.securityPolicy; this.securitySettings = $.securitySettings; + this.serviceLbPolicy = $.serviceLbPolicy; this.sessionAffinity = $.sessionAffinity; this.timeoutSec = $.timeoutSec; } @@ -1494,6 +1512,29 @@ public Builder securitySettings(BackendServiceSecuritySettingsArgs securitySetti return securitySettings(Output.of(securitySettings)); } + /** + * @param serviceLbPolicy URL to networkservices.ServiceLbPolicy resource. + * Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + * + * @return builder + * + */ + public Builder serviceLbPolicy(@Nullable Output serviceLbPolicy) { + $.serviceLbPolicy = serviceLbPolicy; + return this; + } + + /** + * @param serviceLbPolicy URL to networkservices.ServiceLbPolicy resource. + * Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + * + * @return builder + * + */ + public Builder serviceLbPolicy(String serviceLbPolicy) { + return serviceLbPolicy(Output.of(serviceLbPolicy)); + } + /** * @param sessionAffinity Type of session affinity to use. The default is NONE. Session affinity is * not applicable if the protocol is UDP. 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 b708b9555e..a6fc4f5692 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 @@ -100,6 +100,8 @@ import com.pulumi.gcp.compute.inputs.GetRouterStatusPlainArgs; import com.pulumi.gcp.compute.inputs.GetSSLPolicyArgs; import com.pulumi.gcp.compute.inputs.GetSSLPolicyPlainArgs; +import com.pulumi.gcp.compute.inputs.GetSecurityPolicyArgs; +import com.pulumi.gcp.compute.inputs.GetSecurityPolicyPlainArgs; import com.pulumi.gcp.compute.inputs.GetSnapshotArgs; import com.pulumi.gcp.compute.inputs.GetSnapshotIamPolicyArgs; import com.pulumi.gcp.compute.inputs.GetSnapshotIamPolicyPlainArgs; @@ -163,6 +165,7 @@ import com.pulumi.gcp.compute.outputs.GetRouterResult; import com.pulumi.gcp.compute.outputs.GetRouterStatusResult; import com.pulumi.gcp.compute.outputs.GetSSLPolicyResult; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyResult; import com.pulumi.gcp.compute.outputs.GetSnapshotIamPolicyResult; import com.pulumi.gcp.compute.outputs.GetSnapshotResult; import com.pulumi.gcp.compute.outputs.GetSubnetworkIamPolicyResult; @@ -7861,6 +7864,312 @@ public static Output getSSLPolicy(GetSSLPolicyArgs args, Inv public static CompletableFuture getSSLPolicyPlain(GetSSLPolicyPlainArgs args, InvokeOptions options) { return Deployment.getInstance().invokeAsync("gcp:compute/getSSLPolicy:getSSLPolicy", TypeShape.of(GetSSLPolicyResult.class), args, Utilities.withVersion(options)); } + /** + * To get more information about Google Compute Security Policy, see: + * + * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies) + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.compute.ComputeFunctions;
+     * import com.pulumi.gcp.compute.inputs.GetSecurityPolicyArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * 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 sp1 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()
+     *             .name("my-policy")
+     *             .project("my-project")
+     *             .build());
+     * 
+     *         final var sp2 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()
+     *             .selfLink("https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getSecurityPolicy() { + return getSecurityPolicy(GetSecurityPolicyArgs.Empty, InvokeOptions.Empty); + } + /** + * To get more information about Google Compute Security Policy, see: + * + * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies) + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.compute.ComputeFunctions;
+     * import com.pulumi.gcp.compute.inputs.GetSecurityPolicyArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * 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 sp1 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()
+     *             .name("my-policy")
+     *             .project("my-project")
+     *             .build());
+     * 
+     *         final var sp2 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()
+     *             .selfLink("https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getSecurityPolicyPlain() { + return getSecurityPolicyPlain(GetSecurityPolicyPlainArgs.Empty, InvokeOptions.Empty); + } + /** + * To get more information about Google Compute Security Policy, see: + * + * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies) + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.compute.ComputeFunctions;
+     * import com.pulumi.gcp.compute.inputs.GetSecurityPolicyArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * 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 sp1 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()
+     *             .name("my-policy")
+     *             .project("my-project")
+     *             .build());
+     * 
+     *         final var sp2 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()
+     *             .selfLink("https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getSecurityPolicy(GetSecurityPolicyArgs args) { + return getSecurityPolicy(args, InvokeOptions.Empty); + } + /** + * To get more information about Google Compute Security Policy, see: + * + * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies) + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.compute.ComputeFunctions;
+     * import com.pulumi.gcp.compute.inputs.GetSecurityPolicyArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * 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 sp1 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()
+     *             .name("my-policy")
+     *             .project("my-project")
+     *             .build());
+     * 
+     *         final var sp2 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()
+     *             .selfLink("https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getSecurityPolicyPlain(GetSecurityPolicyPlainArgs args) { + return getSecurityPolicyPlain(args, InvokeOptions.Empty); + } + /** + * To get more information about Google Compute Security Policy, see: + * + * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies) + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.compute.ComputeFunctions;
+     * import com.pulumi.gcp.compute.inputs.GetSecurityPolicyArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * 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 sp1 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()
+     *             .name("my-policy")
+     *             .project("my-project")
+     *             .build());
+     * 
+     *         final var sp2 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()
+     *             .selfLink("https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getSecurityPolicy(GetSecurityPolicyArgs args, InvokeOptions options) { + return Deployment.getInstance().invoke("gcp:compute/getSecurityPolicy:getSecurityPolicy", TypeShape.of(GetSecurityPolicyResult.class), args, Utilities.withVersion(options)); + } + /** + * To get more information about Google Compute Security Policy, see: + * + * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies) + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.compute.ComputeFunctions;
+     * import com.pulumi.gcp.compute.inputs.GetSecurityPolicyArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * 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 sp1 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()
+     *             .name("my-policy")
+     *             .project("my-project")
+     *             .build());
+     * 
+     *         final var sp2 = ComputeFunctions.getSecurityPolicy(GetSecurityPolicyArgs.builder()
+     *             .selfLink("https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getSecurityPolicyPlain(GetSecurityPolicyPlainArgs args, InvokeOptions options) { + return Deployment.getInstance().invokeAsync("gcp:compute/getSecurityPolicy:getSecurityPolicy", TypeShape.of(GetSecurityPolicyResult.class), args, Utilities.withVersion(options)); + } /** * To get more information about Snapshot, see: * 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 57040eb72b..ab482c640c 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 @@ -851,6 +851,26 @@ public Output> sourceSnapshotEncryptio public Output sourceSnapshotId() { return this.sourceSnapshotId; } + /** + * The URL of the storage pool in which the new disk is created. + * For example: + * * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * * /projects/{project}/zones/{zone}/storagePools/{storagePool} + * + */ + @Export(name="storagePool", refs={String.class}, tree="[0]") + private Output storagePool; + + /** + * @return The URL of the storage pool in which the new disk is created. + * For example: + * * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * * /projects/{project}/zones/{zone}/storagePools/{storagePool} + * + */ + public Output> storagePool() { + return Codegen.optional(this.storagePool); + } /** * URL of the disk type resource describing which disk type to use to * create the disk. Provide this when creating the disk. 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 c3250e1110..f7796bff8c 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 @@ -501,6 +501,27 @@ public Optional> sourceSnapshotEncry return Optional.ofNullable(this.sourceSnapshotEncryptionKey); } + /** + * The URL of the storage pool in which the new disk is created. + * For example: + * * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * * /projects/{project}/zones/{zone}/storagePools/{storagePool} + * + */ + @Import(name="storagePool") + private @Nullable Output storagePool; + + /** + * @return The URL of the storage pool in which the new disk is created. + * For example: + * * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * * /projects/{project}/zones/{zone}/storagePools/{storagePool} + * + */ + public Optional> storagePool() { + return Optional.ofNullable(this.storagePool); + } + /** * URL of the disk type resource describing which disk type to use to * create the disk. Provide this when creating the disk. @@ -557,6 +578,7 @@ private DiskArgs(DiskArgs $) { this.sourceDisk = $.sourceDisk; this.sourceImageEncryptionKey = $.sourceImageEncryptionKey; this.sourceSnapshotEncryptionKey = $.sourceSnapshotEncryptionKey; + this.storagePool = $.storagePool; this.type = $.type; this.zone = $.zone; } @@ -1219,6 +1241,33 @@ public Builder sourceSnapshotEncryptionKey(DiskSourceSnapshotEncryptionKeyArgs s return sourceSnapshotEncryptionKey(Output.of(sourceSnapshotEncryptionKey)); } + /** + * @param storagePool The URL of the storage pool in which the new disk is created. + * For example: + * * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * * /projects/{project}/zones/{zone}/storagePools/{storagePool} + * + * @return builder + * + */ + public Builder storagePool(@Nullable Output storagePool) { + $.storagePool = storagePool; + return this; + } + + /** + * @param storagePool The URL of the storage pool in which the new disk is created. + * For example: + * * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * * /projects/{project}/zones/{zone}/storagePools/{storagePool} + * + * @return builder + * + */ + public Builder storagePool(String storagePool) { + return storagePool(Output.of(storagePool)); + } + /** * @param type URL of the disk type resource describing which disk type to use to * create the disk. Provide this when creating the disk. 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 06a85a1abb..d9186527c1 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 @@ -614,6 +614,20 @@ public Output> networkPerformanceConf public Output> params() { return Codegen.optional(this.params); } + /** + * Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + @Export(name="partnerMetadata", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> partnerMetadata; + + /** + * @return Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + public Output>> partnerMetadata() { + return Codegen.optional(this.partnerMetadata); + } /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceArgs.java index 7e08554d49..5ce49529b3 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 @@ -449,6 +449,21 @@ public Optional> params() { return Optional.ofNullable(this.params); } + /** + * Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + @Import(name="partnerMetadata") + private @Nullable Output> partnerMetadata; + + /** + * @return Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + public Optional>> partnerMetadata() { + return Optional.ofNullable(this.partnerMetadata); + } + /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -624,6 +639,7 @@ private InstanceArgs(InstanceArgs $) { this.networkInterfaces = $.networkInterfaces; this.networkPerformanceConfig = $.networkPerformanceConfig; this.params = $.params; + this.partnerMetadata = $.partnerMetadata; this.project = $.project; this.reservationAffinity = $.reservationAffinity; this.resourcePolicies = $.resourcePolicies; @@ -1230,6 +1246,27 @@ public Builder params(InstanceParamsArgs params) { return params(Output.of(params)); } + /** + * @param partnerMetadata Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + * @return builder + * + */ + public Builder partnerMetadata(@Nullable Output> partnerMetadata) { + $.partnerMetadata = partnerMetadata; + return this; + } + + /** + * @param partnerMetadata Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + * @return builder + * + */ + public Builder partnerMetadata(Map partnerMetadata) { + return partnerMetadata(Output.of(partnerMetadata)); + } + /** * @param project The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromMachineImage.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromMachineImage.java index 35c79d7fa3..c504f5d8a5 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 @@ -461,6 +461,20 @@ public Output networkPerforman public Output params() { return this.params; } + /** + * Partner Metadata Map made available within the instance. + * + */ + @Export(name="partnerMetadata", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> partnerMetadata; + + /** + * @return Partner Metadata Map made available within the instance. + * + */ + public Output> partnerMetadata() { + return this.partnerMetadata; + } /** * The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither * self_link nor project are provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromMachineImageArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromMachineImageArgs.java index 3846729e47..be9a20e8ce 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromMachineImageArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromMachineImageArgs.java @@ -320,6 +320,21 @@ public Optional> params() { return Optional.ofNullable(this.params); } + /** + * Partner Metadata Map made available within the instance. + * + */ + @Import(name="partnerMetadata") + private @Nullable Output> partnerMetadata; + + /** + * @return Partner Metadata Map made available within the instance. + * + */ + public Optional>> partnerMetadata() { + return Optional.ofNullable(this.partnerMetadata); + } + /** * The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither * self_link nor project are provided, the provider project is used. @@ -499,6 +514,7 @@ private InstanceFromMachineImageArgs(InstanceFromMachineImageArgs $) { this.networkInterfaces = $.networkInterfaces; this.networkPerformanceConfig = $.networkPerformanceConfig; this.params = $.params; + this.partnerMetadata = $.partnerMetadata; this.project = $.project; this.reservationAffinity = $.reservationAffinity; this.resourcePolicies = $.resourcePolicies; @@ -949,6 +965,27 @@ public Builder params(InstanceFromMachineImageParamsArgs params) { return params(Output.of(params)); } + /** + * @param partnerMetadata Partner Metadata Map made available within the instance. + * + * @return builder + * + */ + public Builder partnerMetadata(@Nullable Output> partnerMetadata) { + $.partnerMetadata = partnerMetadata; + return this; + } + + /** + * @param partnerMetadata Partner Metadata Map made available within the instance. + * + * @return builder + * + */ + public Builder partnerMetadata(Map partnerMetadata) { + return partnerMetadata(Output.of(partnerMetadata)); + } + /** * @param project The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither * self_link nor project are provided, the provider project is used. 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 546f7fc426..340dabbad5 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 @@ -485,6 +485,20 @@ public Output networkPerformanceCo public Output params() { return this.params; } + /** + * Partner Metadata Map made available within the instance. + * + */ + @Export(name="partnerMetadata", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> partnerMetadata; + + /** + * @return Partner Metadata Map made available within the instance. + * + */ + public Output> partnerMetadata() { + return this.partnerMetadata; + } /** * The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither * self_link nor project are provided, the provider project is used. 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 3ba5651c57..807523feac 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 @@ -353,6 +353,21 @@ public Optional> params() { return Optional.ofNullable(this.params); } + /** + * Partner Metadata Map made available within the instance. + * + */ + @Import(name="partnerMetadata") + private @Nullable Output> partnerMetadata; + + /** + * @return Partner Metadata Map made available within the instance. + * + */ + public Optional>> partnerMetadata() { + return Optional.ofNullable(this.partnerMetadata); + } + /** * The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither * self_link nor project are provided, the provider project is used. @@ -547,6 +562,7 @@ private InstanceFromTemplateArgs(InstanceFromTemplateArgs $) { this.networkInterfaces = $.networkInterfaces; this.networkPerformanceConfig = $.networkPerformanceConfig; this.params = $.params; + this.partnerMetadata = $.partnerMetadata; this.project = $.project; this.reservationAffinity = $.reservationAffinity; this.resourcePolicies = $.resourcePolicies; @@ -1050,6 +1066,27 @@ public Builder params(InstanceFromTemplateParamsArgs params) { return params(Output.of(params)); } + /** + * @param partnerMetadata Partner Metadata Map made available within the instance. + * + * @return builder + * + */ + public Builder partnerMetadata(@Nullable Output> partnerMetadata) { + $.partnerMetadata = partnerMetadata; + return this; + } + + /** + * @param partnerMetadata Partner Metadata Map made available within the instance. + * + * @return builder + * + */ + public Builder partnerMetadata(Map partnerMetadata) { + return partnerMetadata(Output.of(partnerMetadata)); + } + /** * @param project The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither * self_link nor project are provided, the provider project is used. 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 c05f434069..04427d962d 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 @@ -15,6 +15,7 @@ import com.pulumi.gcp.compute.outputs.InstanceGroupManagerInstanceLifecyclePolicy; import com.pulumi.gcp.compute.outputs.InstanceGroupManagerNamedPort; import com.pulumi.gcp.compute.outputs.InstanceGroupManagerParams; +import com.pulumi.gcp.compute.outputs.InstanceGroupManagerStandbyPolicy; import com.pulumi.gcp.compute.outputs.InstanceGroupManagerStatefulDisk; import com.pulumi.gcp.compute.outputs.InstanceGroupManagerStatefulExternalIp; import com.pulumi.gcp.compute.outputs.InstanceGroupManagerStatefulInternalIp; @@ -162,6 +163,55 @@ * * <!--End PulumiCodeChooser --> * + * ### With Standby Policy (`Google-Beta` Provider) + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.compute.InstanceGroupManager;
+ * import com.pulumi.gcp.compute.InstanceGroupManagerArgs;
+ * import com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;
+ * import com.pulumi.gcp.compute.inputs.InstanceGroupManagerStandbyPolicyArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 igm_sr = new InstanceGroupManager("igm-sr", InstanceGroupManagerArgs.builder()
+ *             .name("tf-sr-igm")
+ *             .baseInstanceName("tf-sr-igm-instance")
+ *             .zone("us-central1-a")
+ *             .targetSize(5)
+ *             .versions(InstanceGroupManagerVersionArgs.builder()
+ *                 .instanceTemplate(sr_igm.selfLink())
+ *                 .name("primary")
+ *                 .build())
+ *             .standbyPolicy(InstanceGroupManagerStandbyPolicyArgs.builder()
+ *                 .initialDelaySec(30)
+ *                 .mode("MANUAL")
+ *                 .build())
+ *             .targetSuspendedSize(2)
+ *             .targetStoppedSize(1)
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * * ## Import * * Instance group managers can be imported using any of these accepted formats: @@ -439,6 +489,20 @@ public Output project() { public Output selfLink() { return this.selfLink; } + /** + * The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + */ + @Export(name="standbyPolicy", refs={InstanceGroupManagerStandbyPolicy.class}, tree="[0]") + private Output standbyPolicy; + + /** + * @return The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + */ + public Output standbyPolicy() { + return this.standbyPolicy; + } /** * Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). * @@ -529,6 +593,34 @@ public Output>> targetPools() { public Output targetSize() { return this.targetSize; } + /** + * The target number of stopped instances for this managed instance group. + * + */ + @Export(name="targetStoppedSize", refs={Integer.class}, tree="[0]") + private Output targetStoppedSize; + + /** + * @return The target number of stopped instances for this managed instance group. + * + */ + public Output targetStoppedSize() { + return this.targetStoppedSize; + } + /** + * The target number of suspended instances for this managed instance group. + * + */ + @Export(name="targetSuspendedSize", refs={Integer.class}, tree="[0]") + private Output targetSuspendedSize; + + /** + * @return The target number of suspended instances for this managed instance group. + * + */ + public Output targetSuspendedSize() { + return this.targetSuspendedSize; + } /** * 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). * 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 78a3934ca3..5a4415c2e2 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 @@ -11,6 +11,7 @@ import com.pulumi.gcp.compute.inputs.InstanceGroupManagerInstanceLifecyclePolicyArgs; import com.pulumi.gcp.compute.inputs.InstanceGroupManagerNamedPortArgs; import com.pulumi.gcp.compute.inputs.InstanceGroupManagerParamsArgs; +import com.pulumi.gcp.compute.inputs.InstanceGroupManagerStandbyPolicyArgs; import com.pulumi.gcp.compute.inputs.InstanceGroupManagerStatefulDiskArgs; import com.pulumi.gcp.compute.inputs.InstanceGroupManagerStatefulExternalIpArgs; import com.pulumi.gcp.compute.inputs.InstanceGroupManagerStatefulInternalIpArgs; @@ -221,6 +222,21 @@ public Optional> project() { return Optional.ofNullable(this.project); } + /** + * The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + */ + @Import(name="standbyPolicy") + private @Nullable Output standbyPolicy; + + /** + * @return The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + */ + public Optional> standbyPolicy() { + return Optional.ofNullable(this.standbyPolicy); + } + /** * Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). * @@ -302,6 +318,36 @@ public Optional> targetSize() { return Optional.ofNullable(this.targetSize); } + /** + * The target number of stopped instances for this managed instance group. + * + */ + @Import(name="targetStoppedSize") + private @Nullable Output targetStoppedSize; + + /** + * @return The target number of stopped instances for this managed instance group. + * + */ + public Optional> targetStoppedSize() { + return Optional.ofNullable(this.targetStoppedSize); + } + + /** + * The target number of suspended instances for this managed instance group. + * + */ + @Import(name="targetSuspendedSize") + private @Nullable Output targetSuspendedSize; + + /** + * @return The target number of suspended instances for this managed instance group. + * + */ + public Optional> targetSuspendedSize() { + return Optional.ofNullable(this.targetSuspendedSize); + } + /** * 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). * @@ -410,11 +456,14 @@ private InstanceGroupManagerArgs(InstanceGroupManagerArgs $) { this.namedPorts = $.namedPorts; this.params = $.params; this.project = $.project; + this.standbyPolicy = $.standbyPolicy; this.statefulDisks = $.statefulDisks; this.statefulExternalIps = $.statefulExternalIps; this.statefulInternalIps = $.statefulInternalIps; this.targetPools = $.targetPools; this.targetSize = $.targetSize; + this.targetStoppedSize = $.targetStoppedSize; + this.targetSuspendedSize = $.targetSuspendedSize; this.updatePolicy = $.updatePolicy; this.versions = $.versions; this.waitForInstances = $.waitForInstances; @@ -703,6 +752,27 @@ public Builder project(String project) { return project(Output.of(project)); } + /** + * @param standbyPolicy The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + * @return builder + * + */ + public Builder standbyPolicy(@Nullable Output standbyPolicy) { + $.standbyPolicy = standbyPolicy; + return this; + } + + /** + * @param standbyPolicy The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + * @return builder + * + */ + public Builder standbyPolicy(InstanceGroupManagerStandbyPolicyArgs standbyPolicy) { + return standbyPolicy(Output.of(standbyPolicy)); + } + /** * @param statefulDisks Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). * @@ -856,6 +926,48 @@ public Builder targetSize(Integer targetSize) { return targetSize(Output.of(targetSize)); } + /** + * @param targetStoppedSize The target number of stopped instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetStoppedSize(@Nullable Output targetStoppedSize) { + $.targetStoppedSize = targetStoppedSize; + return this; + } + + /** + * @param targetStoppedSize The target number of stopped instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetStoppedSize(Integer targetStoppedSize) { + return targetStoppedSize(Output.of(targetStoppedSize)); + } + + /** + * @param targetSuspendedSize The target number of suspended instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetSuspendedSize(@Nullable Output targetSuspendedSize) { + $.targetSuspendedSize = targetSuspendedSize; + return this; + } + + /** + * @param targetSuspendedSize The target number of suspended instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetSuspendedSize(Integer targetSuspendedSize) { + return targetSuspendedSize(Output.of(targetSuspendedSize)); + } + /** * @param updatePolicy 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). * 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 19e786ce3a..650e6cd5e2 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 @@ -623,6 +623,20 @@ public Output>> networkInterface public Output> networkPerformanceConfig() { return Codegen.optional(this.networkPerformanceConfig); } + /** + * Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + @Export(name="partnerMetadata", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> partnerMetadata; + + /** + * @return Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + public Output>> partnerMetadata() { + return Codegen.optional(this.partnerMetadata); + } /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceTemplateArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceTemplateArgs.java index a9daa96d5e..58871c7074 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 @@ -339,6 +339,21 @@ public Optional> networkPer return Optional.ofNullable(this.networkPerformanceConfig); } + /** + * Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + @Import(name="partnerMetadata") + private @Nullable Output> partnerMetadata; + + /** + * @return Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + public Optional>> partnerMetadata() { + return Optional.ofNullable(this.partnerMetadata); + } + /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -512,6 +527,7 @@ private InstanceTemplateArgs(InstanceTemplateArgs $) { this.namePrefix = $.namePrefix; this.networkInterfaces = $.networkInterfaces; this.networkPerformanceConfig = $.networkPerformanceConfig; + this.partnerMetadata = $.partnerMetadata; this.project = $.project; this.region = $.region; this.reservationAffinity = $.reservationAffinity; @@ -986,6 +1002,27 @@ public Builder networkPerformanceConfig(InstanceTemplateNetworkPerformanceConfig return networkPerformanceConfig(Output.of(networkPerformanceConfig)); } + /** + * @param partnerMetadata Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + * @return builder + * + */ + public Builder partnerMetadata(@Nullable Output> partnerMetadata) { + $.partnerMetadata = partnerMetadata; + return this; + } + + /** + * @param partnerMetadata Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + * @return builder + * + */ + public Builder partnerMetadata(Map partnerMetadata) { + return partnerMetadata(Output.of(partnerMetadata)); + } + /** * @param project The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/ProjectCloudArmorTier.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/ProjectCloudArmorTier.java new file mode 100644 index 0000000000..084a1af76c --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/ProjectCloudArmorTier.java @@ -0,0 +1,222 @@ +// *** 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; + +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.compute.ProjectCloudArmorTierArgs; +import com.pulumi.gcp.compute.inputs.ProjectCloudArmorTierState; +import java.lang.String; +import javax.annotation.Nullable; + +/** + * Sets the Cloud Armor tier of the project. + * + * To get more information about ProjectCloudArmorTier, see: + * + * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/projects/setCloudArmorTier) + * * How-to Guides + * * [Subscribing to Cloud Armor Enterprise](https://cloud.google.com/armor/docs/managed-protection-overview#subscribing_to_plus) + * + * ## Example Usage + * + * ### Compute Project Cloud Armor Tier Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.compute.ProjectCloudArmorTier;
+ * import com.pulumi.gcp.compute.ProjectCloudArmorTierArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 cloudArmorTierConfig = new ProjectCloudArmorTier("cloudArmorTierConfig", ProjectCloudArmorTierArgs.builder()
+ *             .cloudArmorTier("CA_STANDARD")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Compute Project Cloud Armor Tier Project Set + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * 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.ProjectCloudArmorTier;
+ * import com.pulumi.gcp.compute.ProjectCloudArmorTierArgs;
+ * 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("your_project_id")
+ *             .name("your_project_id")
+ *             .orgId("123456789")
+ *             .billingAccount("000000-0000000-0000000-000000")
+ *             .build());
+ * 
+ *         var compute = new Service("compute", ServiceArgs.builder()
+ *             .project(project.projectId())
+ *             .service("compute.googleapis.com")
+ *             .build());
+ * 
+ *         var cloudArmorTierConfig = new ProjectCloudArmorTier("cloudArmorTierConfig", ProjectCloudArmorTierArgs.builder()
+ *             .project(project.projectId())
+ *             .cloudArmorTier("CA_STANDARD")
+ *             .build(), CustomResourceOptions.builder()
+ *                 .dependsOn(compute)
+ *                 .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * ProjectCloudArmorTier can be imported using any of these accepted formats: + * + * * `projects/{{project}}` + * + * * `{{project}}` + * + * When using the `pulumi import` command, ProjectCloudArmorTier can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default projects/{{project}} + * ``` + * + * ```sh + * $ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default {{project}} + * ``` + * + */ +@ResourceType(type="gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier") +public class ProjectCloudArmorTier extends com.pulumi.resources.CustomResource { + /** + * Managed protection tier to be set. + * Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + * + * *** + * + */ + @Export(name="cloudArmorTier", refs={String.class}, tree="[0]") + private Output cloudArmorTier; + + /** + * @return Managed protection tier to be set. + * Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + * + * *** + * + */ + public Output cloudArmorTier() { + return this.cloudArmorTier; + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public ProjectCloudArmorTier(String name) { + this(name, ProjectCloudArmorTierArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public ProjectCloudArmorTier(String name, ProjectCloudArmorTierArgs 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 ProjectCloudArmorTier(String name, ProjectCloudArmorTierArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier", name, args == null ? ProjectCloudArmorTierArgs.Empty : args, makeResourceOptions(options, Codegen.empty())); + } + + private ProjectCloudArmorTier(String name, Output id, @Nullable ProjectCloudArmorTierState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier", 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 ProjectCloudArmorTier get(String name, Output id, @Nullable ProjectCloudArmorTierState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new ProjectCloudArmorTier(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/ProjectCloudArmorTierArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/ProjectCloudArmorTierArgs.java new file mode 100644 index 0000000000..cc20c51472 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/ProjectCloudArmorTierArgs.java @@ -0,0 +1,140 @@ +// *** 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; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ProjectCloudArmorTierArgs extends com.pulumi.resources.ResourceArgs { + + public static final ProjectCloudArmorTierArgs Empty = new ProjectCloudArmorTierArgs(); + + /** + * Managed protection tier to be set. + * Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + * + * *** + * + */ + @Import(name="cloudArmorTier", required=true) + private Output cloudArmorTier; + + /** + * @return Managed protection tier to be set. + * Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + * + * *** + * + */ + public Output cloudArmorTier() { + return this.cloudArmorTier; + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private ProjectCloudArmorTierArgs() {} + + private ProjectCloudArmorTierArgs(ProjectCloudArmorTierArgs $) { + this.cloudArmorTier = $.cloudArmorTier; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ProjectCloudArmorTierArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ProjectCloudArmorTierArgs $; + + public Builder() { + $ = new ProjectCloudArmorTierArgs(); + } + + public Builder(ProjectCloudArmorTierArgs defaults) { + $ = new ProjectCloudArmorTierArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param cloudArmorTier Managed protection tier to be set. + * Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + * + * *** + * + * @return builder + * + */ + public Builder cloudArmorTier(Output cloudArmorTier) { + $.cloudArmorTier = cloudArmorTier; + return this; + } + + /** + * @param cloudArmorTier Managed protection tier to be set. + * Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + * + * *** + * + * @return builder + * + */ + public Builder cloudArmorTier(String cloudArmorTier) { + return cloudArmorTier(Output.of(cloudArmorTier)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public ProjectCloudArmorTierArgs build() { + if ($.cloudArmorTier == null) { + throw new MissingRequiredPropertyException("ProjectCloudArmorTierArgs", "cloudArmorTier"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceGroupManager.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceGroupManager.java index 019a05c360..55a4342bed 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceGroupManager.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceGroupManager.java @@ -15,6 +15,7 @@ import com.pulumi.gcp.compute.outputs.RegionInstanceGroupManagerInstanceLifecyclePolicy; import com.pulumi.gcp.compute.outputs.RegionInstanceGroupManagerNamedPort; import com.pulumi.gcp.compute.outputs.RegionInstanceGroupManagerParams; +import com.pulumi.gcp.compute.outputs.RegionInstanceGroupManagerStandbyPolicy; import com.pulumi.gcp.compute.outputs.RegionInstanceGroupManagerStatefulDisk; import com.pulumi.gcp.compute.outputs.RegionInstanceGroupManagerStatefulExternalIp; import com.pulumi.gcp.compute.outputs.RegionInstanceGroupManagerStatefulInternalIp; @@ -168,6 +169,55 @@ * * <!--End PulumiCodeChooser --> * + * ### With Standby Policy (`Google-Beta` Provider) + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * 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.RegionInstanceGroupManagerStandbyPolicyArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 igm_sr = new RegionInstanceGroupManager("igm-sr", RegionInstanceGroupManagerArgs.builder()
+ *             .name("tf-sr-igm")
+ *             .baseInstanceName("tf-sr-igm-instance")
+ *             .region("us-central1")
+ *             .targetSize(5)
+ *             .versions(RegionInstanceGroupManagerVersionArgs.builder()
+ *                 .instanceTemplate(sr_igm.selfLink())
+ *                 .name("primary")
+ *                 .build())
+ *             .standbyPolicy(RegionInstanceGroupManagerStandbyPolicyArgs.builder()
+ *                 .initialDelaySec(50)
+ *                 .mode("SCALE_OUT_POOL")
+ *                 .build())
+ *             .targetSuspendedSize(1)
+ *             .targetStoppedSize(1)
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * * ## Import * * Instance group managers can be imported using any of these accepted formats: @@ -469,6 +519,20 @@ public Output region() { public Output selfLink() { return this.selfLink; } + /** + * The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + */ + @Export(name="standbyPolicy", refs={RegionInstanceGroupManagerStandbyPolicy.class}, tree="[0]") + private Output standbyPolicy; + + /** + * @return The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + */ + public Output standbyPolicy() { + return this.standbyPolicy; + } /** * Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `update_policy`. * @@ -559,6 +623,34 @@ public Output>> targetPools() { public Output targetSize() { return this.targetSize; } + /** + * The target number of stopped instances for this managed instance group. + * + */ + @Export(name="targetStoppedSize", refs={Integer.class}, tree="[0]") + private Output targetStoppedSize; + + /** + * @return The target number of stopped instances for this managed instance group. + * + */ + public Output targetStoppedSize() { + return this.targetStoppedSize; + } + /** + * The target number of suspended instances for this managed instance group. + * + */ + @Export(name="targetSuspendedSize", refs={Integer.class}, tree="[0]") + private Output targetSuspendedSize; + + /** + * @return The target number of suspended instances for this managed instance group. + * + */ + public Output targetSuspendedSize() { + return this.targetSuspendedSize; + } /** * 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) * 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 4c3715a108..6a5df34c0c 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 @@ -11,6 +11,7 @@ import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerInstanceLifecyclePolicyArgs; import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerNamedPortArgs; import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerParamsArgs; +import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerStandbyPolicyArgs; import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerStatefulDiskArgs; import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerStatefulExternalIpArgs; import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerStatefulInternalIpArgs; @@ -272,6 +273,21 @@ public Optional> region() { return Optional.ofNullable(this.region); } + /** + * The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + */ + @Import(name="standbyPolicy") + private @Nullable Output standbyPolicy; + + /** + * @return The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + */ + public Optional> standbyPolicy() { + return Optional.ofNullable(this.standbyPolicy); + } + /** * Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `update_policy`. * @@ -353,6 +369,36 @@ public Optional> targetSize() { return Optional.ofNullable(this.targetSize); } + /** + * The target number of stopped instances for this managed instance group. + * + */ + @Import(name="targetStoppedSize") + private @Nullable Output targetStoppedSize; + + /** + * @return The target number of stopped instances for this managed instance group. + * + */ + public Optional> targetStoppedSize() { + return Optional.ofNullable(this.targetStoppedSize); + } + + /** + * The target number of suspended instances for this managed instance group. + * + */ + @Import(name="targetSuspendedSize") + private @Nullable Output targetSuspendedSize; + + /** + * @return The target number of suspended instances for this managed instance group. + * + */ + public Optional> targetSuspendedSize() { + return Optional.ofNullable(this.targetSuspendedSize); + } + /** * 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) * @@ -443,11 +489,14 @@ private RegionInstanceGroupManagerArgs(RegionInstanceGroupManagerArgs $) { this.params = $.params; this.project = $.project; this.region = $.region; + this.standbyPolicy = $.standbyPolicy; this.statefulDisks = $.statefulDisks; this.statefulExternalIps = $.statefulExternalIps; this.statefulInternalIps = $.statefulInternalIps; this.targetPools = $.targetPools; this.targetSize = $.targetSize; + this.targetStoppedSize = $.targetStoppedSize; + this.targetSuspendedSize = $.targetSuspendedSize; this.updatePolicy = $.updatePolicy; this.versions = $.versions; this.waitForInstances = $.waitForInstances; @@ -815,6 +864,27 @@ public Builder region(String region) { return region(Output.of(region)); } + /** + * @param standbyPolicy The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + * @return builder + * + */ + public Builder standbyPolicy(@Nullable Output standbyPolicy) { + $.standbyPolicy = standbyPolicy; + return this; + } + + /** + * @param standbyPolicy The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + * @return builder + * + */ + public Builder standbyPolicy(RegionInstanceGroupManagerStandbyPolicyArgs standbyPolicy) { + return standbyPolicy(Output.of(standbyPolicy)); + } + /** * @param statefulDisks Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `update_policy`. * @@ -968,6 +1038,48 @@ public Builder targetSize(Integer targetSize) { return targetSize(Output.of(targetSize)); } + /** + * @param targetStoppedSize The target number of stopped instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetStoppedSize(@Nullable Output targetStoppedSize) { + $.targetStoppedSize = targetStoppedSize; + return this; + } + + /** + * @param targetStoppedSize The target number of stopped instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetStoppedSize(Integer targetStoppedSize) { + return targetStoppedSize(Output.of(targetStoppedSize)); + } + + /** + * @param targetSuspendedSize The target number of suspended instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetSuspendedSize(@Nullable Output targetSuspendedSize) { + $.targetSuspendedSize = targetSuspendedSize; + return this; + } + + /** + * @param targetSuspendedSize The target number of suspended instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetSuspendedSize(Integer targetSuspendedSize) { + return targetSuspendedSize(Output.of(targetSuspendedSize)); + } + /** * @param updatePolicy 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) * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceTemplate.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceTemplate.java index 5e8783be20..0a9fa18166 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceTemplate.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceTemplate.java @@ -366,6 +366,20 @@ public Output>> networkInt public Output> networkPerformanceConfig() { return Codegen.optional(this.networkPerformanceConfig); } + /** + * Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + @Export(name="partnerMetadata", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> partnerMetadata; + + /** + * @return Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + public Output>> partnerMetadata() { + return Codegen.optional(this.partnerMetadata); + } /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceTemplateArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceTemplateArgs.java index db03ea2ab6..47dbca1eae 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceTemplateArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceTemplateArgs.java @@ -329,6 +329,21 @@ public Optional> netw return Optional.ofNullable(this.networkPerformanceConfig); } + /** + * Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + @Import(name="partnerMetadata") + private @Nullable Output> partnerMetadata; + + /** + * @return Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + public Optional>> partnerMetadata() { + return Optional.ofNullable(this.partnerMetadata); + } + /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -494,6 +509,7 @@ private RegionInstanceTemplateArgs(RegionInstanceTemplateArgs $) { this.namePrefix = $.namePrefix; this.networkInterfaces = $.networkInterfaces; this.networkPerformanceConfig = $.networkPerformanceConfig; + this.partnerMetadata = $.partnerMetadata; this.project = $.project; this.region = $.region; this.reservationAffinity = $.reservationAffinity; @@ -954,6 +970,27 @@ public Builder networkPerformanceConfig(RegionInstanceTemplateNetworkPerformance return networkPerformanceConfig(Output.of(networkPerformanceConfig)); } + /** + * @param partnerMetadata Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + * @return builder + * + */ + public Builder partnerMetadata(@Nullable Output> partnerMetadata) { + $.partnerMetadata = partnerMetadata; + return this; + } + + /** + * @param partnerMetadata Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + * @return builder + * + */ + public Builder partnerMetadata(Map partnerMetadata) { + return partnerMetadata(Output.of(partnerMetadata)); + } + /** * @param project The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceState.java index 110f170e49..8d3f1ddf88 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 @@ -680,6 +680,23 @@ public Optional> selfLink() { return Optional.ofNullable(this.selfLink); } + /** + * URL to networkservices.ServiceLbPolicy resource. + * Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + * + */ + @Import(name="serviceLbPolicy") + private @Nullable Output serviceLbPolicy; + + /** + * @return URL to networkservices.ServiceLbPolicy resource. + * Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + * + */ + public Optional> serviceLbPolicy() { + return Optional.ofNullable(this.serviceLbPolicy); + } + /** * Type of session affinity to use. The default is NONE. Session affinity is * not applicable if the protocol is UDP. @@ -748,6 +765,7 @@ private BackendServiceState(BackendServiceState $) { this.securityPolicy = $.securityPolicy; this.securitySettings = $.securitySettings; this.selfLink = $.selfLink; + this.serviceLbPolicy = $.serviceLbPolicy; this.sessionAffinity = $.sessionAffinity; this.timeoutSec = $.timeoutSec; } @@ -1646,6 +1664,29 @@ public Builder selfLink(String selfLink) { return selfLink(Output.of(selfLink)); } + /** + * @param serviceLbPolicy URL to networkservices.ServiceLbPolicy resource. + * Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + * + * @return builder + * + */ + public Builder serviceLbPolicy(@Nullable Output serviceLbPolicy) { + $.serviceLbPolicy = serviceLbPolicy; + return this; + } + + /** + * @param serviceLbPolicy URL to networkservices.ServiceLbPolicy resource. + * Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + * + * @return builder + * + */ + public Builder serviceLbPolicy(String serviceLbPolicy) { + return serviceLbPolicy(Output.of(serviceLbPolicy)); + } + /** * @param sessionAffinity Type of session affinity to use. The default is NONE. Session affinity is * not applicable if the protocol is UDP. 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 0df06860bf..207111b228 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 @@ -692,6 +692,27 @@ public Optional> sourceSnapshotId() { return Optional.ofNullable(this.sourceSnapshotId); } + /** + * The URL of the storage pool in which the new disk is created. + * For example: + * * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * * /projects/{project}/zones/{zone}/storagePools/{storagePool} + * + */ + @Import(name="storagePool") + private @Nullable Output storagePool; + + /** + * @return The URL of the storage pool in which the new disk is created. + * For example: + * * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * * /projects/{project}/zones/{zone}/storagePools/{storagePool} + * + */ + public Optional> storagePool() { + return Optional.ofNullable(this.storagePool); + } + /** * URL of the disk type resource describing which disk type to use to * create the disk. Provide this when creating the disk. @@ -776,6 +797,7 @@ private DiskState(DiskState $) { this.sourceImageId = $.sourceImageId; this.sourceSnapshotEncryptionKey = $.sourceSnapshotEncryptionKey; this.sourceSnapshotId = $.sourceSnapshotId; + this.storagePool = $.storagePool; this.type = $.type; this.users = $.users; this.zone = $.zone; @@ -1696,6 +1718,33 @@ public Builder sourceSnapshotId(String sourceSnapshotId) { return sourceSnapshotId(Output.of(sourceSnapshotId)); } + /** + * @param storagePool The URL of the storage pool in which the new disk is created. + * For example: + * * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * * /projects/{project}/zones/{zone}/storagePools/{storagePool} + * + * @return builder + * + */ + public Builder storagePool(@Nullable Output storagePool) { + $.storagePool = storagePool; + return this; + } + + /** + * @param storagePool The URL of the storage pool in which the new disk is created. + * For example: + * * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * * /projects/{project}/zones/{zone}/storagePools/{storagePool} + * + * @return builder + * + */ + public Builder storagePool(String storagePool) { + return storagePool(Output.of(storagePool)); + } + /** * @param type URL of the disk type resource describing which disk type to use to * create the disk. Provide this when creating the disk. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetSecurityPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetSecurityPolicyArgs.java new file mode 100644 index 0000000000..26e929c0d6 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetSecurityPolicyArgs.java @@ -0,0 +1,157 @@ +// *** 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 GetSecurityPolicyArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetSecurityPolicyArgs Empty = new GetSecurityPolicyArgs(); + + /** + * The name of the security policy. Provide either this or a `self_link`. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The name of the security policy. Provide either this or a `self_link`. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The project in which the resource belongs. If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The project in which the resource belongs. If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The self_link of the security policy. Provide either this or a `name` + * + */ + @Import(name="selfLink") + private @Nullable Output selfLink; + + /** + * @return The self_link of the security policy. Provide either this or a `name` + * + */ + public Optional> selfLink() { + return Optional.ofNullable(this.selfLink); + } + + private GetSecurityPolicyArgs() {} + + private GetSecurityPolicyArgs(GetSecurityPolicyArgs $) { + this.name = $.name; + this.project = $.project; + this.selfLink = $.selfLink; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetSecurityPolicyArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetSecurityPolicyArgs $; + + public Builder() { + $ = new GetSecurityPolicyArgs(); + } + + public Builder(GetSecurityPolicyArgs defaults) { + $ = new GetSecurityPolicyArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param name The name of the security policy. Provide either this or a `self_link`. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The name of the security policy. Provide either this or a `self_link`. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param project The project in which the resource belongs. If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The project in which the resource belongs. If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param selfLink The self_link of the security policy. Provide either this or a `name` + * + * @return builder + * + */ + public Builder selfLink(@Nullable Output selfLink) { + $.selfLink = selfLink; + return this; + } + + /** + * @param selfLink The self_link of the security policy. Provide either this or a `name` + * + * @return builder + * + */ + public Builder selfLink(String selfLink) { + return selfLink(Output.of(selfLink)); + } + + public GetSecurityPolicyArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetSecurityPolicyPlainArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetSecurityPolicyPlainArgs.java new file mode 100644 index 0000000000..3e54dddf1c --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetSecurityPolicyPlainArgs.java @@ -0,0 +1,126 @@ +// *** 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.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class GetSecurityPolicyPlainArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetSecurityPolicyPlainArgs Empty = new GetSecurityPolicyPlainArgs(); + + /** + * The name of the security policy. Provide either this or a `self_link`. + * + */ + @Import(name="name") + private @Nullable String name; + + /** + * @return The name of the security policy. Provide either this or a `self_link`. + * + */ + public Optional name() { + return Optional.ofNullable(this.name); + } + + /** + * The project in which the resource belongs. If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable String project; + + /** + * @return The project in which the resource belongs. If it is not provided, the provider project is used. + * + */ + public Optional project() { + return Optional.ofNullable(this.project); + } + + /** + * The self_link of the security policy. Provide either this or a `name` + * + */ + @Import(name="selfLink") + private @Nullable String selfLink; + + /** + * @return The self_link of the security policy. Provide either this or a `name` + * + */ + public Optional selfLink() { + return Optional.ofNullable(this.selfLink); + } + + private GetSecurityPolicyPlainArgs() {} + + private GetSecurityPolicyPlainArgs(GetSecurityPolicyPlainArgs $) { + this.name = $.name; + this.project = $.project; + this.selfLink = $.selfLink; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetSecurityPolicyPlainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetSecurityPolicyPlainArgs $; + + public Builder() { + $ = new GetSecurityPolicyPlainArgs(); + } + + public Builder(GetSecurityPolicyPlainArgs defaults) { + $ = new GetSecurityPolicyPlainArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param name The name of the security policy. Provide either this or a `self_link`. + * + * @return builder + * + */ + public Builder name(@Nullable String name) { + $.name = name; + return this; + } + + /** + * @param project The project in which the resource belongs. If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable String project) { + $.project = project; + return this; + } + + /** + * @param selfLink The self_link of the security policy. Provide either this or a `name` + * + * @return builder + * + */ + public Builder selfLink(@Nullable String selfLink) { + $.selfLink = selfLink; + return this; + } + + public GetSecurityPolicyPlainArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromMachineImageState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromMachineImageState.java index 6df0b62da3..25e10631e7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromMachineImageState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromMachineImageState.java @@ -438,6 +438,21 @@ public Optional> params() { return Optional.ofNullable(this.params); } + /** + * Partner Metadata Map made available within the instance. + * + */ + @Import(name="partnerMetadata") + private @Nullable Output> partnerMetadata; + + /** + * @return Partner Metadata Map made available within the instance. + * + */ + public Optional>> partnerMetadata() { + return Optional.ofNullable(this.partnerMetadata); + } + /** * The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither * self_link nor project are provided, the provider project is used. @@ -685,6 +700,7 @@ private InstanceFromMachineImageState(InstanceFromMachineImageState $) { this.networkInterfaces = $.networkInterfaces; this.networkPerformanceConfig = $.networkPerformanceConfig; this.params = $.params; + this.partnerMetadata = $.partnerMetadata; this.project = $.project; this.pulumiLabels = $.pulumiLabels; this.reservationAffinity = $.reservationAffinity; @@ -1319,6 +1335,27 @@ public Builder params(InstanceFromMachineImageParamsArgs params) { return params(Output.of(params)); } + /** + * @param partnerMetadata Partner Metadata Map made available within the instance. + * + * @return builder + * + */ + public Builder partnerMetadata(@Nullable Output> partnerMetadata) { + $.partnerMetadata = partnerMetadata; + return this; + } + + /** + * @param partnerMetadata Partner Metadata Map made available within the instance. + * + * @return builder + * + */ + public Builder partnerMetadata(Map partnerMetadata) { + return partnerMetadata(Output.of(partnerMetadata)); + } + /** * @param project The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither * self_link nor project are provided, the provider project is used. 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 b22312dd47..900ffce16e 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 @@ -438,6 +438,21 @@ public Optional> params() { return Optional.ofNullable(this.params); } + /** + * Partner Metadata Map made available within the instance. + * + */ + @Import(name="partnerMetadata") + private @Nullable Output> partnerMetadata; + + /** + * @return Partner Metadata Map made available within the instance. + * + */ + public Optional>> partnerMetadata() { + return Optional.ofNullable(this.partnerMetadata); + } + /** * The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither * self_link nor project are provided, the provider project is used. @@ -683,6 +698,7 @@ private InstanceFromTemplateState(InstanceFromTemplateState $) { this.networkInterfaces = $.networkInterfaces; this.networkPerformanceConfig = $.networkPerformanceConfig; this.params = $.params; + this.partnerMetadata = $.partnerMetadata; this.project = $.project; this.pulumiLabels = $.pulumiLabels; this.reservationAffinity = $.reservationAffinity; @@ -1307,6 +1323,27 @@ public Builder params(InstanceFromTemplateParamsArgs params) { return params(Output.of(params)); } + /** + * @param partnerMetadata Partner Metadata Map made available within the instance. + * + * @return builder + * + */ + public Builder partnerMetadata(@Nullable Output> partnerMetadata) { + $.partnerMetadata = partnerMetadata; + return this; + } + + /** + * @param partnerMetadata Partner Metadata Map made available within the instance. + * + * @return builder + * + */ + public Builder partnerMetadata(Map partnerMetadata) { + return partnerMetadata(Output.of(partnerMetadata)); + } + /** * @param project The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither * self_link nor project are provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceGroupManagerStandbyPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceGroupManagerStandbyPolicyArgs.java new file mode 100644 index 0000000000..cd375f9b70 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceGroupManagerStandbyPolicyArgs.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.compute.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class InstanceGroupManagerStandbyPolicyArgs extends com.pulumi.resources.ResourceArgs { + + public static final InstanceGroupManagerStandbyPolicyArgs Empty = new InstanceGroupManagerStandbyPolicyArgs(); + + /** + * Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + */ + @Import(name="initialDelaySec") + private @Nullable Output initialDelaySec; + + /** + * @return Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + */ + public Optional> initialDelaySec() { + return Optional.ofNullable(this.initialDelaySec); + } + + /** + * Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * *** + * + */ + @Import(name="mode") + private @Nullable Output mode; + + /** + * @return Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * *** + * + */ + public Optional> mode() { + return Optional.ofNullable(this.mode); + } + + private InstanceGroupManagerStandbyPolicyArgs() {} + + private InstanceGroupManagerStandbyPolicyArgs(InstanceGroupManagerStandbyPolicyArgs $) { + this.initialDelaySec = $.initialDelaySec; + this.mode = $.mode; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(InstanceGroupManagerStandbyPolicyArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private InstanceGroupManagerStandbyPolicyArgs $; + + public Builder() { + $ = new InstanceGroupManagerStandbyPolicyArgs(); + } + + public Builder(InstanceGroupManagerStandbyPolicyArgs defaults) { + $ = new InstanceGroupManagerStandbyPolicyArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param initialDelaySec Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + * @return builder + * + */ + public Builder initialDelaySec(@Nullable Output initialDelaySec) { + $.initialDelaySec = initialDelaySec; + return this; + } + + /** + * @param initialDelaySec Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + * @return builder + * + */ + public Builder initialDelaySec(Integer initialDelaySec) { + return initialDelaySec(Output.of(initialDelaySec)); + } + + /** + * @param mode Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * *** + * + * @return builder + * + */ + public Builder mode(@Nullable Output mode) { + $.mode = mode; + return this; + } + + /** + * @param mode Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * *** + * + * @return builder + * + */ + public Builder mode(String mode) { + return mode(Output.of(mode)); + } + + public InstanceGroupManagerStandbyPolicyArgs build() { + return $; + } + } + +} 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 abf158ed08..df89bfa94a 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 @@ -10,6 +10,7 @@ import com.pulumi.gcp.compute.inputs.InstanceGroupManagerInstanceLifecyclePolicyArgs; import com.pulumi.gcp.compute.inputs.InstanceGroupManagerNamedPortArgs; import com.pulumi.gcp.compute.inputs.InstanceGroupManagerParamsArgs; +import com.pulumi.gcp.compute.inputs.InstanceGroupManagerStandbyPolicyArgs; import com.pulumi.gcp.compute.inputs.InstanceGroupManagerStatefulDiskArgs; import com.pulumi.gcp.compute.inputs.InstanceGroupManagerStatefulExternalIpArgs; import com.pulumi.gcp.compute.inputs.InstanceGroupManagerStatefulInternalIpArgs; @@ -288,6 +289,21 @@ public Optional> selfLink() { return Optional.ofNullable(this.selfLink); } + /** + * The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + */ + @Import(name="standbyPolicy") + private @Nullable Output standbyPolicy; + + /** + * @return The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + */ + public Optional> standbyPolicy() { + return Optional.ofNullable(this.standbyPolicy); + } + /** * Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). * @@ -384,6 +400,36 @@ public Optional> targetSize() { return Optional.ofNullable(this.targetSize); } + /** + * The target number of stopped instances for this managed instance group. + * + */ + @Import(name="targetStoppedSize") + private @Nullable Output targetStoppedSize; + + /** + * @return The target number of stopped instances for this managed instance group. + * + */ + public Optional> targetStoppedSize() { + return Optional.ofNullable(this.targetStoppedSize); + } + + /** + * The target number of suspended instances for this managed instance group. + * + */ + @Import(name="targetSuspendedSize") + private @Nullable Output targetSuspendedSize; + + /** + * @return The target number of suspended instances for this managed instance group. + * + */ + public Optional> targetSuspendedSize() { + return Optional.ofNullable(this.targetSuspendedSize); + } + /** * 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). * @@ -497,12 +543,15 @@ private InstanceGroupManagerState(InstanceGroupManagerState $) { this.params = $.params; this.project = $.project; this.selfLink = $.selfLink; + this.standbyPolicy = $.standbyPolicy; this.statefulDisks = $.statefulDisks; this.statefulExternalIps = $.statefulExternalIps; this.statefulInternalIps = $.statefulInternalIps; this.statuses = $.statuses; this.targetPools = $.targetPools; this.targetSize = $.targetSize; + this.targetStoppedSize = $.targetStoppedSize; + this.targetSuspendedSize = $.targetSuspendedSize; this.updatePolicy = $.updatePolicy; this.versions = $.versions; this.waitForInstances = $.waitForInstances; @@ -884,6 +933,27 @@ public Builder selfLink(String selfLink) { return selfLink(Output.of(selfLink)); } + /** + * @param standbyPolicy The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + * @return builder + * + */ + public Builder standbyPolicy(@Nullable Output standbyPolicy) { + $.standbyPolicy = standbyPolicy; + return this; + } + + /** + * @param standbyPolicy The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + * @return builder + * + */ + public Builder standbyPolicy(InstanceGroupManagerStandbyPolicyArgs standbyPolicy) { + return standbyPolicy(Output.of(standbyPolicy)); + } + /** * @param statefulDisks Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). * @@ -1068,6 +1138,48 @@ public Builder targetSize(Integer targetSize) { return targetSize(Output.of(targetSize)); } + /** + * @param targetStoppedSize The target number of stopped instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetStoppedSize(@Nullable Output targetStoppedSize) { + $.targetStoppedSize = targetStoppedSize; + return this; + } + + /** + * @param targetStoppedSize The target number of stopped instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetStoppedSize(Integer targetStoppedSize) { + return targetStoppedSize(Output.of(targetStoppedSize)); + } + + /** + * @param targetSuspendedSize The target number of suspended instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetSuspendedSize(@Nullable Output targetSuspendedSize) { + $.targetSuspendedSize = targetSuspendedSize; + return this; + } + + /** + * @param targetSuspendedSize The target number of suspended instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetSuspendedSize(Integer targetSuspendedSize) { + return targetSuspendedSize(Output.of(targetSuspendedSize)); + } + /** * @param updatePolicy 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). * 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 7607ef02e6..37310fcacd 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 @@ -538,6 +538,21 @@ public Optional> params() { return Optional.ofNullable(this.params); } + /** + * Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + @Import(name="partnerMetadata") + private @Nullable Output> partnerMetadata; + + /** + * @return Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + public Optional>> partnerMetadata() { + return Optional.ofNullable(this.partnerMetadata); + } + /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -764,6 +779,7 @@ private InstanceState(InstanceState $) { this.networkInterfaces = $.networkInterfaces; this.networkPerformanceConfig = $.networkPerformanceConfig; this.params = $.params; + this.partnerMetadata = $.partnerMetadata; this.project = $.project; this.pulumiLabels = $.pulumiLabels; this.reservationAffinity = $.reservationAffinity; @@ -1499,6 +1515,27 @@ public Builder params(InstanceParamsArgs params) { return params(Output.of(params)); } + /** + * @param partnerMetadata Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + * @return builder + * + */ + public Builder partnerMetadata(@Nullable Output> partnerMetadata) { + $.partnerMetadata = partnerMetadata; + return this; + } + + /** + * @param partnerMetadata Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + * @return builder + * + */ + public Builder partnerMetadata(Map partnerMetadata) { + return partnerMetadata(Output.of(partnerMetadata)); + } + /** * @param project The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateState.java index 0dc943ea23..44b4e6066b 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 @@ -368,6 +368,21 @@ public Optional> networkPer return Optional.ofNullable(this.networkPerformanceConfig); } + /** + * Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + @Import(name="partnerMetadata") + private @Nullable Output> partnerMetadata; + + /** + * @return Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + public Optional>> partnerMetadata() { + return Optional.ofNullable(this.partnerMetadata); + } + /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -605,6 +620,7 @@ private InstanceTemplateState(InstanceTemplateState $) { this.namePrefix = $.namePrefix; this.networkInterfaces = $.networkInterfaces; this.networkPerformanceConfig = $.networkPerformanceConfig; + this.partnerMetadata = $.partnerMetadata; this.project = $.project; this.pulumiLabels = $.pulumiLabels; this.region = $.region; @@ -1125,6 +1141,27 @@ public Builder networkPerformanceConfig(InstanceTemplateNetworkPerformanceConfig return networkPerformanceConfig(Output.of(networkPerformanceConfig)); } + /** + * @param partnerMetadata Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + * @return builder + * + */ + public Builder partnerMetadata(@Nullable Output> partnerMetadata) { + $.partnerMetadata = partnerMetadata; + return this; + } + + /** + * @param partnerMetadata Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + * @return builder + * + */ + public Builder partnerMetadata(Map partnerMetadata) { + return partnerMetadata(Output.of(partnerMetadata)); + } + /** * @param project The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/ProjectCloudArmorTierState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/ProjectCloudArmorTierState.java new file mode 100644 index 0000000000..5e33e17e3f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/ProjectCloudArmorTierState.java @@ -0,0 +1,136 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.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 ProjectCloudArmorTierState extends com.pulumi.resources.ResourceArgs { + + public static final ProjectCloudArmorTierState Empty = new ProjectCloudArmorTierState(); + + /** + * Managed protection tier to be set. + * Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + * + * *** + * + */ + @Import(name="cloudArmorTier") + private @Nullable Output cloudArmorTier; + + /** + * @return Managed protection tier to be set. + * Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + * + * *** + * + */ + public Optional> cloudArmorTier() { + return Optional.ofNullable(this.cloudArmorTier); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private ProjectCloudArmorTierState() {} + + private ProjectCloudArmorTierState(ProjectCloudArmorTierState $) { + this.cloudArmorTier = $.cloudArmorTier; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ProjectCloudArmorTierState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ProjectCloudArmorTierState $; + + public Builder() { + $ = new ProjectCloudArmorTierState(); + } + + public Builder(ProjectCloudArmorTierState defaults) { + $ = new ProjectCloudArmorTierState(Objects.requireNonNull(defaults)); + } + + /** + * @param cloudArmorTier Managed protection tier to be set. + * Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + * + * *** + * + * @return builder + * + */ + public Builder cloudArmorTier(@Nullable Output cloudArmorTier) { + $.cloudArmorTier = cloudArmorTier; + return this; + } + + /** + * @param cloudArmorTier Managed protection tier to be set. + * Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + * + * *** + * + * @return builder + * + */ + public Builder cloudArmorTier(String cloudArmorTier) { + return cloudArmorTier(Output.of(cloudArmorTier)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public ProjectCloudArmorTierState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceGroupManagerStandbyPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceGroupManagerStandbyPolicyArgs.java new file mode 100644 index 0000000000..e0ba893403 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceGroupManagerStandbyPolicyArgs.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.compute.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RegionInstanceGroupManagerStandbyPolicyArgs extends com.pulumi.resources.ResourceArgs { + + public static final RegionInstanceGroupManagerStandbyPolicyArgs Empty = new RegionInstanceGroupManagerStandbyPolicyArgs(); + + /** + * Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + */ + @Import(name="initialDelaySec") + private @Nullable Output initialDelaySec; + + /** + * @return Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + */ + public Optional> initialDelaySec() { + return Optional.ofNullable(this.initialDelaySec); + } + + /** + * Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * *** + * + */ + @Import(name="mode") + private @Nullable Output mode; + + /** + * @return Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * *** + * + */ + public Optional> mode() { + return Optional.ofNullable(this.mode); + } + + private RegionInstanceGroupManagerStandbyPolicyArgs() {} + + private RegionInstanceGroupManagerStandbyPolicyArgs(RegionInstanceGroupManagerStandbyPolicyArgs $) { + this.initialDelaySec = $.initialDelaySec; + this.mode = $.mode; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RegionInstanceGroupManagerStandbyPolicyArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RegionInstanceGroupManagerStandbyPolicyArgs $; + + public Builder() { + $ = new RegionInstanceGroupManagerStandbyPolicyArgs(); + } + + public Builder(RegionInstanceGroupManagerStandbyPolicyArgs defaults) { + $ = new RegionInstanceGroupManagerStandbyPolicyArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param initialDelaySec Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + * @return builder + * + */ + public Builder initialDelaySec(@Nullable Output initialDelaySec) { + $.initialDelaySec = initialDelaySec; + return this; + } + + /** + * @param initialDelaySec Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + * @return builder + * + */ + public Builder initialDelaySec(Integer initialDelaySec) { + return initialDelaySec(Output.of(initialDelaySec)); + } + + /** + * @param mode Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * *** + * + * @return builder + * + */ + public Builder mode(@Nullable Output mode) { + $.mode = mode; + return this; + } + + /** + * @param mode Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * *** + * + * @return builder + * + */ + public Builder mode(String mode) { + return mode(Output.of(mode)); + } + + public RegionInstanceGroupManagerStandbyPolicyArgs build() { + return $; + } + } + +} 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 de87f38b02..c401559620 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 @@ -10,6 +10,7 @@ import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerInstanceLifecyclePolicyArgs; import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerNamedPortArgs; import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerParamsArgs; +import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerStandbyPolicyArgs; import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerStatefulDiskArgs; import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerStatefulExternalIpArgs; import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerStatefulInternalIpArgs; @@ -332,6 +333,21 @@ public Optional> selfLink() { return Optional.ofNullable(this.selfLink); } + /** + * The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + */ + @Import(name="standbyPolicy") + private @Nullable Output standbyPolicy; + + /** + * @return The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + */ + public Optional> standbyPolicy() { + return Optional.ofNullable(this.standbyPolicy); + } + /** * Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `update_policy`. * @@ -428,6 +444,36 @@ public Optional> targetSize() { return Optional.ofNullable(this.targetSize); } + /** + * The target number of stopped instances for this managed instance group. + * + */ + @Import(name="targetStoppedSize") + private @Nullable Output targetStoppedSize; + + /** + * @return The target number of stopped instances for this managed instance group. + * + */ + public Optional> targetStoppedSize() { + return Optional.ofNullable(this.targetStoppedSize); + } + + /** + * The target number of suspended instances for this managed instance group. + * + */ + @Import(name="targetSuspendedSize") + private @Nullable Output targetSuspendedSize; + + /** + * @return The target number of suspended instances for this managed instance group. + * + */ + public Optional> targetSuspendedSize() { + return Optional.ofNullable(this.targetSuspendedSize); + } + /** * 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) * @@ -522,12 +568,15 @@ private RegionInstanceGroupManagerState(RegionInstanceGroupManagerState $) { this.project = $.project; this.region = $.region; this.selfLink = $.selfLink; + this.standbyPolicy = $.standbyPolicy; this.statefulDisks = $.statefulDisks; this.statefulExternalIps = $.statefulExternalIps; this.statefulInternalIps = $.statefulInternalIps; this.statuses = $.statuses; this.targetPools = $.targetPools; this.targetSize = $.targetSize; + this.targetStoppedSize = $.targetStoppedSize; + this.targetSuspendedSize = $.targetSuspendedSize; this.updatePolicy = $.updatePolicy; this.versions = $.versions; this.waitForInstances = $.waitForInstances; @@ -979,6 +1028,27 @@ public Builder selfLink(String selfLink) { return selfLink(Output.of(selfLink)); } + /** + * @param standbyPolicy The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + * @return builder + * + */ + public Builder standbyPolicy(@Nullable Output standbyPolicy) { + $.standbyPolicy = standbyPolicy; + return this; + } + + /** + * @param standbyPolicy The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + * + * @return builder + * + */ + public Builder standbyPolicy(RegionInstanceGroupManagerStandbyPolicyArgs standbyPolicy) { + return standbyPolicy(Output.of(standbyPolicy)); + } + /** * @param statefulDisks Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `update_policy`. * @@ -1163,6 +1233,48 @@ public Builder targetSize(Integer targetSize) { return targetSize(Output.of(targetSize)); } + /** + * @param targetStoppedSize The target number of stopped instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetStoppedSize(@Nullable Output targetStoppedSize) { + $.targetStoppedSize = targetStoppedSize; + return this; + } + + /** + * @param targetStoppedSize The target number of stopped instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetStoppedSize(Integer targetStoppedSize) { + return targetStoppedSize(Output.of(targetStoppedSize)); + } + + /** + * @param targetSuspendedSize The target number of suspended instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetSuspendedSize(@Nullable Output targetSuspendedSize) { + $.targetSuspendedSize = targetSuspendedSize; + return this; + } + + /** + * @param targetSuspendedSize The target number of suspended instances for this managed instance group. + * + * @return builder + * + */ + public Builder targetSuspendedSize(Integer targetSuspendedSize) { + return targetSuspendedSize(Output.of(targetSuspendedSize)); + } + /** * @param updatePolicy 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) * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateState.java index 92cf92199a..d52ae7eb1e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateState.java @@ -358,6 +358,21 @@ public Optional> netw return Optional.ofNullable(this.networkPerformanceConfig); } + /** + * Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + @Import(name="partnerMetadata") + private @Nullable Output> partnerMetadata; + + /** + * @return Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + */ + public Optional>> partnerMetadata() { + return Optional.ofNullable(this.partnerMetadata); + } + /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -570,6 +585,7 @@ private RegionInstanceTemplateState(RegionInstanceTemplateState $) { this.namePrefix = $.namePrefix; this.networkInterfaces = $.networkInterfaces; this.networkPerformanceConfig = $.networkPerformanceConfig; + this.partnerMetadata = $.partnerMetadata; this.project = $.project; this.pulumiLabels = $.pulumiLabels; this.region = $.region; @@ -1075,6 +1091,27 @@ public Builder networkPerformanceConfig(RegionInstanceTemplateNetworkPerformance return networkPerformanceConfig(Output.of(networkPerformanceConfig)); } + /** + * @param partnerMetadata Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + * @return builder + * + */ + public Builder partnerMetadata(@Nullable Output> partnerMetadata) { + $.partnerMetadata = partnerMetadata; + return this; + } + + /** + * @param partnerMetadata Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + * + * @return builder + * + */ + public Builder partnerMetadata(Map partnerMetadata) { + return partnerMetadata(Output.of(partnerMetadata)); + } + /** * @param project The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceResult.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceResult.java index b7e6942a3b..432abcdc46 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 @@ -98,6 +98,7 @@ public final class GetBackendServiceResult { * */ private String selfLink; + private String serviceLbPolicy; /** * @return The Backend Service session stickiness configuration. * @@ -244,6 +245,9 @@ public List securitySettings() { public String selfLink() { return this.selfLink; } + public String serviceLbPolicy() { + return this.serviceLbPolicy; + } /** * @return The Backend Service session stickiness configuration. * @@ -298,6 +302,7 @@ public static final class Builder { private String securityPolicy; private List securitySettings; private String selfLink; + private String serviceLbPolicy; private String sessionAffinity; private Integer timeoutSec; public Builder() {} @@ -333,6 +338,7 @@ public Builder(GetBackendServiceResult defaults) { this.securityPolicy = defaults.securityPolicy; this.securitySettings = defaults.securitySettings; this.selfLink = defaults.selfLink; + this.serviceLbPolicy = defaults.serviceLbPolicy; this.sessionAffinity = defaults.sessionAffinity; this.timeoutSec = defaults.timeoutSec; } @@ -612,6 +618,14 @@ public Builder selfLink(String selfLink) { return this; } @CustomType.Setter + public Builder serviceLbPolicy(String serviceLbPolicy) { + if (serviceLbPolicy == null) { + throw new MissingRequiredPropertyException("GetBackendServiceResult", "serviceLbPolicy"); + } + this.serviceLbPolicy = serviceLbPolicy; + return this; + } + @CustomType.Setter public Builder sessionAffinity(String sessionAffinity) { if (sessionAffinity == null) { throw new MissingRequiredPropertyException("GetBackendServiceResult", "sessionAffinity"); @@ -659,6 +673,7 @@ public GetBackendServiceResult build() { _resultValue.securityPolicy = securityPolicy; _resultValue.securitySettings = securitySettings; _resultValue.selfLink = selfLink; + _resultValue.serviceLbPolicy = serviceLbPolicy; _resultValue.sessionAffinity = sessionAffinity; _resultValue.timeoutSec = timeoutSec; return _resultValue; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetDiskResult.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetDiskResult.java index dadd4aaae8..7f76a4a1d8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetDiskResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetDiskResult.java @@ -128,6 +128,7 @@ public final class GetDiskResult { * */ private String sourceSnapshotId; + private String storagePool; /** * @return URL of the disk type resource describing which disk type to use to * create the disk. @@ -320,6 +321,9 @@ public List sourceSnapshotEncryptionKeys() { public String sourceSnapshotId() { return this.sourceSnapshotId; } + public String storagePool() { + return this.storagePool; + } /** * @return URL of the disk type resource describing which disk type to use to * create the disk. @@ -386,6 +390,7 @@ public static final class Builder { private String sourceImageId; private List sourceSnapshotEncryptionKeys; private String sourceSnapshotId; + private String storagePool; private String type; private List users; private @Nullable String zone; @@ -425,6 +430,7 @@ public Builder(GetDiskResult defaults) { this.sourceImageId = defaults.sourceImageId; this.sourceSnapshotEncryptionKeys = defaults.sourceSnapshotEncryptionKeys; this.sourceSnapshotId = defaults.sourceSnapshotId; + this.storagePool = defaults.storagePool; this.type = defaults.type; this.users = defaults.users; this.zone = defaults.zone; @@ -714,6 +720,14 @@ public Builder sourceSnapshotId(String sourceSnapshotId) { return this; } @CustomType.Setter + public Builder storagePool(String storagePool) { + if (storagePool == null) { + throw new MissingRequiredPropertyException("GetDiskResult", "storagePool"); + } + this.storagePool = storagePool; + return this; + } + @CustomType.Setter public Builder type(String type) { if (type == null) { throw new MissingRequiredPropertyException("GetDiskResult", "type"); @@ -773,6 +787,7 @@ public GetDiskResult build() { _resultValue.sourceImageId = sourceImageId; _resultValue.sourceSnapshotEncryptionKeys = sourceSnapshotEncryptionKeys; _resultValue.sourceSnapshotId = sourceSnapshotId; + _resultValue.storagePool = storagePool; _resultValue.type = type; _resultValue.users = users; _resultValue.zone = zone; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceGroupManagerResult.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceGroupManagerResult.java index 835f11309b..7176ce3d21 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceGroupManagerResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceGroupManagerResult.java @@ -10,6 +10,7 @@ import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerInstanceLifecyclePolicy; import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerNamedPort; import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerParam; +import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerStandbyPolicy; import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerStatefulDisk; import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerStatefulExternalIp; import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerStatefulInternalIp; @@ -46,12 +47,15 @@ public final class GetInstanceGroupManagerResult { private List params; private @Nullable String project; private @Nullable String selfLink; + private List standbyPolicies; private List statefulDisks; private List statefulExternalIps; private List statefulInternalIps; private List statuses; private List targetPools; private Integer targetSize; + private Integer targetStoppedSize; + private Integer targetSuspendedSize; private List updatePolicies; private List versions; private Boolean waitForInstances; @@ -111,6 +115,9 @@ public Optional project() { public Optional selfLink() { return Optional.ofNullable(this.selfLink); } + public List standbyPolicies() { + return this.standbyPolicies; + } public List statefulDisks() { return this.statefulDisks; } @@ -129,6 +136,12 @@ public List targetPools() { public Integer targetSize() { return this.targetSize; } + public Integer targetStoppedSize() { + return this.targetStoppedSize; + } + public Integer targetSuspendedSize() { + return this.targetSuspendedSize; + } public List updatePolicies() { return this.updatePolicies; } @@ -170,12 +183,15 @@ public static final class Builder { private List params; private @Nullable String project; private @Nullable String selfLink; + private List standbyPolicies; private List statefulDisks; private List statefulExternalIps; private List statefulInternalIps; private List statuses; private List targetPools; private Integer targetSize; + private Integer targetStoppedSize; + private Integer targetSuspendedSize; private List updatePolicies; private List versions; private Boolean waitForInstances; @@ -200,12 +216,15 @@ public Builder(GetInstanceGroupManagerResult defaults) { this.params = defaults.params; this.project = defaults.project; this.selfLink = defaults.selfLink; + this.standbyPolicies = defaults.standbyPolicies; this.statefulDisks = defaults.statefulDisks; this.statefulExternalIps = defaults.statefulExternalIps; this.statefulInternalIps = defaults.statefulInternalIps; this.statuses = defaults.statuses; this.targetPools = defaults.targetPools; this.targetSize = defaults.targetSize; + this.targetStoppedSize = defaults.targetStoppedSize; + this.targetSuspendedSize = defaults.targetSuspendedSize; this.updatePolicies = defaults.updatePolicies; this.versions = defaults.versions; this.waitForInstances = defaults.waitForInstances; @@ -351,6 +370,17 @@ public Builder selfLink(@Nullable String selfLink) { return this; } @CustomType.Setter + public Builder standbyPolicies(List standbyPolicies) { + if (standbyPolicies == null) { + throw new MissingRequiredPropertyException("GetInstanceGroupManagerResult", "standbyPolicies"); + } + this.standbyPolicies = standbyPolicies; + return this; + } + public Builder standbyPolicies(GetInstanceGroupManagerStandbyPolicy... standbyPolicies) { + return standbyPolicies(List.of(standbyPolicies)); + } + @CustomType.Setter public Builder statefulDisks(List statefulDisks) { if (statefulDisks == null) { throw new MissingRequiredPropertyException("GetInstanceGroupManagerResult", "statefulDisks"); @@ -414,6 +444,22 @@ public Builder targetSize(Integer targetSize) { return this; } @CustomType.Setter + public Builder targetStoppedSize(Integer targetStoppedSize) { + if (targetStoppedSize == null) { + throw new MissingRequiredPropertyException("GetInstanceGroupManagerResult", "targetStoppedSize"); + } + this.targetStoppedSize = targetStoppedSize; + return this; + } + @CustomType.Setter + public Builder targetSuspendedSize(Integer targetSuspendedSize) { + if (targetSuspendedSize == null) { + throw new MissingRequiredPropertyException("GetInstanceGroupManagerResult", "targetSuspendedSize"); + } + this.targetSuspendedSize = targetSuspendedSize; + return this; + } + @CustomType.Setter public Builder updatePolicies(List updatePolicies) { if (updatePolicies == null) { throw new MissingRequiredPropertyException("GetInstanceGroupManagerResult", "updatePolicies"); @@ -475,12 +521,15 @@ public GetInstanceGroupManagerResult build() { _resultValue.params = params; _resultValue.project = project; _resultValue.selfLink = selfLink; + _resultValue.standbyPolicies = standbyPolicies; _resultValue.statefulDisks = statefulDisks; _resultValue.statefulExternalIps = statefulExternalIps; _resultValue.statefulInternalIps = statefulInternalIps; _resultValue.statuses = statuses; _resultValue.targetPools = targetPools; _resultValue.targetSize = targetSize; + _resultValue.targetStoppedSize = targetStoppedSize; + _resultValue.targetSuspendedSize = targetSuspendedSize; _resultValue.updatePolicies = updatePolicies; _resultValue.versions = versions; _resultValue.waitForInstances = waitForInstances; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceGroupManagerStandbyPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceGroupManagerStandbyPolicy.java new file mode 100644 index 0000000000..e2a87be7af --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceGroupManagerStandbyPolicy.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.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetInstanceGroupManagerStandbyPolicy { + /** + * @return Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + */ + private Integer initialDelaySec; + /** + * @return Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. The default mode is "MANUAL". + * + */ + private String mode; + + private GetInstanceGroupManagerStandbyPolicy() {} + /** + * @return Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + */ + public Integer initialDelaySec() { + return this.initialDelaySec; + } + /** + * @return Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. The default mode is "MANUAL". + * + */ + public String mode() { + return this.mode; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetInstanceGroupManagerStandbyPolicy defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Integer initialDelaySec; + private String mode; + public Builder() {} + public Builder(GetInstanceGroupManagerStandbyPolicy defaults) { + Objects.requireNonNull(defaults); + this.initialDelaySec = defaults.initialDelaySec; + this.mode = defaults.mode; + } + + @CustomType.Setter + public Builder initialDelaySec(Integer initialDelaySec) { + if (initialDelaySec == null) { + throw new MissingRequiredPropertyException("GetInstanceGroupManagerStandbyPolicy", "initialDelaySec"); + } + this.initialDelaySec = initialDelaySec; + return this; + } + @CustomType.Setter + public Builder mode(String mode) { + if (mode == null) { + throw new MissingRequiredPropertyException("GetInstanceGroupManagerStandbyPolicy", "mode"); + } + this.mode = mode; + return this; + } + public GetInstanceGroupManagerStandbyPolicy build() { + final var _resultValue = new GetInstanceGroupManagerStandbyPolicy(); + _resultValue.initialDelaySec = initialDelaySec; + _resultValue.mode = mode; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceResult.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceResult.java index c48c3b264e..ffa8dd6cca 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceResult.java @@ -132,6 +132,7 @@ public final class GetInstanceResult { */ private List networkPerformanceConfigs; private List params; + private Map partnerMetadata; private @Nullable String project; private Map pulumiLabels; private List reservationAffinities; @@ -334,6 +335,9 @@ public List networkPerformanceConfigs() { public List params() { return this.params; } + public Map partnerMetadata() { + return this.partnerMetadata; + } public Optional project() { return Optional.ofNullable(this.project); } @@ -436,6 +440,7 @@ public static final class Builder { private List networkInterfaces; private List networkPerformanceConfigs; private List params; + private Map partnerMetadata; private @Nullable String project; private Map pulumiLabels; private List reservationAffinities; @@ -479,6 +484,7 @@ public Builder(GetInstanceResult defaults) { this.networkInterfaces = defaults.networkInterfaces; this.networkPerformanceConfigs = defaults.networkPerformanceConfigs; this.params = defaults.params; + this.partnerMetadata = defaults.partnerMetadata; this.project = defaults.project; this.pulumiLabels = defaults.pulumiLabels; this.reservationAffinities = defaults.reservationAffinities; @@ -740,6 +746,14 @@ public Builder params(GetInstanceParam... params) { return params(List.of(params)); } @CustomType.Setter + public Builder partnerMetadata(Map partnerMetadata) { + if (partnerMetadata == null) { + throw new MissingRequiredPropertyException("GetInstanceResult", "partnerMetadata"); + } + this.partnerMetadata = partnerMetadata; + return this; + } + @CustomType.Setter public Builder project(@Nullable String project) { this.project = project; @@ -880,6 +894,7 @@ public GetInstanceResult build() { _resultValue.networkInterfaces = networkInterfaces; _resultValue.networkPerformanceConfigs = networkPerformanceConfigs; _resultValue.params = params; + _resultValue.partnerMetadata = partnerMetadata; _resultValue.project = project; _resultValue.pulumiLabels = pulumiLabels; _resultValue.reservationAffinities = reservationAffinities; 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 cb7561be95..f2eb055e6c 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 @@ -134,6 +134,7 @@ public final class GetInstanceTemplateResult { * */ private List networkPerformanceConfigs; + private Map partnerMetadata; /** * @return The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -350,6 +351,9 @@ public List networkInterfaces() { public List networkPerformanceConfigs() { return this.networkPerformanceConfigs; } + public Map partnerMetadata() { + return this.partnerMetadata; + } /** * @return The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -470,6 +474,7 @@ public static final class Builder { private String namePrefix; private List networkInterfaces; private List networkPerformanceConfigs; + private Map partnerMetadata; private @Nullable String project; private Map pulumiLabels; private String region; @@ -508,6 +513,7 @@ public Builder(GetInstanceTemplateResult defaults) { this.namePrefix = defaults.namePrefix; this.networkInterfaces = defaults.networkInterfaces; this.networkPerformanceConfigs = defaults.networkPerformanceConfigs; + this.partnerMetadata = defaults.partnerMetadata; this.project = defaults.project; this.pulumiLabels = defaults.pulumiLabels; this.region = defaults.region; @@ -712,6 +718,14 @@ public Builder networkPerformanceConfigs(GetInstanceTemplateNetworkPerformanceCo return networkPerformanceConfigs(List.of(networkPerformanceConfigs)); } @CustomType.Setter + public Builder partnerMetadata(Map partnerMetadata) { + if (partnerMetadata == null) { + throw new MissingRequiredPropertyException("GetInstanceTemplateResult", "partnerMetadata"); + } + this.partnerMetadata = partnerMetadata; + return this; + } + @CustomType.Setter public Builder project(@Nullable String project) { this.project = project; @@ -853,6 +867,7 @@ public GetInstanceTemplateResult build() { _resultValue.namePrefix = namePrefix; _resultValue.networkInterfaces = networkInterfaces; _resultValue.networkPerformanceConfigs = networkPerformanceConfigs; + _resultValue.partnerMetadata = partnerMetadata; _resultValue.project = project; _resultValue.pulumiLabels = pulumiLabels; _resultValue.region = region; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceTemplateResult.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceTemplateResult.java index 55ee097ac2..20de7c6b33 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceTemplateResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceTemplateResult.java @@ -131,6 +131,7 @@ public final class GetRegionInstanceTemplateResult { * */ private List networkPerformanceConfigs; + private Map partnerMetadata; /** * @return The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -329,6 +330,9 @@ public List networkInterfaces() { public List networkPerformanceConfigs() { return this.networkPerformanceConfigs; } + public Map partnerMetadata() { + return this.partnerMetadata; + } /** * @return The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -432,6 +436,7 @@ public static final class Builder { private String namePrefix; private List networkInterfaces; private List networkPerformanceConfigs; + private Map partnerMetadata; private @Nullable String project; private Map pulumiLabels; private @Nullable String region; @@ -469,6 +474,7 @@ public Builder(GetRegionInstanceTemplateResult defaults) { this.namePrefix = defaults.namePrefix; this.networkInterfaces = defaults.networkInterfaces; this.networkPerformanceConfigs = defaults.networkPerformanceConfigs; + this.partnerMetadata = defaults.partnerMetadata; this.project = defaults.project; this.pulumiLabels = defaults.pulumiLabels; this.region = defaults.region; @@ -672,6 +678,14 @@ public Builder networkPerformanceConfigs(GetRegionInstanceTemplateNetworkPerform return networkPerformanceConfigs(List.of(networkPerformanceConfigs)); } @CustomType.Setter + public Builder partnerMetadata(Map partnerMetadata) { + if (partnerMetadata == null) { + throw new MissingRequiredPropertyException("GetRegionInstanceTemplateResult", "partnerMetadata"); + } + this.partnerMetadata = partnerMetadata; + return this; + } + @CustomType.Setter public Builder project(@Nullable String project) { this.project = project; @@ -805,6 +819,7 @@ public GetRegionInstanceTemplateResult build() { _resultValue.namePrefix = namePrefix; _resultValue.networkInterfaces = networkInterfaces; _resultValue.networkPerformanceConfigs = networkPerformanceConfigs; + _resultValue.partnerMetadata = partnerMetadata; _resultValue.project = project; _resultValue.pulumiLabels = pulumiLabels; _resultValue.region = region; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfig.java new file mode 100644 index 0000000000..cdf644a093 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfig.java @@ -0,0 +1,89 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyAdaptiveProtectionConfig { + /** + * @return Auto Deploy Config of this security policy + * + */ + private List autoDeployConfigs; + /** + * @return Layer 7 DDoS Defense Config of this security policy + * + */ + private List layer7DdosDefenseConfigs; + + private GetSecurityPolicyAdaptiveProtectionConfig() {} + /** + * @return Auto Deploy Config of this security policy + * + */ + public List autoDeployConfigs() { + return this.autoDeployConfigs; + } + /** + * @return Layer 7 DDoS Defense Config of this security policy + * + */ + public List layer7DdosDefenseConfigs() { + return this.layer7DdosDefenseConfigs; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyAdaptiveProtectionConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List autoDeployConfigs; + private List layer7DdosDefenseConfigs; + public Builder() {} + public Builder(GetSecurityPolicyAdaptiveProtectionConfig defaults) { + Objects.requireNonNull(defaults); + this.autoDeployConfigs = defaults.autoDeployConfigs; + this.layer7DdosDefenseConfigs = defaults.layer7DdosDefenseConfigs; + } + + @CustomType.Setter + public Builder autoDeployConfigs(List autoDeployConfigs) { + if (autoDeployConfigs == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfig", "autoDeployConfigs"); + } + this.autoDeployConfigs = autoDeployConfigs; + return this; + } + public Builder autoDeployConfigs(GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig... autoDeployConfigs) { + return autoDeployConfigs(List.of(autoDeployConfigs)); + } + @CustomType.Setter + public Builder layer7DdosDefenseConfigs(List layer7DdosDefenseConfigs) { + if (layer7DdosDefenseConfigs == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfig", "layer7DdosDefenseConfigs"); + } + this.layer7DdosDefenseConfigs = layer7DdosDefenseConfigs; + return this; + } + public Builder layer7DdosDefenseConfigs(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig... layer7DdosDefenseConfigs) { + return layer7DdosDefenseConfigs(List.of(layer7DdosDefenseConfigs)); + } + public GetSecurityPolicyAdaptiveProtectionConfig build() { + final var _resultValue = new GetSecurityPolicyAdaptiveProtectionConfig(); + _resultValue.autoDeployConfigs = autoDeployConfigs; + _resultValue.layer7DdosDefenseConfigs = layer7DdosDefenseConfigs; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.java new file mode 100644 index 0000000000..640e69f6c3 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.java @@ -0,0 +1,128 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Double; +import java.lang.Integer; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig { + /** + * @return Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + * + */ + private 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 Integer expirationSec; + /** + * @return Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + * + */ + private Double impactedBaselineThreshold; + /** + * @return Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + * + */ + private Double loadThreshold; + + private GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig() {} + /** + * @return Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + * + */ + public Double confidenceThreshold() { + return 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 Integer expirationSec() { + return this.expirationSec; + } + /** + * @return Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + * + */ + public Double impactedBaselineThreshold() { + return this.impactedBaselineThreshold; + } + /** + * @return Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + * + */ + public Double loadThreshold() { + return this.loadThreshold; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Double confidenceThreshold; + private Integer expirationSec; + private Double impactedBaselineThreshold; + private Double loadThreshold; + public Builder() {} + public Builder(GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig 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(Double confidenceThreshold) { + if (confidenceThreshold == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig", "confidenceThreshold"); + } + this.confidenceThreshold = confidenceThreshold; + return this; + } + @CustomType.Setter + public Builder expirationSec(Integer expirationSec) { + if (expirationSec == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig", "expirationSec"); + } + this.expirationSec = expirationSec; + return this; + } + @CustomType.Setter + public Builder impactedBaselineThreshold(Double impactedBaselineThreshold) { + if (impactedBaselineThreshold == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig", "impactedBaselineThreshold"); + } + this.impactedBaselineThreshold = impactedBaselineThreshold; + return this; + } + @CustomType.Setter + public Builder loadThreshold(Double loadThreshold) { + if (loadThreshold == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig", "loadThreshold"); + } + this.loadThreshold = loadThreshold; + return this; + } + public GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig build() { + final var _resultValue = new GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig(); + _resultValue.confidenceThreshold = confidenceThreshold; + _resultValue.expirationSec = expirationSec; + _resultValue.impactedBaselineThreshold = impactedBaselineThreshold; + _resultValue.loadThreshold = loadThreshold; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.java new file mode 100644 index 0000000000..2f5641edde --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.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.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig { + /** + * @return If set to true, enables CAAP for L7 DDoS detection. + * + */ + private Boolean enable; + /** + * @return Rule visibility. Supported values include: "STANDARD", "PREMIUM". + * + */ + private String ruleVisibility; + + private GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig() {} + /** + * @return If set to true, enables CAAP for L7 DDoS detection. + * + */ + public Boolean enable() { + return this.enable; + } + /** + * @return Rule visibility. Supported values include: "STANDARD", "PREMIUM". + * + */ + public String ruleVisibility() { + return this.ruleVisibility; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Boolean enable; + private String ruleVisibility; + public Builder() {} + public Builder(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig defaults) { + Objects.requireNonNull(defaults); + this.enable = defaults.enable; + this.ruleVisibility = defaults.ruleVisibility; + } + + @CustomType.Setter + public Builder enable(Boolean enable) { + if (enable == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig", "enable"); + } + this.enable = enable; + return this; + } + @CustomType.Setter + public Builder ruleVisibility(String ruleVisibility) { + if (ruleVisibility == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig", "ruleVisibility"); + } + this.ruleVisibility = ruleVisibility; + return this; + } + public GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig build() { + final var _resultValue = new GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig(); + _resultValue.enable = enable; + _resultValue.ruleVisibility = ruleVisibility; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdvancedOptionsConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdvancedOptionsConfig.java new file mode 100644 index 0000000000..8244038d10 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdvancedOptionsConfig.java @@ -0,0 +1,135 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyAdvancedOptionsConfig { + /** + * @return Custom configuration to apply the JSON parsing. Only applicable when JSON parsing is set to STANDARD. + * + */ + private List jsonCustomConfigs; + /** + * @return JSON body parsing. Supported values include: "DISABLED", "STANDARD". + * + */ + private String jsonParsing; + /** + * @return Logging level. Supported values include: "NORMAL", "VERBOSE". + * + */ + private String logLevel; + /** + * @return An optional list of case-insensitive request header names to use for resolving the callers client IP address. + * + */ + private List userIpRequestHeaders; + + private GetSecurityPolicyAdvancedOptionsConfig() {} + /** + * @return Custom configuration to apply the JSON parsing. Only applicable when JSON parsing is set to STANDARD. + * + */ + public List jsonCustomConfigs() { + return this.jsonCustomConfigs; + } + /** + * @return JSON body parsing. Supported values include: "DISABLED", "STANDARD". + * + */ + public String jsonParsing() { + return this.jsonParsing; + } + /** + * @return Logging level. Supported values include: "NORMAL", "VERBOSE". + * + */ + public String logLevel() { + return this.logLevel; + } + /** + * @return An optional list of case-insensitive request header names to use for resolving the callers client IP address. + * + */ + public List userIpRequestHeaders() { + return this.userIpRequestHeaders; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyAdvancedOptionsConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List jsonCustomConfigs; + private String jsonParsing; + private String logLevel; + private List userIpRequestHeaders; + public Builder() {} + public Builder(GetSecurityPolicyAdvancedOptionsConfig defaults) { + Objects.requireNonNull(defaults); + this.jsonCustomConfigs = defaults.jsonCustomConfigs; + this.jsonParsing = defaults.jsonParsing; + this.logLevel = defaults.logLevel; + this.userIpRequestHeaders = defaults.userIpRequestHeaders; + } + + @CustomType.Setter + public Builder jsonCustomConfigs(List jsonCustomConfigs) { + if (jsonCustomConfigs == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdvancedOptionsConfig", "jsonCustomConfigs"); + } + this.jsonCustomConfigs = jsonCustomConfigs; + return this; + } + public Builder jsonCustomConfigs(GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig... jsonCustomConfigs) { + return jsonCustomConfigs(List.of(jsonCustomConfigs)); + } + @CustomType.Setter + public Builder jsonParsing(String jsonParsing) { + if (jsonParsing == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdvancedOptionsConfig", "jsonParsing"); + } + this.jsonParsing = jsonParsing; + return this; + } + @CustomType.Setter + public Builder logLevel(String logLevel) { + if (logLevel == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdvancedOptionsConfig", "logLevel"); + } + this.logLevel = logLevel; + return this; + } + @CustomType.Setter + public Builder userIpRequestHeaders(List userIpRequestHeaders) { + if (userIpRequestHeaders == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdvancedOptionsConfig", "userIpRequestHeaders"); + } + this.userIpRequestHeaders = userIpRequestHeaders; + return this; + } + public Builder userIpRequestHeaders(String... userIpRequestHeaders) { + return userIpRequestHeaders(List.of(userIpRequestHeaders)); + } + public GetSecurityPolicyAdvancedOptionsConfig build() { + final var _resultValue = new GetSecurityPolicyAdvancedOptionsConfig(); + _resultValue.jsonCustomConfigs = jsonCustomConfigs; + _resultValue.jsonParsing = jsonParsing; + _resultValue.logLevel = logLevel; + _resultValue.userIpRequestHeaders = userIpRequestHeaders; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig.java new file mode 100644 index 0000000000..5140c1a036 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig.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.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig { + /** + * @return A list of custom Content-Type header values to apply the JSON parsing. + * + */ + private List contentTypes; + + private GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig() {} + /** + * @return A list of custom Content-Type header values to apply the JSON parsing. + * + */ + public List contentTypes() { + return this.contentTypes; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List contentTypes; + public Builder() {} + public Builder(GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig defaults) { + Objects.requireNonNull(defaults); + this.contentTypes = defaults.contentTypes; + } + + @CustomType.Setter + public Builder contentTypes(List contentTypes) { + if (contentTypes == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig", "contentTypes"); + } + this.contentTypes = contentTypes; + return this; + } + public Builder contentTypes(String... contentTypes) { + return contentTypes(List.of(contentTypes)); + } + public GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig build() { + final var _resultValue = new GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig(); + _resultValue.contentTypes = contentTypes; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRecaptchaOptionsConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRecaptchaOptionsConfig.java new file mode 100644 index 0000000000..8ab0a01e91 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRecaptchaOptionsConfig.java @@ -0,0 +1,58 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRecaptchaOptionsConfig { + /** + * @return A field to supply a reCAPTCHA site key to be used for all the rules using the redirect action with the type of GOOGLE_RECAPTCHA under the security policy. The specified site key needs to be created from the reCAPTCHA API. The user is responsible for the validity of the specified site key. If not specified, a Google-managed site key is used. + * + */ + private String redirectSiteKey; + + private GetSecurityPolicyRecaptchaOptionsConfig() {} + /** + * @return A field to supply a reCAPTCHA site key to be used for all the rules using the redirect action with the type of GOOGLE_RECAPTCHA under the security policy. The specified site key needs to be created from the reCAPTCHA API. The user is responsible for the validity of the specified site key. If not specified, a Google-managed site key is used. + * + */ + public String redirectSiteKey() { + return this.redirectSiteKey; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRecaptchaOptionsConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String redirectSiteKey; + public Builder() {} + public Builder(GetSecurityPolicyRecaptchaOptionsConfig defaults) { + Objects.requireNonNull(defaults); + this.redirectSiteKey = defaults.redirectSiteKey; + } + + @CustomType.Setter + public Builder redirectSiteKey(String redirectSiteKey) { + if (redirectSiteKey == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRecaptchaOptionsConfig", "redirectSiteKey"); + } + this.redirectSiteKey = redirectSiteKey; + return this; + } + public GetSecurityPolicyRecaptchaOptionsConfig build() { + final var _resultValue = new GetSecurityPolicyRecaptchaOptionsConfig(); + _resultValue.redirectSiteKey = redirectSiteKey; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyResult.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyResult.java new file mode 100644 index 0000000000..e1fceebbe9 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyResult.java @@ -0,0 +1,221 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyAdaptiveProtectionConfig; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyAdvancedOptionsConfig; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRecaptchaOptionsConfig; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRule; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class GetSecurityPolicyResult { + private List adaptiveProtectionConfigs; + private List advancedOptionsConfigs; + private String description; + private String fingerprint; + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + private String id; + private @Nullable String name; + private @Nullable String project; + private List recaptchaOptionsConfigs; + private List rules; + private @Nullable String selfLink; + private String type; + + private GetSecurityPolicyResult() {} + public List adaptiveProtectionConfigs() { + return this.adaptiveProtectionConfigs; + } + public List advancedOptionsConfigs() { + return this.advancedOptionsConfigs; + } + public String description() { + return this.description; + } + public String fingerprint() { + return this.fingerprint; + } + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + public String id() { + return this.id; + } + public Optional name() { + return Optional.ofNullable(this.name); + } + public Optional project() { + return Optional.ofNullable(this.project); + } + public List recaptchaOptionsConfigs() { + return this.recaptchaOptionsConfigs; + } + public List rules() { + return this.rules; + } + public Optional selfLink() { + return Optional.ofNullable(this.selfLink); + } + public String type() { + return this.type; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyResult defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List adaptiveProtectionConfigs; + private List advancedOptionsConfigs; + private String description; + private String fingerprint; + private String id; + private @Nullable String name; + private @Nullable String project; + private List recaptchaOptionsConfigs; + private List rules; + private @Nullable String selfLink; + private String type; + public Builder() {} + public Builder(GetSecurityPolicyResult defaults) { + Objects.requireNonNull(defaults); + this.adaptiveProtectionConfigs = defaults.adaptiveProtectionConfigs; + this.advancedOptionsConfigs = defaults.advancedOptionsConfigs; + this.description = defaults.description; + this.fingerprint = defaults.fingerprint; + this.id = defaults.id; + this.name = defaults.name; + this.project = defaults.project; + this.recaptchaOptionsConfigs = defaults.recaptchaOptionsConfigs; + this.rules = defaults.rules; + this.selfLink = defaults.selfLink; + this.type = defaults.type; + } + + @CustomType.Setter + public Builder adaptiveProtectionConfigs(List adaptiveProtectionConfigs) { + if (adaptiveProtectionConfigs == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyResult", "adaptiveProtectionConfigs"); + } + this.adaptiveProtectionConfigs = adaptiveProtectionConfigs; + return this; + } + public Builder adaptiveProtectionConfigs(GetSecurityPolicyAdaptiveProtectionConfig... adaptiveProtectionConfigs) { + return adaptiveProtectionConfigs(List.of(adaptiveProtectionConfigs)); + } + @CustomType.Setter + public Builder advancedOptionsConfigs(List advancedOptionsConfigs) { + if (advancedOptionsConfigs == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyResult", "advancedOptionsConfigs"); + } + this.advancedOptionsConfigs = advancedOptionsConfigs; + return this; + } + public Builder advancedOptionsConfigs(GetSecurityPolicyAdvancedOptionsConfig... advancedOptionsConfigs) { + return advancedOptionsConfigs(List.of(advancedOptionsConfigs)); + } + @CustomType.Setter + public Builder description(String description) { + if (description == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyResult", "description"); + } + this.description = description; + return this; + } + @CustomType.Setter + public Builder fingerprint(String fingerprint) { + if (fingerprint == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyResult", "fingerprint"); + } + this.fingerprint = fingerprint; + return this; + } + @CustomType.Setter + public Builder id(String id) { + if (id == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyResult", "id"); + } + this.id = id; + return this; + } + @CustomType.Setter + public Builder name(@Nullable String name) { + + this.name = name; + return this; + } + @CustomType.Setter + public Builder project(@Nullable String project) { + + this.project = project; + return this; + } + @CustomType.Setter + public Builder recaptchaOptionsConfigs(List recaptchaOptionsConfigs) { + if (recaptchaOptionsConfigs == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyResult", "recaptchaOptionsConfigs"); + } + this.recaptchaOptionsConfigs = recaptchaOptionsConfigs; + return this; + } + public Builder recaptchaOptionsConfigs(GetSecurityPolicyRecaptchaOptionsConfig... recaptchaOptionsConfigs) { + return recaptchaOptionsConfigs(List.of(recaptchaOptionsConfigs)); + } + @CustomType.Setter + public Builder rules(List rules) { + if (rules == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyResult", "rules"); + } + this.rules = rules; + return this; + } + public Builder rules(GetSecurityPolicyRule... rules) { + return rules(List.of(rules)); + } + @CustomType.Setter + public Builder selfLink(@Nullable String selfLink) { + + this.selfLink = selfLink; + return this; + } + @CustomType.Setter + public Builder type(String type) { + if (type == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyResult", "type"); + } + this.type = type; + return this; + } + public GetSecurityPolicyResult build() { + final var _resultValue = new GetSecurityPolicyResult(); + _resultValue.adaptiveProtectionConfigs = adaptiveProtectionConfigs; + _resultValue.advancedOptionsConfigs = advancedOptionsConfigs; + _resultValue.description = description; + _resultValue.fingerprint = fingerprint; + _resultValue.id = id; + _resultValue.name = name; + _resultValue.project = project; + _resultValue.recaptchaOptionsConfigs = recaptchaOptionsConfigs; + _resultValue.rules = rules; + _resultValue.selfLink = selfLink; + _resultValue.type = type; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRule.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRule.java new file mode 100644 index 0000000000..2c214b0f27 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRule.java @@ -0,0 +1,265 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRuleHeaderAction; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRuleMatch; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRulePreconfiguredWafConfig; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRuleRateLimitOption; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRuleRedirectOption; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRule { + /** + * @return Action to take when match matches the request. + * + */ + private String action; + /** + * @return An optional description of this rule. Max size is 64. + * + */ + private String description; + /** + * @return Additional actions that are performed on headers. + * + */ + private List headerActions; + /** + * @return A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding action is enforced. + * + */ + private List matches; + /** + * @return Preconfigured WAF configuration to be applied for the rule. If the rule does not evaluate preconfigured WAF rules, i.e., if evaluatePreconfiguredWaf() is not used, this field will have no effect. + * + */ + private List preconfiguredWafConfigs; + /** + * @return When set to true, the action specified above is not enforced. Stackdriver logs for requests that trigger a preview action are annotated as such. + * + */ + private Boolean preview; + /** + * @return An unique positive integer indicating the priority of evaluation for a rule. Rules are evaluated from highest priority (lowest numerically) to lowest priority (highest numerically) in order. + * + */ + private Integer priority; + /** + * @return Rate limit threshold for this security policy. Must be specified if the action is "rate_based_ban" or "throttle". Cannot be specified for any other actions. + * + */ + private List rateLimitOptions; + /** + * @return Parameters defining the redirect action. Cannot be specified for any other actions. + * + */ + private List redirectOptions; + + private GetSecurityPolicyRule() {} + /** + * @return Action to take when match matches the request. + * + */ + public String action() { + return this.action; + } + /** + * @return An optional description of this rule. Max size is 64. + * + */ + public String description() { + return this.description; + } + /** + * @return Additional actions that are performed on headers. + * + */ + public List headerActions() { + return this.headerActions; + } + /** + * @return A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding action is enforced. + * + */ + public List matches() { + return this.matches; + } + /** + * @return Preconfigured WAF configuration to be applied for the rule. If the rule does not evaluate preconfigured WAF rules, i.e., if evaluatePreconfiguredWaf() is not used, this field will have no effect. + * + */ + public List preconfiguredWafConfigs() { + return this.preconfiguredWafConfigs; + } + /** + * @return When set to true, the action specified above is not enforced. Stackdriver logs for requests that trigger a preview action are annotated as such. + * + */ + public Boolean preview() { + return this.preview; + } + /** + * @return An unique positive integer indicating the priority of evaluation for a rule. Rules are evaluated from highest priority (lowest numerically) to lowest priority (highest numerically) in order. + * + */ + public Integer priority() { + return this.priority; + } + /** + * @return Rate limit threshold for this security policy. Must be specified if the action is "rate_based_ban" or "throttle". Cannot be specified for any other actions. + * + */ + public List rateLimitOptions() { + return this.rateLimitOptions; + } + /** + * @return Parameters defining the redirect action. Cannot be specified for any other actions. + * + */ + public List redirectOptions() { + return this.redirectOptions; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRule defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String action; + private String description; + private List headerActions; + private List matches; + private List preconfiguredWafConfigs; + private Boolean preview; + private Integer priority; + private List rateLimitOptions; + private List redirectOptions; + public Builder() {} + public Builder(GetSecurityPolicyRule defaults) { + Objects.requireNonNull(defaults); + this.action = defaults.action; + this.description = defaults.description; + this.headerActions = defaults.headerActions; + this.matches = defaults.matches; + this.preconfiguredWafConfigs = defaults.preconfiguredWafConfigs; + this.preview = defaults.preview; + this.priority = defaults.priority; + this.rateLimitOptions = defaults.rateLimitOptions; + this.redirectOptions = defaults.redirectOptions; + } + + @CustomType.Setter + public Builder action(String action) { + if (action == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRule", "action"); + } + this.action = action; + return this; + } + @CustomType.Setter + public Builder description(String description) { + if (description == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRule", "description"); + } + this.description = description; + return this; + } + @CustomType.Setter + public Builder headerActions(List headerActions) { + if (headerActions == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRule", "headerActions"); + } + this.headerActions = headerActions; + return this; + } + public Builder headerActions(GetSecurityPolicyRuleHeaderAction... headerActions) { + return headerActions(List.of(headerActions)); + } + @CustomType.Setter + public Builder matches(List matches) { + if (matches == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRule", "matches"); + } + this.matches = matches; + return this; + } + public Builder matches(GetSecurityPolicyRuleMatch... matches) { + return matches(List.of(matches)); + } + @CustomType.Setter + public Builder preconfiguredWafConfigs(List preconfiguredWafConfigs) { + if (preconfiguredWafConfigs == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRule", "preconfiguredWafConfigs"); + } + this.preconfiguredWafConfigs = preconfiguredWafConfigs; + return this; + } + public Builder preconfiguredWafConfigs(GetSecurityPolicyRulePreconfiguredWafConfig... preconfiguredWafConfigs) { + return preconfiguredWafConfigs(List.of(preconfiguredWafConfigs)); + } + @CustomType.Setter + public Builder preview(Boolean preview) { + if (preview == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRule", "preview"); + } + this.preview = preview; + return this; + } + @CustomType.Setter + public Builder priority(Integer priority) { + if (priority == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRule", "priority"); + } + this.priority = priority; + return this; + } + @CustomType.Setter + public Builder rateLimitOptions(List rateLimitOptions) { + if (rateLimitOptions == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRule", "rateLimitOptions"); + } + this.rateLimitOptions = rateLimitOptions; + return this; + } + public Builder rateLimitOptions(GetSecurityPolicyRuleRateLimitOption... rateLimitOptions) { + return rateLimitOptions(List.of(rateLimitOptions)); + } + @CustomType.Setter + public Builder redirectOptions(List redirectOptions) { + if (redirectOptions == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRule", "redirectOptions"); + } + this.redirectOptions = redirectOptions; + return this; + } + public Builder redirectOptions(GetSecurityPolicyRuleRedirectOption... redirectOptions) { + return redirectOptions(List.of(redirectOptions)); + } + public GetSecurityPolicyRule build() { + final var _resultValue = new GetSecurityPolicyRule(); + _resultValue.action = action; + _resultValue.description = description; + _resultValue.headerActions = headerActions; + _resultValue.matches = matches; + _resultValue.preconfiguredWafConfigs = preconfiguredWafConfigs; + _resultValue.preview = preview; + _resultValue.priority = priority; + _resultValue.rateLimitOptions = rateLimitOptions; + _resultValue.redirectOptions = redirectOptions; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleHeaderAction.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleHeaderAction.java new file mode 100644 index 0000000000..413979ada9 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleHeaderAction.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.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRuleHeaderAction { + /** + * @return The list of request headers to add or overwrite if they're already present. + * + */ + private List requestHeadersToAdds; + + private GetSecurityPolicyRuleHeaderAction() {} + /** + * @return The list of request headers to add or overwrite if they're already present. + * + */ + public List requestHeadersToAdds() { + return this.requestHeadersToAdds; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRuleHeaderAction defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List requestHeadersToAdds; + public Builder() {} + public Builder(GetSecurityPolicyRuleHeaderAction defaults) { + Objects.requireNonNull(defaults); + this.requestHeadersToAdds = defaults.requestHeadersToAdds; + } + + @CustomType.Setter + public Builder requestHeadersToAdds(List requestHeadersToAdds) { + if (requestHeadersToAdds == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleHeaderAction", "requestHeadersToAdds"); + } + this.requestHeadersToAdds = requestHeadersToAdds; + return this; + } + public Builder requestHeadersToAdds(GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd... requestHeadersToAdds) { + return requestHeadersToAdds(List.of(requestHeadersToAdds)); + } + public GetSecurityPolicyRuleHeaderAction build() { + final var _resultValue = new GetSecurityPolicyRuleHeaderAction(); + _resultValue.requestHeadersToAdds = requestHeadersToAdds; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd.java new file mode 100644 index 0000000000..ba161103ac --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd { + /** + * @return The name of the header to set. + * + */ + private String headerName; + /** + * @return The value to set the named header to. + * + */ + private String headerValue; + + private GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd() {} + /** + * @return The name of the header to set. + * + */ + public String headerName() { + return this.headerName; + } + /** + * @return The value to set the named header to. + * + */ + public String headerValue() { + return this.headerValue; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String headerName; + private String headerValue; + public Builder() {} + public Builder(GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd defaults) { + Objects.requireNonNull(defaults); + this.headerName = defaults.headerName; + this.headerValue = defaults.headerValue; + } + + @CustomType.Setter + public Builder headerName(String headerName) { + if (headerName == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd", "headerName"); + } + this.headerName = headerName; + return this; + } + @CustomType.Setter + public Builder headerValue(String headerValue) { + if (headerValue == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd", "headerValue"); + } + this.headerValue = headerValue; + return this; + } + public GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd build() { + final var _resultValue = new GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd(); + _resultValue.headerName = headerName; + _resultValue.headerValue = headerValue; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleMatch.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleMatch.java new file mode 100644 index 0000000000..e1223969d7 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleMatch.java @@ -0,0 +1,113 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRuleMatchConfig; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRuleMatchExpr; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRuleMatch { + /** + * @return The configuration options available when specifying versioned_expr. This field must be specified if versioned_expr is specified and cannot be specified if versioned_expr is not specified. + * + */ + private List configs; + /** + * @return User defined CEVAL expression. A CEVAL expression is used to specify match criteria such as origin.ip, source.region_code and contents in the request header. + * + */ + private List exprs; + /** + * @return Predefined rule expression. If this field is specified, config must also be specified. Available options: SRC_IPS_V1: Must specify the corresponding src_ip_ranges field in config. + * + */ + private String versionedExpr; + + private GetSecurityPolicyRuleMatch() {} + /** + * @return The configuration options available when specifying versioned_expr. This field must be specified if versioned_expr is specified and cannot be specified if versioned_expr is not specified. + * + */ + public List configs() { + return this.configs; + } + /** + * @return User defined CEVAL expression. A CEVAL expression is used to specify match criteria such as origin.ip, source.region_code and contents in the request header. + * + */ + public List exprs() { + return this.exprs; + } + /** + * @return Predefined rule expression. If this field is specified, config must also be specified. Available options: SRC_IPS_V1: Must specify the corresponding src_ip_ranges field in config. + * + */ + public String versionedExpr() { + return this.versionedExpr; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRuleMatch defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List configs; + private List exprs; + private String versionedExpr; + public Builder() {} + public Builder(GetSecurityPolicyRuleMatch defaults) { + Objects.requireNonNull(defaults); + this.configs = defaults.configs; + this.exprs = defaults.exprs; + this.versionedExpr = defaults.versionedExpr; + } + + @CustomType.Setter + public Builder configs(List configs) { + if (configs == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleMatch", "configs"); + } + this.configs = configs; + return this; + } + public Builder configs(GetSecurityPolicyRuleMatchConfig... configs) { + return configs(List.of(configs)); + } + @CustomType.Setter + public Builder exprs(List exprs) { + if (exprs == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleMatch", "exprs"); + } + this.exprs = exprs; + return this; + } + public Builder exprs(GetSecurityPolicyRuleMatchExpr... exprs) { + return exprs(List.of(exprs)); + } + @CustomType.Setter + public Builder versionedExpr(String versionedExpr) { + if (versionedExpr == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleMatch", "versionedExpr"); + } + this.versionedExpr = versionedExpr; + return this; + } + public GetSecurityPolicyRuleMatch build() { + final var _resultValue = new GetSecurityPolicyRuleMatch(); + _resultValue.configs = configs; + _resultValue.exprs = exprs; + _resultValue.versionedExpr = versionedExpr; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleMatchConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleMatchConfig.java new file mode 100644 index 0000000000..a1934977fa --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleMatchConfig.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.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRuleMatchConfig { + /** + * @return Set of IP addresses or ranges (IPV4 or IPV6) in CIDR notation to match against inbound traffic. There is a limit of 10 IP ranges per rule. A value of '*' matches all IPs (can be used to override the default behavior). + * + */ + private List srcIpRanges; + + private GetSecurityPolicyRuleMatchConfig() {} + /** + * @return Set of IP addresses or ranges (IPV4 or IPV6) in CIDR notation to match against inbound traffic. There is a limit of 10 IP ranges per rule. A value of '*' matches all IPs (can be used to override the default behavior). + * + */ + public List srcIpRanges() { + return this.srcIpRanges; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRuleMatchConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List srcIpRanges; + public Builder() {} + public Builder(GetSecurityPolicyRuleMatchConfig defaults) { + Objects.requireNonNull(defaults); + this.srcIpRanges = defaults.srcIpRanges; + } + + @CustomType.Setter + public Builder srcIpRanges(List srcIpRanges) { + if (srcIpRanges == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleMatchConfig", "srcIpRanges"); + } + this.srcIpRanges = srcIpRanges; + return this; + } + public Builder srcIpRanges(String... srcIpRanges) { + return srcIpRanges(List.of(srcIpRanges)); + } + public GetSecurityPolicyRuleMatchConfig build() { + final var _resultValue = new GetSecurityPolicyRuleMatchConfig(); + _resultValue.srcIpRanges = srcIpRanges; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleMatchExpr.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleMatchExpr.java new file mode 100644 index 0000000000..7c07c1dfc5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleMatchExpr.java @@ -0,0 +1,58 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRuleMatchExpr { + /** + * @return Textual representation of an expression in Common Expression Language syntax. The application context of the containing message determines which well-known feature set of CEL is supported. + * + */ + private String expression; + + private GetSecurityPolicyRuleMatchExpr() {} + /** + * @return Textual representation of an expression in Common Expression Language syntax. The application context of the containing message determines which well-known feature set of CEL is supported. + * + */ + public String expression() { + return this.expression; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRuleMatchExpr defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String expression; + public Builder() {} + public Builder(GetSecurityPolicyRuleMatchExpr defaults) { + Objects.requireNonNull(defaults); + this.expression = defaults.expression; + } + + @CustomType.Setter + public Builder expression(String expression) { + if (expression == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleMatchExpr", "expression"); + } + this.expression = expression; + return this; + } + public GetSecurityPolicyRuleMatchExpr build() { + final var _resultValue = new GetSecurityPolicyRuleMatchExpr(); + _resultValue.expression = expression; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfig.java new file mode 100644 index 0000000000..ed29841bd7 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfig.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.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusion; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRulePreconfiguredWafConfig { + /** + * @return An exclusion to apply during preconfigured WAF evaluation. + * + */ + private List exclusions; + + private GetSecurityPolicyRulePreconfiguredWafConfig() {} + /** + * @return An exclusion to apply during preconfigured WAF evaluation. + * + */ + public List exclusions() { + return this.exclusions; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRulePreconfiguredWafConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List exclusions; + public Builder() {} + public Builder(GetSecurityPolicyRulePreconfiguredWafConfig defaults) { + Objects.requireNonNull(defaults); + this.exclusions = defaults.exclusions; + } + + @CustomType.Setter + public Builder exclusions(List exclusions) { + if (exclusions == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfig", "exclusions"); + } + this.exclusions = exclusions; + return this; + } + public Builder exclusions(GetSecurityPolicyRulePreconfiguredWafConfigExclusion... exclusions) { + return exclusions(List.of(exclusions)); + } + public GetSecurityPolicyRulePreconfiguredWafConfig build() { + final var _resultValue = new GetSecurityPolicyRulePreconfiguredWafConfig(); + _resultValue.exclusions = exclusions; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusion.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusion.java new file mode 100644 index 0000000000..4df79694ae --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusion.java @@ -0,0 +1,193 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRulePreconfiguredWafConfigExclusion { + /** + * @return Request cookie whose value will be excluded from inspection during preconfigured WAF evaluation. + * + */ + private List requestCookies; + /** + * @return Request header whose value will be excluded from inspection during preconfigured WAF evaluation. + * + */ + private List requestHeaders; + /** + * @return Request query parameter whose value will be excluded from inspection during preconfigured WAF evaluation. Note that the parameter can be in the query string or in the POST body. + * + */ + private List requestQueryParams; + /** + * @return Request URI from the request line to be excluded from inspection during preconfigured WAF evaluation. When specifying this field, the query or fragment part should be excluded. + * + */ + private List requestUris; + /** + * @return A list of target rule IDs under the WAF rule set to apply the preconfigured WAF exclusion. If omitted, it refers to all the rule IDs under the WAF rule set. + * + */ + private List targetRuleIds; + /** + * @return Target WAF rule set to apply the preconfigured WAF exclusion. + * + */ + private String targetRuleSet; + + private GetSecurityPolicyRulePreconfiguredWafConfigExclusion() {} + /** + * @return Request cookie whose value will be excluded from inspection during preconfigured WAF evaluation. + * + */ + public List requestCookies() { + return this.requestCookies; + } + /** + * @return Request header whose value will be excluded from inspection during preconfigured WAF evaluation. + * + */ + public List requestHeaders() { + return this.requestHeaders; + } + /** + * @return Request query parameter whose value will be excluded from inspection during preconfigured WAF evaluation. Note that the parameter can be in the query string or in the POST body. + * + */ + public List requestQueryParams() { + return this.requestQueryParams; + } + /** + * @return Request URI from the request line to be excluded from inspection during preconfigured WAF evaluation. When specifying this field, the query or fragment part should be excluded. + * + */ + public List requestUris() { + return this.requestUris; + } + /** + * @return A list of target rule IDs under the WAF rule set to apply the preconfigured WAF exclusion. If omitted, it refers to all the rule IDs under the WAF rule set. + * + */ + public List targetRuleIds() { + return this.targetRuleIds; + } + /** + * @return Target WAF rule set to apply the preconfigured WAF exclusion. + * + */ + public String targetRuleSet() { + return this.targetRuleSet; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRulePreconfiguredWafConfigExclusion defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List requestCookies; + private List requestHeaders; + private List requestQueryParams; + private List requestUris; + private List targetRuleIds; + private String targetRuleSet; + public Builder() {} + public Builder(GetSecurityPolicyRulePreconfiguredWafConfigExclusion defaults) { + Objects.requireNonNull(defaults); + this.requestCookies = defaults.requestCookies; + this.requestHeaders = defaults.requestHeaders; + this.requestQueryParams = defaults.requestQueryParams; + this.requestUris = defaults.requestUris; + this.targetRuleIds = defaults.targetRuleIds; + this.targetRuleSet = defaults.targetRuleSet; + } + + @CustomType.Setter + public Builder requestCookies(List requestCookies) { + if (requestCookies == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusion", "requestCookies"); + } + this.requestCookies = requestCookies; + return this; + } + public Builder requestCookies(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky... requestCookies) { + return requestCookies(List.of(requestCookies)); + } + @CustomType.Setter + public Builder requestHeaders(List requestHeaders) { + if (requestHeaders == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusion", "requestHeaders"); + } + this.requestHeaders = requestHeaders; + return this; + } + public Builder requestHeaders(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader... requestHeaders) { + return requestHeaders(List.of(requestHeaders)); + } + @CustomType.Setter + public Builder requestQueryParams(List requestQueryParams) { + if (requestQueryParams == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusion", "requestQueryParams"); + } + this.requestQueryParams = requestQueryParams; + return this; + } + public Builder requestQueryParams(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam... requestQueryParams) { + return requestQueryParams(List.of(requestQueryParams)); + } + @CustomType.Setter + public Builder requestUris(List requestUris) { + if (requestUris == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusion", "requestUris"); + } + this.requestUris = requestUris; + return this; + } + public Builder requestUris(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri... requestUris) { + return requestUris(List.of(requestUris)); + } + @CustomType.Setter + public Builder targetRuleIds(List targetRuleIds) { + if (targetRuleIds == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusion", "targetRuleIds"); + } + this.targetRuleIds = targetRuleIds; + return this; + } + public Builder targetRuleIds(String... targetRuleIds) { + return targetRuleIds(List.of(targetRuleIds)); + } + @CustomType.Setter + public Builder targetRuleSet(String targetRuleSet) { + if (targetRuleSet == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusion", "targetRuleSet"); + } + this.targetRuleSet = targetRuleSet; + return this; + } + public GetSecurityPolicyRulePreconfiguredWafConfigExclusion build() { + final var _resultValue = new GetSecurityPolicyRulePreconfiguredWafConfigExclusion(); + _resultValue.requestCookies = requestCookies; + _resultValue.requestHeaders = requestHeaders; + _resultValue.requestQueryParams = requestQueryParams; + _resultValue.requestUris = requestUris; + _resultValue.targetRuleIds = targetRuleIds; + _resultValue.targetRuleSet = targetRuleSet; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky.java new file mode 100644 index 0000000000..8b376233eb --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky { + /** + * @return You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + * + */ + private String operator; + /** + * @return A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + * + */ + private String value; + + private GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky() {} + /** + * @return You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + * + */ + public String operator() { + return this.operator; + } + /** + * @return A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + * + */ + public String value() { + return this.value; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String operator; + private String value; + public Builder() {} + public Builder(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky defaults) { + Objects.requireNonNull(defaults); + this.operator = defaults.operator; + this.value = defaults.value; + } + + @CustomType.Setter + public Builder operator(String operator) { + if (operator == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky", "operator"); + } + this.operator = operator; + return this; + } + @CustomType.Setter + public Builder value(String value) { + if (value == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky", "value"); + } + this.value = value; + return this; + } + public GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky build() { + final var _resultValue = new GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky(); + _resultValue.operator = operator; + _resultValue.value = value; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader.java new file mode 100644 index 0000000000..118a92cfda --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader { + /** + * @return You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + * + */ + private String operator; + /** + * @return A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + * + */ + private String value; + + private GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader() {} + /** + * @return You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + * + */ + public String operator() { + return this.operator; + } + /** + * @return A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + * + */ + public String value() { + return this.value; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String operator; + private String value; + public Builder() {} + public Builder(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader defaults) { + Objects.requireNonNull(defaults); + this.operator = defaults.operator; + this.value = defaults.value; + } + + @CustomType.Setter + public Builder operator(String operator) { + if (operator == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader", "operator"); + } + this.operator = operator; + return this; + } + @CustomType.Setter + public Builder value(String value) { + if (value == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader", "value"); + } + this.value = value; + return this; + } + public GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader build() { + final var _resultValue = new GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader(); + _resultValue.operator = operator; + _resultValue.value = value; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam.java new file mode 100644 index 0000000000..8611f7a5ea --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam { + /** + * @return You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + * + */ + private String operator; + /** + * @return A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + * + */ + private String value; + + private GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam() {} + /** + * @return You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + * + */ + public String operator() { + return this.operator; + } + /** + * @return A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + * + */ + public String value() { + return this.value; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String operator; + private String value; + public Builder() {} + public Builder(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam defaults) { + Objects.requireNonNull(defaults); + this.operator = defaults.operator; + this.value = defaults.value; + } + + @CustomType.Setter + public Builder operator(String operator) { + if (operator == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam", "operator"); + } + this.operator = operator; + return this; + } + @CustomType.Setter + public Builder value(String value) { + if (value == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam", "value"); + } + this.value = value; + return this; + } + public GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam build() { + final var _resultValue = new GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam(); + _resultValue.operator = operator; + _resultValue.value = value; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri.java new file mode 100644 index 0000000000..9c8746ee8e --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri { + /** + * @return You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + * + */ + private String operator; + /** + * @return A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + * + */ + private String value; + + private GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri() {} + /** + * @return You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + * + */ + public String operator() { + return this.operator; + } + /** + * @return A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + * + */ + public String value() { + return this.value; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String operator; + private String value; + public Builder() {} + public Builder(GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri defaults) { + Objects.requireNonNull(defaults); + this.operator = defaults.operator; + this.value = defaults.value; + } + + @CustomType.Setter + public Builder operator(String operator) { + if (operator == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri", "operator"); + } + this.operator = operator; + return this; + } + @CustomType.Setter + public Builder value(String value) { + if (value == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri", "value"); + } + this.value = value; + return this; + } + public GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri build() { + final var _resultValue = new GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri(); + _resultValue.operator = operator; + _resultValue.value = value; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOption.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOption.java new file mode 100644 index 0000000000..bcf5ef099e --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOption.java @@ -0,0 +1,260 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRuleRateLimitOptionBanThreshold; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRuleRateLimitOption { + /** + * @return Can only be specified if the action for the rule is "rate_based_ban". If specified, determines the time (in seconds) the traffic will continue to be banned by the rate limit after the rate falls below the threshold. + * + */ + private Integer banDurationSec; + /** + * @return Can only be specified if the action for the rule is "rate_based_ban". If specified, the key will be banned for the configured 'banDurationSec' when the number of requests that exceed the 'rateLimitThreshold' also exceed this 'banThreshold'. + * + */ + private List banThresholds; + /** + * @return Action to take for requests that are under the configured rate limit threshold. Valid option is "allow" only. + * + */ + private String conformAction; + /** + * @return Determines the key to enforce the rateLimitThreshold on + * + */ + private String enforceOnKey; + /** + * @return Enforce On Key Config of this security policy + * + */ + private List enforceOnKeyConfigs; + /** + * @return Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + * + */ + private String enforceOnKeyName; + /** + * @return Action to take for requests that are above the configured rate limit threshold, to either deny with a specified HTTP response code, or redirect to a different endpoint. Valid options are "deny()" where valid values for status are 403, 404, 429, and 502, and "redirect" where the redirect parameters come from exceedRedirectOptions below. + * + */ + private String exceedAction; + /** + * @return Parameters defining the redirect action that is used as the exceed action. Cannot be specified if the exceed action is not redirect. + * + */ + private List exceedRedirectOptions; + /** + * @return Threshold at which to begin ratelimiting. + * + */ + private List rateLimitThresholds; + + private GetSecurityPolicyRuleRateLimitOption() {} + /** + * @return Can only be specified if the action for the rule is "rate_based_ban". If specified, determines the time (in seconds) the traffic will continue to be banned by the rate limit after the rate falls below the threshold. + * + */ + public Integer banDurationSec() { + return this.banDurationSec; + } + /** + * @return Can only be specified if the action for the rule is "rate_based_ban". If specified, the key will be banned for the configured 'banDurationSec' when the number of requests that exceed the 'rateLimitThreshold' also exceed this 'banThreshold'. + * + */ + public List banThresholds() { + return this.banThresholds; + } + /** + * @return Action to take for requests that are under the configured rate limit threshold. Valid option is "allow" only. + * + */ + public String conformAction() { + return this.conformAction; + } + /** + * @return Determines the key to enforce the rateLimitThreshold on + * + */ + public String enforceOnKey() { + return this.enforceOnKey; + } + /** + * @return Enforce On Key Config of this security policy + * + */ + public List enforceOnKeyConfigs() { + return this.enforceOnKeyConfigs; + } + /** + * @return Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + * + */ + public String enforceOnKeyName() { + return this.enforceOnKeyName; + } + /** + * @return Action to take for requests that are above the configured rate limit threshold, to either deny with a specified HTTP response code, or redirect to a different endpoint. Valid options are "deny()" where valid values for status are 403, 404, 429, and 502, and "redirect" where the redirect parameters come from exceedRedirectOptions below. + * + */ + public String exceedAction() { + return this.exceedAction; + } + /** + * @return Parameters defining the redirect action that is used as the exceed action. Cannot be specified if the exceed action is not redirect. + * + */ + public List exceedRedirectOptions() { + return this.exceedRedirectOptions; + } + /** + * @return Threshold at which to begin ratelimiting. + * + */ + public List rateLimitThresholds() { + return this.rateLimitThresholds; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRuleRateLimitOption defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Integer banDurationSec; + private List banThresholds; + private String conformAction; + private String enforceOnKey; + private List enforceOnKeyConfigs; + private String enforceOnKeyName; + private String exceedAction; + private List exceedRedirectOptions; + private List rateLimitThresholds; + public Builder() {} + public Builder(GetSecurityPolicyRuleRateLimitOption defaults) { + Objects.requireNonNull(defaults); + this.banDurationSec = defaults.banDurationSec; + this.banThresholds = defaults.banThresholds; + this.conformAction = defaults.conformAction; + this.enforceOnKey = defaults.enforceOnKey; + this.enforceOnKeyConfigs = defaults.enforceOnKeyConfigs; + this.enforceOnKeyName = defaults.enforceOnKeyName; + this.exceedAction = defaults.exceedAction; + this.exceedRedirectOptions = defaults.exceedRedirectOptions; + this.rateLimitThresholds = defaults.rateLimitThresholds; + } + + @CustomType.Setter + public Builder banDurationSec(Integer banDurationSec) { + if (banDurationSec == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOption", "banDurationSec"); + } + this.banDurationSec = banDurationSec; + return this; + } + @CustomType.Setter + public Builder banThresholds(List banThresholds) { + if (banThresholds == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOption", "banThresholds"); + } + this.banThresholds = banThresholds; + return this; + } + public Builder banThresholds(GetSecurityPolicyRuleRateLimitOptionBanThreshold... banThresholds) { + return banThresholds(List.of(banThresholds)); + } + @CustomType.Setter + public Builder conformAction(String conformAction) { + if (conformAction == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOption", "conformAction"); + } + this.conformAction = conformAction; + return this; + } + @CustomType.Setter + public Builder enforceOnKey(String enforceOnKey) { + if (enforceOnKey == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOption", "enforceOnKey"); + } + this.enforceOnKey = enforceOnKey; + return this; + } + @CustomType.Setter + public Builder enforceOnKeyConfigs(List enforceOnKeyConfigs) { + if (enforceOnKeyConfigs == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOption", "enforceOnKeyConfigs"); + } + this.enforceOnKeyConfigs = enforceOnKeyConfigs; + return this; + } + public Builder enforceOnKeyConfigs(GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig... enforceOnKeyConfigs) { + return enforceOnKeyConfigs(List.of(enforceOnKeyConfigs)); + } + @CustomType.Setter + public Builder enforceOnKeyName(String enforceOnKeyName) { + if (enforceOnKeyName == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOption", "enforceOnKeyName"); + } + this.enforceOnKeyName = enforceOnKeyName; + return this; + } + @CustomType.Setter + public Builder exceedAction(String exceedAction) { + if (exceedAction == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOption", "exceedAction"); + } + this.exceedAction = exceedAction; + return this; + } + @CustomType.Setter + public Builder exceedRedirectOptions(List exceedRedirectOptions) { + if (exceedRedirectOptions == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOption", "exceedRedirectOptions"); + } + this.exceedRedirectOptions = exceedRedirectOptions; + return this; + } + public Builder exceedRedirectOptions(GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption... exceedRedirectOptions) { + return exceedRedirectOptions(List.of(exceedRedirectOptions)); + } + @CustomType.Setter + public Builder rateLimitThresholds(List rateLimitThresholds) { + if (rateLimitThresholds == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOption", "rateLimitThresholds"); + } + this.rateLimitThresholds = rateLimitThresholds; + return this; + } + public Builder rateLimitThresholds(GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold... rateLimitThresholds) { + return rateLimitThresholds(List.of(rateLimitThresholds)); + } + public GetSecurityPolicyRuleRateLimitOption build() { + final var _resultValue = new GetSecurityPolicyRuleRateLimitOption(); + _resultValue.banDurationSec = banDurationSec; + _resultValue.banThresholds = banThresholds; + _resultValue.conformAction = conformAction; + _resultValue.enforceOnKey = enforceOnKey; + _resultValue.enforceOnKeyConfigs = enforceOnKeyConfigs; + _resultValue.enforceOnKeyName = enforceOnKeyName; + _resultValue.exceedAction = exceedAction; + _resultValue.exceedRedirectOptions = exceedRedirectOptions; + _resultValue.rateLimitThresholds = rateLimitThresholds; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionBanThreshold.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionBanThreshold.java new file mode 100644 index 0000000000..a7f200b7b7 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionBanThreshold.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Integer; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRuleRateLimitOptionBanThreshold { + /** + * @return Number of HTTP(S) requests for calculating the threshold. + * + */ + private Integer count; + /** + * @return Interval over which the threshold is computed. + * + */ + private Integer intervalSec; + + private GetSecurityPolicyRuleRateLimitOptionBanThreshold() {} + /** + * @return Number of HTTP(S) requests for calculating the threshold. + * + */ + public Integer count() { + return this.count; + } + /** + * @return Interval over which the threshold is computed. + * + */ + public Integer intervalSec() { + return this.intervalSec; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRuleRateLimitOptionBanThreshold defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Integer count; + private Integer intervalSec; + public Builder() {} + public Builder(GetSecurityPolicyRuleRateLimitOptionBanThreshold defaults) { + Objects.requireNonNull(defaults); + this.count = defaults.count; + this.intervalSec = defaults.intervalSec; + } + + @CustomType.Setter + public Builder count(Integer count) { + if (count == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOptionBanThreshold", "count"); + } + this.count = count; + return this; + } + @CustomType.Setter + public Builder intervalSec(Integer intervalSec) { + if (intervalSec == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOptionBanThreshold", "intervalSec"); + } + this.intervalSec = intervalSec; + return this; + } + public GetSecurityPolicyRuleRateLimitOptionBanThreshold build() { + final var _resultValue = new GetSecurityPolicyRuleRateLimitOptionBanThreshold(); + _resultValue.count = count; + _resultValue.intervalSec = intervalSec; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig.java new file mode 100644 index 0000000000..03c082eb8c --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig { + /** + * @return Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + * + */ + private String enforceOnKeyName; + /** + * @return Determines the key to enforce the rate_limit_threshold on + * + */ + private String enforceOnKeyType; + + private GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig() {} + /** + * @return Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + * + */ + public String enforceOnKeyName() { + return this.enforceOnKeyName; + } + /** + * @return Determines the key to enforce the rate_limit_threshold on + * + */ + public String enforceOnKeyType() { + return this.enforceOnKeyType; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String enforceOnKeyName; + private String enforceOnKeyType; + public Builder() {} + public Builder(GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig defaults) { + Objects.requireNonNull(defaults); + this.enforceOnKeyName = defaults.enforceOnKeyName; + this.enforceOnKeyType = defaults.enforceOnKeyType; + } + + @CustomType.Setter + public Builder enforceOnKeyName(String enforceOnKeyName) { + if (enforceOnKeyName == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig", "enforceOnKeyName"); + } + this.enforceOnKeyName = enforceOnKeyName; + return this; + } + @CustomType.Setter + public Builder enforceOnKeyType(String enforceOnKeyType) { + if (enforceOnKeyType == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig", "enforceOnKeyType"); + } + this.enforceOnKeyType = enforceOnKeyType; + return this; + } + public GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig build() { + final var _resultValue = new GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig(); + _resultValue.enforceOnKeyName = enforceOnKeyName; + _resultValue.enforceOnKeyType = enforceOnKeyType; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption.java new file mode 100644 index 0000000000..05dced3118 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption { + /** + * @return Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + * + */ + private String target; + /** + * @return Type of the redirect action. + * + */ + private String type; + + private GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption() {} + /** + * @return Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + * + */ + public String target() { + return this.target; + } + /** + * @return Type of the redirect action. + * + */ + public String type() { + return this.type; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String target; + private String type; + public Builder() {} + public Builder(GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption defaults) { + Objects.requireNonNull(defaults); + this.target = defaults.target; + this.type = defaults.type; + } + + @CustomType.Setter + public Builder target(String target) { + if (target == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption", "target"); + } + this.target = target; + return this; + } + @CustomType.Setter + public Builder type(String type) { + if (type == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption", "type"); + } + this.type = type; + return this; + } + public GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption build() { + final var _resultValue = new GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption(); + _resultValue.target = target; + _resultValue.type = type; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold.java new file mode 100644 index 0000000000..c304ee4a06 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Integer; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold { + /** + * @return Number of HTTP(S) requests for calculating the threshold. + * + */ + private Integer count; + /** + * @return Interval over which the threshold is computed. + * + */ + private Integer intervalSec; + + private GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold() {} + /** + * @return Number of HTTP(S) requests for calculating the threshold. + * + */ + public Integer count() { + return this.count; + } + /** + * @return Interval over which the threshold is computed. + * + */ + public Integer intervalSec() { + return this.intervalSec; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Integer count; + private Integer intervalSec; + public Builder() {} + public Builder(GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold defaults) { + Objects.requireNonNull(defaults); + this.count = defaults.count; + this.intervalSec = defaults.intervalSec; + } + + @CustomType.Setter + public Builder count(Integer count) { + if (count == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold", "count"); + } + this.count = count; + return this; + } + @CustomType.Setter + public Builder intervalSec(Integer intervalSec) { + if (intervalSec == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold", "intervalSec"); + } + this.intervalSec = intervalSec; + return this; + } + public GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold build() { + final var _resultValue = new GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold(); + _resultValue.count = count; + _resultValue.intervalSec = intervalSec; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRedirectOption.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRedirectOption.java new file mode 100644 index 0000000000..b5371edc6f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyRuleRedirectOption.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyRuleRedirectOption { + /** + * @return Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + * + */ + private String target; + /** + * @return Type of the redirect action. Available options: EXTERNAL_302: Must specify the corresponding target field in config. GOOGLE_RECAPTCHA: Cannot specify target field in config. + * + */ + private String type; + + private GetSecurityPolicyRuleRedirectOption() {} + /** + * @return Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + * + */ + public String target() { + return this.target; + } + /** + * @return Type of the redirect action. Available options: EXTERNAL_302: Must specify the corresponding target field in config. GOOGLE_RECAPTCHA: Cannot specify target field in config. + * + */ + public String type() { + return this.type; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyRuleRedirectOption defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String target; + private String type; + public Builder() {} + public Builder(GetSecurityPolicyRuleRedirectOption defaults) { + Objects.requireNonNull(defaults); + this.target = defaults.target; + this.type = defaults.type; + } + + @CustomType.Setter + public Builder target(String target) { + if (target == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRedirectOption", "target"); + } + this.target = target; + return this; + } + @CustomType.Setter + public Builder type(String type) { + if (type == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyRuleRedirectOption", "type"); + } + this.type = type; + return this; + } + public GetSecurityPolicyRuleRedirectOption build() { + final var _resultValue = new GetSecurityPolicyRuleRedirectOption(); + _resultValue.target = target; + _resultValue.type = type; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceGroupManagerStandbyPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceGroupManagerStandbyPolicy.java new file mode 100644 index 0000000000..3dd419ed7e --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceGroupManagerStandbyPolicy.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class InstanceGroupManagerStandbyPolicy { + /** + * @return Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + */ + private @Nullable Integer initialDelaySec; + /** + * @return Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * *** + * + */ + private @Nullable String mode; + + private InstanceGroupManagerStandbyPolicy() {} + /** + * @return Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + */ + public Optional initialDelaySec() { + return Optional.ofNullable(this.initialDelaySec); + } + /** + * @return Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * *** + * + */ + public Optional mode() { + return Optional.ofNullable(this.mode); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(InstanceGroupManagerStandbyPolicy defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Integer initialDelaySec; + private @Nullable String mode; + public Builder() {} + public Builder(InstanceGroupManagerStandbyPolicy defaults) { + Objects.requireNonNull(defaults); + this.initialDelaySec = defaults.initialDelaySec; + this.mode = defaults.mode; + } + + @CustomType.Setter + public Builder initialDelaySec(@Nullable Integer initialDelaySec) { + + this.initialDelaySec = initialDelaySec; + return this; + } + @CustomType.Setter + public Builder mode(@Nullable String mode) { + + this.mode = mode; + return this; + } + public InstanceGroupManagerStandbyPolicy build() { + final var _resultValue = new InstanceGroupManagerStandbyPolicy(); + _resultValue.initialDelaySec = initialDelaySec; + _resultValue.mode = mode; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceGroupManagerStandbyPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceGroupManagerStandbyPolicy.java new file mode 100644 index 0000000000..67d2693fbb --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceGroupManagerStandbyPolicy.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RegionInstanceGroupManagerStandbyPolicy { + /** + * @return Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + */ + private @Nullable Integer initialDelaySec; + /** + * @return Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * *** + * + */ + private @Nullable String mode; + + private RegionInstanceGroupManagerStandbyPolicy() {} + /** + * @return Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + * + */ + public Optional initialDelaySec() { + return Optional.ofNullable(this.initialDelaySec); + } + /** + * @return Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * *** + * + */ + public Optional mode() { + return Optional.ofNullable(this.mode); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RegionInstanceGroupManagerStandbyPolicy defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Integer initialDelaySec; + private @Nullable String mode; + public Builder() {} + public Builder(RegionInstanceGroupManagerStandbyPolicy defaults) { + Objects.requireNonNull(defaults); + this.initialDelaySec = defaults.initialDelaySec; + this.mode = defaults.mode; + } + + @CustomType.Setter + public Builder initialDelaySec(@Nullable Integer initialDelaySec) { + + this.initialDelaySec = initialDelaySec; + return this; + } + @CustomType.Setter + public Builder mode(@Nullable String mode) { + + this.mode = mode; + return this; + } + public RegionInstanceGroupManagerStandbyPolicy build() { + final var _resultValue = new RegionInstanceGroupManagerStandbyPolicy(); + _resultValue.initialDelaySec = initialDelaySec; + _resultValue.mode = mode; + return _resultValue; + } + } +} 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 0b00a6ade0..10bd5259c7 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 @@ -42,6 +42,7 @@ import com.pulumi.gcp.container.outputs.ClusterProtectConfig; import com.pulumi.gcp.container.outputs.ClusterReleaseChannel; import com.pulumi.gcp.container.outputs.ClusterResourceUsageExportConfig; +import com.pulumi.gcp.container.outputs.ClusterSecretManagerConfig; import com.pulumi.gcp.container.outputs.ClusterSecurityPostureConfig; import com.pulumi.gcp.container.outputs.ClusterServiceExternalIpsConfig; import com.pulumi.gcp.container.outputs.ClusterTpuConfig; @@ -1436,6 +1437,24 @@ public Output>> resourceLabels() { public Output> resourceUsageExportConfig() { return Codegen.optional(this.resourceUsageExportConfig); } + /** + * Configuration for the + * [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + * Structure is documented below. + * + */ + @Export(name="secretManagerConfig", refs={ClusterSecretManagerConfig.class}, tree="[0]") + private Output secretManagerConfig; + + /** + * @return Configuration for the + * [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + * Structure is documented below. + * + */ + public Output> secretManagerConfig() { + return Codegen.optional(this.secretManagerConfig); + } /** * Enable/Disable Security Posture API features for the cluster. Structure is documented below. * 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 3853edf42a..a5a90ad605 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 @@ -37,6 +37,7 @@ import com.pulumi.gcp.container.inputs.ClusterProtectConfigArgs; import com.pulumi.gcp.container.inputs.ClusterReleaseChannelArgs; import com.pulumi.gcp.container.inputs.ClusterResourceUsageExportConfigArgs; +import com.pulumi.gcp.container.inputs.ClusterSecretManagerConfigArgs; import com.pulumi.gcp.container.inputs.ClusterSecurityPostureConfigArgs; import com.pulumi.gcp.container.inputs.ClusterServiceExternalIpsConfigArgs; import com.pulumi.gcp.container.inputs.ClusterTpuConfigArgs; @@ -1233,6 +1234,25 @@ public Optional> resourceUsageExpor return Optional.ofNullable(this.resourceUsageExportConfig); } + /** + * Configuration for the + * [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + * Structure is documented below. + * + */ + @Import(name="secretManagerConfig") + private @Nullable Output secretManagerConfig; + + /** + * @return Configuration for the + * [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + * Structure is documented below. + * + */ + public Optional> secretManagerConfig() { + return Optional.ofNullable(this.secretManagerConfig); + } + /** * Enable/Disable Security Posture API features for the cluster. Structure is documented below. * @@ -1415,6 +1435,7 @@ private ClusterArgs(ClusterArgs $) { this.removeDefaultNodePool = $.removeDefaultNodePool; this.resourceLabels = $.resourceLabels; this.resourceUsageExportConfig = $.resourceUsageExportConfig; + this.secretManagerConfig = $.secretManagerConfig; this.securityPostureConfig = $.securityPostureConfig; this.serviceExternalIpsConfig = $.serviceExternalIpsConfig; this.subnetwork = $.subnetwork; @@ -3021,6 +3042,31 @@ public Builder resourceUsageExportConfig(ClusterResourceUsageExportConfigArgs re return resourceUsageExportConfig(Output.of(resourceUsageExportConfig)); } + /** + * @param secretManagerConfig Configuration for the + * [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + * Structure is documented below. + * + * @return builder + * + */ + public Builder secretManagerConfig(@Nullable Output secretManagerConfig) { + $.secretManagerConfig = secretManagerConfig; + return this; + } + + /** + * @param secretManagerConfig Configuration for the + * [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + * Structure is documented below. + * + * @return builder + * + */ + public Builder secretManagerConfig(ClusterSecretManagerConfigArgs secretManagerConfig) { + return secretManagerConfig(Output.of(secretManagerConfig)); + } + /** * @param securityPostureConfig Enable/Disable Security Posture API features for the cluster. Structure is documented below. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterSecretManagerConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterSecretManagerConfigArgs.java new file mode 100644 index 0000000000..8d63417d4d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterSecretManagerConfigArgs.java @@ -0,0 +1,85 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.util.Objects; + + +public final class ClusterSecretManagerConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterSecretManagerConfigArgs Empty = new ClusterSecretManagerConfigArgs(); + + /** + * Enable the Secret Manager add-on for this cluster. + * + */ + @Import(name="enabled", required=true) + private Output enabled; + + /** + * @return Enable the Secret Manager add-on for this cluster. + * + */ + public Output enabled() { + return this.enabled; + } + + private ClusterSecretManagerConfigArgs() {} + + private ClusterSecretManagerConfigArgs(ClusterSecretManagerConfigArgs $) { + this.enabled = $.enabled; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterSecretManagerConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterSecretManagerConfigArgs $; + + public Builder() { + $ = new ClusterSecretManagerConfigArgs(); + } + + public Builder(ClusterSecretManagerConfigArgs defaults) { + $ = new ClusterSecretManagerConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param enabled Enable the Secret Manager add-on for this cluster. + * + * @return builder + * + */ + public Builder enabled(Output enabled) { + $.enabled = enabled; + return this; + } + + /** + * @param enabled Enable the Secret Manager add-on for this cluster. + * + * @return builder + * + */ + public Builder enabled(Boolean enabled) { + return enabled(Output.of(enabled)); + } + + public ClusterSecretManagerConfigArgs build() { + if ($.enabled == null) { + throw new MissingRequiredPropertyException("ClusterSecretManagerConfigArgs", "enabled"); + } + return $; + } + } + +} 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 61b41c0e62..60729b4280 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 @@ -37,6 +37,7 @@ import com.pulumi.gcp.container.inputs.ClusterProtectConfigArgs; import com.pulumi.gcp.container.inputs.ClusterReleaseChannelArgs; import com.pulumi.gcp.container.inputs.ClusterResourceUsageExportConfigArgs; +import com.pulumi.gcp.container.inputs.ClusterSecretManagerConfigArgs; import com.pulumi.gcp.container.inputs.ClusterSecurityPostureConfigArgs; import com.pulumi.gcp.container.inputs.ClusterServiceExternalIpsConfigArgs; import com.pulumi.gcp.container.inputs.ClusterTpuConfigArgs; @@ -1289,6 +1290,25 @@ public Optional> resourceUsageExpor return Optional.ofNullable(this.resourceUsageExportConfig); } + /** + * Configuration for the + * [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + * Structure is documented below. + * + */ + @Import(name="secretManagerConfig") + private @Nullable Output secretManagerConfig; + + /** + * @return Configuration for the + * [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + * Structure is documented below. + * + */ + public Optional> secretManagerConfig() { + return Optional.ofNullable(this.secretManagerConfig); + } + /** * Enable/Disable Security Posture API features for the cluster. Structure is documented below. * @@ -1530,6 +1550,7 @@ private ClusterState(ClusterState $) { this.removeDefaultNodePool = $.removeDefaultNodePool; this.resourceLabels = $.resourceLabels; this.resourceUsageExportConfig = $.resourceUsageExportConfig; + this.secretManagerConfig = $.secretManagerConfig; this.securityPostureConfig = $.securityPostureConfig; this.selfLink = $.selfLink; this.serviceExternalIpsConfig = $.serviceExternalIpsConfig; @@ -3215,6 +3236,31 @@ public Builder resourceUsageExportConfig(ClusterResourceUsageExportConfigArgs re return resourceUsageExportConfig(Output.of(resourceUsageExportConfig)); } + /** + * @param secretManagerConfig Configuration for the + * [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + * Structure is documented below. + * + * @return builder + * + */ + public Builder secretManagerConfig(@Nullable Output secretManagerConfig) { + $.secretManagerConfig = secretManagerConfig; + return this; + } + + /** + * @param secretManagerConfig Configuration for the + * [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + * Structure is documented below. + * + * @return builder + * + */ + public Builder secretManagerConfig(ClusterSecretManagerConfigArgs secretManagerConfig) { + return secretManagerConfig(Output.of(secretManagerConfig)); + } + /** * @param securityPostureConfig Enable/Disable Security Posture API features for the cluster. Structure is documented below. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolNetworkConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolNetworkConfigArgs.java index 295791752a..405918eb90 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolNetworkConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolNetworkConfigArgs.java @@ -86,14 +86,14 @@ public Optional> enablePrivateNodes() { } /** - * Network bandwidth tier configuration. + * Network bandwidth tier configuration. Structure is documented below. * */ @Import(name="networkPerformanceConfig") private @Nullable Output networkPerformanceConfig; /** - * @return Network bandwidth tier configuration. + * @return Network bandwidth tier configuration. Structure is documented below. * */ public Optional> networkPerformanceConfig() { @@ -101,14 +101,14 @@ public Optional> netwo } /** - * Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + * Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. * */ @Import(name="podCidrOverprovisionConfig") private @Nullable Output podCidrOverprovisionConfig; /** - * @return Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + * @return Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. * */ public Optional> podCidrOverprovisionConfig() { @@ -287,7 +287,7 @@ public Builder enablePrivateNodes(Boolean enablePrivateNodes) { } /** - * @param networkPerformanceConfig Network bandwidth tier configuration. + * @param networkPerformanceConfig Network bandwidth tier configuration. Structure is documented below. * * @return builder * @@ -298,7 +298,7 @@ public Builder networkPerformanceConfig(@Nullable Output disabled; + /** + * @return Whether pod cidr overprovision is disabled. + * + */ public Output disabled() { return this.disabled; } @@ -45,11 +53,23 @@ public Builder(NodePoolNetworkConfigPodCidrOverprovisionConfigArgs defaults) { $ = new NodePoolNetworkConfigPodCidrOverprovisionConfigArgs(Objects.requireNonNull(defaults)); } + /** + * @param disabled Whether pod cidr overprovision is disabled. + * + * @return builder + * + */ public Builder disabled(Output disabled) { $.disabled = disabled; return this; } + /** + * @param disabled Whether pod cidr overprovision is disabled. + * + * @return builder + * + */ public Builder disabled(Boolean disabled) { return disabled(Output.of(disabled)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterSecretManagerConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterSecretManagerConfig.java new file mode 100644 index 0000000000..03094d23bf --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterSecretManagerConfig.java @@ -0,0 +1,58 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.util.Objects; + +@CustomType +public final class ClusterSecretManagerConfig { + /** + * @return Enable the Secret Manager add-on for this cluster. + * + */ + private Boolean enabled; + + private ClusterSecretManagerConfig() {} + /** + * @return Enable the Secret Manager add-on for this cluster. + * + */ + public Boolean enabled() { + return this.enabled; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterSecretManagerConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Boolean enabled; + public Builder() {} + public Builder(ClusterSecretManagerConfig defaults) { + Objects.requireNonNull(defaults); + this.enabled = defaults.enabled; + } + + @CustomType.Setter + public Builder enabled(Boolean enabled) { + if (enabled == null) { + throw new MissingRequiredPropertyException("ClusterSecretManagerConfig", "enabled"); + } + this.enabled = enabled; + return this; + } + public ClusterSecretManagerConfig build() { + final var _resultValue = new ClusterSecretManagerConfig(); + _resultValue.enabled = enabled; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterResult.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterResult.java index 608f11287b..05d87f5a97 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterResult.java @@ -37,6 +37,7 @@ import com.pulumi.gcp.container.outputs.GetClusterProtectConfig; import com.pulumi.gcp.container.outputs.GetClusterReleaseChannel; import com.pulumi.gcp.container.outputs.GetClusterResourceUsageExportConfig; +import com.pulumi.gcp.container.outputs.GetClusterSecretManagerConfig; import com.pulumi.gcp.container.outputs.GetClusterSecurityPostureConfig; import com.pulumi.gcp.container.outputs.GetClusterServiceExternalIpsConfig; import com.pulumi.gcp.container.outputs.GetClusterTpuConfig; @@ -125,6 +126,7 @@ public final class GetClusterResult { private Boolean removeDefaultNodePool; private Map resourceLabels; private List resourceUsageExportConfigs; + private List secretManagerConfigs; private List securityPostureConfigs; private String selfLink; private List serviceExternalIpsConfigs; @@ -342,6 +344,9 @@ public Map resourceLabels() { public List resourceUsageExportConfigs() { return this.resourceUsageExportConfigs; } + public List secretManagerConfigs() { + return this.secretManagerConfigs; + } public List securityPostureConfigs() { return this.securityPostureConfigs; } @@ -449,6 +454,7 @@ public static final class Builder { private Boolean removeDefaultNodePool; private Map resourceLabels; private List resourceUsageExportConfigs; + private List secretManagerConfigs; private List securityPostureConfigs; private String selfLink; private List serviceExternalIpsConfigs; @@ -529,6 +535,7 @@ public Builder(GetClusterResult defaults) { this.removeDefaultNodePool = defaults.removeDefaultNodePool; this.resourceLabels = defaults.resourceLabels; this.resourceUsageExportConfigs = defaults.resourceUsageExportConfigs; + this.secretManagerConfigs = defaults.secretManagerConfigs; this.securityPostureConfigs = defaults.securityPostureConfigs; this.selfLink = defaults.selfLink; this.serviceExternalIpsConfigs = defaults.serviceExternalIpsConfigs; @@ -1173,6 +1180,17 @@ public Builder resourceUsageExportConfigs(GetClusterResourceUsageExportConfig... return resourceUsageExportConfigs(List.of(resourceUsageExportConfigs)); } @CustomType.Setter + public Builder secretManagerConfigs(List secretManagerConfigs) { + if (secretManagerConfigs == null) { + throw new MissingRequiredPropertyException("GetClusterResult", "secretManagerConfigs"); + } + this.secretManagerConfigs = secretManagerConfigs; + return this; + } + public Builder secretManagerConfigs(GetClusterSecretManagerConfig... secretManagerConfigs) { + return secretManagerConfigs(List.of(secretManagerConfigs)); + } + @CustomType.Setter public Builder securityPostureConfigs(List securityPostureConfigs) { if (securityPostureConfigs == null) { throw new MissingRequiredPropertyException("GetClusterResult", "securityPostureConfigs"); @@ -1339,6 +1357,7 @@ public GetClusterResult build() { _resultValue.removeDefaultNodePool = removeDefaultNodePool; _resultValue.resourceLabels = resourceLabels; _resultValue.resourceUsageExportConfigs = resourceUsageExportConfigs; + _resultValue.secretManagerConfigs = secretManagerConfigs; _resultValue.securityPostureConfigs = securityPostureConfigs; _resultValue.selfLink = selfLink; _resultValue.serviceExternalIpsConfigs = serviceExternalIpsConfigs; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterSecretManagerConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterSecretManagerConfig.java new file mode 100644 index 0000000000..b9e0050103 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterSecretManagerConfig.java @@ -0,0 +1,58 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.util.Objects; + +@CustomType +public final class GetClusterSecretManagerConfig { + /** + * @return Enable the Secret manager csi component. + * + */ + private Boolean enabled; + + private GetClusterSecretManagerConfig() {} + /** + * @return Enable the Secret manager csi component. + * + */ + public Boolean enabled() { + return this.enabled; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetClusterSecretManagerConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Boolean enabled; + public Builder() {} + public Builder(GetClusterSecretManagerConfig defaults) { + Objects.requireNonNull(defaults); + this.enabled = defaults.enabled; + } + + @CustomType.Setter + public Builder enabled(Boolean enabled) { + if (enabled == null) { + throw new MissingRequiredPropertyException("GetClusterSecretManagerConfig", "enabled"); + } + this.enabled = enabled; + return this; + } + public GetClusterSecretManagerConfig build() { + final var _resultValue = new GetClusterSecretManagerConfig(); + _resultValue.enabled = enabled; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNetworkConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNetworkConfig.java index b00e47437d..b109123155 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNetworkConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNetworkConfig.java @@ -40,12 +40,12 @@ public final class NodePoolNetworkConfig { */ private @Nullable Boolean enablePrivateNodes; /** - * @return Network bandwidth tier configuration. + * @return Network bandwidth tier configuration. Structure is documented below. * */ private @Nullable NodePoolNetworkConfigNetworkPerformanceConfig networkPerformanceConfig; /** - * @return Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + * @return Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. * */ private @Nullable NodePoolNetworkConfigPodCidrOverprovisionConfig podCidrOverprovisionConfig; @@ -92,14 +92,14 @@ public Optional enablePrivateNodes() { return Optional.ofNullable(this.enablePrivateNodes); } /** - * @return Network bandwidth tier configuration. + * @return Network bandwidth tier configuration. Structure is documented below. * */ public Optional networkPerformanceConfig() { return Optional.ofNullable(this.networkPerformanceConfig); } /** - * @return Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + * @return Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. * */ public Optional podCidrOverprovisionConfig() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNetworkConfigPodCidrOverprovisionConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNetworkConfigPodCidrOverprovisionConfig.java index bd0860031b..7444dbca88 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNetworkConfigPodCidrOverprovisionConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNetworkConfigPodCidrOverprovisionConfig.java @@ -10,9 +10,17 @@ @CustomType public final class NodePoolNetworkConfigPodCidrOverprovisionConfig { + /** + * @return Whether pod cidr overprovision is disabled. + * + */ private Boolean disabled; private NodePoolNetworkConfigPodCidrOverprovisionConfig() {} + /** + * @return Whether pod cidr overprovision is disabled. + * + */ public Boolean disabled() { return this.disabled; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/PreventionInspectTemplate.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/PreventionInspectTemplate.java index 5080b794c0..28fca3e5a0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/PreventionInspectTemplate.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/PreventionInspectTemplate.java @@ -339,6 +339,59 @@ * } * * <!--End PulumiCodeChooser --> + * ### Dlp Inspect Template Max Infotype Per Finding Default + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.dataloss.PreventionInspectTemplate;
+ * import com.pulumi.gcp.dataloss.PreventionInspectTemplateArgs;
+ * import com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigArgs;
+ * import com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigLimitsArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 maxInfotypePerFindingDefault = new PreventionInspectTemplate("maxInfotypePerFindingDefault", PreventionInspectTemplateArgs.builder()
+ *             .parent("projects/my-project-name")
+ *             .inspectConfig(PreventionInspectTemplateInspectConfigArgs.builder()
+ *                 .infoTypes(                
+ *                     PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()
+ *                         .name("EMAIL_ADDRESS")
+ *                         .build(),
+ *                     PreventionInspectTemplateInspectConfigInfoTypeArgs.builder()
+ *                         .name("PERSON_NAME")
+ *                         .build())
+ *                 .minLikelihood("UNLIKELY")
+ *                 .limits(PreventionInspectTemplateInspectConfigLimitsArgs.builder()
+ *                     .maxFindingsPerRequest(333)
+ *                     .maxFindingsPerItem(222)
+ *                     .maxFindingsPerInfoTypes(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.builder()
+ *                         .maxFindings(111)
+ *                         .build())
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetArgs.java index 45bf80b9ae..fa165a5cb6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetArgs.java @@ -7,6 +7,7 @@ import com.pulumi.core.annotations.Import; import com.pulumi.gcp.dataloss.inputs.PreventionDiscoveryConfigTargetBigQueryTargetArgs; import com.pulumi.gcp.dataloss.inputs.PreventionDiscoveryConfigTargetCloudSqlTargetArgs; +import com.pulumi.gcp.dataloss.inputs.PreventionDiscoveryConfigTargetSecretsTargetArgs; import java.util.Objects; import java.util.Optional; import javax.annotation.Nullable; @@ -50,11 +51,27 @@ public Optional> cloud return Optional.ofNullable(this.cloudSqlTarget); } + /** + * Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + * + */ + @Import(name="secretsTarget") + private @Nullable Output secretsTarget; + + /** + * @return Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + * + */ + public Optional> secretsTarget() { + return Optional.ofNullable(this.secretsTarget); + } + private PreventionDiscoveryConfigTargetArgs() {} private PreventionDiscoveryConfigTargetArgs(PreventionDiscoveryConfigTargetArgs $) { this.bigQueryTarget = $.bigQueryTarget; this.cloudSqlTarget = $.cloudSqlTarget; + this.secretsTarget = $.secretsTarget; } public static Builder builder() { @@ -121,6 +138,27 @@ public Builder cloudSqlTarget(PreventionDiscoveryConfigTargetCloudSqlTargetArgs return cloudSqlTarget(Output.of(cloudSqlTarget)); } + /** + * @param secretsTarget Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + * + * @return builder + * + */ + public Builder secretsTarget(@Nullable Output secretsTarget) { + $.secretsTarget = secretsTarget; + return this; + } + + /** + * @param secretsTarget Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + * + * @return builder + * + */ + public Builder secretsTarget(PreventionDiscoveryConfigTargetSecretsTargetArgs secretsTarget) { + return secretsTarget(Output.of(secretsTarget)); + } + public PreventionDiscoveryConfigTargetArgs build() { return $; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs.java index a4f23c6db9..69cc08252c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.gcp.dataloss.inputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesArgs; +import com.pulumi.gcp.dataloss.inputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs; import com.pulumi.gcp.dataloss.inputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesArgs; import java.util.Objects; import java.util.Optional; @@ -31,6 +32,23 @@ public Optional tableReference; + + /** + * @return The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + * Structure is documented below. + * + */ + public Optional> tableReference() { + return Optional.ofNullable(this.tableReference); + } + /** * A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. * Structure is documented below. @@ -52,6 +70,7 @@ private PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs() {} private PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs(PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs $) { this.otherTables = $.otherTables; + this.tableReference = $.tableReference; this.tables = $.tables; } @@ -94,6 +113,29 @@ public Builder otherTables(PreventionDiscoveryConfigTargetBigQueryTargetFilterOt return otherTables(Output.of(otherTables)); } + /** + * @param tableReference The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + * Structure is documented below. + * + * @return builder + * + */ + public Builder tableReference(@Nullable Output tableReference) { + $.tableReference = tableReference; + return this; + } + + /** + * @param tableReference The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + * Structure is documented below. + * + * @return builder + * + */ + public Builder tableReference(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs tableReference) { + return tableReference(Output.of(tableReference)); + } + /** * @param tables A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. * Structure is documented below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs.java new file mode 100644 index 0000000000..82dca7bda7 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs.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.dataloss.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs extends com.pulumi.resources.ResourceArgs { + + public static final PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs Empty = new PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs(); + + /** + * Dataset ID of the table. + * + */ + @Import(name="datasetId", required=true) + private Output datasetId; + + /** + * @return Dataset ID of the table. + * + */ + public Output datasetId() { + return this.datasetId; + } + + /** + * Name of the table. + * + */ + @Import(name="tableId", required=true) + private Output tableId; + + /** + * @return Name of the table. + * + */ + public Output tableId() { + return this.tableId; + } + + private PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs() {} + + private PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs $) { + this.datasetId = $.datasetId; + this.tableId = $.tableId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs $; + + public Builder() { + $ = new PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs(); + } + + public Builder(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs defaults) { + $ = new PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param datasetId Dataset ID of the table. + * + * @return builder + * + */ + public Builder datasetId(Output datasetId) { + $.datasetId = datasetId; + return this; + } + + /** + * @param datasetId Dataset ID of the table. + * + * @return builder + * + */ + public Builder datasetId(String datasetId) { + return datasetId(Output.of(datasetId)); + } + + /** + * @param tableId Name of the table. + * + * @return builder + * + */ + public Builder tableId(Output tableId) { + $.tableId = tableId; + return this; + } + + /** + * @param tableId Name of the table. + * + * @return builder + * + */ + public Builder tableId(String tableId) { + return tableId(Output.of(tableId)); + } + + public PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs build() { + if ($.datasetId == null) { + throw new MissingRequiredPropertyException("PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs", "datasetId"); + } + if ($.tableId == null) { + throw new MissingRequiredPropertyException("PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs", "tableId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs.java index 86e9cda6b1..3344db52e9 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.gcp.dataloss.inputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionArgs; +import com.pulumi.gcp.dataloss.inputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs; import com.pulumi.gcp.dataloss.inputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersArgs; import java.util.Objects; import java.util.Optional; @@ -33,6 +34,23 @@ public Optional databaseResourceReference; + + /** + * @return The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + * Structure is documented below. + * + */ + public Optional> databaseResourceReference() { + return Optional.ofNullable(this.databaseResourceReference); + } + /** * Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. * @@ -52,6 +70,7 @@ private PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs() {} private PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs(PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs $) { this.collection = $.collection; + this.databaseResourceReference = $.databaseResourceReference; this.others = $.others; } @@ -96,6 +115,29 @@ public Builder collection(PreventionDiscoveryConfigTargetCloudSqlTargetFilterCol return collection(Output.of(collection)); } + /** + * @param databaseResourceReference The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + * Structure is documented below. + * + * @return builder + * + */ + public Builder databaseResourceReference(@Nullable Output databaseResourceReference) { + $.databaseResourceReference = databaseResourceReference; + return this; + } + + /** + * @param databaseResourceReference The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + * Structure is documented below. + * + * @return builder + * + */ + public Builder databaseResourceReference(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs databaseResourceReference) { + return databaseResourceReference(Output.of(databaseResourceReference)); + } + /** * @param others Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs.java new file mode 100644 index 0000000000..ff788d5585 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs.java @@ -0,0 +1,205 @@ +// *** 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.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs extends com.pulumi.resources.ResourceArgs { + + public static final PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs Empty = new PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs(); + + /** + * Required. Name of a database within the instance. + * + */ + @Import(name="database", required=true) + private Output database; + + /** + * @return Required. Name of a database within the instance. + * + */ + public Output database() { + return this.database; + } + + /** + * Required. Name of a database resource, for example, a table within the database. + * + */ + @Import(name="databaseResource", required=true) + private Output databaseResource; + + /** + * @return Required. Name of a database resource, for example, a table within the database. + * + */ + public Output databaseResource() { + return this.databaseResource; + } + + /** + * Required. The instance where this resource is located. For example: Cloud SQL instance ID. + * + */ + @Import(name="instance", required=true) + private Output instance; + + /** + * @return Required. The instance where this resource is located. For example: Cloud SQL instance ID. + * + */ + public Output instance() { + return this.instance; + } + + /** + * Required. If within a project-level config, then this must match the config's project ID. + * + */ + @Import(name="projectId", required=true) + private Output projectId; + + /** + * @return Required. If within a project-level config, then this must match the config's project ID. + * + */ + public Output projectId() { + return this.projectId; + } + + private PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs() {} + + private PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs $) { + this.database = $.database; + this.databaseResource = $.databaseResource; + this.instance = $.instance; + this.projectId = $.projectId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs $; + + public Builder() { + $ = new PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs(); + } + + public Builder(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs defaults) { + $ = new PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param database Required. Name of a database within the instance. + * + * @return builder + * + */ + public Builder database(Output database) { + $.database = database; + return this; + } + + /** + * @param database Required. Name of a database within the instance. + * + * @return builder + * + */ + public Builder database(String database) { + return database(Output.of(database)); + } + + /** + * @param databaseResource Required. Name of a database resource, for example, a table within the database. + * + * @return builder + * + */ + public Builder databaseResource(Output databaseResource) { + $.databaseResource = databaseResource; + return this; + } + + /** + * @param databaseResource Required. Name of a database resource, for example, a table within the database. + * + * @return builder + * + */ + public Builder databaseResource(String databaseResource) { + return databaseResource(Output.of(databaseResource)); + } + + /** + * @param instance Required. The instance where this resource is located. For example: Cloud SQL instance ID. + * + * @return builder + * + */ + public Builder instance(Output instance) { + $.instance = instance; + return this; + } + + /** + * @param instance Required. The instance where this resource is located. For example: Cloud SQL instance ID. + * + * @return builder + * + */ + public Builder instance(String instance) { + return instance(Output.of(instance)); + } + + /** + * @param projectId Required. If within a project-level config, then this must match the config's project ID. + * + * @return builder + * + */ + public Builder projectId(Output projectId) { + $.projectId = projectId; + return this; + } + + /** + * @param projectId Required. If within a project-level config, then this must match the config's project ID. + * + * @return builder + * + */ + public Builder projectId(String projectId) { + return projectId(Output.of(projectId)); + } + + public PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs build() { + if ($.database == null) { + throw new MissingRequiredPropertyException("PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs", "database"); + } + if ($.databaseResource == null) { + throw new MissingRequiredPropertyException("PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs", "databaseResource"); + } + if ($.instance == null) { + throw new MissingRequiredPropertyException("PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs", "instance"); + } + if ($.projectId == null) { + throw new MissingRequiredPropertyException("PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs", "projectId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetSecretsTargetArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetSecretsTargetArgs.java new file mode 100644 index 0000000000..bfb7ce4598 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionDiscoveryConfigTargetSecretsTargetArgs.java @@ -0,0 +1,28 @@ +// *** 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.inputs; + + + + +public final class PreventionDiscoveryConfigTargetSecretsTargetArgs extends com.pulumi.resources.ResourceArgs { + + public static final PreventionDiscoveryConfigTargetSecretsTargetArgs Empty = new PreventionDiscoveryConfigTargetSecretsTargetArgs(); + + public static Builder builder() { + return new Builder(); + } + + public static final class Builder { + private PreventionDiscoveryConfigTargetSecretsTargetArgs $; + + public Builder() { + $ = new PreventionDiscoveryConfigTargetSecretsTargetArgs(); + } + public PreventionDiscoveryConfigTargetSecretsTargetArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.java index 5aeb9a5d49..d15c16fe2d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs.java @@ -9,6 +9,8 @@ import com.pulumi.gcp.dataloss.inputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs; import java.lang.Integer; import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; public final class PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs extends com.pulumi.resources.ResourceArgs { @@ -22,8 +24,8 @@ public final class PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInf * Structure is documented below. * */ - @Import(name="infoType", required=true) - private Output infoType; + @Import(name="infoType") + private @Nullable Output infoType; /** * @return Type of information the findings limit applies to. Only one limit per infoType should be provided. If InfoTypeLimit does @@ -32,8 +34,8 @@ public final class PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInf * Structure is documented below. * */ - public Output infoType() { - return this.infoType; + public Optional> infoType() { + return Optional.ofNullable(this.infoType); } /** @@ -85,7 +87,7 @@ public Builder(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTyp * @return builder * */ - public Builder infoType(Output infoType) { + public Builder infoType(@Nullable Output infoType) { $.infoType = infoType; return this; } @@ -125,9 +127,6 @@ public Builder maxFindings(Integer maxFindings) { } public PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs build() { - if ($.infoType == null) { - throw new MissingRequiredPropertyException("PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs", "infoType"); - } if ($.maxFindings == null) { throw new MissingRequiredPropertyException("PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs", "maxFindings"); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTarget.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTarget.java index f487846618..8acfdb7a87 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTarget.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTarget.java @@ -6,6 +6,7 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.gcp.dataloss.outputs.PreventionDiscoveryConfigTargetBigQueryTarget; import com.pulumi.gcp.dataloss.outputs.PreventionDiscoveryConfigTargetCloudSqlTarget; +import com.pulumi.gcp.dataloss.outputs.PreventionDiscoveryConfigTargetSecretsTarget; import java.util.Objects; import java.util.Optional; import javax.annotation.Nullable; @@ -24,6 +25,11 @@ public final class PreventionDiscoveryConfigTarget { * */ private @Nullable PreventionDiscoveryConfigTargetCloudSqlTarget cloudSqlTarget; + /** + * @return Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + * + */ + private @Nullable PreventionDiscoveryConfigTargetSecretsTarget secretsTarget; private PreventionDiscoveryConfigTarget() {} /** @@ -42,6 +48,13 @@ public Optional bigQueryTarget() public Optional cloudSqlTarget() { return Optional.ofNullable(this.cloudSqlTarget); } + /** + * @return Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + * + */ + public Optional secretsTarget() { + return Optional.ofNullable(this.secretsTarget); + } public static Builder builder() { return new Builder(); @@ -54,11 +67,13 @@ public static Builder builder(PreventionDiscoveryConfigTarget defaults) { public static final class Builder { private @Nullable PreventionDiscoveryConfigTargetBigQueryTarget bigQueryTarget; private @Nullable PreventionDiscoveryConfigTargetCloudSqlTarget cloudSqlTarget; + private @Nullable PreventionDiscoveryConfigTargetSecretsTarget secretsTarget; public Builder() {} public Builder(PreventionDiscoveryConfigTarget defaults) { Objects.requireNonNull(defaults); this.bigQueryTarget = defaults.bigQueryTarget; this.cloudSqlTarget = defaults.cloudSqlTarget; + this.secretsTarget = defaults.secretsTarget; } @CustomType.Setter @@ -73,10 +88,17 @@ public Builder cloudSqlTarget(@Nullable PreventionDiscoveryConfigTargetCloudSqlT this.cloudSqlTarget = cloudSqlTarget; return this; } + @CustomType.Setter + public Builder secretsTarget(@Nullable PreventionDiscoveryConfigTargetSecretsTarget secretsTarget) { + + this.secretsTarget = secretsTarget; + return this; + } public PreventionDiscoveryConfigTarget build() { final var _resultValue = new PreventionDiscoveryConfigTarget(); _resultValue.bigQueryTarget = bigQueryTarget; _resultValue.cloudSqlTarget = cloudSqlTarget; + _resultValue.secretsTarget = secretsTarget; return _resultValue; } } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilter.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilter.java index 4473bbaf50..00b6019bfe 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilter.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilter.java @@ -5,6 +5,7 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.gcp.dataloss.outputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables; +import com.pulumi.gcp.dataloss.outputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference; import com.pulumi.gcp.dataloss.outputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterTables; import java.util.Objects; import java.util.Optional; @@ -17,6 +18,12 @@ public final class PreventionDiscoveryConfigTargetBigQueryTargetFilter { * */ private @Nullable PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables otherTables; + /** + * @return The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + * Structure is documented below. + * + */ + private @Nullable PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference tableReference; /** * @return A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. * Structure is documented below. @@ -32,6 +39,14 @@ private PreventionDiscoveryConfigTargetBigQueryTargetFilter() {} public Optional otherTables() { return Optional.ofNullable(this.otherTables); } + /** + * @return The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + * Structure is documented below. + * + */ + public Optional tableReference() { + return Optional.ofNullable(this.tableReference); + } /** * @return A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. * Structure is documented below. @@ -51,11 +66,13 @@ public static Builder builder(PreventionDiscoveryConfigTargetBigQueryTargetFilte @CustomType.Builder public static final class Builder { private @Nullable PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables otherTables; + private @Nullable PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference tableReference; private @Nullable PreventionDiscoveryConfigTargetBigQueryTargetFilterTables tables; public Builder() {} public Builder(PreventionDiscoveryConfigTargetBigQueryTargetFilter defaults) { Objects.requireNonNull(defaults); this.otherTables = defaults.otherTables; + this.tableReference = defaults.tableReference; this.tables = defaults.tables; } @@ -66,6 +83,12 @@ public Builder otherTables(@Nullable PreventionDiscoveryConfigTargetBigQueryTarg return this; } @CustomType.Setter + public Builder tableReference(@Nullable PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference tableReference) { + + this.tableReference = tableReference; + return this; + } + @CustomType.Setter public Builder tables(@Nullable PreventionDiscoveryConfigTargetBigQueryTargetFilterTables tables) { this.tables = tables; @@ -74,6 +97,7 @@ public Builder tables(@Nullable PreventionDiscoveryConfigTargetBigQueryTargetFil public PreventionDiscoveryConfigTargetBigQueryTargetFilter build() { final var _resultValue = new PreventionDiscoveryConfigTargetBigQueryTargetFilter(); _resultValue.otherTables = otherTables; + _resultValue.tableReference = tableReference; _resultValue.tables = tables; return _resultValue; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference.java new file mode 100644 index 0000000000..e76fa10542 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.dataloss.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference { + /** + * @return Dataset ID of the table. + * + */ + private String datasetId; + /** + * @return Name of the table. + * + */ + private String tableId; + + private PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference() {} + /** + * @return Dataset ID of the table. + * + */ + public String datasetId() { + return this.datasetId; + } + /** + * @return Name of the table. + * + */ + public String tableId() { + return this.tableId; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String datasetId; + private String tableId; + public Builder() {} + public Builder(PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference defaults) { + Objects.requireNonNull(defaults); + this.datasetId = defaults.datasetId; + this.tableId = defaults.tableId; + } + + @CustomType.Setter + public Builder datasetId(String datasetId) { + if (datasetId == null) { + throw new MissingRequiredPropertyException("PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference", "datasetId"); + } + this.datasetId = datasetId; + return this; + } + @CustomType.Setter + public Builder tableId(String tableId) { + if (tableId == null) { + throw new MissingRequiredPropertyException("PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference", "tableId"); + } + this.tableId = tableId; + return this; + } + public PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference build() { + final var _resultValue = new PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference(); + _resultValue.datasetId = datasetId; + _resultValue.tableId = tableId; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilter.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilter.java index 9de034ba4a..1af5905bce 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilter.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilter.java @@ -5,6 +5,7 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.gcp.dataloss.outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollection; +import com.pulumi.gcp.dataloss.outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference; import com.pulumi.gcp.dataloss.outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers; import java.util.Objects; import java.util.Optional; @@ -18,6 +19,12 @@ public final class PreventionDiscoveryConfigTargetCloudSqlTargetFilter { * */ private @Nullable PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollection collection; + /** + * @return The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + * Structure is documented below. + * + */ + private @Nullable PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference databaseResourceReference; /** * @return Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. * @@ -33,6 +40,14 @@ private PreventionDiscoveryConfigTargetCloudSqlTargetFilter() {} public Optional collection() { return Optional.ofNullable(this.collection); } + /** + * @return The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + * Structure is documented below. + * + */ + public Optional databaseResourceReference() { + return Optional.ofNullable(this.databaseResourceReference); + } /** * @return Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. * @@ -51,11 +66,13 @@ public static Builder builder(PreventionDiscoveryConfigTargetCloudSqlTargetFilte @CustomType.Builder public static final class Builder { private @Nullable PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollection collection; + private @Nullable PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference databaseResourceReference; private @Nullable PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers others; public Builder() {} public Builder(PreventionDiscoveryConfigTargetCloudSqlTargetFilter defaults) { Objects.requireNonNull(defaults); this.collection = defaults.collection; + this.databaseResourceReference = defaults.databaseResourceReference; this.others = defaults.others; } @@ -66,6 +83,12 @@ public Builder collection(@Nullable PreventionDiscoveryConfigTargetCloudSqlTarge return this; } @CustomType.Setter + public Builder databaseResourceReference(@Nullable PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference databaseResourceReference) { + + this.databaseResourceReference = databaseResourceReference; + return this; + } + @CustomType.Setter public Builder others(@Nullable PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers others) { this.others = others; @@ -74,6 +97,7 @@ public Builder others(@Nullable PreventionDiscoveryConfigTargetCloudSqlTargetFil public PreventionDiscoveryConfigTargetCloudSqlTargetFilter build() { final var _resultValue = new PreventionDiscoveryConfigTargetCloudSqlTargetFilter(); _resultValue.collection = collection; + _resultValue.databaseResourceReference = databaseResourceReference; _resultValue.others = others; return _resultValue; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference.java new file mode 100644 index 0000000000..6753c1645e --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference.java @@ -0,0 +1,127 @@ +// *** 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 com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference { + /** + * @return Required. Name of a database within the instance. + * + */ + private String database; + /** + * @return Required. Name of a database resource, for example, a table within the database. + * + */ + private String databaseResource; + /** + * @return Required. The instance where this resource is located. For example: Cloud SQL instance ID. + * + */ + private String instance; + /** + * @return Required. If within a project-level config, then this must match the config's project ID. + * + */ + private String projectId; + + private PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference() {} + /** + * @return Required. Name of a database within the instance. + * + */ + public String database() { + return this.database; + } + /** + * @return Required. Name of a database resource, for example, a table within the database. + * + */ + public String databaseResource() { + return this.databaseResource; + } + /** + * @return Required. The instance where this resource is located. For example: Cloud SQL instance ID. + * + */ + public String instance() { + return this.instance; + } + /** + * @return Required. If within a project-level config, then this must match the config's project ID. + * + */ + public String projectId() { + return this.projectId; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String database; + private String databaseResource; + private String instance; + private String projectId; + public Builder() {} + public Builder(PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference defaults) { + Objects.requireNonNull(defaults); + this.database = defaults.database; + this.databaseResource = defaults.databaseResource; + this.instance = defaults.instance; + this.projectId = defaults.projectId; + } + + @CustomType.Setter + public Builder database(String database) { + if (database == null) { + throw new MissingRequiredPropertyException("PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference", "database"); + } + this.database = database; + return this; + } + @CustomType.Setter + public Builder databaseResource(String databaseResource) { + if (databaseResource == null) { + throw new MissingRequiredPropertyException("PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference", "databaseResource"); + } + this.databaseResource = databaseResource; + return this; + } + @CustomType.Setter + public Builder instance(String instance) { + if (instance == null) { + throw new MissingRequiredPropertyException("PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference", "instance"); + } + this.instance = instance; + return this; + } + @CustomType.Setter + public Builder projectId(String projectId) { + if (projectId == null) { + throw new MissingRequiredPropertyException("PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference", "projectId"); + } + this.projectId = projectId; + return this; + } + public PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference build() { + final var _resultValue = new PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference(); + _resultValue.database = database; + _resultValue.databaseResource = databaseResource; + _resultValue.instance = instance; + _resultValue.projectId = projectId; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetSecretsTarget.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetSecretsTarget.java new file mode 100644 index 0000000000..6787284719 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionDiscoveryConfigTargetSecretsTarget.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 PreventionDiscoveryConfigTargetSecretsTarget { + private PreventionDiscoveryConfigTargetSecretsTarget() {} + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(PreventionDiscoveryConfigTargetSecretsTarget defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + public Builder() {} + public Builder(PreventionDiscoveryConfigTargetSecretsTarget defaults) { + Objects.requireNonNull(defaults); + } + + public PreventionDiscoveryConfigTargetSecretsTarget build() { + final var _resultValue = new PreventionDiscoveryConfigTargetSecretsTarget(); + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType.java index 1bdc9edf7b..6c5ae81607 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType.java @@ -8,6 +8,8 @@ import com.pulumi.gcp.dataloss.outputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType; import java.lang.Integer; import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; @CustomType public final class PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType { @@ -18,7 +20,7 @@ public final class PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInf * Structure is documented below. * */ - private PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType infoType; + private @Nullable PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType infoType; /** * @return Max findings limit for the given infoType. * @@ -33,8 +35,8 @@ private PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType() {} * Structure is documented below. * */ - public PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType infoType() { - return this.infoType; + public Optional infoType() { + return Optional.ofNullable(this.infoType); } /** * @return Max findings limit for the given infoType. @@ -53,7 +55,7 @@ public static Builder builder(PreventionInspectTemplateInspectConfigLimitsMaxFin } @CustomType.Builder public static final class Builder { - private PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType infoType; + private @Nullable PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType infoType; private Integer maxFindings; public Builder() {} public Builder(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType defaults) { @@ -63,10 +65,8 @@ public Builder(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTyp } @CustomType.Setter - public Builder infoType(PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType infoType) { - if (infoType == null) { - throw new MissingRequiredPropertyException("PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType", "infoType"); - } + public Builder infoType(@Nullable PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType infoType) { + this.infoType = infoType; return this; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/BackupPlan.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/BackupPlan.java index 046d6cce5d..3daf340222 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/BackupPlan.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/BackupPlan.java @@ -333,6 +333,91 @@ * } * * <!--End PulumiCodeChooser --> + * ### Gkebackup Backupplan Permissive + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.container.Cluster;
+ * import com.pulumi.gcp.container.ClusterArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;
+ * import com.pulumi.gcp.gkebackup.BackupPlan;
+ * import com.pulumi.gcp.gkebackup.BackupPlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedApplicationsArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 primary = new Cluster("primary", ClusterArgs.builder()
+ *             .name("permissive-cluster")
+ *             .location("us-central1")
+ *             .initialNodeCount(1)
+ *             .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()
+ *                 .workloadPool("my-project-name.svc.id.goog")
+ *                 .build())
+ *             .addonsConfig(ClusterAddonsConfigArgs.builder()
+ *                 .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()
+ *                     .enabled(true)
+ *                     .build())
+ *                 .build())
+ *             .deletionProtection("true")
+ *             .network("default")
+ *             .subnetwork("default")
+ *             .build());
+ * 
+ *         var permissive = new BackupPlan("permissive", BackupPlanArgs.builder()
+ *             .name("permissive-plan")
+ *             .cluster(primary.id())
+ *             .location("us-central1")
+ *             .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()
+ *                 .backupDeleteLockDays(30)
+ *                 .backupRetainDays(180)
+ *                 .build())
+ *             .backupSchedule(BackupPlanBackupScheduleArgs.builder()
+ *                 .cronSchedule("0 9 * * 1")
+ *                 .build())
+ *             .backupConfig(BackupPlanBackupConfigArgs.builder()
+ *                 .includeVolumeData(true)
+ *                 .includeSecrets(true)
+ *                 .permissiveMode(true)
+ *                 .selectedApplications(BackupPlanBackupConfigSelectedApplicationsArgs.builder()
+ *                     .namespacedNames(                    
+ *                         BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()
+ *                             .name("app1")
+ *                             .namespace("ns1")
+ *                             .build(),
+ *                         BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()
+ *                             .name("app2")
+ *                             .namespace("ns2")
+ *                             .build())
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ### Gkebackup Backupplan Rpo Daily Window * * <!--Start PulumiCodeChooser --> diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlan.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlan.java index b3901c1e81..90af10e456 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlan.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlan.java @@ -598,6 +598,286 @@ * } * * <!--End PulumiCodeChooser --> + * ### Gkebackup Restoreplan Gitops Mode + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.container.Cluster;
+ * import com.pulumi.gcp.container.ClusterArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;
+ * import com.pulumi.gcp.gkebackup.BackupPlan;
+ * import com.pulumi.gcp.gkebackup.BackupPlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;
+ * import com.pulumi.gcp.gkebackup.RestorePlan;
+ * import com.pulumi.gcp.gkebackup.RestorePlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 primary = new Cluster("primary", ClusterArgs.builder()
+ *             .name("gitops-mode-cluster")
+ *             .location("us-central1")
+ *             .initialNodeCount(1)
+ *             .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()
+ *                 .workloadPool("my-project-name.svc.id.goog")
+ *                 .build())
+ *             .addonsConfig(ClusterAddonsConfigArgs.builder()
+ *                 .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()
+ *                     .enabled(true)
+ *                     .build())
+ *                 .build())
+ *             .deletionProtection("")
+ *             .network("default")
+ *             .subnetwork("default")
+ *             .build());
+ * 
+ *         var basic = new BackupPlan("basic", BackupPlanArgs.builder()
+ *             .name("gitops-mode")
+ *             .cluster(primary.id())
+ *             .location("us-central1")
+ *             .backupConfig(BackupPlanBackupConfigArgs.builder()
+ *                 .includeVolumeData(true)
+ *                 .includeSecrets(true)
+ *                 .allNamespaces(true)
+ *                 .build())
+ *             .build());
+ * 
+ *         var gitopsMode = new RestorePlan("gitopsMode", RestorePlanArgs.builder()
+ *             .name("gitops-mode")
+ *             .location("us-central1")
+ *             .backupPlan(basic.id())
+ *             .cluster(primary.id())
+ *             .restoreConfig(RestorePlanRestoreConfigArgs.builder()
+ *                 .allNamespaces(true)
+ *                 .namespacedResourceRestoreMode("MERGE_SKIP_ON_CONFLICT")
+ *                 .volumeDataRestorePolicy("RESTORE_VOLUME_DATA_FROM_BACKUP")
+ *                 .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()
+ *                     .allGroupKinds(true)
+ *                     .build())
+ *                 .clusterResourceConflictPolicy("USE_EXISTING_VERSION")
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Gkebackup Restoreplan Restore Order + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.container.Cluster;
+ * import com.pulumi.gcp.container.ClusterArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;
+ * import com.pulumi.gcp.gkebackup.BackupPlan;
+ * import com.pulumi.gcp.gkebackup.BackupPlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;
+ * import com.pulumi.gcp.gkebackup.RestorePlan;
+ * import com.pulumi.gcp.gkebackup.RestorePlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 primary = new Cluster("primary", ClusterArgs.builder()
+ *             .name("restore-order-cluster")
+ *             .location("us-central1")
+ *             .initialNodeCount(1)
+ *             .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()
+ *                 .workloadPool("my-project-name.svc.id.goog")
+ *                 .build())
+ *             .addonsConfig(ClusterAddonsConfigArgs.builder()
+ *                 .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()
+ *                     .enabled(true)
+ *                     .build())
+ *                 .build())
+ *             .deletionProtection("")
+ *             .network("default")
+ *             .subnetwork("default")
+ *             .build());
+ * 
+ *         var basic = new BackupPlan("basic", BackupPlanArgs.builder()
+ *             .name("restore-order")
+ *             .cluster(primary.id())
+ *             .location("us-central1")
+ *             .backupConfig(BackupPlanBackupConfigArgs.builder()
+ *                 .includeVolumeData(true)
+ *                 .includeSecrets(true)
+ *                 .allNamespaces(true)
+ *                 .build())
+ *             .build());
+ * 
+ *         var restoreOrder = new RestorePlan("restoreOrder", RestorePlanArgs.builder()
+ *             .name("restore-order")
+ *             .location("us-central1")
+ *             .backupPlan(basic.id())
+ *             .cluster(primary.id())
+ *             .restoreConfig(RestorePlanRestoreConfigArgs.builder()
+ *                 .allNamespaces(true)
+ *                 .namespacedResourceRestoreMode("FAIL_ON_CONFLICT")
+ *                 .volumeDataRestorePolicy("RESTORE_VOLUME_DATA_FROM_BACKUP")
+ *                 .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()
+ *                     .allGroupKinds(true)
+ *                     .build())
+ *                 .clusterResourceConflictPolicy("USE_EXISTING_VERSION")
+ *                 .restoreOrder(RestorePlanRestoreConfigRestoreOrderArgs.builder()
+ *                     .groupKindDependencies(                    
+ *                         RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()
+ *                             .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindA")
+ *                                 .build())
+ *                             .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindB")
+ *                                 .build())
+ *                             .build(),
+ *                         RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()
+ *                             .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindB")
+ *                                 .build())
+ *                             .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindC")
+ *                                 .build())
+ *                             .build())
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Gkebackup Restoreplan Volume Res + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.container.Cluster;
+ * import com.pulumi.gcp.container.ClusterArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;
+ * import com.pulumi.gcp.gkebackup.BackupPlan;
+ * import com.pulumi.gcp.gkebackup.BackupPlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;
+ * import com.pulumi.gcp.gkebackup.RestorePlan;
+ * import com.pulumi.gcp.gkebackup.RestorePlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 primary = new Cluster("primary", ClusterArgs.builder()
+ *             .name("volume-res-cluster")
+ *             .location("us-central1")
+ *             .initialNodeCount(1)
+ *             .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()
+ *                 .workloadPool("my-project-name.svc.id.goog")
+ *                 .build())
+ *             .addonsConfig(ClusterAddonsConfigArgs.builder()
+ *                 .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()
+ *                     .enabled(true)
+ *                     .build())
+ *                 .build())
+ *             .deletionProtection("")
+ *             .network("default")
+ *             .subnetwork("default")
+ *             .build());
+ * 
+ *         var basic = new BackupPlan("basic", BackupPlanArgs.builder()
+ *             .name("volume-res")
+ *             .cluster(primary.id())
+ *             .location("us-central1")
+ *             .backupConfig(BackupPlanBackupConfigArgs.builder()
+ *                 .includeVolumeData(true)
+ *                 .includeSecrets(true)
+ *                 .allNamespaces(true)
+ *                 .build())
+ *             .build());
+ * 
+ *         var volumeRes = new RestorePlan("volumeRes", RestorePlanArgs.builder()
+ *             .name("volume-res")
+ *             .location("us-central1")
+ *             .backupPlan(basic.id())
+ *             .cluster(primary.id())
+ *             .restoreConfig(RestorePlanRestoreConfigArgs.builder()
+ *                 .allNamespaces(true)
+ *                 .namespacedResourceRestoreMode("FAIL_ON_CONFLICT")
+ *                 .volumeDataRestorePolicy("NO_VOLUME_DATA_RESTORATION")
+ *                 .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()
+ *                     .allGroupKinds(true)
+ *                     .build())
+ *                 .clusterResourceConflictPolicy("USE_EXISTING_VERSION")
+ *                 .volumeDataRestorePolicyBindings(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.builder()
+ *                     .policy("RESTORE_VOLUME_DATA_FROM_BACKUP")
+ *                     .volumeType("GCE_PERSISTENT_DISK")
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlanIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlanIamBinding.java index a91fb84c2e..99ec7abf54 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlanIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlanIamBinding.java @@ -597,6 +597,286 @@ * } * * <!--End PulumiCodeChooser --> + * ### Gkebackup Restoreplan Gitops Mode + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.container.Cluster;
+ * import com.pulumi.gcp.container.ClusterArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;
+ * import com.pulumi.gcp.gkebackup.BackupPlan;
+ * import com.pulumi.gcp.gkebackup.BackupPlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;
+ * import com.pulumi.gcp.gkebackup.RestorePlan;
+ * import com.pulumi.gcp.gkebackup.RestorePlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 primary = new Cluster("primary", ClusterArgs.builder()
+ *             .name("gitops-mode-cluster")
+ *             .location("us-central1")
+ *             .initialNodeCount(1)
+ *             .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()
+ *                 .workloadPool("my-project-name.svc.id.goog")
+ *                 .build())
+ *             .addonsConfig(ClusterAddonsConfigArgs.builder()
+ *                 .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()
+ *                     .enabled(true)
+ *                     .build())
+ *                 .build())
+ *             .deletionProtection("")
+ *             .network("default")
+ *             .subnetwork("default")
+ *             .build());
+ * 
+ *         var basic = new BackupPlan("basic", BackupPlanArgs.builder()
+ *             .name("gitops-mode")
+ *             .cluster(primary.id())
+ *             .location("us-central1")
+ *             .backupConfig(BackupPlanBackupConfigArgs.builder()
+ *                 .includeVolumeData(true)
+ *                 .includeSecrets(true)
+ *                 .allNamespaces(true)
+ *                 .build())
+ *             .build());
+ * 
+ *         var gitopsMode = new RestorePlan("gitopsMode", RestorePlanArgs.builder()
+ *             .name("gitops-mode")
+ *             .location("us-central1")
+ *             .backupPlan(basic.id())
+ *             .cluster(primary.id())
+ *             .restoreConfig(RestorePlanRestoreConfigArgs.builder()
+ *                 .allNamespaces(true)
+ *                 .namespacedResourceRestoreMode("MERGE_SKIP_ON_CONFLICT")
+ *                 .volumeDataRestorePolicy("RESTORE_VOLUME_DATA_FROM_BACKUP")
+ *                 .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()
+ *                     .allGroupKinds(true)
+ *                     .build())
+ *                 .clusterResourceConflictPolicy("USE_EXISTING_VERSION")
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Gkebackup Restoreplan Restore Order + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.container.Cluster;
+ * import com.pulumi.gcp.container.ClusterArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;
+ * import com.pulumi.gcp.gkebackup.BackupPlan;
+ * import com.pulumi.gcp.gkebackup.BackupPlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;
+ * import com.pulumi.gcp.gkebackup.RestorePlan;
+ * import com.pulumi.gcp.gkebackup.RestorePlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 primary = new Cluster("primary", ClusterArgs.builder()
+ *             .name("restore-order-cluster")
+ *             .location("us-central1")
+ *             .initialNodeCount(1)
+ *             .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()
+ *                 .workloadPool("my-project-name.svc.id.goog")
+ *                 .build())
+ *             .addonsConfig(ClusterAddonsConfigArgs.builder()
+ *                 .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()
+ *                     .enabled(true)
+ *                     .build())
+ *                 .build())
+ *             .deletionProtection("")
+ *             .network("default")
+ *             .subnetwork("default")
+ *             .build());
+ * 
+ *         var basic = new BackupPlan("basic", BackupPlanArgs.builder()
+ *             .name("restore-order")
+ *             .cluster(primary.id())
+ *             .location("us-central1")
+ *             .backupConfig(BackupPlanBackupConfigArgs.builder()
+ *                 .includeVolumeData(true)
+ *                 .includeSecrets(true)
+ *                 .allNamespaces(true)
+ *                 .build())
+ *             .build());
+ * 
+ *         var restoreOrder = new RestorePlan("restoreOrder", RestorePlanArgs.builder()
+ *             .name("restore-order")
+ *             .location("us-central1")
+ *             .backupPlan(basic.id())
+ *             .cluster(primary.id())
+ *             .restoreConfig(RestorePlanRestoreConfigArgs.builder()
+ *                 .allNamespaces(true)
+ *                 .namespacedResourceRestoreMode("FAIL_ON_CONFLICT")
+ *                 .volumeDataRestorePolicy("RESTORE_VOLUME_DATA_FROM_BACKUP")
+ *                 .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()
+ *                     .allGroupKinds(true)
+ *                     .build())
+ *                 .clusterResourceConflictPolicy("USE_EXISTING_VERSION")
+ *                 .restoreOrder(RestorePlanRestoreConfigRestoreOrderArgs.builder()
+ *                     .groupKindDependencies(                    
+ *                         RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()
+ *                             .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindA")
+ *                                 .build())
+ *                             .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindB")
+ *                                 .build())
+ *                             .build(),
+ *                         RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()
+ *                             .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindB")
+ *                                 .build())
+ *                             .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindC")
+ *                                 .build())
+ *                             .build())
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Gkebackup Restoreplan Volume Res + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.container.Cluster;
+ * import com.pulumi.gcp.container.ClusterArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;
+ * import com.pulumi.gcp.gkebackup.BackupPlan;
+ * import com.pulumi.gcp.gkebackup.BackupPlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;
+ * import com.pulumi.gcp.gkebackup.RestorePlan;
+ * import com.pulumi.gcp.gkebackup.RestorePlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 primary = new Cluster("primary", ClusterArgs.builder()
+ *             .name("volume-res-cluster")
+ *             .location("us-central1")
+ *             .initialNodeCount(1)
+ *             .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()
+ *                 .workloadPool("my-project-name.svc.id.goog")
+ *                 .build())
+ *             .addonsConfig(ClusterAddonsConfigArgs.builder()
+ *                 .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()
+ *                     .enabled(true)
+ *                     .build())
+ *                 .build())
+ *             .deletionProtection("")
+ *             .network("default")
+ *             .subnetwork("default")
+ *             .build());
+ * 
+ *         var basic = new BackupPlan("basic", BackupPlanArgs.builder()
+ *             .name("volume-res")
+ *             .cluster(primary.id())
+ *             .location("us-central1")
+ *             .backupConfig(BackupPlanBackupConfigArgs.builder()
+ *                 .includeVolumeData(true)
+ *                 .includeSecrets(true)
+ *                 .allNamespaces(true)
+ *                 .build())
+ *             .build());
+ * 
+ *         var volumeRes = new RestorePlan("volumeRes", RestorePlanArgs.builder()
+ *             .name("volume-res")
+ *             .location("us-central1")
+ *             .backupPlan(basic.id())
+ *             .cluster(primary.id())
+ *             .restoreConfig(RestorePlanRestoreConfigArgs.builder()
+ *                 .allNamespaces(true)
+ *                 .namespacedResourceRestoreMode("FAIL_ON_CONFLICT")
+ *                 .volumeDataRestorePolicy("NO_VOLUME_DATA_RESTORATION")
+ *                 .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()
+ *                     .allGroupKinds(true)
+ *                     .build())
+ *                 .clusterResourceConflictPolicy("USE_EXISTING_VERSION")
+ *                 .volumeDataRestorePolicyBindings(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.builder()
+ *                     .policy("RESTORE_VOLUME_DATA_FROM_BACKUP")
+ *                     .volumeType("GCE_PERSISTENT_DISK")
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlanIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlanIamMember.java index 210efe490e..0c65d05c31 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlanIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlanIamMember.java @@ -596,6 +596,286 @@ * } * * <!--End PulumiCodeChooser --> + * ### Gkebackup Restoreplan Gitops Mode + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.container.Cluster;
+ * import com.pulumi.gcp.container.ClusterArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;
+ * import com.pulumi.gcp.gkebackup.BackupPlan;
+ * import com.pulumi.gcp.gkebackup.BackupPlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;
+ * import com.pulumi.gcp.gkebackup.RestorePlan;
+ * import com.pulumi.gcp.gkebackup.RestorePlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 primary = new Cluster("primary", ClusterArgs.builder()
+ *             .name("gitops-mode-cluster")
+ *             .location("us-central1")
+ *             .initialNodeCount(1)
+ *             .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()
+ *                 .workloadPool("my-project-name.svc.id.goog")
+ *                 .build())
+ *             .addonsConfig(ClusterAddonsConfigArgs.builder()
+ *                 .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()
+ *                     .enabled(true)
+ *                     .build())
+ *                 .build())
+ *             .deletionProtection("")
+ *             .network("default")
+ *             .subnetwork("default")
+ *             .build());
+ * 
+ *         var basic = new BackupPlan("basic", BackupPlanArgs.builder()
+ *             .name("gitops-mode")
+ *             .cluster(primary.id())
+ *             .location("us-central1")
+ *             .backupConfig(BackupPlanBackupConfigArgs.builder()
+ *                 .includeVolumeData(true)
+ *                 .includeSecrets(true)
+ *                 .allNamespaces(true)
+ *                 .build())
+ *             .build());
+ * 
+ *         var gitopsMode = new RestorePlan("gitopsMode", RestorePlanArgs.builder()
+ *             .name("gitops-mode")
+ *             .location("us-central1")
+ *             .backupPlan(basic.id())
+ *             .cluster(primary.id())
+ *             .restoreConfig(RestorePlanRestoreConfigArgs.builder()
+ *                 .allNamespaces(true)
+ *                 .namespacedResourceRestoreMode("MERGE_SKIP_ON_CONFLICT")
+ *                 .volumeDataRestorePolicy("RESTORE_VOLUME_DATA_FROM_BACKUP")
+ *                 .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()
+ *                     .allGroupKinds(true)
+ *                     .build())
+ *                 .clusterResourceConflictPolicy("USE_EXISTING_VERSION")
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Gkebackup Restoreplan Restore Order + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.container.Cluster;
+ * import com.pulumi.gcp.container.ClusterArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;
+ * import com.pulumi.gcp.gkebackup.BackupPlan;
+ * import com.pulumi.gcp.gkebackup.BackupPlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;
+ * import com.pulumi.gcp.gkebackup.RestorePlan;
+ * import com.pulumi.gcp.gkebackup.RestorePlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 primary = new Cluster("primary", ClusterArgs.builder()
+ *             .name("restore-order-cluster")
+ *             .location("us-central1")
+ *             .initialNodeCount(1)
+ *             .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()
+ *                 .workloadPool("my-project-name.svc.id.goog")
+ *                 .build())
+ *             .addonsConfig(ClusterAddonsConfigArgs.builder()
+ *                 .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()
+ *                     .enabled(true)
+ *                     .build())
+ *                 .build())
+ *             .deletionProtection("")
+ *             .network("default")
+ *             .subnetwork("default")
+ *             .build());
+ * 
+ *         var basic = new BackupPlan("basic", BackupPlanArgs.builder()
+ *             .name("restore-order")
+ *             .cluster(primary.id())
+ *             .location("us-central1")
+ *             .backupConfig(BackupPlanBackupConfigArgs.builder()
+ *                 .includeVolumeData(true)
+ *                 .includeSecrets(true)
+ *                 .allNamespaces(true)
+ *                 .build())
+ *             .build());
+ * 
+ *         var restoreOrder = new RestorePlan("restoreOrder", RestorePlanArgs.builder()
+ *             .name("restore-order")
+ *             .location("us-central1")
+ *             .backupPlan(basic.id())
+ *             .cluster(primary.id())
+ *             .restoreConfig(RestorePlanRestoreConfigArgs.builder()
+ *                 .allNamespaces(true)
+ *                 .namespacedResourceRestoreMode("FAIL_ON_CONFLICT")
+ *                 .volumeDataRestorePolicy("RESTORE_VOLUME_DATA_FROM_BACKUP")
+ *                 .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()
+ *                     .allGroupKinds(true)
+ *                     .build())
+ *                 .clusterResourceConflictPolicy("USE_EXISTING_VERSION")
+ *                 .restoreOrder(RestorePlanRestoreConfigRestoreOrderArgs.builder()
+ *                     .groupKindDependencies(                    
+ *                         RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()
+ *                             .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindA")
+ *                                 .build())
+ *                             .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindB")
+ *                                 .build())
+ *                             .build(),
+ *                         RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()
+ *                             .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindB")
+ *                                 .build())
+ *                             .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindC")
+ *                                 .build())
+ *                             .build())
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Gkebackup Restoreplan Volume Res + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.container.Cluster;
+ * import com.pulumi.gcp.container.ClusterArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;
+ * import com.pulumi.gcp.gkebackup.BackupPlan;
+ * import com.pulumi.gcp.gkebackup.BackupPlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;
+ * import com.pulumi.gcp.gkebackup.RestorePlan;
+ * import com.pulumi.gcp.gkebackup.RestorePlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 primary = new Cluster("primary", ClusterArgs.builder()
+ *             .name("volume-res-cluster")
+ *             .location("us-central1")
+ *             .initialNodeCount(1)
+ *             .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()
+ *                 .workloadPool("my-project-name.svc.id.goog")
+ *                 .build())
+ *             .addonsConfig(ClusterAddonsConfigArgs.builder()
+ *                 .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()
+ *                     .enabled(true)
+ *                     .build())
+ *                 .build())
+ *             .deletionProtection("")
+ *             .network("default")
+ *             .subnetwork("default")
+ *             .build());
+ * 
+ *         var basic = new BackupPlan("basic", BackupPlanArgs.builder()
+ *             .name("volume-res")
+ *             .cluster(primary.id())
+ *             .location("us-central1")
+ *             .backupConfig(BackupPlanBackupConfigArgs.builder()
+ *                 .includeVolumeData(true)
+ *                 .includeSecrets(true)
+ *                 .allNamespaces(true)
+ *                 .build())
+ *             .build());
+ * 
+ *         var volumeRes = new RestorePlan("volumeRes", RestorePlanArgs.builder()
+ *             .name("volume-res")
+ *             .location("us-central1")
+ *             .backupPlan(basic.id())
+ *             .cluster(primary.id())
+ *             .restoreConfig(RestorePlanRestoreConfigArgs.builder()
+ *                 .allNamespaces(true)
+ *                 .namespacedResourceRestoreMode("FAIL_ON_CONFLICT")
+ *                 .volumeDataRestorePolicy("NO_VOLUME_DATA_RESTORATION")
+ *                 .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()
+ *                     .allGroupKinds(true)
+ *                     .build())
+ *                 .clusterResourceConflictPolicy("USE_EXISTING_VERSION")
+ *                 .volumeDataRestorePolicyBindings(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.builder()
+ *                     .policy("RESTORE_VOLUME_DATA_FROM_BACKUP")
+ *                     .volumeType("GCE_PERSISTENT_DISK")
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlanIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlanIamPolicy.java index 2658e01e2a..c904383c55 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlanIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/RestorePlanIamPolicy.java @@ -594,6 +594,286 @@ * } * * <!--End PulumiCodeChooser --> + * ### Gkebackup Restoreplan Gitops Mode + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.container.Cluster;
+ * import com.pulumi.gcp.container.ClusterArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;
+ * import com.pulumi.gcp.gkebackup.BackupPlan;
+ * import com.pulumi.gcp.gkebackup.BackupPlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;
+ * import com.pulumi.gcp.gkebackup.RestorePlan;
+ * import com.pulumi.gcp.gkebackup.RestorePlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 primary = new Cluster("primary", ClusterArgs.builder()
+ *             .name("gitops-mode-cluster")
+ *             .location("us-central1")
+ *             .initialNodeCount(1)
+ *             .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()
+ *                 .workloadPool("my-project-name.svc.id.goog")
+ *                 .build())
+ *             .addonsConfig(ClusterAddonsConfigArgs.builder()
+ *                 .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()
+ *                     .enabled(true)
+ *                     .build())
+ *                 .build())
+ *             .deletionProtection("")
+ *             .network("default")
+ *             .subnetwork("default")
+ *             .build());
+ * 
+ *         var basic = new BackupPlan("basic", BackupPlanArgs.builder()
+ *             .name("gitops-mode")
+ *             .cluster(primary.id())
+ *             .location("us-central1")
+ *             .backupConfig(BackupPlanBackupConfigArgs.builder()
+ *                 .includeVolumeData(true)
+ *                 .includeSecrets(true)
+ *                 .allNamespaces(true)
+ *                 .build())
+ *             .build());
+ * 
+ *         var gitopsMode = new RestorePlan("gitopsMode", RestorePlanArgs.builder()
+ *             .name("gitops-mode")
+ *             .location("us-central1")
+ *             .backupPlan(basic.id())
+ *             .cluster(primary.id())
+ *             .restoreConfig(RestorePlanRestoreConfigArgs.builder()
+ *                 .allNamespaces(true)
+ *                 .namespacedResourceRestoreMode("MERGE_SKIP_ON_CONFLICT")
+ *                 .volumeDataRestorePolicy("RESTORE_VOLUME_DATA_FROM_BACKUP")
+ *                 .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()
+ *                     .allGroupKinds(true)
+ *                     .build())
+ *                 .clusterResourceConflictPolicy("USE_EXISTING_VERSION")
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Gkebackup Restoreplan Restore Order + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.container.Cluster;
+ * import com.pulumi.gcp.container.ClusterArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;
+ * import com.pulumi.gcp.gkebackup.BackupPlan;
+ * import com.pulumi.gcp.gkebackup.BackupPlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;
+ * import com.pulumi.gcp.gkebackup.RestorePlan;
+ * import com.pulumi.gcp.gkebackup.RestorePlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 primary = new Cluster("primary", ClusterArgs.builder()
+ *             .name("restore-order-cluster")
+ *             .location("us-central1")
+ *             .initialNodeCount(1)
+ *             .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()
+ *                 .workloadPool("my-project-name.svc.id.goog")
+ *                 .build())
+ *             .addonsConfig(ClusterAddonsConfigArgs.builder()
+ *                 .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()
+ *                     .enabled(true)
+ *                     .build())
+ *                 .build())
+ *             .deletionProtection("")
+ *             .network("default")
+ *             .subnetwork("default")
+ *             .build());
+ * 
+ *         var basic = new BackupPlan("basic", BackupPlanArgs.builder()
+ *             .name("restore-order")
+ *             .cluster(primary.id())
+ *             .location("us-central1")
+ *             .backupConfig(BackupPlanBackupConfigArgs.builder()
+ *                 .includeVolumeData(true)
+ *                 .includeSecrets(true)
+ *                 .allNamespaces(true)
+ *                 .build())
+ *             .build());
+ * 
+ *         var restoreOrder = new RestorePlan("restoreOrder", RestorePlanArgs.builder()
+ *             .name("restore-order")
+ *             .location("us-central1")
+ *             .backupPlan(basic.id())
+ *             .cluster(primary.id())
+ *             .restoreConfig(RestorePlanRestoreConfigArgs.builder()
+ *                 .allNamespaces(true)
+ *                 .namespacedResourceRestoreMode("FAIL_ON_CONFLICT")
+ *                 .volumeDataRestorePolicy("RESTORE_VOLUME_DATA_FROM_BACKUP")
+ *                 .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()
+ *                     .allGroupKinds(true)
+ *                     .build())
+ *                 .clusterResourceConflictPolicy("USE_EXISTING_VERSION")
+ *                 .restoreOrder(RestorePlanRestoreConfigRestoreOrderArgs.builder()
+ *                     .groupKindDependencies(                    
+ *                         RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()
+ *                             .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindA")
+ *                                 .build())
+ *                             .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindB")
+ *                                 .build())
+ *                             .build(),
+ *                         RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()
+ *                             .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindB")
+ *                                 .build())
+ *                             .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()
+ *                                 .resourceGroup("stable.example.com")
+ *                                 .resourceKind("kindC")
+ *                                 .build())
+ *                             .build())
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Gkebackup Restoreplan Volume Res + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.container.Cluster;
+ * import com.pulumi.gcp.container.ClusterArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;
+ * import com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;
+ * import com.pulumi.gcp.gkebackup.BackupPlan;
+ * import com.pulumi.gcp.gkebackup.BackupPlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;
+ * import com.pulumi.gcp.gkebackup.RestorePlan;
+ * import com.pulumi.gcp.gkebackup.RestorePlanArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;
+ * import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 primary = new Cluster("primary", ClusterArgs.builder()
+ *             .name("volume-res-cluster")
+ *             .location("us-central1")
+ *             .initialNodeCount(1)
+ *             .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()
+ *                 .workloadPool("my-project-name.svc.id.goog")
+ *                 .build())
+ *             .addonsConfig(ClusterAddonsConfigArgs.builder()
+ *                 .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()
+ *                     .enabled(true)
+ *                     .build())
+ *                 .build())
+ *             .deletionProtection("")
+ *             .network("default")
+ *             .subnetwork("default")
+ *             .build());
+ * 
+ *         var basic = new BackupPlan("basic", BackupPlanArgs.builder()
+ *             .name("volume-res")
+ *             .cluster(primary.id())
+ *             .location("us-central1")
+ *             .backupConfig(BackupPlanBackupConfigArgs.builder()
+ *                 .includeVolumeData(true)
+ *                 .includeSecrets(true)
+ *                 .allNamespaces(true)
+ *                 .build())
+ *             .build());
+ * 
+ *         var volumeRes = new RestorePlan("volumeRes", RestorePlanArgs.builder()
+ *             .name("volume-res")
+ *             .location("us-central1")
+ *             .backupPlan(basic.id())
+ *             .cluster(primary.id())
+ *             .restoreConfig(RestorePlanRestoreConfigArgs.builder()
+ *                 .allNamespaces(true)
+ *                 .namespacedResourceRestoreMode("FAIL_ON_CONFLICT")
+ *                 .volumeDataRestorePolicy("NO_VOLUME_DATA_RESTORATION")
+ *                 .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()
+ *                     .allGroupKinds(true)
+ *                     .build())
+ *                 .clusterResourceConflictPolicy("USE_EXISTING_VERSION")
+ *                 .volumeDataRestorePolicyBindings(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.builder()
+ *                     .policy("RESTORE_VOLUME_DATA_FROM_BACKUP")
+ *                     .volumeType("GCE_PERSISTENT_DISK")
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/BackupPlanBackupConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/BackupPlanBackupConfigArgs.java index a82d8e3ff5..c0f15dad6c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/BackupPlanBackupConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/BackupPlanBackupConfigArgs.java @@ -86,6 +86,25 @@ public Optional> includeVolumeData() { return Optional.ofNullable(this.includeVolumeData); } + /** + * This flag specifies whether Backups will not fail when + * Backup for GKE detects Kubernetes configuration that is + * non-standard or requires additional setup to restore. + * + */ + @Import(name="permissiveMode") + private @Nullable Output permissiveMode; + + /** + * @return This flag specifies whether Backups will not fail when + * Backup for GKE detects Kubernetes configuration that is + * non-standard or requires additional setup to restore. + * + */ + public Optional> permissiveMode() { + return Optional.ofNullable(this.permissiveMode); + } + /** * A list of namespaced Kubernetes Resources. * Structure is documented below. @@ -127,6 +146,7 @@ private BackupPlanBackupConfigArgs(BackupPlanBackupConfigArgs $) { this.encryptionKey = $.encryptionKey; this.includeSecrets = $.includeSecrets; this.includeVolumeData = $.includeVolumeData; + this.permissiveMode = $.permissiveMode; this.selectedApplications = $.selectedApplications; this.selectedNamespaces = $.selectedNamespaces; } @@ -241,6 +261,31 @@ public Builder includeVolumeData(Boolean includeVolumeData) { return includeVolumeData(Output.of(includeVolumeData)); } + /** + * @param permissiveMode This flag specifies whether Backups will not fail when + * Backup for GKE detects Kubernetes configuration that is + * non-standard or requires additional setup to restore. + * + * @return builder + * + */ + public Builder permissiveMode(@Nullable Output permissiveMode) { + $.permissiveMode = permissiveMode; + return this; + } + + /** + * @param permissiveMode This flag specifies whether Backups will not fail when + * Backup for GKE detects Kubernetes configuration that is + * non-standard or requires additional setup to restore. + * + * @return builder + * + */ + public Builder permissiveMode(Boolean permissiveMode) { + return permissiveMode(Output.of(permissiveMode)); + } + /** * @param selectedApplications A list of namespaced Kubernetes Resources. * Structure is documented below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigArgs.java index d974ccd24c..9e0cd5202b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigArgs.java @@ -7,9 +7,11 @@ import com.pulumi.core.annotations.Import; import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs; import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigExcludedNamespacesArgs; +import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderArgs; import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedApplicationsArgs; import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs; import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigTransformationRuleArgs; +import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs; import java.lang.Boolean; import java.lang.String; import java.util.List; @@ -109,7 +111,7 @@ public Optional> excluded * if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode * for more information on each mode. - * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. * */ @Import(name="namespacedResourceRestoreMode") @@ -122,7 +124,7 @@ public Optional> excluded * if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode * for more information on each mode. - * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. * */ public Optional> namespacedResourceRestoreMode() { @@ -146,6 +148,23 @@ public Optional> noNamespaces() { return Optional.ofNullable(this.noNamespaces); } + /** + * It contains custom ordering to use on a Restore. + * Structure is documented below. + * + */ + @Import(name="restoreOrder") + private @Nullable Output restoreOrder; + + /** + * @return It contains custom ordering to use on a Restore. + * Structure is documented below. + * + */ + public Optional> restoreOrder() { + return Optional.ofNullable(this.restoreOrder); + } + /** * A list of selected ProtectedApplications to restore. * The listed ProtectedApplications and all the resources @@ -238,6 +257,27 @@ public Optional> volumeDataRestorePolicy() { return Optional.ofNullable(this.volumeDataRestorePolicy); } + /** + * A table that binds volumes by their scope to a restore policy. Bindings + * must have a unique scope. Any volumes not scoped in the bindings are + * subject to the policy defined in volume_data_restore_policy. + * Structure is documented below. + * + */ + @Import(name="volumeDataRestorePolicyBindings") + private @Nullable Output> volumeDataRestorePolicyBindings; + + /** + * @return A table that binds volumes by their scope to a restore policy. Bindings + * must have a unique scope. Any volumes not scoped in the bindings are + * subject to the policy defined in volume_data_restore_policy. + * Structure is documented below. + * + */ + public Optional>> volumeDataRestorePolicyBindings() { + return Optional.ofNullable(this.volumeDataRestorePolicyBindings); + } + private RestorePlanRestoreConfigArgs() {} private RestorePlanRestoreConfigArgs(RestorePlanRestoreConfigArgs $) { @@ -247,10 +287,12 @@ private RestorePlanRestoreConfigArgs(RestorePlanRestoreConfigArgs $) { this.excludedNamespaces = $.excludedNamespaces; this.namespacedResourceRestoreMode = $.namespacedResourceRestoreMode; this.noNamespaces = $.noNamespaces; + this.restoreOrder = $.restoreOrder; this.selectedApplications = $.selectedApplications; this.selectedNamespaces = $.selectedNamespaces; this.transformationRules = $.transformationRules; this.volumeDataRestorePolicy = $.volumeDataRestorePolicy; + this.volumeDataRestorePolicyBindings = $.volumeDataRestorePolicyBindings; } public static Builder builder() { @@ -382,7 +424,7 @@ public Builder excludedNamespaces(RestorePlanRestoreConfigExcludedNamespacesArgs * if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode * for more information on each mode. - * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. * * @return builder * @@ -399,7 +441,7 @@ public Builder namespacedResourceRestoreMode(@Nullable Output namespaced * if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode * for more information on each mode. - * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. * * @return builder * @@ -431,6 +473,29 @@ public Builder noNamespaces(Boolean noNamespaces) { return noNamespaces(Output.of(noNamespaces)); } + /** + * @param restoreOrder It contains custom ordering to use on a Restore. + * Structure is documented below. + * + * @return builder + * + */ + public Builder restoreOrder(@Nullable Output restoreOrder) { + $.restoreOrder = restoreOrder; + return this; + } + + /** + * @param restoreOrder It contains custom ordering to use on a Restore. + * Structure is documented below. + * + * @return builder + * + */ + public Builder restoreOrder(RestorePlanRestoreConfigRestoreOrderArgs restoreOrder) { + return restoreOrder(Output.of(restoreOrder)); + } + /** * @param selectedApplications A list of selected ProtectedApplications to restore. * The listed ProtectedApplications and all the resources @@ -562,6 +627,46 @@ public Builder volumeDataRestorePolicy(String volumeDataRestorePolicy) { return volumeDataRestorePolicy(Output.of(volumeDataRestorePolicy)); } + /** + * @param volumeDataRestorePolicyBindings A table that binds volumes by their scope to a restore policy. Bindings + * must have a unique scope. Any volumes not scoped in the bindings are + * subject to the policy defined in volume_data_restore_policy. + * Structure is documented below. + * + * @return builder + * + */ + public Builder volumeDataRestorePolicyBindings(@Nullable Output> volumeDataRestorePolicyBindings) { + $.volumeDataRestorePolicyBindings = volumeDataRestorePolicyBindings; + return this; + } + + /** + * @param volumeDataRestorePolicyBindings A table that binds volumes by their scope to a restore policy. Bindings + * must have a unique scope. Any volumes not scoped in the bindings are + * subject to the policy defined in volume_data_restore_policy. + * Structure is documented below. + * + * @return builder + * + */ + public Builder volumeDataRestorePolicyBindings(List volumeDataRestorePolicyBindings) { + return volumeDataRestorePolicyBindings(Output.of(volumeDataRestorePolicyBindings)); + } + + /** + * @param volumeDataRestorePolicyBindings A table that binds volumes by their scope to a restore policy. Bindings + * must have a unique scope. Any volumes not scoped in the bindings are + * subject to the policy defined in volume_data_restore_policy. + * Structure is documented below. + * + * @return builder + * + */ + public Builder volumeDataRestorePolicyBindings(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs... volumeDataRestorePolicyBindings) { + return volumeDataRestorePolicyBindings(List.of(volumeDataRestorePolicyBindings)); + } + public RestorePlanRestoreConfigArgs build() { return $; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderArgs.java new file mode 100644 index 0000000000..3d5fcf5c54 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderArgs.java @@ -0,0 +1,111 @@ +// *** 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.gkebackup.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs; +import java.util.List; +import java.util.Objects; + + +public final class RestorePlanRestoreConfigRestoreOrderArgs extends com.pulumi.resources.ResourceArgs { + + public static final RestorePlanRestoreConfigRestoreOrderArgs Empty = new RestorePlanRestoreConfigRestoreOrderArgs(); + + /** + * A list of group kind dependency pairs + * that is used by Backup for GKE to + * generate a group kind restore order. + * Structure is documented below. + * + */ + @Import(name="groupKindDependencies", required=true) + private Output> groupKindDependencies; + + /** + * @return A list of group kind dependency pairs + * that is used by Backup for GKE to + * generate a group kind restore order. + * Structure is documented below. + * + */ + public Output> groupKindDependencies() { + return this.groupKindDependencies; + } + + private RestorePlanRestoreConfigRestoreOrderArgs() {} + + private RestorePlanRestoreConfigRestoreOrderArgs(RestorePlanRestoreConfigRestoreOrderArgs $) { + this.groupKindDependencies = $.groupKindDependencies; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RestorePlanRestoreConfigRestoreOrderArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RestorePlanRestoreConfigRestoreOrderArgs $; + + public Builder() { + $ = new RestorePlanRestoreConfigRestoreOrderArgs(); + } + + public Builder(RestorePlanRestoreConfigRestoreOrderArgs defaults) { + $ = new RestorePlanRestoreConfigRestoreOrderArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param groupKindDependencies A list of group kind dependency pairs + * that is used by Backup for GKE to + * generate a group kind restore order. + * Structure is documented below. + * + * @return builder + * + */ + public Builder groupKindDependencies(Output> groupKindDependencies) { + $.groupKindDependencies = groupKindDependencies; + return this; + } + + /** + * @param groupKindDependencies A list of group kind dependency pairs + * that is used by Backup for GKE to + * generate a group kind restore order. + * Structure is documented below. + * + * @return builder + * + */ + public Builder groupKindDependencies(List groupKindDependencies) { + return groupKindDependencies(Output.of(groupKindDependencies)); + } + + /** + * @param groupKindDependencies A list of group kind dependency pairs + * that is used by Backup for GKE to + * generate a group kind restore order. + * Structure is documented below. + * + * @return builder + * + */ + public Builder groupKindDependencies(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs... groupKindDependencies) { + return groupKindDependencies(List.of(groupKindDependencies)); + } + + public RestorePlanRestoreConfigRestoreOrderArgs build() { + if ($.groupKindDependencies == null) { + throw new MissingRequiredPropertyException("RestorePlanRestoreConfigRestoreOrderArgs", "groupKindDependencies"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.java new file mode 100644 index 0000000000..7149b638c0 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.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.gkebackup.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs; +import com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs; +import java.util.Objects; + + +public final class RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs extends com.pulumi.resources.ResourceArgs { + + public static final RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs Empty = new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs(); + + /** + * The requiring group kind requires that the satisfying + * group kind be restored first. + * Structure is documented below. + * + */ + @Import(name="requiring", required=true) + private Output requiring; + + /** + * @return The requiring group kind requires that the satisfying + * group kind be restored first. + * Structure is documented below. + * + */ + public Output requiring() { + return this.requiring; + } + + /** + * The satisfying group kind must be restored first + * in order to satisfy the dependency. + * Structure is documented below. + * + */ + @Import(name="satisfying", required=true) + private Output satisfying; + + /** + * @return The satisfying group kind must be restored first + * in order to satisfy the dependency. + * Structure is documented below. + * + */ + public Output satisfying() { + return this.satisfying; + } + + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs() {} + + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs $) { + this.requiring = $.requiring; + this.satisfying = $.satisfying; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs $; + + public Builder() { + $ = new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs(); + } + + public Builder(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs defaults) { + $ = new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param requiring The requiring group kind requires that the satisfying + * group kind be restored first. + * Structure is documented below. + * + * @return builder + * + */ + public Builder requiring(Output requiring) { + $.requiring = requiring; + return this; + } + + /** + * @param requiring The requiring group kind requires that the satisfying + * group kind be restored first. + * Structure is documented below. + * + * @return builder + * + */ + public Builder requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs requiring) { + return requiring(Output.of(requiring)); + } + + /** + * @param satisfying The satisfying group kind must be restored first + * in order to satisfy the dependency. + * Structure is documented below. + * + * @return builder + * + */ + public Builder satisfying(Output satisfying) { + $.satisfying = satisfying; + return this; + } + + /** + * @param satisfying The satisfying group kind must be restored first + * in order to satisfy the dependency. + * Structure is documented below. + * + * @return builder + * + */ + public Builder satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs satisfying) { + return satisfying(Output.of(satisfying)); + } + + public RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs build() { + if ($.requiring == null) { + throw new MissingRequiredPropertyException("RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs", "requiring"); + } + if ($.satisfying == null) { + throw new MissingRequiredPropertyException("RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs", "satisfying"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.java new file mode 100644 index 0000000000..5e5c4e36b8 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.java @@ -0,0 +1,140 @@ +// *** 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.gkebackup.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 RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs extends com.pulumi.resources.ResourceArgs { + + public static final RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs Empty = new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs(); + + /** + * API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + * + */ + @Import(name="resourceGroup") + private @Nullable Output resourceGroup; + + /** + * @return API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + * + */ + public Optional> resourceGroup() { + return Optional.ofNullable(this.resourceGroup); + } + + /** + * Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + * *** + * + */ + @Import(name="resourceKind") + private @Nullable Output resourceKind; + + /** + * @return Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + * *** + * + */ + public Optional> resourceKind() { + return Optional.ofNullable(this.resourceKind); + } + + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs() {} + + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs $) { + this.resourceGroup = $.resourceGroup; + this.resourceKind = $.resourceKind; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs $; + + public Builder() { + $ = new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs(); + } + + public Builder(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs defaults) { + $ = new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param resourceGroup API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + * + * @return builder + * + */ + public Builder resourceGroup(@Nullable Output resourceGroup) { + $.resourceGroup = resourceGroup; + return this; + } + + /** + * @param resourceGroup API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + * + * @return builder + * + */ + public Builder resourceGroup(String resourceGroup) { + return resourceGroup(Output.of(resourceGroup)); + } + + /** + * @param resourceKind Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + * *** + * + * @return builder + * + */ + public Builder resourceKind(@Nullable Output resourceKind) { + $.resourceKind = resourceKind; + return this; + } + + /** + * @param resourceKind Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + * *** + * + * @return builder + * + */ + public Builder resourceKind(String resourceKind) { + return resourceKind(Output.of(resourceKind)); + } + + public RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.java new file mode 100644 index 0000000000..bcced073a6 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.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.gkebackup.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 RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs extends com.pulumi.resources.ResourceArgs { + + public static final RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs Empty = new RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs(); + + /** + * API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + * + */ + @Import(name="resourceGroup") + private @Nullable Output resourceGroup; + + /** + * @return API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + * + */ + public Optional> resourceGroup() { + return Optional.ofNullable(this.resourceGroup); + } + + /** + * Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + */ + @Import(name="resourceKind") + private @Nullable Output resourceKind; + + /** + * @return Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + */ + public Optional> resourceKind() { + return Optional.ofNullable(this.resourceKind); + } + + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs() {} + + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs $) { + this.resourceGroup = $.resourceGroup; + this.resourceKind = $.resourceKind; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs $; + + public Builder() { + $ = new RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs(); + } + + public Builder(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs defaults) { + $ = new RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param resourceGroup API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + * + * @return builder + * + */ + public Builder resourceGroup(@Nullable Output resourceGroup) { + $.resourceGroup = resourceGroup; + return this; + } + + /** + * @param resourceGroup API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + * + * @return builder + * + */ + public Builder resourceGroup(String resourceGroup) { + return resourceGroup(Output.of(resourceGroup)); + } + + /** + * @param resourceKind Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + * @return builder + * + */ + public Builder resourceKind(@Nullable Output resourceKind) { + $.resourceKind = resourceKind; + return this; + } + + /** + * @param resourceKind Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + * @return builder + * + */ + public Builder resourceKind(String resourceKind) { + return resourceKind(Output.of(resourceKind)); + } + + public RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigTransformationRuleFieldActionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigTransformationRuleFieldActionArgs.java index 66b7f007df..22ccd8c212 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigTransformationRuleFieldActionArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigTransformationRuleFieldActionArgs.java @@ -71,8 +71,6 @@ public Optional> path() { * A string that specifies the desired value in string format * to use for transformation. * - * *** - * */ @Import(name="value") private @Nullable Output value; @@ -81,8 +79,6 @@ public Optional> path() { * @return A string that specifies the desired value in string format * to use for transformation. * - * *** - * */ public Optional> value() { return Optional.ofNullable(this.value); @@ -188,8 +184,6 @@ public Builder path(String path) { * @param value A string that specifies the desired value in string format * to use for transformation. * - * *** - * * @return builder * */ @@ -202,8 +196,6 @@ public Builder value(@Nullable Output value) { * @param value A string that specifies the desired value in string format * to use for transformation. * - * *** - * * @return builder * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.java new file mode 100644 index 0000000000..a2dd98db61 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/inputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.java @@ -0,0 +1,145 @@ +// *** 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.gkebackup.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs extends com.pulumi.resources.ResourceArgs { + + public static final RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs Empty = new RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs(); + + /** + * Specifies the mechanism to be used to restore this volume data. + * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + * for more information on each policy option. + * Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + * + */ + @Import(name="policy", required=true) + private Output policy; + + /** + * @return Specifies the mechanism to be used to restore this volume data. + * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + * for more information on each policy option. + * Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + * + */ + public Output policy() { + return this.policy; + } + + /** + * The volume type, as determined by the PVC's + * bound PV, to apply the policy to. + * Possible values are: `GCE_PERSISTENT_DISK`. + * + */ + @Import(name="volumeType", required=true) + private Output volumeType; + + /** + * @return The volume type, as determined by the PVC's + * bound PV, to apply the policy to. + * Possible values are: `GCE_PERSISTENT_DISK`. + * + */ + public Output volumeType() { + return this.volumeType; + } + + private RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs() {} + + private RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs $) { + this.policy = $.policy; + this.volumeType = $.volumeType; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs $; + + public Builder() { + $ = new RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs(); + } + + public Builder(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs defaults) { + $ = new RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param policy Specifies the mechanism to be used to restore this volume data. + * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + * for more information on each policy option. + * Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + * + * @return builder + * + */ + public Builder policy(Output policy) { + $.policy = policy; + return this; + } + + /** + * @param policy Specifies the mechanism to be used to restore this volume data. + * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + * for more information on each policy option. + * Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + * + * @return builder + * + */ + public Builder policy(String policy) { + return policy(Output.of(policy)); + } + + /** + * @param volumeType The volume type, as determined by the PVC's + * bound PV, to apply the policy to. + * Possible values are: `GCE_PERSISTENT_DISK`. + * + * @return builder + * + */ + public Builder volumeType(Output volumeType) { + $.volumeType = volumeType; + return this; + } + + /** + * @param volumeType The volume type, as determined by the PVC's + * bound PV, to apply the policy to. + * Possible values are: `GCE_PERSISTENT_DISK`. + * + * @return builder + * + */ + public Builder volumeType(String volumeType) { + return volumeType(Output.of(volumeType)); + } + + public RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs build() { + if ($.policy == null) { + throw new MissingRequiredPropertyException("RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs", "policy"); + } + if ($.volumeType == null) { + throw new MissingRequiredPropertyException("RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs", "volumeType"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/BackupPlanBackupConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/BackupPlanBackupConfig.java index 81be6a370a..a4dc9801b4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/BackupPlanBackupConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/BackupPlanBackupConfig.java @@ -38,6 +38,13 @@ public final class BackupPlanBackupConfig { * */ private @Nullable Boolean includeVolumeData; + /** + * @return This flag specifies whether Backups will not fail when + * Backup for GKE detects Kubernetes configuration that is + * non-standard or requires additional setup to restore. + * + */ + private @Nullable Boolean permissiveMode; /** * @return A list of namespaced Kubernetes Resources. * Structure is documented below. @@ -84,6 +91,15 @@ public Optional includeSecrets() { public Optional includeVolumeData() { return Optional.ofNullable(this.includeVolumeData); } + /** + * @return This flag specifies whether Backups will not fail when + * Backup for GKE detects Kubernetes configuration that is + * non-standard or requires additional setup to restore. + * + */ + public Optional permissiveMode() { + return Optional.ofNullable(this.permissiveMode); + } /** * @return A list of namespaced Kubernetes Resources. * Structure is documented below. @@ -114,6 +130,7 @@ public static final class Builder { private @Nullable BackupPlanBackupConfigEncryptionKey encryptionKey; private @Nullable Boolean includeSecrets; private @Nullable Boolean includeVolumeData; + private @Nullable Boolean permissiveMode; private @Nullable BackupPlanBackupConfigSelectedApplications selectedApplications; private @Nullable BackupPlanBackupConfigSelectedNamespaces selectedNamespaces; public Builder() {} @@ -123,6 +140,7 @@ public Builder(BackupPlanBackupConfig defaults) { this.encryptionKey = defaults.encryptionKey; this.includeSecrets = defaults.includeSecrets; this.includeVolumeData = defaults.includeVolumeData; + this.permissiveMode = defaults.permissiveMode; this.selectedApplications = defaults.selectedApplications; this.selectedNamespaces = defaults.selectedNamespaces; } @@ -152,6 +170,12 @@ public Builder includeVolumeData(@Nullable Boolean includeVolumeData) { return this; } @CustomType.Setter + public Builder permissiveMode(@Nullable Boolean permissiveMode) { + + this.permissiveMode = permissiveMode; + return this; + } + @CustomType.Setter public Builder selectedApplications(@Nullable BackupPlanBackupConfigSelectedApplications selectedApplications) { this.selectedApplications = selectedApplications; @@ -169,6 +193,7 @@ public BackupPlanBackupConfig build() { _resultValue.encryptionKey = encryptionKey; _resultValue.includeSecrets = includeSecrets; _resultValue.includeVolumeData = includeVolumeData; + _resultValue.permissiveMode = permissiveMode; _resultValue.selectedApplications = selectedApplications; _resultValue.selectedNamespaces = selectedNamespaces; return _resultValue; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfig.java index 014fb8cfce..c94ce97154 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfig.java @@ -6,9 +6,11 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.gcp.gkebackup.outputs.RestorePlanRestoreConfigClusterResourceRestoreScope; import com.pulumi.gcp.gkebackup.outputs.RestorePlanRestoreConfigExcludedNamespaces; +import com.pulumi.gcp.gkebackup.outputs.RestorePlanRestoreConfigRestoreOrder; import com.pulumi.gcp.gkebackup.outputs.RestorePlanRestoreConfigSelectedApplications; import com.pulumi.gcp.gkebackup.outputs.RestorePlanRestoreConfigSelectedNamespaces; import com.pulumi.gcp.gkebackup.outputs.RestorePlanRestoreConfigTransformationRule; +import com.pulumi.gcp.gkebackup.outputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBinding; import java.lang.Boolean; import java.lang.String; import java.util.List; @@ -55,7 +57,7 @@ public final class RestorePlanRestoreConfig { * if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode * for more information on each mode. - * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. * */ private @Nullable String namespacedResourceRestoreMode; @@ -65,6 +67,12 @@ public final class RestorePlanRestoreConfig { * */ private @Nullable Boolean noNamespaces; + /** + * @return It contains custom ordering to use on a Restore. + * Structure is documented below. + * + */ + private @Nullable RestorePlanRestoreConfigRestoreOrder restoreOrder; /** * @return A list of selected ProtectedApplications to restore. * The listed ProtectedApplications and all the resources @@ -101,6 +109,14 @@ public final class RestorePlanRestoreConfig { * */ private @Nullable String volumeDataRestorePolicy; + /** + * @return A table that binds volumes by their scope to a restore policy. Bindings + * must have a unique scope. Any volumes not scoped in the bindings are + * subject to the policy defined in volume_data_restore_policy. + * Structure is documented below. + * + */ + private @Nullable List volumeDataRestorePolicyBindings; private RestorePlanRestoreConfig() {} /** @@ -148,7 +164,7 @@ public Optional excludedNamespaces() * if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode * for more information on each mode. - * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. * */ public Optional namespacedResourceRestoreMode() { @@ -162,6 +178,14 @@ public Optional namespacedResourceRestoreMode() { public Optional noNamespaces() { return Optional.ofNullable(this.noNamespaces); } + /** + * @return It contains custom ordering to use on a Restore. + * Structure is documented below. + * + */ + public Optional restoreOrder() { + return Optional.ofNullable(this.restoreOrder); + } /** * @return A list of selected ProtectedApplications to restore. * The listed ProtectedApplications and all the resources @@ -206,6 +230,16 @@ public List transformationRules() { public Optional volumeDataRestorePolicy() { return Optional.ofNullable(this.volumeDataRestorePolicy); } + /** + * @return A table that binds volumes by their scope to a restore policy. Bindings + * must have a unique scope. Any volumes not scoped in the bindings are + * subject to the policy defined in volume_data_restore_policy. + * Structure is documented below. + * + */ + public List volumeDataRestorePolicyBindings() { + return this.volumeDataRestorePolicyBindings == null ? List.of() : this.volumeDataRestorePolicyBindings; + } public static Builder builder() { return new Builder(); @@ -222,10 +256,12 @@ public static final class Builder { private @Nullable RestorePlanRestoreConfigExcludedNamespaces excludedNamespaces; private @Nullable String namespacedResourceRestoreMode; private @Nullable Boolean noNamespaces; + private @Nullable RestorePlanRestoreConfigRestoreOrder restoreOrder; private @Nullable RestorePlanRestoreConfigSelectedApplications selectedApplications; private @Nullable RestorePlanRestoreConfigSelectedNamespaces selectedNamespaces; private @Nullable List transformationRules; private @Nullable String volumeDataRestorePolicy; + private @Nullable List volumeDataRestorePolicyBindings; public Builder() {} public Builder(RestorePlanRestoreConfig defaults) { Objects.requireNonNull(defaults); @@ -235,10 +271,12 @@ public Builder(RestorePlanRestoreConfig defaults) { this.excludedNamespaces = defaults.excludedNamespaces; this.namespacedResourceRestoreMode = defaults.namespacedResourceRestoreMode; this.noNamespaces = defaults.noNamespaces; + this.restoreOrder = defaults.restoreOrder; this.selectedApplications = defaults.selectedApplications; this.selectedNamespaces = defaults.selectedNamespaces; this.transformationRules = defaults.transformationRules; this.volumeDataRestorePolicy = defaults.volumeDataRestorePolicy; + this.volumeDataRestorePolicyBindings = defaults.volumeDataRestorePolicyBindings; } @CustomType.Setter @@ -278,6 +316,12 @@ public Builder noNamespaces(@Nullable Boolean noNamespaces) { return this; } @CustomType.Setter + public Builder restoreOrder(@Nullable RestorePlanRestoreConfigRestoreOrder restoreOrder) { + + this.restoreOrder = restoreOrder; + return this; + } + @CustomType.Setter public Builder selectedApplications(@Nullable RestorePlanRestoreConfigSelectedApplications selectedApplications) { this.selectedApplications = selectedApplications; @@ -304,6 +348,15 @@ public Builder volumeDataRestorePolicy(@Nullable String volumeDataRestorePolicy) this.volumeDataRestorePolicy = volumeDataRestorePolicy; return this; } + @CustomType.Setter + public Builder volumeDataRestorePolicyBindings(@Nullable List volumeDataRestorePolicyBindings) { + + this.volumeDataRestorePolicyBindings = volumeDataRestorePolicyBindings; + return this; + } + public Builder volumeDataRestorePolicyBindings(RestorePlanRestoreConfigVolumeDataRestorePolicyBinding... volumeDataRestorePolicyBindings) { + return volumeDataRestorePolicyBindings(List.of(volumeDataRestorePolicyBindings)); + } public RestorePlanRestoreConfig build() { final var _resultValue = new RestorePlanRestoreConfig(); _resultValue.allNamespaces = allNamespaces; @@ -312,10 +365,12 @@ public RestorePlanRestoreConfig build() { _resultValue.excludedNamespaces = excludedNamespaces; _resultValue.namespacedResourceRestoreMode = namespacedResourceRestoreMode; _resultValue.noNamespaces = noNamespaces; + _resultValue.restoreOrder = restoreOrder; _resultValue.selectedApplications = selectedApplications; _resultValue.selectedNamespaces = selectedNamespaces; _resultValue.transformationRules = transformationRules; _resultValue.volumeDataRestorePolicy = volumeDataRestorePolicy; + _resultValue.volumeDataRestorePolicyBindings = volumeDataRestorePolicyBindings; return _resultValue; } } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrder.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrder.java new file mode 100644 index 0000000000..d2c7bdc553 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrder.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.gkebackup.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.gkebackup.outputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependency; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class RestorePlanRestoreConfigRestoreOrder { + /** + * @return A list of group kind dependency pairs + * that is used by Backup for GKE to + * generate a group kind restore order. + * Structure is documented below. + * + */ + private List groupKindDependencies; + + private RestorePlanRestoreConfigRestoreOrder() {} + /** + * @return A list of group kind dependency pairs + * that is used by Backup for GKE to + * generate a group kind restore order. + * Structure is documented below. + * + */ + public List groupKindDependencies() { + return this.groupKindDependencies; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RestorePlanRestoreConfigRestoreOrder defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List groupKindDependencies; + public Builder() {} + public Builder(RestorePlanRestoreConfigRestoreOrder defaults) { + Objects.requireNonNull(defaults); + this.groupKindDependencies = defaults.groupKindDependencies; + } + + @CustomType.Setter + public Builder groupKindDependencies(List groupKindDependencies) { + if (groupKindDependencies == null) { + throw new MissingRequiredPropertyException("RestorePlanRestoreConfigRestoreOrder", "groupKindDependencies"); + } + this.groupKindDependencies = groupKindDependencies; + return this; + } + public Builder groupKindDependencies(RestorePlanRestoreConfigRestoreOrderGroupKindDependency... groupKindDependencies) { + return groupKindDependencies(List.of(groupKindDependencies)); + } + public RestorePlanRestoreConfigRestoreOrder build() { + final var _resultValue = new RestorePlanRestoreConfigRestoreOrder(); + _resultValue.groupKindDependencies = groupKindDependencies; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependency.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependency.java new file mode 100644 index 0000000000..0c205fe724 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependency.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.gkebackup.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.gkebackup.outputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring; +import com.pulumi.gcp.gkebackup.outputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying; +import java.util.Objects; + +@CustomType +public final class RestorePlanRestoreConfigRestoreOrderGroupKindDependency { + /** + * @return The requiring group kind requires that the satisfying + * group kind be restored first. + * Structure is documented below. + * + */ + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring requiring; + /** + * @return The satisfying group kind must be restored first + * in order to satisfy the dependency. + * Structure is documented below. + * + */ + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying satisfying; + + private RestorePlanRestoreConfigRestoreOrderGroupKindDependency() {} + /** + * @return The requiring group kind requires that the satisfying + * group kind be restored first. + * Structure is documented below. + * + */ + public RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring requiring() { + return this.requiring; + } + /** + * @return The satisfying group kind must be restored first + * in order to satisfy the dependency. + * Structure is documented below. + * + */ + public RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying satisfying() { + return this.satisfying; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RestorePlanRestoreConfigRestoreOrderGroupKindDependency defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring requiring; + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying satisfying; + public Builder() {} + public Builder(RestorePlanRestoreConfigRestoreOrderGroupKindDependency defaults) { + Objects.requireNonNull(defaults); + this.requiring = defaults.requiring; + this.satisfying = defaults.satisfying; + } + + @CustomType.Setter + public Builder requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring requiring) { + if (requiring == null) { + throw new MissingRequiredPropertyException("RestorePlanRestoreConfigRestoreOrderGroupKindDependency", "requiring"); + } + this.requiring = requiring; + return this; + } + @CustomType.Setter + public Builder satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying satisfying) { + if (satisfying == null) { + throw new MissingRequiredPropertyException("RestorePlanRestoreConfigRestoreOrderGroupKindDependency", "satisfying"); + } + this.satisfying = satisfying; + return this; + } + public RestorePlanRestoreConfigRestoreOrderGroupKindDependency build() { + final var _resultValue = new RestorePlanRestoreConfigRestoreOrderGroupKindDependency(); + _resultValue.requiring = requiring; + _resultValue.satisfying = satisfying; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring.java new file mode 100644 index 0000000000..e08c5fb4f4 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring.java @@ -0,0 +1,88 @@ +// *** 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.gkebackup.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 RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring { + /** + * @return API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + * + */ + private @Nullable String resourceGroup; + /** + * @return Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + * *** + * + */ + private @Nullable String resourceKind; + + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring() {} + /** + * @return API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + * + */ + public Optional resourceGroup() { + return Optional.ofNullable(this.resourceGroup); + } + /** + * @return Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + * *** + * + */ + public Optional resourceKind() { + return Optional.ofNullable(this.resourceKind); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String resourceGroup; + private @Nullable String resourceKind; + public Builder() {} + public Builder(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring defaults) { + Objects.requireNonNull(defaults); + this.resourceGroup = defaults.resourceGroup; + this.resourceKind = defaults.resourceKind; + } + + @CustomType.Setter + public Builder resourceGroup(@Nullable String resourceGroup) { + + this.resourceGroup = resourceGroup; + return this; + } + @CustomType.Setter + public Builder resourceKind(@Nullable String resourceKind) { + + this.resourceKind = resourceKind; + return this; + } + public RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring build() { + final var _resultValue = new RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring(); + _resultValue.resourceGroup = resourceGroup; + _resultValue.resourceKind = resourceKind; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying.java new file mode 100644 index 0000000000..ab9ee3cc32 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying.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.gkebackup.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 RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying { + /** + * @return API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + * + */ + private @Nullable String resourceGroup; + /** + * @return Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + */ + private @Nullable String resourceKind; + + private RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying() {} + /** + * @return API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + * + */ + public Optional resourceGroup() { + return Optional.ofNullable(this.resourceGroup); + } + /** + * @return Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + */ + public Optional resourceKind() { + return Optional.ofNullable(this.resourceKind); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String resourceGroup; + private @Nullable String resourceKind; + public Builder() {} + public Builder(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying defaults) { + Objects.requireNonNull(defaults); + this.resourceGroup = defaults.resourceGroup; + this.resourceKind = defaults.resourceKind; + } + + @CustomType.Setter + public Builder resourceGroup(@Nullable String resourceGroup) { + + this.resourceGroup = resourceGroup; + return this; + } + @CustomType.Setter + public Builder resourceKind(@Nullable String resourceKind) { + + this.resourceKind = resourceKind; + return this; + } + public RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying build() { + final var _resultValue = new RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying(); + _resultValue.resourceGroup = resourceGroup; + _resultValue.resourceKind = resourceKind; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigTransformationRuleFieldAction.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigTransformationRuleFieldAction.java index e10264f6c6..920a6fa63e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigTransformationRuleFieldAction.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigTransformationRuleFieldAction.java @@ -34,8 +34,6 @@ public final class RestorePlanRestoreConfigTransformationRuleFieldAction { * @return A string that specifies the desired value in string format * to use for transformation. * - * *** - * */ private @Nullable String value; @@ -68,8 +66,6 @@ public Optional path() { * @return A string that specifies the desired value in string format * to use for transformation. * - * *** - * */ public Optional value() { return Optional.ofNullable(this.value); diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBinding.java new file mode 100644 index 0000000000..61929d596d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkebackup/outputs/RestorePlanRestoreConfigVolumeDataRestorePolicyBinding.java @@ -0,0 +1,91 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gkebackup.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class RestorePlanRestoreConfigVolumeDataRestorePolicyBinding { + /** + * @return Specifies the mechanism to be used to restore this volume data. + * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + * for more information on each policy option. + * Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + * + */ + private String policy; + /** + * @return The volume type, as determined by the PVC's + * bound PV, to apply the policy to. + * Possible values are: `GCE_PERSISTENT_DISK`. + * + */ + private String volumeType; + + private RestorePlanRestoreConfigVolumeDataRestorePolicyBinding() {} + /** + * @return Specifies the mechanism to be used to restore this volume data. + * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + * for more information on each policy option. + * Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + * + */ + public String policy() { + return this.policy; + } + /** + * @return The volume type, as determined by the PVC's + * bound PV, to apply the policy to. + * Possible values are: `GCE_PERSISTENT_DISK`. + * + */ + public String volumeType() { + return this.volumeType; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RestorePlanRestoreConfigVolumeDataRestorePolicyBinding defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String policy; + private String volumeType; + public Builder() {} + public Builder(RestorePlanRestoreConfigVolumeDataRestorePolicyBinding defaults) { + Objects.requireNonNull(defaults); + this.policy = defaults.policy; + this.volumeType = defaults.volumeType; + } + + @CustomType.Setter + public Builder policy(String policy) { + if (policy == null) { + throw new MissingRequiredPropertyException("RestorePlanRestoreConfigVolumeDataRestorePolicyBinding", "policy"); + } + this.policy = policy; + return this; + } + @CustomType.Setter + public Builder volumeType(String volumeType) { + if (volumeType == null) { + throw new MissingRequiredPropertyException("RestorePlanRestoreConfigVolumeDataRestorePolicyBinding", "volumeType"); + } + this.volumeType = volumeType; + return this; + } + public RestorePlanRestoreConfigVolumeDataRestorePolicyBinding build() { + final var _resultValue = new RestorePlanRestoreConfigVolumeDataRestorePolicyBinding(); + _resultValue.policy = policy; + _resultValue.volumeType = volumeType; + return _resultValue; + } + } +} 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 e65c2ac74a..f1fa7cde64 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 @@ -147,6 +147,7 @@ * .dataset(dataset.id()) * .notificationConfig(DicomStoreNotificationConfigArgs.builder() * .pubsubTopic(topic.id()) + * .sendForBulkImport(true) * .build()) * .labels(Map.of("label1", "labelvalue1")) * .streamConfigs(DicomStoreStreamConfigArgs.builder() 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 f0859e67f5..587af7f39f 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 @@ -80,7 +80,7 @@ * .disableResourceVersioning(false) * .enableHistoryImport(false) * .defaultSearchHandlingStrict(false) - * .notificationConfig(FhirStoreNotificationConfigArgs.builder() + * .notificationConfigs(FhirStoreNotificationConfigArgs.builder() * .pubsubTopic(topic.id()) * .build()) * .labels(Map.of("label1", "labelvalue1")) @@ -176,64 +176,6 @@ * } * * <!--End PulumiCodeChooser --> - * ### Healthcare Fhir Store Notification Config - * - * <!--Start PulumiCodeChooser --> - *
- * {@code
- * package generated_program;
- * 
- * import com.pulumi.Context;
- * import com.pulumi.Pulumi;
- * import com.pulumi.core.Output;
- * import com.pulumi.gcp.pubsub.Topic;
- * import com.pulumi.gcp.pubsub.TopicArgs;
- * import com.pulumi.gcp.healthcare.Dataset;
- * import com.pulumi.gcp.healthcare.DatasetArgs;
- * import com.pulumi.gcp.healthcare.FhirStore;
- * import com.pulumi.gcp.healthcare.FhirStoreArgs;
- * import com.pulumi.gcp.healthcare.inputs.FhirStoreNotificationConfigArgs;
- * import java.util.List;
- * import java.util.ArrayList;
- * import java.util.Map;
- * import java.io.File;
- * import java.nio.file.Files;
- * 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 topic = new Topic("topic", TopicArgs.builder()
- *             .name("fhir-notifications")
- *             .build());
- * 
- *         var dataset = new Dataset("dataset", DatasetArgs.builder()
- *             .name("example-dataset")
- *             .location("us-central1")
- *             .build());
- * 
- *         var default_ = new FhirStore("default", FhirStoreArgs.builder()
- *             .name("example-fhir-store")
- *             .dataset(dataset.id())
- *             .version("R4")
- *             .enableUpdateCreate(false)
- *             .disableReferentialIntegrity(false)
- *             .disableResourceVersioning(false)
- *             .enableHistoryImport(false)
- *             .labels(Map.of("label1", "labelvalue1"))
- *             .notificationConfig(FhirStoreNotificationConfigArgs.builder()
- *                 .pubsubTopic(topic.id())
- *                 .build())
- *             .build());
- * 
- *     }
- * }
- * }
- * 
- * <!--End PulumiCodeChooser --> * ### Healthcare Fhir Store Notification Configs * * <!--Start PulumiCodeChooser --> @@ -281,7 +223,6 @@ * .disableReferentialIntegrity(false) * .disableResourceVersioning(false) * .enableHistoryImport(false) - * .enableHistoryModifications(false) * .labels(Map.of("label1", "labelvalue1")) * .notificationConfigs(FhirStoreNotificationConfigArgs.builder() * .pubsubTopic(topic.id()) @@ -548,17 +489,27 @@ public Output name() { return this.name; } /** + * (Optional, Deprecated) * A nested object resource * Structure is documented below. * + * > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * + * @deprecated + * `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * */ + @Deprecated /* `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. */ @Export(name="notificationConfig", refs={FhirStoreNotificationConfig.class}, tree="[0]") private Output notificationConfig; /** - * @return A nested object resource + * @return (Optional, Deprecated) + * A nested object resource * Structure is documented below. * + * > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * */ public Output> notificationConfig() { return Codegen.optional(this.notificationConfig); diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreArgs.java index 19f72a8508..8f64081cff 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreArgs.java @@ -248,18 +248,32 @@ public Optional> name() { } /** + * (Optional, Deprecated) * A nested object resource * Structure is documented below. * + * > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * + * @deprecated + * `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * */ + @Deprecated /* `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. */ @Import(name="notificationConfig") private @Nullable Output notificationConfig; /** - * @return A nested object resource + * @return (Optional, Deprecated) + * A nested object resource * Structure is documented below. * + * > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * + * @deprecated + * `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * */ + @Deprecated /* `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. */ public Optional> notificationConfig() { return Optional.ofNullable(this.notificationConfig); } @@ -651,24 +665,38 @@ public Builder name(String name) { } /** - * @param notificationConfig A nested object resource + * @param notificationConfig (Optional, Deprecated) + * A nested object resource * Structure is documented below. * + * > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * * @return builder * + * @deprecated + * `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * */ + @Deprecated /* `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. */ public Builder notificationConfig(@Nullable Output notificationConfig) { $.notificationConfig = notificationConfig; return this; } /** - * @param notificationConfig A nested object resource + * @param notificationConfig (Optional, Deprecated) + * A nested object resource * Structure is documented below. * + * > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * * @return builder * + * @deprecated + * `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * */ + @Deprecated /* `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. */ public Builder notificationConfig(FhirStoreNotificationConfigArgs notificationConfig) { return notificationConfig(Output.of(notificationConfig)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/inputs/DicomStoreNotificationConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/inputs/DicomStoreNotificationConfigArgs.java index 656f8aebd9..f87bdd0102 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/inputs/DicomStoreNotificationConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/inputs/DicomStoreNotificationConfigArgs.java @@ -6,8 +6,11 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; import java.lang.String; import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; public final class DicomStoreNotificationConfigArgs extends com.pulumi.resources.ResourceArgs { @@ -39,10 +42,26 @@ public Output pubsubTopic() { return this.pubsubTopic; } + /** + * Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + * + */ + @Import(name="sendForBulkImport") + private @Nullable Output sendForBulkImport; + + /** + * @return Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + * + */ + public Optional> sendForBulkImport() { + return Optional.ofNullable(this.sendForBulkImport); + } + private DicomStoreNotificationConfigArgs() {} private DicomStoreNotificationConfigArgs(DicomStoreNotificationConfigArgs $) { this.pubsubTopic = $.pubsubTopic; + this.sendForBulkImport = $.sendForBulkImport; } public static Builder builder() { @@ -94,6 +113,27 @@ public Builder pubsubTopic(String pubsubTopic) { return pubsubTopic(Output.of(pubsubTopic)); } + /** + * @param sendForBulkImport Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + * + * @return builder + * + */ + public Builder sendForBulkImport(@Nullable Output sendForBulkImport) { + $.sendForBulkImport = sendForBulkImport; + return this; + } + + /** + * @param sendForBulkImport Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + * + * @return builder + * + */ + public Builder sendForBulkImport(Boolean sendForBulkImport) { + return sendForBulkImport(Output.of(sendForBulkImport)); + } + public DicomStoreNotificationConfigArgs build() { if ($.pubsubTopic == null) { throw new MissingRequiredPropertyException("DicomStoreNotificationConfigArgs", "pubsubTopic"); diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/inputs/FhirStoreState.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/inputs/FhirStoreState.java index de2920c83b..a65dc40312 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/inputs/FhirStoreState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/inputs/FhirStoreState.java @@ -262,18 +262,32 @@ public Optional> name() { } /** + * (Optional, Deprecated) * A nested object resource * Structure is documented below. * + * > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * + * @deprecated + * `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * */ + @Deprecated /* `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. */ @Import(name="notificationConfig") private @Nullable Output notificationConfig; /** - * @return A nested object resource + * @return (Optional, Deprecated) + * A nested object resource * Structure is documented below. * + * > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * + * @deprecated + * `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * */ + @Deprecated /* `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. */ public Optional> notificationConfig() { return Optional.ofNullable(this.notificationConfig); } @@ -721,24 +735,38 @@ public Builder name(String name) { } /** - * @param notificationConfig A nested object resource + * @param notificationConfig (Optional, Deprecated) + * A nested object resource * Structure is documented below. * + * > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * * @return builder * + * @deprecated + * `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * */ + @Deprecated /* `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. */ public Builder notificationConfig(@Nullable Output notificationConfig) { $.notificationConfig = notificationConfig; return this; } /** - * @param notificationConfig A nested object resource + * @param notificationConfig (Optional, Deprecated) + * A nested object resource * Structure is documented below. * + * > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * * @return builder * + * @deprecated + * `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. + * */ + @Deprecated /* `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. */ public Builder notificationConfig(FhirStoreNotificationConfigArgs notificationConfig) { return notificationConfig(Output.of(notificationConfig)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/outputs/DicomStoreNotificationConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/outputs/DicomStoreNotificationConfig.java index 702dfefe56..60aa5fb1d1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/outputs/DicomStoreNotificationConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/outputs/DicomStoreNotificationConfig.java @@ -5,8 +5,11 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; import java.lang.String; import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; @CustomType public final class DicomStoreNotificationConfig { @@ -20,6 +23,11 @@ public final class DicomStoreNotificationConfig { * */ private String pubsubTopic; + /** + * @return Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + * + */ + private @Nullable Boolean sendForBulkImport; private DicomStoreNotificationConfig() {} /** @@ -34,6 +42,13 @@ private DicomStoreNotificationConfig() {} public String pubsubTopic() { return this.pubsubTopic; } + /** + * @return Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + * + */ + public Optional sendForBulkImport() { + return Optional.ofNullable(this.sendForBulkImport); + } public static Builder builder() { return new Builder(); @@ -45,10 +60,12 @@ public static Builder builder(DicomStoreNotificationConfig defaults) { @CustomType.Builder public static final class Builder { private String pubsubTopic; + private @Nullable Boolean sendForBulkImport; public Builder() {} public Builder(DicomStoreNotificationConfig defaults) { Objects.requireNonNull(defaults); this.pubsubTopic = defaults.pubsubTopic; + this.sendForBulkImport = defaults.sendForBulkImport; } @CustomType.Setter @@ -59,9 +76,16 @@ public Builder pubsubTopic(String pubsubTopic) { this.pubsubTopic = pubsubTopic; return this; } + @CustomType.Setter + public Builder sendForBulkImport(@Nullable Boolean sendForBulkImport) { + + this.sendForBulkImport = sendForBulkImport; + return this; + } public DicomStoreNotificationConfig build() { final var _resultValue = new DicomStoreNotificationConfig(); _resultValue.pubsubTopic = pubsubTopic; + _resultValue.sendForBulkImport = sendForBulkImport; return _resultValue; } } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/EndpointAttachment.java b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/EndpointAttachment.java index 080a65b30c..3ed99f7871 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/EndpointAttachment.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/EndpointAttachment.java @@ -10,6 +10,7 @@ import com.pulumi.gcp.Utilities; import com.pulumi.gcp.integrationconnectors.EndpointAttachmentArgs; import com.pulumi.gcp.integrationconnectors.inputs.EndpointAttachmentState; +import java.lang.Boolean; import java.lang.String; import java.util.List; import java.util.Map; @@ -135,6 +136,20 @@ public Output> description() { public Output> effectiveLabels() { return this.effectiveLabels; } + /** + * Enable global access for endpoint attachment. + * + */ + @Export(name="endpointGlobalAccess", refs={Boolean.class}, tree="[0]") + private Output endpointGlobalAccess; + + /** + * @return Enable global access for endpoint attachment. + * + */ + public Output> endpointGlobalAccess() { + return Codegen.optional(this.endpointGlobalAccess); + } /** * The Private Service Connect connection endpoint ip. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/EndpointAttachmentArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/EndpointAttachmentArgs.java index 833a1ef6bb..3aa4d529b3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/EndpointAttachmentArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/EndpointAttachmentArgs.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -32,6 +33,21 @@ public Optional> description() { return Optional.ofNullable(this.description); } + /** + * Enable global access for endpoint attachment. + * + */ + @Import(name="endpointGlobalAccess") + private @Nullable Output endpointGlobalAccess; + + /** + * @return Enable global access for endpoint attachment. + * + */ + public Optional> endpointGlobalAccess() { + return Optional.ofNullable(this.endpointGlobalAccess); + } + /** * Resource labels to represent user provided metadata. * @@ -123,6 +139,7 @@ private EndpointAttachmentArgs() {} private EndpointAttachmentArgs(EndpointAttachmentArgs $) { this.description = $.description; + this.endpointGlobalAccess = $.endpointGlobalAccess; this.labels = $.labels; this.location = $.location; this.name = $.name; @@ -169,6 +186,27 @@ public Builder description(String description) { return description(Output.of(description)); } + /** + * @param endpointGlobalAccess Enable global access for endpoint attachment. + * + * @return builder + * + */ + public Builder endpointGlobalAccess(@Nullable Output endpointGlobalAccess) { + $.endpointGlobalAccess = endpointGlobalAccess; + return this; + } + + /** + * @param endpointGlobalAccess Enable global access for endpoint attachment. + * + * @return builder + * + */ + public Builder endpointGlobalAccess(Boolean endpointGlobalAccess) { + return endpointGlobalAccess(Output.of(endpointGlobalAccess)); + } + /** * @param labels Resource labels to represent user provided metadata. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/inputs/EndpointAttachmentState.java b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/inputs/EndpointAttachmentState.java index 3536c454b2..b2a40ab632 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/inputs/EndpointAttachmentState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/inputs/EndpointAttachmentState.java @@ -5,6 +5,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; +import java.lang.Boolean; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -61,6 +62,21 @@ public Optional>> effectiveLabels() { return Optional.ofNullable(this.effectiveLabels); } + /** + * Enable global access for endpoint attachment. + * + */ + @Import(name="endpointGlobalAccess") + private @Nullable Output endpointGlobalAccess; + + /** + * @return Enable global access for endpoint attachment. + * + */ + public Optional> endpointGlobalAccess() { + return Optional.ofNullable(this.endpointGlobalAccess); + } + /** * The Private Service Connect connection endpoint ip. * @@ -201,6 +217,7 @@ private EndpointAttachmentState(EndpointAttachmentState $) { this.createTime = $.createTime; this.description = $.description; this.effectiveLabels = $.effectiveLabels; + this.endpointGlobalAccess = $.endpointGlobalAccess; this.endpointIp = $.endpointIp; this.labels = $.labels; this.location = $.location; @@ -292,6 +309,27 @@ public Builder effectiveLabels(Map effectiveLabels) { return effectiveLabels(Output.of(effectiveLabels)); } + /** + * @param endpointGlobalAccess Enable global access for endpoint attachment. + * + * @return builder + * + */ + public Builder endpointGlobalAccess(@Nullable Output endpointGlobalAccess) { + $.endpointGlobalAccess = endpointGlobalAccess; + return this; + } + + /** + * @param endpointGlobalAccess Enable global access for endpoint attachment. + * + * @return builder + * + */ + public Builder endpointGlobalAccess(Boolean endpointGlobalAccess) { + return endpointGlobalAccess(Output.of(endpointGlobalAccess)); + } + /** * @param endpointIp The Private Service Connect connection endpoint ip. * 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 0a8f4fc508..4ed0c522f1 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 @@ -341,7 +341,8 @@ public Output> rotationPeriod() { } /** * If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - * You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + * You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + * or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. * */ @Export(name="skipInitialVersionCreation", refs={Boolean.class}, tree="[0]") @@ -349,7 +350,8 @@ public Output> rotationPeriod() { /** * @return If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - * You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + * You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + * or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. * */ public Output> skipInitialVersionCreation() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyArgs.java index fccacaded1..b8b9a59833 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyArgs.java @@ -169,7 +169,8 @@ public Optional> rotationPeriod() { /** * If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - * You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + * You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + * or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. * */ @Import(name="skipInitialVersionCreation") @@ -177,7 +178,8 @@ public Optional> rotationPeriod() { /** * @return If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - * You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + * You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + * or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. * */ public Optional> skipInitialVersionCreation() { @@ -432,7 +434,8 @@ public Builder rotationPeriod(String rotationPeriod) { /** * @param skipInitialVersionCreation If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - * You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + * You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + * or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. * * @return builder * @@ -444,7 +447,8 @@ public Builder skipInitialVersionCreation(@Nullable Output skipInitialV /** * @param skipInitialVersionCreation If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - * You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + * You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + * or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/kms/inputs/CryptoKeyState.java b/sdk/java/src/main/java/com/pulumi/gcp/kms/inputs/CryptoKeyState.java index a1a685f383..d346d959b3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/kms/inputs/CryptoKeyState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/kms/inputs/CryptoKeyState.java @@ -221,7 +221,8 @@ public Optional> rotationPeriod() { /** * If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - * You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + * You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + * or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. * */ @Import(name="skipInitialVersionCreation") @@ -229,7 +230,8 @@ public Optional> rotationPeriod() { /** * @return If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - * You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + * You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + * or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. * */ public Optional> skipInitialVersionCreation() { @@ -568,7 +570,8 @@ public Builder rotationPeriod(String rotationPeriod) { /** * @param skipInitialVersionCreation If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - * You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + * You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + * or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. * * @return builder * @@ -580,7 +583,8 @@ public Builder skipInitialVersionCreation(@Nullable Output skipInitialV /** * @param skipInitialVersionCreation If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - * You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + * You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + * or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/netapp/Volume.java b/sdk/java/src/main/java/com/pulumi/gcp/netapp/Volume.java index 81ea2e02c9..2d9e3a8a1c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/netapp/Volume.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/netapp/Volume.java @@ -10,6 +10,7 @@ import com.pulumi.gcp.Utilities; import com.pulumi.gcp.netapp.VolumeArgs; import com.pulumi.gcp.netapp.inputs.VolumeState; +import com.pulumi.gcp.netapp.outputs.VolumeBackupConfig; import com.pulumi.gcp.netapp.outputs.VolumeExportPolicy; import com.pulumi.gcp.netapp.outputs.VolumeMountOption; import com.pulumi.gcp.netapp.outputs.VolumeRestoreParameters; @@ -135,6 +136,22 @@ public class Volume extends com.pulumi.resources.CustomResource { public Output activeDirectory() { return this.activeDirectory; } + /** + * Backup configuration for the volume. + * Structure is documented below. + * + */ + @Export(name="backupConfig", refs={VolumeBackupConfig.class}, tree="[0]") + private Output backupConfig; + + /** + * @return Backup configuration for the volume. + * Structure is documented below. + * + */ + public Output> backupConfig() { + return Codegen.optional(this.backupConfig); + } /** * Capacity of the volume (in GiB). * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/netapp/VolumeArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/netapp/VolumeArgs.java index 496100a721..ca4a2b6d5e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/netapp/VolumeArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/netapp/VolumeArgs.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.netapp.inputs.VolumeBackupConfigArgs; import com.pulumi.gcp.netapp.inputs.VolumeExportPolicyArgs; import com.pulumi.gcp.netapp.inputs.VolumeRestoreParametersArgs; import com.pulumi.gcp.netapp.inputs.VolumeSnapshotPolicyArgs; @@ -22,6 +23,23 @@ public final class VolumeArgs extends com.pulumi.resources.ResourceArgs { public static final VolumeArgs Empty = new VolumeArgs(); + /** + * Backup configuration for the volume. + * Structure is documented below. + * + */ + @Import(name="backupConfig") + private @Nullable Output backupConfig; + + /** + * @return Backup configuration for the volume. + * Structure is documented below. + * + */ + public Optional> backupConfig() { + return Optional.ofNullable(this.backupConfig); + } + /** * Capacity of the volume (in GiB). * @@ -344,6 +362,7 @@ public Optional> unixPermissions() { private VolumeArgs() {} private VolumeArgs(VolumeArgs $) { + this.backupConfig = $.backupConfig; this.capacityGib = $.capacityGib; this.deletionPolicy = $.deletionPolicy; this.description = $.description; @@ -383,6 +402,29 @@ public Builder(VolumeArgs defaults) { $ = new VolumeArgs(Objects.requireNonNull(defaults)); } + /** + * @param backupConfig Backup configuration for the volume. + * Structure is documented below. + * + * @return builder + * + */ + public Builder backupConfig(@Nullable Output backupConfig) { + $.backupConfig = backupConfig; + return this; + } + + /** + * @param backupConfig Backup configuration for the volume. + * Structure is documented below. + * + * @return builder + * + */ + public Builder backupConfig(VolumeBackupConfigArgs backupConfig) { + return backupConfig(Output.of(backupConfig)); + } + /** * @param capacityGib Capacity of the volume (in GiB). * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeBackupConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeBackupConfigArgs.java new file mode 100644 index 0000000000..2a8de3f70f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeBackupConfigArgs.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.netapp.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class VolumeBackupConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final VolumeBackupConfigArgs Empty = new VolumeBackupConfigArgs(); + + /** + * Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + * + */ + @Import(name="backupPolicies") + private @Nullable Output> backupPolicies; + + /** + * @return Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + * + */ + public Optional>> backupPolicies() { + return Optional.ofNullable(this.backupPolicies); + } + + /** + * ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + * Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + * + */ + @Import(name="backupVault") + private @Nullable Output backupVault; + + /** + * @return ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + * Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + * + */ + public Optional> backupVault() { + return Optional.ofNullable(this.backupVault); + } + + /** + * When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. + * + */ + @Import(name="scheduledBackupEnabled") + private @Nullable Output scheduledBackupEnabled; + + /** + * @return When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. + * + */ + public Optional> scheduledBackupEnabled() { + return Optional.ofNullable(this.scheduledBackupEnabled); + } + + private VolumeBackupConfigArgs() {} + + private VolumeBackupConfigArgs(VolumeBackupConfigArgs $) { + this.backupPolicies = $.backupPolicies; + this.backupVault = $.backupVault; + this.scheduledBackupEnabled = $.scheduledBackupEnabled; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(VolumeBackupConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private VolumeBackupConfigArgs $; + + public Builder() { + $ = new VolumeBackupConfigArgs(); + } + + public Builder(VolumeBackupConfigArgs defaults) { + $ = new VolumeBackupConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param backupPolicies Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + * + * @return builder + * + */ + public Builder backupPolicies(@Nullable Output> backupPolicies) { + $.backupPolicies = backupPolicies; + return this; + } + + /** + * @param backupPolicies Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + * + * @return builder + * + */ + public Builder backupPolicies(List backupPolicies) { + return backupPolicies(Output.of(backupPolicies)); + } + + /** + * @param backupPolicies Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + * + * @return builder + * + */ + public Builder backupPolicies(String... backupPolicies) { + return backupPolicies(List.of(backupPolicies)); + } + + /** + * @param backupVault ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + * Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + * + * @return builder + * + */ + public Builder backupVault(@Nullable Output backupVault) { + $.backupVault = backupVault; + return this; + } + + /** + * @param backupVault ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + * Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + * + * @return builder + * + */ + public Builder backupVault(String backupVault) { + return backupVault(Output.of(backupVault)); + } + + /** + * @param scheduledBackupEnabled When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. + * + * @return builder + * + */ + public Builder scheduledBackupEnabled(@Nullable Output scheduledBackupEnabled) { + $.scheduledBackupEnabled = scheduledBackupEnabled; + return this; + } + + /** + * @param scheduledBackupEnabled When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. + * + * @return builder + * + */ + public Builder scheduledBackupEnabled(Boolean scheduledBackupEnabled) { + return scheduledBackupEnabled(Output.of(scheduledBackupEnabled)); + } + + public VolumeBackupConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeState.java b/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeState.java index 12e615b7e8..0a6b3d8473 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeState.java @@ -5,6 +5,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.netapp.inputs.VolumeBackupConfigArgs; import com.pulumi.gcp.netapp.inputs.VolumeExportPolicyArgs; import com.pulumi.gcp.netapp.inputs.VolumeMountOptionArgs; import com.pulumi.gcp.netapp.inputs.VolumeRestoreParametersArgs; @@ -37,6 +38,23 @@ public Optional> activeDirectory() { return Optional.ofNullable(this.activeDirectory); } + /** + * Backup configuration for the volume. + * Structure is documented below. + * + */ + @Import(name="backupConfig") + private @Nullable Output backupConfig; + + /** + * @return Backup configuration for the volume. + * Structure is documented below. + * + */ + public Optional> backupConfig() { + return Optional.ofNullable(this.backupConfig); + } + /** * Capacity of the volume (in GiB). * @@ -574,6 +592,7 @@ private VolumeState() {} private VolumeState(VolumeState $) { this.activeDirectory = $.activeDirectory; + this.backupConfig = $.backupConfig; this.capacityGib = $.capacityGib; this.createTime = $.createTime; this.deletionPolicy = $.deletionPolicy; @@ -648,6 +667,29 @@ public Builder activeDirectory(String activeDirectory) { return activeDirectory(Output.of(activeDirectory)); } + /** + * @param backupConfig Backup configuration for the volume. + * Structure is documented below. + * + * @return builder + * + */ + public Builder backupConfig(@Nullable Output backupConfig) { + $.backupConfig = backupConfig; + return this; + } + + /** + * @param backupConfig Backup configuration for the volume. + * Structure is documented below. + * + * @return builder + * + */ + public Builder backupConfig(VolumeBackupConfigArgs backupConfig) { + return backupConfig(Output.of(backupConfig)); + } + /** * @param capacityGib Capacity of the volume (in GiB). * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/netapp/outputs/VolumeBackupConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/netapp/outputs/VolumeBackupConfig.java new file mode 100644 index 0000000000..36310ad495 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/netapp/outputs/VolumeBackupConfig.java @@ -0,0 +1,106 @@ +// *** 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.netapp.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class VolumeBackupConfig { + /** + * @return Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + * + */ + private @Nullable List backupPolicies; + /** + * @return ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + * Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + * + */ + private @Nullable String backupVault; + /** + * @return When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. + * + */ + private @Nullable Boolean scheduledBackupEnabled; + + private VolumeBackupConfig() {} + /** + * @return Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + * + */ + public List backupPolicies() { + return this.backupPolicies == null ? List.of() : this.backupPolicies; + } + /** + * @return ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + * Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + * + */ + public Optional backupVault() { + return Optional.ofNullable(this.backupVault); + } + /** + * @return When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. + * + */ + public Optional scheduledBackupEnabled() { + return Optional.ofNullable(this.scheduledBackupEnabled); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(VolumeBackupConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable List backupPolicies; + private @Nullable String backupVault; + private @Nullable Boolean scheduledBackupEnabled; + public Builder() {} + public Builder(VolumeBackupConfig defaults) { + Objects.requireNonNull(defaults); + this.backupPolicies = defaults.backupPolicies; + this.backupVault = defaults.backupVault; + this.scheduledBackupEnabled = defaults.scheduledBackupEnabled; + } + + @CustomType.Setter + public Builder backupPolicies(@Nullable List backupPolicies) { + + this.backupPolicies = backupPolicies; + return this; + } + public Builder backupPolicies(String... backupPolicies) { + return backupPolicies(List.of(backupPolicies)); + } + @CustomType.Setter + public Builder backupVault(@Nullable String backupVault) { + + this.backupVault = backupVault; + return this; + } + @CustomType.Setter + public Builder scheduledBackupEnabled(@Nullable Boolean scheduledBackupEnabled) { + + this.scheduledBackupEnabled = scheduledBackupEnabled; + return this; + } + public VolumeBackupConfig build() { + final var _resultValue = new VolumeBackupConfig(); + _resultValue.backupPolicies = backupPolicies; + _resultValue.backupVault = backupVault; + _resultValue.scheduledBackupEnabled = scheduledBackupEnabled; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networkservices/ServiceLbPolicies.java b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/ServiceLbPolicies.java new file mode 100644 index 0000000000..135b30b13d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/ServiceLbPolicies.java @@ -0,0 +1,382 @@ +// *** 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.networkservices; + +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.networkservices.ServiceLbPoliciesArgs; +import com.pulumi.gcp.networkservices.inputs.ServiceLbPoliciesState; +import com.pulumi.gcp.networkservices.outputs.ServiceLbPoliciesAutoCapacityDrain; +import com.pulumi.gcp.networkservices.outputs.ServiceLbPoliciesFailoverConfig; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ### Network Services Service Lb Policies Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.networkservices.ServiceLbPolicies;
+ * import com.pulumi.gcp.networkservices.ServiceLbPoliciesArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 ServiceLbPolicies("default", ServiceLbPoliciesArgs.builder()
+ *             .name("my-lb-policy")
+ *             .location("global")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Network Services Service Lb Policies Advanced + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.networkservices.ServiceLbPolicies;
+ * import com.pulumi.gcp.networkservices.ServiceLbPoliciesArgs;
+ * import com.pulumi.gcp.networkservices.inputs.ServiceLbPoliciesAutoCapacityDrainArgs;
+ * import com.pulumi.gcp.networkservices.inputs.ServiceLbPoliciesFailoverConfigArgs;
+ * import com.pulumi.gcp.compute.BackendService;
+ * import com.pulumi.gcp.compute.BackendServiceArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 ServiceLbPolicies("default", ServiceLbPoliciesArgs.builder()
+ *             .name("my-lb-policy")
+ *             .location("global")
+ *             .description("my description")
+ *             .loadBalancingAlgorithm("SPRAY_TO_REGION")
+ *             .autoCapacityDrain(ServiceLbPoliciesAutoCapacityDrainArgs.builder()
+ *                 .enable(true)
+ *                 .build())
+ *             .failoverConfig(ServiceLbPoliciesFailoverConfigArgs.builder()
+ *                 .failoverHealthThreshold(70)
+ *                 .build())
+ *             .labels(Map.of("foo", "bar"))
+ *             .build());
+ * 
+ *         var defaultBackendService = new BackendService("defaultBackendService", BackendServiceArgs.builder()
+ *             .name("my-lb-backend")
+ *             .description("my description")
+ *             .loadBalancingScheme("INTERNAL_SELF_MANAGED")
+ *             .protocol("HTTP")
+ *             .serviceLbPolicy(default_.id().applyValue(id -> String.format("//networkservices.googleapis.com/%s", id)))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * ServiceLbPolicies can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}}` + * + * * `{{project}}/{{location}}/{{name}}` + * + * * `{{location}}/{{name}}` + * + * When using the `pulumi import` command, ServiceLbPolicies can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{project}}/{{location}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{location}}/{{name}} + * ``` + * + */ +@ResourceType(type="gcp:networkservices/serviceLbPolicies:ServiceLbPolicies") +public class ServiceLbPolicies extends com.pulumi.resources.CustomResource { + /** + * Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + * Structure is documented below. + * + */ + @Export(name="autoCapacityDrain", refs={ServiceLbPoliciesAutoCapacityDrain.class}, tree="[0]") + private Output autoCapacityDrain; + + /** + * @return Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + * Structure is documented below. + * + */ + public Output> autoCapacityDrain() { + return Codegen.optional(this.autoCapacityDrain); + } + /** + * Time the ServiceLbPolicy was created in UTC. + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return Time the ServiceLbPolicy was created in UTC. + * + */ + public Output createTime() { + return this.createTime; + } + /** + * A free-text description of the resource. Max length 1024 characters. + * + */ + @Export(name="description", refs={String.class}, tree="[0]") + private Output description; + + /** + * @return A free-text description of the resource. Max length 1024 characters. + * + */ + public Output> description() { + return Codegen.optional(this.description); + } + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Export(name="effectiveLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Output> effectiveLabels() { + return this.effectiveLabels; + } + /** + * Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + * Structure is documented below. + * + */ + @Export(name="failoverConfig", refs={ServiceLbPoliciesFailoverConfig.class}, tree="[0]") + private Output failoverConfig; + + /** + * @return Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + * Structure is documented below. + * + */ + public Output> failoverConfig() { + return Codegen.optional(this.failoverConfig); + } + /** + * Set of label tags associated with the ServiceLbPolicy resource. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Export(name="labels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> labels; + + /** + * @return Set of label tags associated with the ServiceLbPolicy resource. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Output>> labels() { + return Codegen.optional(this.labels); + } + /** + * The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + * Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + * + */ + @Export(name="loadBalancingAlgorithm", refs={String.class}, tree="[0]") + private Output loadBalancingAlgorithm; + + /** + * @return The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + * Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + * + */ + public Output> loadBalancingAlgorithm() { + return Codegen.optional(this.loadBalancingAlgorithm); + } + /** + * The location of the service lb policy. + * + * *** + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return The location of the service lb policy. + * + * *** + * + */ + public Output location() { + return this.location; + } + /** + * Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + * + */ + public Output name() { + return this.name; + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Export(name="pulumiLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Output> pulumiLabels() { + return this.pulumiLabels; + } + /** + * Time the ServiceLbPolicy was updated in UTC. + * + */ + @Export(name="updateTime", refs={String.class}, tree="[0]") + private Output updateTime; + + /** + * @return Time the ServiceLbPolicy was updated in UTC. + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public ServiceLbPolicies(String name) { + this(name, ServiceLbPoliciesArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public ServiceLbPolicies(String name, ServiceLbPoliciesArgs 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 ServiceLbPolicies(String name, ServiceLbPoliciesArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:networkservices/serviceLbPolicies:ServiceLbPolicies", name, args == null ? ServiceLbPoliciesArgs.Empty : args, makeResourceOptions(options, Codegen.empty())); + } + + private ServiceLbPolicies(String name, Output id, @Nullable ServiceLbPoliciesState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:networkservices/serviceLbPolicies:ServiceLbPolicies", 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()) + .additionalSecretOutputs(List.of( + "effectiveLabels", + "pulumiLabels" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static ServiceLbPolicies get(String name, Output id, @Nullable ServiceLbPoliciesState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new ServiceLbPolicies(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networkservices/ServiceLbPoliciesArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/ServiceLbPoliciesArgs.java new file mode 100644 index 0000000000..229fcdee42 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/ServiceLbPoliciesArgs.java @@ -0,0 +1,381 @@ +// *** 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.networkservices; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.networkservices.inputs.ServiceLbPoliciesAutoCapacityDrainArgs; +import com.pulumi.gcp.networkservices.inputs.ServiceLbPoliciesFailoverConfigArgs; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ServiceLbPoliciesArgs extends com.pulumi.resources.ResourceArgs { + + public static final ServiceLbPoliciesArgs Empty = new ServiceLbPoliciesArgs(); + + /** + * Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + * Structure is documented below. + * + */ + @Import(name="autoCapacityDrain") + private @Nullable Output autoCapacityDrain; + + /** + * @return Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + * Structure is documented below. + * + */ + public Optional> autoCapacityDrain() { + return Optional.ofNullable(this.autoCapacityDrain); + } + + /** + * A free-text description of the resource. Max length 1024 characters. + * + */ + @Import(name="description") + private @Nullable Output description; + + /** + * @return A free-text description of the resource. Max length 1024 characters. + * + */ + public Optional> description() { + return Optional.ofNullable(this.description); + } + + /** + * Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + * Structure is documented below. + * + */ + @Import(name="failoverConfig") + private @Nullable Output failoverConfig; + + /** + * @return Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + * Structure is documented below. + * + */ + public Optional> failoverConfig() { + return Optional.ofNullable(this.failoverConfig); + } + + /** + * Set of label tags associated with the ServiceLbPolicy resource. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return Set of label tags associated with the ServiceLbPolicy resource. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + * Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + * + */ + @Import(name="loadBalancingAlgorithm") + private @Nullable Output loadBalancingAlgorithm; + + /** + * @return The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + * Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + * + */ + public Optional> loadBalancingAlgorithm() { + return Optional.ofNullable(this.loadBalancingAlgorithm); + } + + /** + * The location of the service lb policy. + * + * *** + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The location of the service lb policy. + * + * *** + * + */ + public Output location() { + return this.location; + } + + /** + * Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private ServiceLbPoliciesArgs() {} + + private ServiceLbPoliciesArgs(ServiceLbPoliciesArgs $) { + this.autoCapacityDrain = $.autoCapacityDrain; + this.description = $.description; + this.failoverConfig = $.failoverConfig; + this.labels = $.labels; + this.loadBalancingAlgorithm = $.loadBalancingAlgorithm; + this.location = $.location; + this.name = $.name; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ServiceLbPoliciesArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ServiceLbPoliciesArgs $; + + public Builder() { + $ = new ServiceLbPoliciesArgs(); + } + + public Builder(ServiceLbPoliciesArgs defaults) { + $ = new ServiceLbPoliciesArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param autoCapacityDrain Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + * Structure is documented below. + * + * @return builder + * + */ + public Builder autoCapacityDrain(@Nullable Output autoCapacityDrain) { + $.autoCapacityDrain = autoCapacityDrain; + return this; + } + + /** + * @param autoCapacityDrain Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + * Structure is documented below. + * + * @return builder + * + */ + public Builder autoCapacityDrain(ServiceLbPoliciesAutoCapacityDrainArgs autoCapacityDrain) { + return autoCapacityDrain(Output.of(autoCapacityDrain)); + } + + /** + * @param description A free-text description of the resource. Max length 1024 characters. + * + * @return builder + * + */ + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + /** + * @param description A free-text description of the resource. Max length 1024 characters. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + /** + * @param failoverConfig Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + * Structure is documented below. + * + * @return builder + * + */ + public Builder failoverConfig(@Nullable Output failoverConfig) { + $.failoverConfig = failoverConfig; + return this; + } + + /** + * @param failoverConfig Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + * Structure is documented below. + * + * @return builder + * + */ + public Builder failoverConfig(ServiceLbPoliciesFailoverConfigArgs failoverConfig) { + return failoverConfig(Output.of(failoverConfig)); + } + + /** + * @param labels Set of label tags associated with the ServiceLbPolicy resource. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels Set of label tags associated with the ServiceLbPolicy resource. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param loadBalancingAlgorithm The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + * Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + * + * @return builder + * + */ + public Builder loadBalancingAlgorithm(@Nullable Output loadBalancingAlgorithm) { + $.loadBalancingAlgorithm = loadBalancingAlgorithm; + return this; + } + + /** + * @param loadBalancingAlgorithm The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + * Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + * + * @return builder + * + */ + public Builder loadBalancingAlgorithm(String loadBalancingAlgorithm) { + return loadBalancingAlgorithm(Output.of(loadBalancingAlgorithm)); + } + + /** + * @param location The location of the service lb policy. + * + * *** + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the service lb policy. + * + * *** + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public ServiceLbPoliciesArgs build() { + if ($.location == null) { + throw new MissingRequiredPropertyException("ServiceLbPoliciesArgs", "location"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networkservices/inputs/ServiceLbPoliciesAutoCapacityDrainArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/inputs/ServiceLbPoliciesAutoCapacityDrainArgs.java new file mode 100644 index 0000000000..047ff60b3c --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/inputs/ServiceLbPoliciesAutoCapacityDrainArgs.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.networkservices.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ServiceLbPoliciesAutoCapacityDrainArgs extends com.pulumi.resources.ResourceArgs { + + public static final ServiceLbPoliciesAutoCapacityDrainArgs Empty = new ServiceLbPoliciesAutoCapacityDrainArgs(); + + /** + * Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + * + */ + @Import(name="enable") + private @Nullable Output enable; + + /** + * @return Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + * + */ + public Optional> enable() { + return Optional.ofNullable(this.enable); + } + + private ServiceLbPoliciesAutoCapacityDrainArgs() {} + + private ServiceLbPoliciesAutoCapacityDrainArgs(ServiceLbPoliciesAutoCapacityDrainArgs $) { + this.enable = $.enable; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ServiceLbPoliciesAutoCapacityDrainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ServiceLbPoliciesAutoCapacityDrainArgs $; + + public Builder() { + $ = new ServiceLbPoliciesAutoCapacityDrainArgs(); + } + + public Builder(ServiceLbPoliciesAutoCapacityDrainArgs defaults) { + $ = new ServiceLbPoliciesAutoCapacityDrainArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param enable Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + * + * @return builder + * + */ + public Builder enable(@Nullable Output enable) { + $.enable = enable; + return this; + } + + /** + * @param enable Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + * + * @return builder + * + */ + public Builder enable(Boolean enable) { + return enable(Output.of(enable)); + } + + public ServiceLbPoliciesAutoCapacityDrainArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networkservices/inputs/ServiceLbPoliciesFailoverConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/inputs/ServiceLbPoliciesFailoverConfigArgs.java new file mode 100644 index 0000000000..a8f4a03ce5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/inputs/ServiceLbPoliciesFailoverConfigArgs.java @@ -0,0 +1,85 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networkservices.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Integer; +import java.util.Objects; + + +public final class ServiceLbPoliciesFailoverConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final ServiceLbPoliciesFailoverConfigArgs Empty = new ServiceLbPoliciesFailoverConfigArgs(); + + /** + * Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + * + */ + @Import(name="failoverHealthThreshold", required=true) + private Output failoverHealthThreshold; + + /** + * @return Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + * + */ + public Output failoverHealthThreshold() { + return this.failoverHealthThreshold; + } + + private ServiceLbPoliciesFailoverConfigArgs() {} + + private ServiceLbPoliciesFailoverConfigArgs(ServiceLbPoliciesFailoverConfigArgs $) { + this.failoverHealthThreshold = $.failoverHealthThreshold; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ServiceLbPoliciesFailoverConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ServiceLbPoliciesFailoverConfigArgs $; + + public Builder() { + $ = new ServiceLbPoliciesFailoverConfigArgs(); + } + + public Builder(ServiceLbPoliciesFailoverConfigArgs defaults) { + $ = new ServiceLbPoliciesFailoverConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param failoverHealthThreshold Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + * + * @return builder + * + */ + public Builder failoverHealthThreshold(Output failoverHealthThreshold) { + $.failoverHealthThreshold = failoverHealthThreshold; + return this; + } + + /** + * @param failoverHealthThreshold Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + * + * @return builder + * + */ + public Builder failoverHealthThreshold(Integer failoverHealthThreshold) { + return failoverHealthThreshold(Output.of(failoverHealthThreshold)); + } + + public ServiceLbPoliciesFailoverConfigArgs build() { + if ($.failoverHealthThreshold == null) { + throw new MissingRequiredPropertyException("ServiceLbPoliciesFailoverConfigArgs", "failoverHealthThreshold"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networkservices/inputs/ServiceLbPoliciesState.java b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/inputs/ServiceLbPoliciesState.java new file mode 100644 index 0000000000..239def2c46 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/inputs/ServiceLbPoliciesState.java @@ -0,0 +1,529 @@ +// *** 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.networkservices.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.networkservices.inputs.ServiceLbPoliciesAutoCapacityDrainArgs; +import com.pulumi.gcp.networkservices.inputs.ServiceLbPoliciesFailoverConfigArgs; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ServiceLbPoliciesState extends com.pulumi.resources.ResourceArgs { + + public static final ServiceLbPoliciesState Empty = new ServiceLbPoliciesState(); + + /** + * Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + * Structure is documented below. + * + */ + @Import(name="autoCapacityDrain") + private @Nullable Output autoCapacityDrain; + + /** + * @return Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + * Structure is documented below. + * + */ + public Optional> autoCapacityDrain() { + return Optional.ofNullable(this.autoCapacityDrain); + } + + /** + * Time the ServiceLbPolicy was created in UTC. + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return Time the ServiceLbPolicy was created in UTC. + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * A free-text description of the resource. Max length 1024 characters. + * + */ + @Import(name="description") + private @Nullable Output description; + + /** + * @return A free-text description of the resource. Max length 1024 characters. + * + */ + public Optional> description() { + return Optional.ofNullable(this.description); + } + + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Import(name="effectiveLabels") + private @Nullable Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Optional>> effectiveLabels() { + return Optional.ofNullable(this.effectiveLabels); + } + + /** + * Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + * Structure is documented below. + * + */ + @Import(name="failoverConfig") + private @Nullable Output failoverConfig; + + /** + * @return Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + * Structure is documented below. + * + */ + public Optional> failoverConfig() { + return Optional.ofNullable(this.failoverConfig); + } + + /** + * Set of label tags associated with the ServiceLbPolicy resource. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return Set of label tags associated with the ServiceLbPolicy resource. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + * Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + * + */ + @Import(name="loadBalancingAlgorithm") + private @Nullable Output loadBalancingAlgorithm; + + /** + * @return The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + * Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + * + */ + public Optional> loadBalancingAlgorithm() { + return Optional.ofNullable(this.loadBalancingAlgorithm); + } + + /** + * The location of the service lb policy. + * + * *** + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location of the service lb policy. + * + * *** + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Import(name="pulumiLabels") + private @Nullable Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Optional>> pulumiLabels() { + return Optional.ofNullable(this.pulumiLabels); + } + + /** + * Time the ServiceLbPolicy was updated in UTC. + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return Time the ServiceLbPolicy was updated in UTC. + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private ServiceLbPoliciesState() {} + + private ServiceLbPoliciesState(ServiceLbPoliciesState $) { + this.autoCapacityDrain = $.autoCapacityDrain; + this.createTime = $.createTime; + this.description = $.description; + this.effectiveLabels = $.effectiveLabels; + this.failoverConfig = $.failoverConfig; + this.labels = $.labels; + this.loadBalancingAlgorithm = $.loadBalancingAlgorithm; + this.location = $.location; + this.name = $.name; + this.project = $.project; + this.pulumiLabels = $.pulumiLabels; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ServiceLbPoliciesState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ServiceLbPoliciesState $; + + public Builder() { + $ = new ServiceLbPoliciesState(); + } + + public Builder(ServiceLbPoliciesState defaults) { + $ = new ServiceLbPoliciesState(Objects.requireNonNull(defaults)); + } + + /** + * @param autoCapacityDrain Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + * Structure is documented below. + * + * @return builder + * + */ + public Builder autoCapacityDrain(@Nullable Output autoCapacityDrain) { + $.autoCapacityDrain = autoCapacityDrain; + return this; + } + + /** + * @param autoCapacityDrain Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + * Structure is documented below. + * + * @return builder + * + */ + public Builder autoCapacityDrain(ServiceLbPoliciesAutoCapacityDrainArgs autoCapacityDrain) { + return autoCapacityDrain(Output.of(autoCapacityDrain)); + } + + /** + * @param createTime Time the ServiceLbPolicy was created in UTC. + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime Time the ServiceLbPolicy was created in UTC. + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param description A free-text description of the resource. Max length 1024 characters. + * + * @return builder + * + */ + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + /** + * @param description A free-text description of the resource. Max length 1024 characters. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(@Nullable Output> effectiveLabels) { + $.effectiveLabels = effectiveLabels; + return this; + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(Map effectiveLabels) { + return effectiveLabels(Output.of(effectiveLabels)); + } + + /** + * @param failoverConfig Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + * Structure is documented below. + * + * @return builder + * + */ + public Builder failoverConfig(@Nullable Output failoverConfig) { + $.failoverConfig = failoverConfig; + return this; + } + + /** + * @param failoverConfig Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + * Structure is documented below. + * + * @return builder + * + */ + public Builder failoverConfig(ServiceLbPoliciesFailoverConfigArgs failoverConfig) { + return failoverConfig(Output.of(failoverConfig)); + } + + /** + * @param labels Set of label tags associated with the ServiceLbPolicy resource. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels Set of label tags associated with the ServiceLbPolicy resource. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param loadBalancingAlgorithm The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + * Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + * + * @return builder + * + */ + public Builder loadBalancingAlgorithm(@Nullable Output loadBalancingAlgorithm) { + $.loadBalancingAlgorithm = loadBalancingAlgorithm; + return this; + } + + /** + * @param loadBalancingAlgorithm The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + * Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + * + * @return builder + * + */ + public Builder loadBalancingAlgorithm(String loadBalancingAlgorithm) { + return loadBalancingAlgorithm(Output.of(loadBalancingAlgorithm)); + } + + /** + * @param location The location of the service lb policy. + * + * *** + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the service lb policy. + * + * *** + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(@Nullable Output> pulumiLabels) { + $.pulumiLabels = pulumiLabels; + return this; + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(Map pulumiLabels) { + return pulumiLabels(Output.of(pulumiLabels)); + } + + /** + * @param updateTime Time the ServiceLbPolicy was updated in UTC. + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime Time the ServiceLbPolicy was updated in UTC. + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public ServiceLbPoliciesState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networkservices/outputs/ServiceLbPoliciesAutoCapacityDrain.java b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/outputs/ServiceLbPoliciesAutoCapacityDrain.java new file mode 100644 index 0000000000..0d258a0068 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/outputs/ServiceLbPoliciesAutoCapacityDrain.java @@ -0,0 +1,57 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networkservices.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ServiceLbPoliciesAutoCapacityDrain { + /** + * @return Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + * + */ + private @Nullable Boolean enable; + + private ServiceLbPoliciesAutoCapacityDrain() {} + /** + * @return Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + * + */ + public Optional enable() { + return Optional.ofNullable(this.enable); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ServiceLbPoliciesAutoCapacityDrain defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean enable; + public Builder() {} + public Builder(ServiceLbPoliciesAutoCapacityDrain defaults) { + Objects.requireNonNull(defaults); + this.enable = defaults.enable; + } + + @CustomType.Setter + public Builder enable(@Nullable Boolean enable) { + + this.enable = enable; + return this; + } + public ServiceLbPoliciesAutoCapacityDrain build() { + final var _resultValue = new ServiceLbPoliciesAutoCapacityDrain(); + _resultValue.enable = enable; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networkservices/outputs/ServiceLbPoliciesFailoverConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/outputs/ServiceLbPoliciesFailoverConfig.java new file mode 100644 index 0000000000..a0ead6bdca --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networkservices/outputs/ServiceLbPoliciesFailoverConfig.java @@ -0,0 +1,58 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networkservices.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Integer; +import java.util.Objects; + +@CustomType +public final class ServiceLbPoliciesFailoverConfig { + /** + * @return Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + * + */ + private Integer failoverHealthThreshold; + + private ServiceLbPoliciesFailoverConfig() {} + /** + * @return Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + * + */ + public Integer failoverHealthThreshold() { + return this.failoverHealthThreshold; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ServiceLbPoliciesFailoverConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Integer failoverHealthThreshold; + public Builder() {} + public Builder(ServiceLbPoliciesFailoverConfig defaults) { + Objects.requireNonNull(defaults); + this.failoverHealthThreshold = defaults.failoverHealthThreshold; + } + + @CustomType.Setter + public Builder failoverHealthThreshold(Integer failoverHealthThreshold) { + if (failoverHealthThreshold == null) { + throw new MissingRequiredPropertyException("ServiceLbPoliciesFailoverConfig", "failoverHealthThreshold"); + } + this.failoverHealthThreshold = failoverHealthThreshold; + return this; + } + public ServiceLbPoliciesFailoverConfig build() { + final var _resultValue = new ServiceLbPoliciesFailoverConfig(); + _resultValue.failoverHealthThreshold = failoverHealthThreshold; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/Cluster.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/Cluster.java index c1d2d54f4f..295135e91c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/redis/Cluster.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/Cluster.java @@ -14,6 +14,7 @@ import com.pulumi.gcp.redis.outputs.ClusterPscConfig; import com.pulumi.gcp.redis.outputs.ClusterPscConnection; import com.pulumi.gcp.redis.outputs.ClusterStateInfo; +import com.pulumi.gcp.redis.outputs.ClusterZoneDistributionConfig; import java.lang.Double; import java.lang.Integer; import java.lang.String; @@ -53,6 +54,7 @@ * import com.pulumi.gcp.redis.Cluster; * import com.pulumi.gcp.redis.ClusterArgs; * import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs; + * import com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs; * import com.pulumi.resources.CustomResourceOptions; * import java.util.List; * import java.util.ArrayList; @@ -102,6 +104,87 @@ * .transitEncryptionMode("TRANSIT_ENCRYPTION_MODE_DISABLED") * .authorizationMode("AUTH_MODE_DISABLED") * .redisConfigs(Map.of("maxmemory-policy", "volatile-ttl")) + * .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder() + * .mode("MULTI_ZONE") + * .build()) + * .build(), CustomResourceOptions.builder() + * .dependsOn(default_) + * .build()); + * + * } + * } + * } + * + * <!--End PulumiCodeChooser --> + * ### Redis Cluster Ha Single Zone + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.compute.Network;
+ * import com.pulumi.gcp.compute.NetworkArgs;
+ * import com.pulumi.gcp.compute.Subnetwork;
+ * import com.pulumi.gcp.compute.SubnetworkArgs;
+ * import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;
+ * import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;
+ * import com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;
+ * import com.pulumi.gcp.redis.Cluster;
+ * import com.pulumi.gcp.redis.ClusterArgs;
+ * import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;
+ * import com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;
+ * import com.pulumi.resources.CustomResourceOptions;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var producerNet = new Network("producerNet", NetworkArgs.builder()
+ *             .name("mynetwork")
+ *             .autoCreateSubnetworks(false)
+ *             .build());
+ * 
+ *         var producerSubnet = new Subnetwork("producerSubnet", SubnetworkArgs.builder()
+ *             .name("mysubnet")
+ *             .ipCidrRange("10.0.0.248/29")
+ *             .region("us-central1")
+ *             .network(producerNet.id())
+ *             .build());
+ * 
+ *         var default_ = new ServiceConnectionPolicy("default", ServiceConnectionPolicyArgs.builder()
+ *             .name("mypolicy")
+ *             .location("us-central1")
+ *             .serviceClass("gcp-memorystore-redis")
+ *             .description("my basic service connection policy")
+ *             .network(producerNet.id())
+ *             .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()
+ *                 .subnetworks(producerSubnet.id())
+ *                 .build())
+ *             .build());
+ * 
+ *         var cluster_ha_single_zone = new Cluster("cluster-ha-single-zone", ClusterArgs.builder()
+ *             .name("ha-cluster-single-zone")
+ *             .shardCount(3)
+ *             .pscConfigs(ClusterPscConfigArgs.builder()
+ *                 .network(producerNet.id())
+ *                 .build())
+ *             .region("us-central1")
+ *             .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()
+ *                 .mode("SINGLE_ZONE")
+ *                 .zone("us-central1-f")
+ *                 .build())
  *             .build(), CustomResourceOptions.builder()
  *                 .dependsOn(default_)
  *                 .build());
@@ -425,6 +508,20 @@ public Output> transitEncryptionMode() {
     public Output uid() {
         return this.uid;
     }
+    /**
+     * Immutable. Zone distribution config for Memorystore Redis cluster.
+     * 
+     */
+    @Export(name="zoneDistributionConfig", refs={ClusterZoneDistributionConfig.class}, tree="[0]")
+    private Output zoneDistributionConfig;
+
+    /**
+     * @return Immutable. Zone distribution config for Memorystore Redis cluster.
+     * 
+     */
+    public Output> zoneDistributionConfig() {
+        return Codegen.optional(this.zoneDistributionConfig);
+    }
 
     /**
      *
diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/ClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/ClusterArgs.java
index a9bbcb5e3e..745c08e109 100644
--- a/sdk/java/src/main/java/com/pulumi/gcp/redis/ClusterArgs.java
+++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/ClusterArgs.java
@@ -7,6 +7,7 @@
 import com.pulumi.core.annotations.Import;
 import com.pulumi.exceptions.MissingRequiredPropertyException;
 import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;
+import com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;
 import java.lang.Integer;
 import java.lang.String;
 import java.util.List;
@@ -184,6 +185,21 @@ public Optional> transitEncryptionMode() {
         return Optional.ofNullable(this.transitEncryptionMode);
     }
 
+    /**
+     * Immutable. Zone distribution config for Memorystore Redis cluster.
+     * 
+     */
+    @Import(name="zoneDistributionConfig")
+    private @Nullable Output zoneDistributionConfig;
+
+    /**
+     * @return Immutable. Zone distribution config for Memorystore Redis cluster.
+     * 
+     */
+    public Optional> zoneDistributionConfig() {
+        return Optional.ofNullable(this.zoneDistributionConfig);
+    }
+
     private ClusterArgs() {}
 
     private ClusterArgs(ClusterArgs $) {
@@ -197,6 +213,7 @@ private ClusterArgs(ClusterArgs $) {
         this.replicaCount = $.replicaCount;
         this.shardCount = $.shardCount;
         this.transitEncryptionMode = $.transitEncryptionMode;
+        this.zoneDistributionConfig = $.zoneDistributionConfig;
     }
 
     public static Builder builder() {
@@ -450,6 +467,27 @@ public Builder transitEncryptionMode(String transitEncryptionMode) {
             return transitEncryptionMode(Output.of(transitEncryptionMode));
         }
 
+        /**
+         * @param zoneDistributionConfig Immutable. Zone distribution config for Memorystore Redis cluster.
+         * 
+         * @return builder
+         * 
+         */
+        public Builder zoneDistributionConfig(@Nullable Output zoneDistributionConfig) {
+            $.zoneDistributionConfig = zoneDistributionConfig;
+            return this;
+        }
+
+        /**
+         * @param zoneDistributionConfig Immutable. Zone distribution config for Memorystore Redis cluster.
+         * 
+         * @return builder
+         * 
+         */
+        public Builder zoneDistributionConfig(ClusterZoneDistributionConfigArgs zoneDistributionConfig) {
+            return zoneDistributionConfig(Output.of(zoneDistributionConfig));
+        }
+
         public ClusterArgs build() {
             if ($.pscConfigs == null) {
                 throw new MissingRequiredPropertyException("ClusterArgs", "pscConfigs");
diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterState.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterState.java
index 609c0c37ef..06940e34b8 100644
--- a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterState.java
+++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterState.java
@@ -9,6 +9,7 @@
 import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;
 import com.pulumi.gcp.redis.inputs.ClusterPscConnectionArgs;
 import com.pulumi.gcp.redis.inputs.ClusterStateInfoArgs;
+import com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;
 import java.lang.Double;
 import java.lang.Integer;
 import java.lang.String;
@@ -321,6 +322,21 @@ public Optional> uid() {
         return Optional.ofNullable(this.uid);
     }
 
+    /**
+     * Immutable. Zone distribution config for Memorystore Redis cluster.
+     * 
+     */
+    @Import(name="zoneDistributionConfig")
+    private @Nullable Output zoneDistributionConfig;
+
+    /**
+     * @return Immutable. Zone distribution config for Memorystore Redis cluster.
+     * 
+     */
+    public Optional> zoneDistributionConfig() {
+        return Optional.ofNullable(this.zoneDistributionConfig);
+    }
+
     private ClusterState() {}
 
     private ClusterState(ClusterState $) {
@@ -342,6 +358,7 @@ private ClusterState(ClusterState $) {
         this.stateInfos = $.stateInfos;
         this.transitEncryptionMode = $.transitEncryptionMode;
         this.uid = $.uid;
+        this.zoneDistributionConfig = $.zoneDistributionConfig;
     }
 
     public static Builder builder() {
@@ -812,6 +829,27 @@ public Builder uid(String uid) {
             return uid(Output.of(uid));
         }
 
+        /**
+         * @param zoneDistributionConfig Immutable. Zone distribution config for Memorystore Redis cluster.
+         * 
+         * @return builder
+         * 
+         */
+        public Builder zoneDistributionConfig(@Nullable Output zoneDistributionConfig) {
+            $.zoneDistributionConfig = zoneDistributionConfig;
+            return this;
+        }
+
+        /**
+         * @param zoneDistributionConfig Immutable. Zone distribution config for Memorystore Redis cluster.
+         * 
+         * @return builder
+         * 
+         */
+        public Builder zoneDistributionConfig(ClusterZoneDistributionConfigArgs zoneDistributionConfig) {
+            return zoneDistributionConfig(Output.of(zoneDistributionConfig));
+        }
+
         public ClusterState build() {
             return $;
         }
diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterZoneDistributionConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterZoneDistributionConfigArgs.java
new file mode 100644
index 0000000000..439fb9cddc
--- /dev/null
+++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterZoneDistributionConfigArgs.java
@@ -0,0 +1,128 @@
+// *** WARNING: this file was generated by pulumi-java-gen. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+package com.pulumi.gcp.redis.inputs;
+
+import com.pulumi.core.Output;
+import com.pulumi.core.annotations.Import;
+import java.lang.String;
+import java.util.Objects;
+import java.util.Optional;
+import javax.annotation.Nullable;
+
+
+public final class ClusterZoneDistributionConfigArgs extends com.pulumi.resources.ResourceArgs {
+
+    public static final ClusterZoneDistributionConfigArgs Empty = new ClusterZoneDistributionConfigArgs();
+
+    /**
+     * Immutable. The mode for zone distribution for Memorystore Redis cluster.
+     * If not provided, MULTI_ZONE will be used as default
+     * Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`.
+     * 
+     */
+    @Import(name="mode")
+    private @Nullable Output mode;
+
+    /**
+     * @return Immutable. The mode for zone distribution for Memorystore Redis cluster.
+     * If not provided, MULTI_ZONE will be used as default
+     * Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`.
+     * 
+     */
+    public Optional> mode() {
+        return Optional.ofNullable(this.mode);
+    }
+
+    /**
+     * Immutable. The zone for single zone Memorystore Redis cluster.
+     * 
+     */
+    @Import(name="zone")
+    private @Nullable Output zone;
+
+    /**
+     * @return Immutable. The zone for single zone Memorystore Redis cluster.
+     * 
+     */
+    public Optional> zone() {
+        return Optional.ofNullable(this.zone);
+    }
+
+    private ClusterZoneDistributionConfigArgs() {}
+
+    private ClusterZoneDistributionConfigArgs(ClusterZoneDistributionConfigArgs $) {
+        this.mode = $.mode;
+        this.zone = $.zone;
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+    public static Builder builder(ClusterZoneDistributionConfigArgs defaults) {
+        return new Builder(defaults);
+    }
+
+    public static final class Builder {
+        private ClusterZoneDistributionConfigArgs $;
+
+        public Builder() {
+            $ = new ClusterZoneDistributionConfigArgs();
+        }
+
+        public Builder(ClusterZoneDistributionConfigArgs defaults) {
+            $ = new ClusterZoneDistributionConfigArgs(Objects.requireNonNull(defaults));
+        }
+
+        /**
+         * @param mode Immutable. The mode for zone distribution for Memorystore Redis cluster.
+         * If not provided, MULTI_ZONE will be used as default
+         * Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`.
+         * 
+         * @return builder
+         * 
+         */
+        public Builder mode(@Nullable Output mode) {
+            $.mode = mode;
+            return this;
+        }
+
+        /**
+         * @param mode Immutable. The mode for zone distribution for Memorystore Redis cluster.
+         * If not provided, MULTI_ZONE will be used as default
+         * Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`.
+         * 
+         * @return builder
+         * 
+         */
+        public Builder mode(String mode) {
+            return mode(Output.of(mode));
+        }
+
+        /**
+         * @param zone Immutable. The zone for single zone Memorystore Redis cluster.
+         * 
+         * @return builder
+         * 
+         */
+        public Builder zone(@Nullable Output zone) {
+            $.zone = zone;
+            return this;
+        }
+
+        /**
+         * @param zone Immutable. The zone for single zone Memorystore Redis cluster.
+         * 
+         * @return builder
+         * 
+         */
+        public Builder zone(String zone) {
+            return zone(Output.of(zone));
+        }
+
+        public ClusterZoneDistributionConfigArgs build() {
+            return $;
+        }
+    }
+
+}
diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterZoneDistributionConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterZoneDistributionConfig.java
new file mode 100644
index 0000000000..9a2bd50e26
--- /dev/null
+++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterZoneDistributionConfig.java
@@ -0,0 +1,82 @@
+// *** WARNING: this file was generated by pulumi-java-gen. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+package com.pulumi.gcp.redis.outputs;
+
+import com.pulumi.core.annotations.CustomType;
+import java.lang.String;
+import java.util.Objects;
+import java.util.Optional;
+import javax.annotation.Nullable;
+
+@CustomType
+public final class ClusterZoneDistributionConfig {
+    /**
+     * @return Immutable. The mode for zone distribution for Memorystore Redis cluster.
+     * If not provided, MULTI_ZONE will be used as default
+     * Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`.
+     * 
+     */
+    private @Nullable String mode;
+    /**
+     * @return Immutable. The zone for single zone Memorystore Redis cluster.
+     * 
+     */
+    private @Nullable String zone;
+
+    private ClusterZoneDistributionConfig() {}
+    /**
+     * @return Immutable. The mode for zone distribution for Memorystore Redis cluster.
+     * If not provided, MULTI_ZONE will be used as default
+     * Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`.
+     * 
+     */
+    public Optional mode() {
+        return Optional.ofNullable(this.mode);
+    }
+    /**
+     * @return Immutable. The zone for single zone Memorystore Redis cluster.
+     * 
+     */
+    public Optional zone() {
+        return Optional.ofNullable(this.zone);
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    public static Builder builder(ClusterZoneDistributionConfig defaults) {
+        return new Builder(defaults);
+    }
+    @CustomType.Builder
+    public static final class Builder {
+        private @Nullable String mode;
+        private @Nullable String zone;
+        public Builder() {}
+        public Builder(ClusterZoneDistributionConfig defaults) {
+    	      Objects.requireNonNull(defaults);
+    	      this.mode = defaults.mode;
+    	      this.zone = defaults.zone;
+        }
+
+        @CustomType.Setter
+        public Builder mode(@Nullable String mode) {
+
+            this.mode = mode;
+            return this;
+        }
+        @CustomType.Setter
+        public Builder zone(@Nullable String zone) {
+
+            this.zone = zone;
+            return this;
+        }
+        public ClusterZoneDistributionConfig build() {
+            final var _resultValue = new ClusterZoneDistributionConfig();
+            _resultValue.mode = mode;
+            _resultValue.zone = zone;
+            return _resultValue;
+        }
+    }
+}
diff --git a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamBinding.java
index 8a462359fd..deaa0844f4 100644
--- a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamBinding.java
+++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamBinding.java
@@ -31,6 +31,8 @@
  * 
  * > **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.
  * 
+ * > **Note:**  This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.
+ * 
  * ## gcp.secretmanager.SecretIamPolicy
  * 
  * <!--Start PulumiCodeChooser -->
@@ -77,6 +79,56 @@
  * 
* <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.organizations.OrganizationsFunctions;
+ * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;
+ * import com.pulumi.gcp.secretmanager.SecretIamPolicy;
+ * import com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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/secretmanager.secretAccessor")
+ *                 .members("user:jane{@literal @}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 SecretIamPolicy("policy", SecretIamPolicyArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData()))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ## gcp.secretmanager.SecretIamBinding * * <!--Start PulumiCodeChooser --> @@ -115,6 +167,49 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.secretmanager.SecretIamBinding;
+ * import com.pulumi.gcp.secretmanager.SecretIamBindingArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretIamBindingConditionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 SecretIamBinding("binding", SecretIamBindingArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .role("roles/secretmanager.secretAccessor")
+ *             .members("user:jane{@literal @}example.com")
+ *             .condition(SecretIamBindingConditionArgs.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());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ## gcp.secretmanager.SecretIamMember * * <!--Start PulumiCodeChooser --> @@ -153,6 +248,50 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.secretmanager.SecretIamMember;
+ * import com.pulumi.gcp.secretmanager.SecretIamMemberArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretIamMemberConditionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 SecretIamMember("member", SecretIamMemberArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .role("roles/secretmanager.secretAccessor")
+ *             .member("user:jane{@literal @}example.com")
+ *             .condition(SecretIamMemberConditionArgs.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());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * * ## gcp.secretmanager.SecretIamPolicy * * <!--Start PulumiCodeChooser --> @@ -199,6 +338,56 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.organizations.OrganizationsFunctions;
+ * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;
+ * import com.pulumi.gcp.secretmanager.SecretIamPolicy;
+ * import com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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/secretmanager.secretAccessor")
+ *                 .members("user:jane{@literal @}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 SecretIamPolicy("policy", SecretIamPolicyArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData()))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ## gcp.secretmanager.SecretIamBinding * * <!--Start PulumiCodeChooser --> @@ -237,6 +426,49 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.secretmanager.SecretIamBinding;
+ * import com.pulumi.gcp.secretmanager.SecretIamBindingArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretIamBindingConditionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 SecretIamBinding("binding", SecretIamBindingArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .role("roles/secretmanager.secretAccessor")
+ *             .members("user:jane{@literal @}example.com")
+ *             .condition(SecretIamBindingConditionArgs.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());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ## gcp.secretmanager.SecretIamMember * * <!--Start PulumiCodeChooser --> @@ -275,6 +507,50 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.secretmanager.SecretIamMember;
+ * import com.pulumi.gcp.secretmanager.SecretIamMemberArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretIamMemberConditionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 SecretIamMember("member", SecretIamMemberArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .role("roles/secretmanager.secretAccessor")
+ *             .member("user:jane{@literal @}example.com")
+ *             .condition(SecretIamMemberConditionArgs.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());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms: @@ -314,9 +590,19 @@ */ @ResourceType(type="gcp:secretmanager/secretIamBinding:SecretIamBinding") public class SecretIamBinding 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", refs={SecretIamBindingCondition.class}, tree="[0]") 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); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamBindingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamBindingArgs.java index 362721fd67..7bc2ef0df3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamBindingArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamBindingArgs.java @@ -18,9 +18,19 @@ public final class SecretIamBindingArgs extends com.pulumi.resources.ResourceArg public static final SecretIamBindingArgs Empty = new SecretIamBindingArgs(); + /** + * 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); } @@ -131,11 +141,25 @@ public Builder(SecretIamBindingArgs defaults) { $ = new SecretIamBindingArgs(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(SecretIamBindingConditionArgs condition) { return condition(Output.of(condition)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamMember.java index 2b64156d6f..b16b9edb50 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamMember.java @@ -30,6 +30,8 @@ * * > **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. * + * > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. + * * ## gcp.secretmanager.SecretIamPolicy * * <!--Start PulumiCodeChooser --> @@ -76,6 +78,56 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.organizations.OrganizationsFunctions;
+ * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;
+ * import com.pulumi.gcp.secretmanager.SecretIamPolicy;
+ * import com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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/secretmanager.secretAccessor")
+ *                 .members("user:jane{@literal @}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 SecretIamPolicy("policy", SecretIamPolicyArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData()))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ## gcp.secretmanager.SecretIamBinding * * <!--Start PulumiCodeChooser --> @@ -114,6 +166,49 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.secretmanager.SecretIamBinding;
+ * import com.pulumi.gcp.secretmanager.SecretIamBindingArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretIamBindingConditionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 SecretIamBinding("binding", SecretIamBindingArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .role("roles/secretmanager.secretAccessor")
+ *             .members("user:jane{@literal @}example.com")
+ *             .condition(SecretIamBindingConditionArgs.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());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ## gcp.secretmanager.SecretIamMember * * <!--Start PulumiCodeChooser --> @@ -152,6 +247,50 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.secretmanager.SecretIamMember;
+ * import com.pulumi.gcp.secretmanager.SecretIamMemberArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretIamMemberConditionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 SecretIamMember("member", SecretIamMemberArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .role("roles/secretmanager.secretAccessor")
+ *             .member("user:jane{@literal @}example.com")
+ *             .condition(SecretIamMemberConditionArgs.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());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * * ## gcp.secretmanager.SecretIamPolicy * * <!--Start PulumiCodeChooser --> @@ -198,6 +337,56 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.organizations.OrganizationsFunctions;
+ * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;
+ * import com.pulumi.gcp.secretmanager.SecretIamPolicy;
+ * import com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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/secretmanager.secretAccessor")
+ *                 .members("user:jane{@literal @}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 SecretIamPolicy("policy", SecretIamPolicyArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData()))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ## gcp.secretmanager.SecretIamBinding * * <!--Start PulumiCodeChooser --> @@ -236,6 +425,49 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.secretmanager.SecretIamBinding;
+ * import com.pulumi.gcp.secretmanager.SecretIamBindingArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretIamBindingConditionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 SecretIamBinding("binding", SecretIamBindingArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .role("roles/secretmanager.secretAccessor")
+ *             .members("user:jane{@literal @}example.com")
+ *             .condition(SecretIamBindingConditionArgs.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());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ## gcp.secretmanager.SecretIamMember * * <!--Start PulumiCodeChooser --> @@ -274,6 +506,50 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.secretmanager.SecretIamMember;
+ * import com.pulumi.gcp.secretmanager.SecretIamMemberArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretIamMemberConditionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 SecretIamMember("member", SecretIamMemberArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .role("roles/secretmanager.secretAccessor")
+ *             .member("user:jane{@literal @}example.com")
+ *             .condition(SecretIamMemberConditionArgs.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());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms: @@ -313,9 +589,19 @@ */ @ResourceType(type="gcp:secretmanager/secretIamMember:SecretIamMember") public class SecretIamMember 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", refs={SecretIamMemberCondition.class}, tree="[0]") 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); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamMemberArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamMemberArgs.java index db0ab60363..8a0733d8e0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamMemberArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamMemberArgs.java @@ -17,9 +17,19 @@ public final class SecretIamMemberArgs extends com.pulumi.resources.ResourceArgs public static final SecretIamMemberArgs Empty = new SecretIamMemberArgs(); + /** + * 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); } @@ -130,11 +140,25 @@ public Builder(SecretIamMemberArgs defaults) { $ = new SecretIamMemberArgs(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(SecretIamMemberConditionArgs condition) { return condition(Output.of(condition)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamPolicy.java index 3387c3b4e8..e399a50cf5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretIamPolicy.java @@ -28,6 +28,8 @@ * * > **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. * + * > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. + * * ## gcp.secretmanager.SecretIamPolicy * * <!--Start PulumiCodeChooser --> @@ -74,6 +76,56 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.organizations.OrganizationsFunctions;
+ * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;
+ * import com.pulumi.gcp.secretmanager.SecretIamPolicy;
+ * import com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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/secretmanager.secretAccessor")
+ *                 .members("user:jane{@literal @}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 SecretIamPolicy("policy", SecretIamPolicyArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData()))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ## gcp.secretmanager.SecretIamBinding * * <!--Start PulumiCodeChooser --> @@ -112,6 +164,49 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.secretmanager.SecretIamBinding;
+ * import com.pulumi.gcp.secretmanager.SecretIamBindingArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretIamBindingConditionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 SecretIamBinding("binding", SecretIamBindingArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .role("roles/secretmanager.secretAccessor")
+ *             .members("user:jane{@literal @}example.com")
+ *             .condition(SecretIamBindingConditionArgs.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());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ## gcp.secretmanager.SecretIamMember * * <!--Start PulumiCodeChooser --> @@ -150,6 +245,50 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.secretmanager.SecretIamMember;
+ * import com.pulumi.gcp.secretmanager.SecretIamMemberArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretIamMemberConditionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 SecretIamMember("member", SecretIamMemberArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .role("roles/secretmanager.secretAccessor")
+ *             .member("user:jane{@literal @}example.com")
+ *             .condition(SecretIamMemberConditionArgs.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());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * * ## gcp.secretmanager.SecretIamPolicy * * <!--Start PulumiCodeChooser --> @@ -196,6 +335,56 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.organizations.OrganizationsFunctions;
+ * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;
+ * import com.pulumi.gcp.secretmanager.SecretIamPolicy;
+ * import com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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/secretmanager.secretAccessor")
+ *                 .members("user:jane{@literal @}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 SecretIamPolicy("policy", SecretIamPolicyArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData()))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ## gcp.secretmanager.SecretIamBinding * * <!--Start PulumiCodeChooser --> @@ -234,6 +423,49 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.secretmanager.SecretIamBinding;
+ * import com.pulumi.gcp.secretmanager.SecretIamBindingArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretIamBindingConditionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 SecretIamBinding("binding", SecretIamBindingArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .role("roles/secretmanager.secretAccessor")
+ *             .members("user:jane{@literal @}example.com")
+ *             .condition(SecretIamBindingConditionArgs.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());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ## gcp.secretmanager.SecretIamMember * * <!--Start PulumiCodeChooser --> @@ -272,6 +504,50 @@ * * <!--End PulumiCodeChooser --> * + * With IAM Conditions: + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.secretmanager.SecretIamMember;
+ * import com.pulumi.gcp.secretmanager.SecretIamMemberArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretIamMemberConditionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 SecretIamMember("member", SecretIamMemberArgs.builder()
+ *             .project(secret_basic.project())
+ *             .secretId(secret_basic.secretId())
+ *             .role("roles/secretmanager.secretAccessor")
+ *             .member("user:jane{@literal @}example.com")
+ *             .condition(SecretIamMemberConditionArgs.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());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms: diff --git a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamBindingConditionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamBindingConditionArgs.java index 88a3b83c9c..071a700879 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamBindingConditionArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamBindingConditionArgs.java @@ -23,16 +23,32 @@ 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; } @@ -72,20 +88,44 @@ 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/secretmanager/inputs/SecretIamBindingState.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamBindingState.java index bcb64ff460..42a64dca41 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamBindingState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamBindingState.java @@ -17,9 +17,19 @@ public final class SecretIamBindingState extends com.pulumi.resources.ResourceAr public static final SecretIamBindingState Empty = new SecretIamBindingState(); + /** + * 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); } @@ -146,11 +156,25 @@ public Builder(SecretIamBindingState defaults) { $ = new SecretIamBindingState(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(SecretIamBindingConditionArgs condition) { return condition(Output.of(condition)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamMemberConditionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamMemberConditionArgs.java index a71c650fa3..d55c01388b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamMemberConditionArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamMemberConditionArgs.java @@ -23,16 +23,32 @@ 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; } @@ -72,20 +88,44 @@ 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/secretmanager/inputs/SecretIamMemberState.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamMemberState.java index 69cee6d805..bdc2d7baff 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamMemberState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/SecretIamMemberState.java @@ -16,9 +16,19 @@ public final class SecretIamMemberState extends com.pulumi.resources.ResourceArg public static final SecretIamMemberState Empty = new SecretIamMemberState(); + /** + * 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); } @@ -145,11 +155,25 @@ public Builder(SecretIamMemberState defaults) { $ = new SecretIamMemberState(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(SecretIamMemberConditionArgs condition) { return condition(Output.of(condition)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/outputs/SecretIamBindingCondition.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/outputs/SecretIamBindingCondition.java index e7cdbad543..3a90355654 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/outputs/SecretIamBindingCondition.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/outputs/SecretIamBindingCondition.java @@ -13,16 +13,32 @@ @CustomType public final class SecretIamBindingCondition { 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 SecretIamBindingCondition() {} 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/secretmanager/outputs/SecretIamMemberCondition.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/outputs/SecretIamMemberCondition.java index 7b6d31432b..2ff1398c53 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/outputs/SecretIamMemberCondition.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/outputs/SecretIamMemberCondition.java @@ -13,16 +13,32 @@ @CustomType public final class SecretIamMemberCondition { 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 SecretIamMemberCondition() {} 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/securitycenter/ManagementOrganizationEventThreatDetectionCustomModule.java b/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/ManagementOrganizationEventThreatDetectionCustomModule.java new file mode 100644 index 0000000000..8df27e61c3 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/ManagementOrganizationEventThreatDetectionCustomModule.java @@ -0,0 +1,245 @@ +// *** 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.securitycenter; + +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.securitycenter.ManagementOrganizationEventThreatDetectionCustomModuleArgs; +import com.pulumi.gcp.securitycenter.inputs.ManagementOrganizationEventThreatDetectionCustomModuleState; +import java.lang.String; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * Represents an instance of an Event Threat Detection custom module, including + * its full module name, display name, enablement state, and last updated time. + * You can create a custom module at the organization level only. + * + * To get more information about OrganizationEventThreatDetectionCustomModule, see: + * + * * [API documentation](https://cloud.google.com/security-command-center/docs/reference/security-center-management/rest/v1/organizations.locations.eventThreatDetectionCustomModules) + * * How-to Guides + * * [Overview of custom modules for Event Threat Detection](https://cloud.google.com/security-command-center/docs/custom-modules-etd-overview) + * + * ## Example Usage + * + * ### Scc Management Organization Event Threat Detection Custom Module + * + * <!--Start PulumiCodeChooser --> + * <!--End PulumiCodeChooser --> + * + * ## Import + * + * OrganizationEventThreatDetectionCustomModule can be imported using any of these accepted formats: + * + * * `organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}}` + * + * * `{{organization}}/{{location}}/{{name}}` + * + * When using the `pulumi import` command, OrganizationEventThreatDetectionCustomModule can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default {{organization}}/{{location}}/{{name}} + * ``` + * + */ +@ResourceType(type="gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule") +public class ManagementOrganizationEventThreatDetectionCustomModule extends com.pulumi.resources.CustomResource { + /** + * Config for the module. For the resident module, its config value is defined at this level. + * For the inherited module, its config value is inherited from the ancestor module. + * + */ + @Export(name="config", refs={String.class}, tree="[0]") + private Output config; + + /** + * @return Config for the module. For the resident module, its config value is defined at this level. + * For the inherited module, its config value is inherited from the ancestor module. + * + */ + public Output> config() { + return Codegen.optional(this.config); + } + /** + * The human readable name to be displayed for the module. + * + */ + @Export(name="displayName", refs={String.class}, tree="[0]") + private Output displayName; + + /** + * @return The human readable name to be displayed for the module. + * + */ + public Output> displayName() { + return Codegen.optional(this.displayName); + } + /** + * The state of enablement for the module at the given level of the hierarchy. + * Possible values are: `ENABLED`, `DISABLED`. + * + */ + @Export(name="enablementState", refs={String.class}, tree="[0]") + private Output enablementState; + + /** + * @return The state of enablement for the module at the given level of the hierarchy. + * Possible values are: `ENABLED`, `DISABLED`. + * + */ + public Output> enablementState() { + return Codegen.optional(this.enablementState); + } + /** + * The editor that last updated the custom module + * + */ + @Export(name="lastEditor", refs={String.class}, tree="[0]") + private Output lastEditor; + + /** + * @return The editor that last updated the custom module + * + */ + public Output lastEditor() { + return this.lastEditor; + } + /** + * Location ID of the parent organization. Only global is supported at the moment. + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return Location ID of the parent organization. Only global is supported at the moment. + * + */ + public Output> location() { + return Codegen.optional(this.location); + } + /** + * The resource name of the Event Threat Detection custom module. + * Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return The resource name of the Event Threat Detection custom module. + * Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + * + */ + public Output name() { + return this.name; + } + /** + * Numerical ID of the parent organization. + * + * *** + * + */ + @Export(name="organization", refs={String.class}, tree="[0]") + private Output organization; + + /** + * @return Numerical ID of the parent organization. + * + * *** + * + */ + public Output organization() { + return this.organization; + } + /** + * Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + * + */ + @Export(name="type", refs={String.class}, tree="[0]") + private Output type; + + /** + * @return Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + * + */ + public Output> type() { + return Codegen.optional(this.type); + } + /** + * The time at which the custom module was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + * up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + * + */ + @Export(name="updateTime", refs={String.class}, tree="[0]") + private Output updateTime; + + /** + * @return The time at which the custom module was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + * up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public ManagementOrganizationEventThreatDetectionCustomModule(String name) { + this(name, ManagementOrganizationEventThreatDetectionCustomModuleArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public ManagementOrganizationEventThreatDetectionCustomModule(String name, ManagementOrganizationEventThreatDetectionCustomModuleArgs 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 ManagementOrganizationEventThreatDetectionCustomModule(String name, ManagementOrganizationEventThreatDetectionCustomModuleArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule", name, args == null ? ManagementOrganizationEventThreatDetectionCustomModuleArgs.Empty : args, makeResourceOptions(options, Codegen.empty())); + } + + private ManagementOrganizationEventThreatDetectionCustomModule(String name, Output id, @Nullable ManagementOrganizationEventThreatDetectionCustomModuleState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule", 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 ManagementOrganizationEventThreatDetectionCustomModule get(String name, Output id, @Nullable ManagementOrganizationEventThreatDetectionCustomModuleState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new ManagementOrganizationEventThreatDetectionCustomModule(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/ManagementOrganizationEventThreatDetectionCustomModuleArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/ManagementOrganizationEventThreatDetectionCustomModuleArgs.java new file mode 100644 index 0000000000..8a02e88998 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/ManagementOrganizationEventThreatDetectionCustomModuleArgs.java @@ -0,0 +1,288 @@ +// *** 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.securitycenter; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ManagementOrganizationEventThreatDetectionCustomModuleArgs extends com.pulumi.resources.ResourceArgs { + + public static final ManagementOrganizationEventThreatDetectionCustomModuleArgs Empty = new ManagementOrganizationEventThreatDetectionCustomModuleArgs(); + + /** + * Config for the module. For the resident module, its config value is defined at this level. + * For the inherited module, its config value is inherited from the ancestor module. + * + */ + @Import(name="config") + private @Nullable Output config; + + /** + * @return Config for the module. For the resident module, its config value is defined at this level. + * For the inherited module, its config value is inherited from the ancestor module. + * + */ + public Optional> config() { + return Optional.ofNullable(this.config); + } + + /** + * The human readable name to be displayed for the module. + * + */ + @Import(name="displayName") + private @Nullable Output displayName; + + /** + * @return The human readable name to be displayed for the module. + * + */ + public Optional> displayName() { + return Optional.ofNullable(this.displayName); + } + + /** + * The state of enablement for the module at the given level of the hierarchy. + * Possible values are: `ENABLED`, `DISABLED`. + * + */ + @Import(name="enablementState") + private @Nullable Output enablementState; + + /** + * @return The state of enablement for the module at the given level of the hierarchy. + * Possible values are: `ENABLED`, `DISABLED`. + * + */ + public Optional> enablementState() { + return Optional.ofNullable(this.enablementState); + } + + /** + * Location ID of the parent organization. Only global is supported at the moment. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return Location ID of the parent organization. Only global is supported at the moment. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Numerical ID of the parent organization. + * + * *** + * + */ + @Import(name="organization", required=true) + private Output organization; + + /** + * @return Numerical ID of the parent organization. + * + * *** + * + */ + public Output organization() { + return this.organization; + } + + /** + * Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + * + */ + @Import(name="type") + private @Nullable Output type; + + /** + * @return Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + * + */ + public Optional> type() { + return Optional.ofNullable(this.type); + } + + private ManagementOrganizationEventThreatDetectionCustomModuleArgs() {} + + private ManagementOrganizationEventThreatDetectionCustomModuleArgs(ManagementOrganizationEventThreatDetectionCustomModuleArgs $) { + this.config = $.config; + this.displayName = $.displayName; + this.enablementState = $.enablementState; + this.location = $.location; + this.organization = $.organization; + this.type = $.type; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ManagementOrganizationEventThreatDetectionCustomModuleArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ManagementOrganizationEventThreatDetectionCustomModuleArgs $; + + public Builder() { + $ = new ManagementOrganizationEventThreatDetectionCustomModuleArgs(); + } + + public Builder(ManagementOrganizationEventThreatDetectionCustomModuleArgs defaults) { + $ = new ManagementOrganizationEventThreatDetectionCustomModuleArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param config Config for the module. For the resident module, its config value is defined at this level. + * For the inherited module, its config value is inherited from the ancestor module. + * + * @return builder + * + */ + public Builder config(@Nullable Output config) { + $.config = config; + return this; + } + + /** + * @param config Config for the module. For the resident module, its config value is defined at this level. + * For the inherited module, its config value is inherited from the ancestor module. + * + * @return builder + * + */ + public Builder config(String config) { + return config(Output.of(config)); + } + + /** + * @param displayName The human readable name to be displayed for the module. + * + * @return builder + * + */ + public Builder displayName(@Nullable Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName The human readable name to be displayed for the module. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + /** + * @param enablementState The state of enablement for the module at the given level of the hierarchy. + * Possible values are: `ENABLED`, `DISABLED`. + * + * @return builder + * + */ + public Builder enablementState(@Nullable Output enablementState) { + $.enablementState = enablementState; + return this; + } + + /** + * @param enablementState The state of enablement for the module at the given level of the hierarchy. + * Possible values are: `ENABLED`, `DISABLED`. + * + * @return builder + * + */ + public Builder enablementState(String enablementState) { + return enablementState(Output.of(enablementState)); + } + + /** + * @param location Location ID of the parent organization. Only global is supported at the moment. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location Location ID of the parent organization. Only global is supported at the moment. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param organization Numerical ID of the parent organization. + * + * *** + * + * @return builder + * + */ + public Builder organization(Output organization) { + $.organization = organization; + return this; + } + + /** + * @param organization Numerical ID of the parent organization. + * + * *** + * + * @return builder + * + */ + public Builder organization(String organization) { + return organization(Output.of(organization)); + } + + /** + * @param type Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + * + * @return builder + * + */ + public Builder type(@Nullable Output type) { + $.type = type; + return this; + } + + /** + * @param type Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + * + * @return builder + * + */ + public Builder type(String type) { + return type(Output.of(type)); + } + + public ManagementOrganizationEventThreatDetectionCustomModuleArgs build() { + if ($.organization == null) { + throw new MissingRequiredPropertyException("ManagementOrganizationEventThreatDetectionCustomModuleArgs", "organization"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/inputs/ManagementOrganizationEventThreatDetectionCustomModuleState.java b/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/inputs/ManagementOrganizationEventThreatDetectionCustomModuleState.java new file mode 100644 index 0000000000..c3e37a1f0e --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/inputs/ManagementOrganizationEventThreatDetectionCustomModuleState.java @@ -0,0 +1,407 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.securitycenter.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 ManagementOrganizationEventThreatDetectionCustomModuleState extends com.pulumi.resources.ResourceArgs { + + public static final ManagementOrganizationEventThreatDetectionCustomModuleState Empty = new ManagementOrganizationEventThreatDetectionCustomModuleState(); + + /** + * Config for the module. For the resident module, its config value is defined at this level. + * For the inherited module, its config value is inherited from the ancestor module. + * + */ + @Import(name="config") + private @Nullable Output config; + + /** + * @return Config for the module. For the resident module, its config value is defined at this level. + * For the inherited module, its config value is inherited from the ancestor module. + * + */ + public Optional> config() { + return Optional.ofNullable(this.config); + } + + /** + * The human readable name to be displayed for the module. + * + */ + @Import(name="displayName") + private @Nullable Output displayName; + + /** + * @return The human readable name to be displayed for the module. + * + */ + public Optional> displayName() { + return Optional.ofNullable(this.displayName); + } + + /** + * The state of enablement for the module at the given level of the hierarchy. + * Possible values are: `ENABLED`, `DISABLED`. + * + */ + @Import(name="enablementState") + private @Nullable Output enablementState; + + /** + * @return The state of enablement for the module at the given level of the hierarchy. + * Possible values are: `ENABLED`, `DISABLED`. + * + */ + public Optional> enablementState() { + return Optional.ofNullable(this.enablementState); + } + + /** + * The editor that last updated the custom module + * + */ + @Import(name="lastEditor") + private @Nullable Output lastEditor; + + /** + * @return The editor that last updated the custom module + * + */ + public Optional> lastEditor() { + return Optional.ofNullable(this.lastEditor); + } + + /** + * Location ID of the parent organization. Only global is supported at the moment. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return Location ID of the parent organization. Only global is supported at the moment. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * The resource name of the Event Threat Detection custom module. + * Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The resource name of the Event Threat Detection custom module. + * Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * Numerical ID of the parent organization. + * + * *** + * + */ + @Import(name="organization") + private @Nullable Output organization; + + /** + * @return Numerical ID of the parent organization. + * + * *** + * + */ + public Optional> organization() { + return Optional.ofNullable(this.organization); + } + + /** + * Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + * + */ + @Import(name="type") + private @Nullable Output type; + + /** + * @return Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + * + */ + public Optional> type() { + return Optional.ofNullable(this.type); + } + + /** + * The time at which the custom module was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + * up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return The time at which the custom module was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + * up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private ManagementOrganizationEventThreatDetectionCustomModuleState() {} + + private ManagementOrganizationEventThreatDetectionCustomModuleState(ManagementOrganizationEventThreatDetectionCustomModuleState $) { + this.config = $.config; + this.displayName = $.displayName; + this.enablementState = $.enablementState; + this.lastEditor = $.lastEditor; + this.location = $.location; + this.name = $.name; + this.organization = $.organization; + this.type = $.type; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ManagementOrganizationEventThreatDetectionCustomModuleState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ManagementOrganizationEventThreatDetectionCustomModuleState $; + + public Builder() { + $ = new ManagementOrganizationEventThreatDetectionCustomModuleState(); + } + + public Builder(ManagementOrganizationEventThreatDetectionCustomModuleState defaults) { + $ = new ManagementOrganizationEventThreatDetectionCustomModuleState(Objects.requireNonNull(defaults)); + } + + /** + * @param config Config for the module. For the resident module, its config value is defined at this level. + * For the inherited module, its config value is inherited from the ancestor module. + * + * @return builder + * + */ + public Builder config(@Nullable Output config) { + $.config = config; + return this; + } + + /** + * @param config Config for the module. For the resident module, its config value is defined at this level. + * For the inherited module, its config value is inherited from the ancestor module. + * + * @return builder + * + */ + public Builder config(String config) { + return config(Output.of(config)); + } + + /** + * @param displayName The human readable name to be displayed for the module. + * + * @return builder + * + */ + public Builder displayName(@Nullable Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName The human readable name to be displayed for the module. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + /** + * @param enablementState The state of enablement for the module at the given level of the hierarchy. + * Possible values are: `ENABLED`, `DISABLED`. + * + * @return builder + * + */ + public Builder enablementState(@Nullable Output enablementState) { + $.enablementState = enablementState; + return this; + } + + /** + * @param enablementState The state of enablement for the module at the given level of the hierarchy. + * Possible values are: `ENABLED`, `DISABLED`. + * + * @return builder + * + */ + public Builder enablementState(String enablementState) { + return enablementState(Output.of(enablementState)); + } + + /** + * @param lastEditor The editor that last updated the custom module + * + * @return builder + * + */ + public Builder lastEditor(@Nullable Output lastEditor) { + $.lastEditor = lastEditor; + return this; + } + + /** + * @param lastEditor The editor that last updated the custom module + * + * @return builder + * + */ + public Builder lastEditor(String lastEditor) { + return lastEditor(Output.of(lastEditor)); + } + + /** + * @param location Location ID of the parent organization. Only global is supported at the moment. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location Location ID of the parent organization. Only global is supported at the moment. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name The resource name of the Event Threat Detection custom module. + * Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The resource name of the Event Threat Detection custom module. + * Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param organization Numerical ID of the parent organization. + * + * *** + * + * @return builder + * + */ + public Builder organization(@Nullable Output organization) { + $.organization = organization; + return this; + } + + /** + * @param organization Numerical ID of the parent organization. + * + * *** + * + * @return builder + * + */ + public Builder organization(String organization) { + return organization(Output.of(organization)); + } + + /** + * @param type Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + * + * @return builder + * + */ + public Builder type(@Nullable Output type) { + $.type = type; + return this; + } + + /** + * @param type Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + * + * @return builder + * + */ + public Builder type(String type) { + return type(Output.of(type)); + } + + /** + * @param updateTime The time at which the custom module was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + * up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime The time at which the custom module was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + * up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public ManagementOrganizationEventThreatDetectionCustomModuleState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/spanner/InstanceConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/spanner/InstanceConfig.java new file mode 100644 index 0000000000..f2c88481b6 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/spanner/InstanceConfig.java @@ -0,0 +1,244 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.spanner; + +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.spanner.InstanceConfigArgs; +import com.pulumi.gcp.spanner.inputs.InstanceConfigState; +import com.pulumi.gcp.spanner.outputs.InstanceConfigReplica; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * A possible configuration for a Cloud Spanner instance. Configurations + * define the geographic placement of nodes and their replication. + * + * To get more information about InstanceConfig, see: + * + * * [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instanceConfigs) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/spanner/) + * + * ## Example Usage + * + * ## Import + * + * InstanceConfig can be imported using any of these accepted formats: + * + * * `projects/{{project}}/instanceConfigs/{{name}}` + * + * * `{{project}}/{{name}}` + * + * * `{{name}}` + * + * When using the `pulumi import` command, InstanceConfig can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default projects/{{project}}/instanceConfigs/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{project}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{name}} + * ``` + * + */ +@ResourceType(type="gcp:spanner/instanceConfig:InstanceConfig") +public class InstanceConfig extends com.pulumi.resources.CustomResource { + /** + * Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + * configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + * configuration. + * + */ + @Export(name="baseConfig", refs={String.class}, tree="[0]") + private Output baseConfig; + + /** + * @return Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + * configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + * configuration. + * + */ + public Output baseConfig() { + return this.baseConfig; + } + /** + * Output only. Whether this instance config is a Google or User Managed Configuration. + * + */ + @Export(name="configType", refs={String.class}, tree="[0]") + private Output configType; + + /** + * @return Output only. Whether this instance config is a Google or User Managed Configuration. + * + */ + public Output configType() { + return this.configType; + } + /** + * The name of this instance configuration as it appears in UIs. + * + */ + @Export(name="displayName", refs={String.class}, tree="[0]") + private Output displayName; + + /** + * @return The name of this instance configuration as it appears in UIs. + * + */ + public Output displayName() { + return this.displayName; + } + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Export(name="effectiveLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Output> effectiveLabels() { + return this.effectiveLabels; + } + /** + * An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + * to the field 'effective_labels' for all of the labels present on the resource. + * + */ + @Export(name="labels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> labels; + + /** + * @return An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + * to the field 'effective_labels' for all of the labels present on the resource. + * + */ + public Output>> labels() { + return Codegen.optional(this.labels); + } + /** + * A unique identifier for the instance configuration. Values are of the + * form projects/<project>/instanceConfigs/[a-z][-a-z0-9]* + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return A unique identifier for the instance configuration. Values are of the + * form projects/<project>/instanceConfigs/[a-z][-a-z0-9]* + * + */ + public Output name() { + return this.name; + } + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + public Output project() { + return this.project; + } + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Export(name="pulumiLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Output> pulumiLabels() { + return this.pulumiLabels; + } + /** + * The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + * + */ + @Export(name="replicas", refs={List.class,InstanceConfigReplica.class}, tree="[0,1]") + private Output> replicas; + + /** + * @return The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + * + */ + public Output> replicas() { + return this.replicas; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public InstanceConfig(String name) { + this(name, InstanceConfigArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public InstanceConfig(String name, InstanceConfigArgs 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 InstanceConfig(String name, InstanceConfigArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:spanner/instanceConfig:InstanceConfig", name, args == null ? InstanceConfigArgs.Empty : args, makeResourceOptions(options, Codegen.empty())); + } + + private InstanceConfig(String name, Output id, @Nullable InstanceConfigState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:spanner/instanceConfig:InstanceConfig", 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()) + .additionalSecretOutputs(List.of( + "effectiveLabels", + "pulumiLabels" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static InstanceConfig get(String name, Output id, @Nullable InstanceConfigState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new InstanceConfig(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/spanner/InstanceConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/spanner/InstanceConfigArgs.java new file mode 100644 index 0000000000..3b7f12f104 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/spanner/InstanceConfigArgs.java @@ -0,0 +1,293 @@ +// *** 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.spanner; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.spanner.inputs.InstanceConfigReplicaArgs; +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 InstanceConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final InstanceConfigArgs Empty = new InstanceConfigArgs(); + + /** + * Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + * configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + * configuration. + * + */ + @Import(name="baseConfig") + private @Nullable Output baseConfig; + + /** + * @return Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + * configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + * configuration. + * + */ + public Optional> baseConfig() { + return Optional.ofNullable(this.baseConfig); + } + + /** + * The name of this instance configuration as it appears in UIs. + * + */ + @Import(name="displayName", required=true) + private Output displayName; + + /** + * @return The name of this instance configuration as it appears in UIs. + * + */ + public Output displayName() { + return this.displayName; + } + + /** + * An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + * to the field 'effective_labels' for all of the labels present on the resource. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + * to the field 'effective_labels' for all of the labels present on the resource. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * A unique identifier for the instance configuration. Values are of the + * form projects/<project>/instanceConfigs/[a-z][-a-z0-9]* + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return A unique identifier for the instance configuration. Values are of the + * form projects/<project>/instanceConfigs/[a-z][-a-z0-9]* + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + @Import(name="project") + private @Nullable Output project; + + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + * + */ + @Import(name="replicas", required=true) + private Output> replicas; + + /** + * @return The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + * + */ + public Output> replicas() { + return this.replicas; + } + + private InstanceConfigArgs() {} + + private InstanceConfigArgs(InstanceConfigArgs $) { + this.baseConfig = $.baseConfig; + this.displayName = $.displayName; + this.labels = $.labels; + this.name = $.name; + this.project = $.project; + this.replicas = $.replicas; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(InstanceConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private InstanceConfigArgs $; + + public Builder() { + $ = new InstanceConfigArgs(); + } + + public Builder(InstanceConfigArgs defaults) { + $ = new InstanceConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param baseConfig Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + * configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + * configuration. + * + * @return builder + * + */ + public Builder baseConfig(@Nullable Output baseConfig) { + $.baseConfig = baseConfig; + return this; + } + + /** + * @param baseConfig Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + * configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + * configuration. + * + * @return builder + * + */ + public Builder baseConfig(String baseConfig) { + return baseConfig(Output.of(baseConfig)); + } + + /** + * @param displayName The name of this instance configuration as it appears in UIs. + * + * @return builder + * + */ + public Builder displayName(Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName The name of this instance configuration as it appears in UIs. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + /** + * @param labels An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + * to the field 'effective_labels' for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + * to the field 'effective_labels' for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param name A unique identifier for the instance configuration. Values are of the + * form projects/<project>/instanceConfigs/[a-z][-a-z0-9]* + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name A unique identifier for the instance configuration. Values are of the + * form projects/<project>/instanceConfigs/[a-z][-a-z0-9]* + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param replicas The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + * + * @return builder + * + */ + public Builder replicas(Output> replicas) { + $.replicas = replicas; + return this; + } + + /** + * @param replicas The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + * + * @return builder + * + */ + public Builder replicas(List replicas) { + return replicas(Output.of(replicas)); + } + + /** + * @param replicas The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + * + * @return builder + * + */ + public Builder replicas(InstanceConfigReplicaArgs... replicas) { + return replicas(List.of(replicas)); + } + + public InstanceConfigArgs build() { + if ($.displayName == null) { + throw new MissingRequiredPropertyException("InstanceConfigArgs", "displayName"); + } + if ($.replicas == null) { + throw new MissingRequiredPropertyException("InstanceConfigArgs", "replicas"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/spanner/inputs/InstanceConfigReplicaArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/spanner/inputs/InstanceConfigReplicaArgs.java new file mode 100644 index 0000000000..301024d800 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/spanner/inputs/InstanceConfigReplicaArgs.java @@ -0,0 +1,182 @@ +// *** 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.spanner.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 InstanceConfigReplicaArgs extends com.pulumi.resources.ResourceArgs { + + public static final InstanceConfigReplicaArgs Empty = new InstanceConfigReplicaArgs(); + + /** + * If true, this location is designated as the default leader location where + * leader replicas are placed. + * + * *** + * + */ + @Import(name="defaultLeaderLocation") + private @Nullable Output defaultLeaderLocation; + + /** + * @return If true, this location is designated as the default leader location where + * leader replicas are placed. + * + * *** + * + */ + public Optional> defaultLeaderLocation() { + return Optional.ofNullable(this.defaultLeaderLocation); + } + + /** + * The location of the serving resources, e.g. "us-central1". + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location of the serving resources, e.g. "us-central1". + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Indicates the type of replica. See the [replica types + * documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + * for more details. + * Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + * + */ + @Import(name="type") + private @Nullable Output type; + + /** + * @return Indicates the type of replica. See the [replica types + * documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + * for more details. + * Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + * + */ + public Optional> type() { + return Optional.ofNullable(this.type); + } + + private InstanceConfigReplicaArgs() {} + + private InstanceConfigReplicaArgs(InstanceConfigReplicaArgs $) { + this.defaultLeaderLocation = $.defaultLeaderLocation; + this.location = $.location; + this.type = $.type; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(InstanceConfigReplicaArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private InstanceConfigReplicaArgs $; + + public Builder() { + $ = new InstanceConfigReplicaArgs(); + } + + public Builder(InstanceConfigReplicaArgs defaults) { + $ = new InstanceConfigReplicaArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param defaultLeaderLocation If true, this location is designated as the default leader location where + * leader replicas are placed. + * + * *** + * + * @return builder + * + */ + public Builder defaultLeaderLocation(@Nullable Output defaultLeaderLocation) { + $.defaultLeaderLocation = defaultLeaderLocation; + return this; + } + + /** + * @param defaultLeaderLocation If true, this location is designated as the default leader location where + * leader replicas are placed. + * + * *** + * + * @return builder + * + */ + public Builder defaultLeaderLocation(Boolean defaultLeaderLocation) { + return defaultLeaderLocation(Output.of(defaultLeaderLocation)); + } + + /** + * @param location The location of the serving resources, e.g. "us-central1". + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the serving resources, e.g. "us-central1". + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param type Indicates the type of replica. See the [replica types + * documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + * for more details. + * Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + * + * @return builder + * + */ + public Builder type(@Nullable Output type) { + $.type = type; + return this; + } + + /** + * @param type Indicates the type of replica. See the [replica types + * documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + * for more details. + * Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + * + * @return builder + * + */ + public Builder type(String type) { + return type(Output.of(type)); + } + + public InstanceConfigReplicaArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/spanner/inputs/InstanceConfigState.java b/sdk/java/src/main/java/com/pulumi/gcp/spanner/inputs/InstanceConfigState.java new file mode 100644 index 0000000000..5c17c03887 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/spanner/inputs/InstanceConfigState.java @@ -0,0 +1,401 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.spanner.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.spanner.inputs.InstanceConfigReplicaArgs; +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 InstanceConfigState extends com.pulumi.resources.ResourceArgs { + + public static final InstanceConfigState Empty = new InstanceConfigState(); + + /** + * Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + * configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + * configuration. + * + */ + @Import(name="baseConfig") + private @Nullable Output baseConfig; + + /** + * @return Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + * configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + * configuration. + * + */ + public Optional> baseConfig() { + return Optional.ofNullable(this.baseConfig); + } + + /** + * Output only. Whether this instance config is a Google or User Managed Configuration. + * + */ + @Import(name="configType") + private @Nullable Output configType; + + /** + * @return Output only. Whether this instance config is a Google or User Managed Configuration. + * + */ + public Optional> configType() { + return Optional.ofNullable(this.configType); + } + + /** + * The name of this instance configuration as it appears in UIs. + * + */ + @Import(name="displayName") + private @Nullable Output displayName; + + /** + * @return The name of this instance configuration as it appears in UIs. + * + */ + public Optional> displayName() { + return Optional.ofNullable(this.displayName); + } + + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Import(name="effectiveLabels") + private @Nullable Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Optional>> effectiveLabels() { + return Optional.ofNullable(this.effectiveLabels); + } + + /** + * An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + * to the field 'effective_labels' for all of the labels present on the resource. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + * to the field 'effective_labels' for all of the labels present on the resource. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * A unique identifier for the instance configuration. Values are of the + * form projects/<project>/instanceConfigs/[a-z][-a-z0-9]* + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return A unique identifier for the instance configuration. Values are of the + * form projects/<project>/instanceConfigs/[a-z][-a-z0-9]* + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + @Import(name="project") + private @Nullable Output project; + + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Import(name="pulumiLabels") + private @Nullable Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Optional>> pulumiLabels() { + return Optional.ofNullable(this.pulumiLabels); + } + + /** + * The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + * + */ + @Import(name="replicas") + private @Nullable Output> replicas; + + /** + * @return The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + * + */ + public Optional>> replicas() { + return Optional.ofNullable(this.replicas); + } + + private InstanceConfigState() {} + + private InstanceConfigState(InstanceConfigState $) { + this.baseConfig = $.baseConfig; + this.configType = $.configType; + this.displayName = $.displayName; + this.effectiveLabels = $.effectiveLabels; + this.labels = $.labels; + this.name = $.name; + this.project = $.project; + this.pulumiLabels = $.pulumiLabels; + this.replicas = $.replicas; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(InstanceConfigState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private InstanceConfigState $; + + public Builder() { + $ = new InstanceConfigState(); + } + + public Builder(InstanceConfigState defaults) { + $ = new InstanceConfigState(Objects.requireNonNull(defaults)); + } + + /** + * @param baseConfig Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + * configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + * configuration. + * + * @return builder + * + */ + public Builder baseConfig(@Nullable Output baseConfig) { + $.baseConfig = baseConfig; + return this; + } + + /** + * @param baseConfig Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + * configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + * configuration. + * + * @return builder + * + */ + public Builder baseConfig(String baseConfig) { + return baseConfig(Output.of(baseConfig)); + } + + /** + * @param configType Output only. Whether this instance config is a Google or User Managed Configuration. + * + * @return builder + * + */ + public Builder configType(@Nullable Output configType) { + $.configType = configType; + return this; + } + + /** + * @param configType Output only. Whether this instance config is a Google or User Managed Configuration. + * + * @return builder + * + */ + public Builder configType(String configType) { + return configType(Output.of(configType)); + } + + /** + * @param displayName The name of this instance configuration as it appears in UIs. + * + * @return builder + * + */ + public Builder displayName(@Nullable Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName The name of this instance configuration as it appears in UIs. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(@Nullable Output> effectiveLabels) { + $.effectiveLabels = effectiveLabels; + return this; + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(Map effectiveLabels) { + return effectiveLabels(Output.of(effectiveLabels)); + } + + /** + * @param labels An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + * to the field 'effective_labels' for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + * to the field 'effective_labels' for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param name A unique identifier for the instance configuration. Values are of the + * form projects/<project>/instanceConfigs/[a-z][-a-z0-9]* + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name A unique identifier for the instance configuration. Values are of the + * form projects/<project>/instanceConfigs/[a-z][-a-z0-9]* + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(@Nullable Output> pulumiLabels) { + $.pulumiLabels = pulumiLabels; + return this; + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(Map pulumiLabels) { + return pulumiLabels(Output.of(pulumiLabels)); + } + + /** + * @param replicas The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + * + * @return builder + * + */ + public Builder replicas(@Nullable Output> replicas) { + $.replicas = replicas; + return this; + } + + /** + * @param replicas The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + * + * @return builder + * + */ + public Builder replicas(List replicas) { + return replicas(Output.of(replicas)); + } + + /** + * @param replicas The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + * + * @return builder + * + */ + public Builder replicas(InstanceConfigReplicaArgs... replicas) { + return replicas(List.of(replicas)); + } + + public InstanceConfigState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/spanner/outputs/InstanceConfigReplica.java b/sdk/java/src/main/java/com/pulumi/gcp/spanner/outputs/InstanceConfigReplica.java new file mode 100644 index 0000000000..2723d555f7 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/spanner/outputs/InstanceConfigReplica.java @@ -0,0 +1,112 @@ +// *** 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.spanner.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 InstanceConfigReplica { + /** + * @return If true, this location is designated as the default leader location where + * leader replicas are placed. + * + * *** + * + */ + private @Nullable Boolean defaultLeaderLocation; + /** + * @return The location of the serving resources, e.g. "us-central1". + * + */ + private @Nullable String location; + /** + * @return Indicates the type of replica. See the [replica types + * documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + * for more details. + * Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + * + */ + private @Nullable String type; + + private InstanceConfigReplica() {} + /** + * @return If true, this location is designated as the default leader location where + * leader replicas are placed. + * + * *** + * + */ + public Optional defaultLeaderLocation() { + return Optional.ofNullable(this.defaultLeaderLocation); + } + /** + * @return The location of the serving resources, e.g. "us-central1". + * + */ + public Optional location() { + return Optional.ofNullable(this.location); + } + /** + * @return Indicates the type of replica. See the [replica types + * documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + * for more details. + * Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + * + */ + public Optional type() { + return Optional.ofNullable(this.type); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(InstanceConfigReplica defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean defaultLeaderLocation; + private @Nullable String location; + private @Nullable String type; + public Builder() {} + public Builder(InstanceConfigReplica defaults) { + Objects.requireNonNull(defaults); + this.defaultLeaderLocation = defaults.defaultLeaderLocation; + this.location = defaults.location; + this.type = defaults.type; + } + + @CustomType.Setter + public Builder defaultLeaderLocation(@Nullable Boolean defaultLeaderLocation) { + + this.defaultLeaderLocation = defaultLeaderLocation; + return this; + } + @CustomType.Setter + public Builder location(@Nullable String location) { + + this.location = location; + return this; + } + @CustomType.Setter + public Builder type(@Nullable String type) { + + this.type = type; + return this; + } + public InstanceConfigReplica build() { + final var _resultValue = new InstanceConfigReplica(); + _resultValue.defaultLeaderLocation = defaultLeaderLocation; + _resultValue.location = location; + _resultValue.type = type; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/DatabaseInstanceSettingsIpConfigurationArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/DatabaseInstanceSettingsIpConfigurationArgs.java index 6e692dea36..f39e02d844 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/DatabaseInstanceSettingsIpConfigurationArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/DatabaseInstanceSettingsIpConfigurationArgs.java @@ -114,16 +114,24 @@ public Optional requireSsl; /** - * @return Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. + * @return Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. It will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. + * + * @deprecated + * `require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. * */ + @Deprecated /* `require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. */ public Optional> requireSsl() { return Optional.ofNullable(this.requireSsl); } @@ -321,22 +329,30 @@ public Builder pscConfigs(DatabaseInstanceSettingsIpConfigurationPscConfigArgs.. } /** - * @param requireSsl Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. + * @param requireSsl Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. It will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. * * @return builder * + * @deprecated + * `require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. + * */ + @Deprecated /* `require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. */ public Builder requireSsl(@Nullable Output requireSsl) { $.requireSsl = requireSsl; return this; } /** - * @param requireSsl Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. + * @param requireSsl Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. It will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. * * @return builder * + * @deprecated + * `require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. + * */ + @Deprecated /* `require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. */ public Builder requireSsl(Boolean requireSsl) { return requireSsl(Output.of(requireSsl)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/DatabaseInstanceSettingsIpConfiguration.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/DatabaseInstanceSettingsIpConfiguration.java index 1cd82c440e..4c4c06a030 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/DatabaseInstanceSettingsIpConfiguration.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/DatabaseInstanceSettingsIpConfiguration.java @@ -48,9 +48,13 @@ public final class DatabaseInstanceSettingsIpConfiguration { */ private @Nullable List pscConfigs; /** - * @return Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. + * @return Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. It will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. + * + * @deprecated + * `require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. * */ + @Deprecated /* `require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. */ private @Nullable Boolean requireSsl; /** * @return Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to `require_ssl`. To change this field, also set the correspoding value in `require_ssl`. @@ -107,9 +111,13 @@ public List pscConfigs() { return this.pscConfigs == null ? List.of() : this.pscConfigs; } /** - * @return Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. + * @return Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. It will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. + * + * @deprecated + * `require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. * */ + @Deprecated /* `require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. */ public Optional requireSsl() { return Optional.ofNullable(this.requireSsl); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstanceSettingIpConfiguration.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstanceSettingIpConfiguration.java index 4ff3f68206..307c0fae98 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstanceSettingIpConfiguration.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstanceSettingIpConfiguration.java @@ -46,7 +46,7 @@ public final class GetDatabaseInstanceSettingIpConfiguration { */ private Boolean requireSsl; /** - * @return Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + * @return Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl until next major release. * */ private String sslMode; @@ -98,7 +98,7 @@ public Boolean requireSsl() { return this.requireSsl; } /** - * @return Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + * @return Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl until next major release. * */ public String sslMode() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstancesInstanceSettingIpConfiguration.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstancesInstanceSettingIpConfiguration.java index 8b3fb02f93..7c6c9df31b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstancesInstanceSettingIpConfiguration.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstancesInstanceSettingIpConfiguration.java @@ -46,7 +46,7 @@ public final class GetDatabaseInstancesInstanceSettingIpConfiguration { */ private Boolean requireSsl; /** - * @return Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + * @return Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl until next major release. * */ private String sslMode; @@ -98,7 +98,7 @@ public Boolean requireSsl() { return this.requireSsl; } /** - * @return Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + * @return Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl until next major release. * */ public String sslMode() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/workstations/WorkstationConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/workstations/WorkstationConfig.java index 9096d2d5ad..61fd9ca4ff 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/workstations/WorkstationConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/workstations/WorkstationConfig.java @@ -589,8 +589,11 @@ * .build()) * .build(), * WorkstationConfigHostGceInstanceBoostConfigArgs.builder() - * .id("boost-1") - * .machineType("e2-standard-2") + * .id("boost-2") + * .machineType("n1-standard-2") + * .poolSize(2) + * .bootDiskSizeGb(30) + * .enableNestedVirtualization(true) * .build()) * .build()) * .build()) diff --git a/sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationConfigHostGceInstanceBoostConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationConfigHostGceInstanceBoostConfigArgs.java index 018b42ee42..10e7c653eb 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationConfigHostGceInstanceBoostConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationConfigHostGceInstanceBoostConfigArgs.java @@ -7,6 +7,8 @@ import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs; +import java.lang.Boolean; +import java.lang.Integer; import java.lang.String; import java.util.List; import java.util.Objects; @@ -35,6 +37,38 @@ public Optional bootDiskSizeGb; + + /** + * @return Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + * + */ + public Optional> bootDiskSizeGb() { + return Optional.ofNullable(this.bootDiskSizeGb); + } + + /** + * Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + * See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + * + */ + @Import(name="enableNestedVirtualization") + private @Nullable Output enableNestedVirtualization; + + /** + * @return Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + * See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + * + */ + public Optional> enableNestedVirtualization() { + return Optional.ofNullable(this.enableNestedVirtualization); + } + /** * The id to be used for the boost config. * @@ -65,12 +99,30 @@ public Optional> machineType() { return Optional.ofNullable(this.machineType); } + /** + * Number of instances to pool for faster workstation boosting. + * + */ + @Import(name="poolSize") + private @Nullable Output poolSize; + + /** + * @return Number of instances to pool for faster workstation boosting. + * + */ + public Optional> poolSize() { + return Optional.ofNullable(this.poolSize); + } + private WorkstationConfigHostGceInstanceBoostConfigArgs() {} private WorkstationConfigHostGceInstanceBoostConfigArgs(WorkstationConfigHostGceInstanceBoostConfigArgs $) { this.accelerators = $.accelerators; + this.bootDiskSizeGb = $.bootDiskSizeGb; + this.enableNestedVirtualization = $.enableNestedVirtualization; this.id = $.id; this.machineType = $.machineType; + this.poolSize = $.poolSize; } public static Builder builder() { @@ -125,6 +177,50 @@ public Builder accelerators(WorkstationConfigHostGceInstanceBoostConfigAccelerat return accelerators(List.of(accelerators)); } + /** + * @param bootDiskSizeGb Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + * + * @return builder + * + */ + public Builder bootDiskSizeGb(@Nullable Output bootDiskSizeGb) { + $.bootDiskSizeGb = bootDiskSizeGb; + return this; + } + + /** + * @param bootDiskSizeGb Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + * + * @return builder + * + */ + public Builder bootDiskSizeGb(Integer bootDiskSizeGb) { + return bootDiskSizeGb(Output.of(bootDiskSizeGb)); + } + + /** + * @param enableNestedVirtualization Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + * See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + * + * @return builder + * + */ + public Builder enableNestedVirtualization(@Nullable Output enableNestedVirtualization) { + $.enableNestedVirtualization = enableNestedVirtualization; + return this; + } + + /** + * @param enableNestedVirtualization Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + * See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + * + * @return builder + * + */ + public Builder enableNestedVirtualization(Boolean enableNestedVirtualization) { + return enableNestedVirtualization(Output.of(enableNestedVirtualization)); + } + /** * @param id The id to be used for the boost config. * @@ -167,6 +263,27 @@ public Builder machineType(String machineType) { return machineType(Output.of(machineType)); } + /** + * @param poolSize Number of instances to pool for faster workstation boosting. + * + * @return builder + * + */ + public Builder poolSize(@Nullable Output poolSize) { + $.poolSize = poolSize; + return this; + } + + /** + * @param poolSize Number of instances to pool for faster workstation boosting. + * + * @return builder + * + */ + public Builder poolSize(Integer poolSize) { + return poolSize(Output.of(poolSize)); + } + public WorkstationConfigHostGceInstanceBoostConfigArgs build() { if ($.id == null) { throw new MissingRequiredPropertyException("WorkstationConfigHostGceInstanceBoostConfigArgs", "id"); diff --git a/sdk/java/src/main/java/com/pulumi/gcp/workstations/outputs/WorkstationConfigHostGceInstanceBoostConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/workstations/outputs/WorkstationConfigHostGceInstanceBoostConfig.java index efc8fc4265..45473eb021 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/workstations/outputs/WorkstationConfigHostGceInstanceBoostConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/workstations/outputs/WorkstationConfigHostGceInstanceBoostConfig.java @@ -6,6 +6,8 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.workstations.outputs.WorkstationConfigHostGceInstanceBoostConfigAccelerator; +import java.lang.Boolean; +import java.lang.Integer; import java.lang.String; import java.util.List; import java.util.Objects; @@ -20,6 +22,17 @@ public final class WorkstationConfigHostGceInstanceBoostConfig { * */ private @Nullable List accelerators; + /** + * @return Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + * + */ + private @Nullable Integer bootDiskSizeGb; + /** + * @return Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + * See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + * + */ + private @Nullable Boolean enableNestedVirtualization; /** * @return The id to be used for the boost config. * @@ -30,6 +43,11 @@ public final class WorkstationConfigHostGceInstanceBoostConfig { * */ private @Nullable String machineType; + /** + * @return Number of instances to pool for faster workstation boosting. + * + */ + private @Nullable Integer poolSize; private WorkstationConfigHostGceInstanceBoostConfig() {} /** @@ -40,6 +58,21 @@ private WorkstationConfigHostGceInstanceBoostConfig() {} public List accelerators() { return this.accelerators == null ? List.of() : this.accelerators; } + /** + * @return Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + * + */ + public Optional bootDiskSizeGb() { + return Optional.ofNullable(this.bootDiskSizeGb); + } + /** + * @return Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + * See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + * + */ + public Optional enableNestedVirtualization() { + return Optional.ofNullable(this.enableNestedVirtualization); + } /** * @return The id to be used for the boost config. * @@ -54,6 +87,13 @@ public String id() { public Optional machineType() { return Optional.ofNullable(this.machineType); } + /** + * @return Number of instances to pool for faster workstation boosting. + * + */ + public Optional poolSize() { + return Optional.ofNullable(this.poolSize); + } public static Builder builder() { return new Builder(); @@ -65,14 +105,20 @@ public static Builder builder(WorkstationConfigHostGceInstanceBoostConfig defaul @CustomType.Builder public static final class Builder { private @Nullable List accelerators; + private @Nullable Integer bootDiskSizeGb; + private @Nullable Boolean enableNestedVirtualization; private String id; private @Nullable String machineType; + private @Nullable Integer poolSize; public Builder() {} public Builder(WorkstationConfigHostGceInstanceBoostConfig defaults) { Objects.requireNonNull(defaults); this.accelerators = defaults.accelerators; + this.bootDiskSizeGb = defaults.bootDiskSizeGb; + this.enableNestedVirtualization = defaults.enableNestedVirtualization; this.id = defaults.id; this.machineType = defaults.machineType; + this.poolSize = defaults.poolSize; } @CustomType.Setter @@ -85,6 +131,18 @@ public Builder accelerators(WorkstationConfigHostGceInstanceBoostConfigAccelerat return accelerators(List.of(accelerators)); } @CustomType.Setter + public Builder bootDiskSizeGb(@Nullable Integer bootDiskSizeGb) { + + this.bootDiskSizeGb = bootDiskSizeGb; + return this; + } + @CustomType.Setter + public Builder enableNestedVirtualization(@Nullable Boolean enableNestedVirtualization) { + + this.enableNestedVirtualization = enableNestedVirtualization; + return this; + } + @CustomType.Setter public Builder id(String id) { if (id == null) { throw new MissingRequiredPropertyException("WorkstationConfigHostGceInstanceBoostConfig", "id"); @@ -98,11 +156,20 @@ public Builder machineType(@Nullable String machineType) { this.machineType = machineType; return this; } + @CustomType.Setter + public Builder poolSize(@Nullable Integer poolSize) { + + this.poolSize = poolSize; + return this; + } public WorkstationConfigHostGceInstanceBoostConfig build() { final var _resultValue = new WorkstationConfigHostGceInstanceBoostConfig(); _resultValue.accelerators = accelerators; + _resultValue.bootDiskSizeGb = bootDiskSizeGb; + _resultValue.enableNestedVirtualization = enableNestedVirtualization; _resultValue.id = id; _resultValue.machineType = machineType; + _resultValue.poolSize = poolSize; return _resultValue; } } diff --git a/sdk/nodejs/appengine/flexibleAppVersion.ts b/sdk/nodejs/appengine/flexibleAppVersion.ts index 8c8a3bbaf5..0143d799a7 100644 --- a/sdk/nodejs/appengine/flexibleAppVersion.ts +++ b/sdk/nodejs/appengine/flexibleAppVersion.ts @@ -203,6 +203,10 @@ export class FlexibleAppVersion extends pulumi.CustomResource { */ public readonly entrypoint!: pulumi.Output; public readonly envVariables!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * Runtime settings for App Engine flexible environment. + */ + public readonly flexibleRuntimeSettings!: pulumi.Output; /** * 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. @@ -320,6 +324,7 @@ export class FlexibleAppVersion extends pulumi.CustomResource { resourceInputs["endpointsApiService"] = state ? state.endpointsApiService : undefined; resourceInputs["entrypoint"] = state ? state.entrypoint : undefined; resourceInputs["envVariables"] = state ? state.envVariables : undefined; + resourceInputs["flexibleRuntimeSettings"] = state ? state.flexibleRuntimeSettings : undefined; resourceInputs["handlers"] = state ? state.handlers : undefined; resourceInputs["inboundServices"] = state ? state.inboundServices : undefined; resourceInputs["instanceClass"] = state ? state.instanceClass : undefined; @@ -364,6 +369,7 @@ export class FlexibleAppVersion extends pulumi.CustomResource { resourceInputs["endpointsApiService"] = args ? args.endpointsApiService : undefined; resourceInputs["entrypoint"] = args ? args.entrypoint : undefined; resourceInputs["envVariables"] = args ? args.envVariables : undefined; + resourceInputs["flexibleRuntimeSettings"] = args ? args.flexibleRuntimeSettings : undefined; resourceInputs["handlers"] = args ? args.handlers : undefined; resourceInputs["inboundServices"] = args ? args.inboundServices : undefined; resourceInputs["instanceClass"] = args ? args.instanceClass : undefined; @@ -429,6 +435,10 @@ export interface FlexibleAppVersionState { */ entrypoint?: pulumi.Input; envVariables?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Runtime settings for App Engine flexible environment. + */ + flexibleRuntimeSettings?: pulumi.Input; /** * 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. @@ -563,6 +573,10 @@ export interface FlexibleAppVersionArgs { */ entrypoint?: pulumi.Input; envVariables?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Runtime settings for App Engine flexible environment. + */ + flexibleRuntimeSettings?: pulumi.Input; /** * 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. diff --git a/sdk/nodejs/bigtable/instance.ts b/sdk/nodejs/bigtable/instance.ts index 72b27b30d3..c03d708c9c 100644 --- a/sdk/nodejs/bigtable/instance.ts +++ b/sdk/nodejs/bigtable/instance.ts @@ -150,6 +150,10 @@ export class Instance extends pulumi.CustomResource { * ----- */ public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Deleting a BigTable instance can be blocked if any backups are present in the instance. When `forceDestroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + */ + public readonly forceDestroy!: pulumi.Output; /** * 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, @@ -198,6 +202,7 @@ export class Instance extends pulumi.CustomResource { resourceInputs["deletionProtection"] = state ? state.deletionProtection : undefined; resourceInputs["displayName"] = state ? state.displayName : undefined; resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["forceDestroy"] = state ? state.forceDestroy : undefined; resourceInputs["instanceType"] = state ? state.instanceType : undefined; resourceInputs["labels"] = state ? state.labels : undefined; resourceInputs["name"] = state ? state.name : undefined; @@ -208,6 +213,7 @@ export class Instance extends pulumi.CustomResource { resourceInputs["clusters"] = args ? args.clusters : undefined; resourceInputs["deletionProtection"] = args ? args.deletionProtection : undefined; resourceInputs["displayName"] = args ? args.displayName : undefined; + resourceInputs["forceDestroy"] = args ? args.forceDestroy : undefined; resourceInputs["instanceType"] = args ? args.instanceType : undefined; resourceInputs["labels"] = args ? args.labels : undefined; resourceInputs["name"] = args ? args.name : undefined; @@ -249,6 +255,10 @@ export interface InstanceState { * ----- */ effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Deleting a BigTable instance can be blocked if any backups are present in the instance. When `forceDestroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + */ + forceDestroy?: pulumi.Input; /** * 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, @@ -302,6 +312,10 @@ export interface InstanceArgs { * The human-readable display name of the Bigtable instance. Defaults to the instance `name`. */ displayName?: pulumi.Input; + /** + * Deleting a BigTable instance can be blocked if any backups are present in the instance. When `forceDestroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + */ + forceDestroy?: pulumi.Input; /** * 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, diff --git a/sdk/nodejs/compute/backendService.ts b/sdk/nodejs/compute/backendService.ts index 7d0ce6cdd9..bab727695f 100644 --- a/sdk/nodejs/compute/backendService.ts +++ b/sdk/nodejs/compute/backendService.ts @@ -561,6 +561,11 @@ export class BackendService extends pulumi.CustomResource { * The URI of the created resource. */ public /*out*/ readonly selfLink!: pulumi.Output; + /** + * URL to networkservices.ServiceLbPolicy resource. + * Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + */ + public readonly serviceLbPolicy!: pulumi.Output; /** * Type of session affinity to use. The default is NONE. Session affinity is * not applicable if the protocol is UDP. @@ -615,6 +620,7 @@ export class BackendService extends pulumi.CustomResource { resourceInputs["securityPolicy"] = state ? state.securityPolicy : undefined; resourceInputs["securitySettings"] = state ? state.securitySettings : undefined; resourceInputs["selfLink"] = state ? state.selfLink : undefined; + resourceInputs["serviceLbPolicy"] = state ? state.serviceLbPolicy : undefined; resourceInputs["sessionAffinity"] = state ? state.sessionAffinity : undefined; resourceInputs["timeoutSec"] = state ? state.timeoutSec : undefined; } else { @@ -644,6 +650,7 @@ export class BackendService extends pulumi.CustomResource { resourceInputs["protocol"] = args ? args.protocol : undefined; resourceInputs["securityPolicy"] = args ? args.securityPolicy : undefined; resourceInputs["securitySettings"] = args ? args.securitySettings : undefined; + resourceInputs["serviceLbPolicy"] = args ? args.serviceLbPolicy : undefined; resourceInputs["sessionAffinity"] = args ? args.sessionAffinity : undefined; resourceInputs["timeoutSec"] = args ? args.timeoutSec : undefined; resourceInputs["creationTimestamp"] = undefined /*out*/; @@ -886,6 +893,11 @@ export interface BackendServiceState { * The URI of the created resource. */ selfLink?: pulumi.Input; + /** + * URL to networkservices.ServiceLbPolicy resource. + * Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + */ + serviceLbPolicy?: pulumi.Input; /** * Type of session affinity to use. The default is NONE. Session affinity is * not applicable if the protocol is UDP. @@ -1112,6 +1124,11 @@ export interface BackendServiceArgs { * Structure is documented below. */ securitySettings?: pulumi.Input; + /** + * URL to networkservices.ServiceLbPolicy resource. + * Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + */ + serviceLbPolicy?: pulumi.Input; /** * Type of session affinity to use. The default is NONE. Session affinity is * not applicable if the protocol is UDP. diff --git a/sdk/nodejs/compute/disk.ts b/sdk/nodejs/compute/disk.ts index 1930a7b0d8..ef0ee6cc7b 100644 --- a/sdk/nodejs/compute/disk.ts +++ b/sdk/nodejs/compute/disk.ts @@ -378,6 +378,13 @@ export class Disk extends pulumi.CustomResource { * used. */ public /*out*/ readonly sourceSnapshotId!: pulumi.Output; + /** + * The URL of the storage pool in which the new disk is created. + * For example: + * * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * * /projects/{project}/zones/{zone}/storagePools/{storagePool} + */ + public readonly storagePool!: pulumi.Output; /** * URL of the disk type resource describing which disk type to use to * create the disk. Provide this when creating the disk. @@ -438,6 +445,7 @@ export class Disk extends pulumi.CustomResource { resourceInputs["sourceImageId"] = state ? state.sourceImageId : undefined; resourceInputs["sourceSnapshotEncryptionKey"] = state ? state.sourceSnapshotEncryptionKey : undefined; resourceInputs["sourceSnapshotId"] = state ? state.sourceSnapshotId : undefined; + resourceInputs["storagePool"] = state ? state.storagePool : undefined; resourceInputs["type"] = state ? state.type : undefined; resourceInputs["users"] = state ? state.users : undefined; resourceInputs["zone"] = state ? state.zone : undefined; @@ -464,6 +472,7 @@ export class Disk extends pulumi.CustomResource { resourceInputs["sourceDisk"] = args ? args.sourceDisk : undefined; resourceInputs["sourceImageEncryptionKey"] = args ? args.sourceImageEncryptionKey : undefined; resourceInputs["sourceSnapshotEncryptionKey"] = args ? args.sourceSnapshotEncryptionKey : undefined; + resourceInputs["storagePool"] = args ? args.storagePool : undefined; resourceInputs["type"] = args ? args.type : undefined; resourceInputs["zone"] = args ? args.zone : undefined; resourceInputs["creationTimestamp"] = undefined /*out*/; @@ -711,6 +720,13 @@ export interface DiskState { * used. */ sourceSnapshotId?: pulumi.Input; + /** + * The URL of the storage pool in which the new disk is created. + * For example: + * * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * * /projects/{project}/zones/{zone}/storagePools/{storagePool} + */ + storagePool?: pulumi.Input; /** * URL of the disk type resource describing which disk type to use to * create the disk. Provide this when creating the disk. @@ -895,6 +911,13 @@ export interface DiskArgs { * Structure is documented below. */ sourceSnapshotEncryptionKey?: pulumi.Input; + /** + * The URL of the storage pool in which the new disk is created. + * For example: + * * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * * /projects/{project}/zones/{zone}/storagePools/{storagePool} + */ + storagePool?: pulumi.Input; /** * URL of the disk type resource describing which disk type to use to * create the disk. Provide this when creating the disk. diff --git a/sdk/nodejs/compute/getBackendService.ts b/sdk/nodejs/compute/getBackendService.ts index da02ec20a0..9164acbf85 100644 --- a/sdk/nodejs/compute/getBackendService.ts +++ b/sdk/nodejs/compute/getBackendService.ts @@ -105,6 +105,7 @@ export interface GetBackendServiceResult { * The URI of the Backend Service. */ readonly selfLink: string; + readonly serviceLbPolicy: string; /** * The Backend Service session stickiness configuration. */ diff --git a/sdk/nodejs/compute/getDisk.ts b/sdk/nodejs/compute/getDisk.ts index bdbbf6ba5e..b5ad058af0 100644 --- a/sdk/nodejs/compute/getDisk.ts +++ b/sdk/nodejs/compute/getDisk.ts @@ -153,6 +153,7 @@ export interface GetDiskResult { * used. */ readonly sourceSnapshotId: string; + readonly storagePool: string; /** * URL of the disk type resource describing which disk type to use to * create the disk. diff --git a/sdk/nodejs/compute/getInstance.ts b/sdk/nodejs/compute/getInstance.ts index 62ac8e6310..53045fd862 100644 --- a/sdk/nodejs/compute/getInstance.ts +++ b/sdk/nodejs/compute/getInstance.ts @@ -151,6 +151,7 @@ export interface GetInstanceResult { */ readonly networkPerformanceConfigs: outputs.compute.GetInstanceNetworkPerformanceConfig[]; readonly params: outputs.compute.GetInstanceParam[]; + readonly partnerMetadata: {[key: string]: string}; readonly project?: string; readonly pulumiLabels: {[key: string]: string}; readonly reservationAffinities: outputs.compute.GetInstanceReservationAffinity[]; diff --git a/sdk/nodejs/compute/getInstanceGroupManager.ts b/sdk/nodejs/compute/getInstanceGroupManager.ts index ed5f8744c1..8d5ecdfee0 100644 --- a/sdk/nodejs/compute/getInstanceGroupManager.ts +++ b/sdk/nodejs/compute/getInstanceGroupManager.ts @@ -83,12 +83,15 @@ export interface GetInstanceGroupManagerResult { readonly params: outputs.compute.GetInstanceGroupManagerParam[]; readonly project?: string; readonly selfLink?: string; + readonly standbyPolicies: outputs.compute.GetInstanceGroupManagerStandbyPolicy[]; readonly statefulDisks: outputs.compute.GetInstanceGroupManagerStatefulDisk[]; readonly statefulExternalIps: outputs.compute.GetInstanceGroupManagerStatefulExternalIp[]; readonly statefulInternalIps: outputs.compute.GetInstanceGroupManagerStatefulInternalIp[]; readonly statuses: outputs.compute.GetInstanceGroupManagerStatus[]; readonly targetPools: string[]; readonly targetSize: number; + readonly targetStoppedSize: number; + readonly targetSuspendedSize: number; readonly updatePolicies: outputs.compute.GetInstanceGroupManagerUpdatePolicy[]; readonly versions: outputs.compute.GetInstanceGroupManagerVersion[]; readonly waitForInstances: boolean; diff --git a/sdk/nodejs/compute/getInstanceTemplate.ts b/sdk/nodejs/compute/getInstanceTemplate.ts index 1153fbe4c3..fa4b6bf95d 100644 --- a/sdk/nodejs/compute/getInstanceTemplate.ts +++ b/sdk/nodejs/compute/getInstanceTemplate.ts @@ -151,6 +151,7 @@ export interface GetInstanceTemplateResult { * for the instance, if set. Structure is documented below. */ readonly networkPerformanceConfigs: outputs.compute.GetInstanceTemplateNetworkPerformanceConfig[]; + readonly partnerMetadata: {[key: string]: string}; /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/nodejs/compute/getRegionInstanceTemplate.ts b/sdk/nodejs/compute/getRegionInstanceTemplate.ts index fdf1872d71..b0b99fcb93 100644 --- a/sdk/nodejs/compute/getRegionInstanceTemplate.ts +++ b/sdk/nodejs/compute/getRegionInstanceTemplate.ts @@ -164,6 +164,7 @@ export interface GetRegionInstanceTemplateResult { * for the instance, if set. Structure is documented below. */ readonly networkPerformanceConfigs: outputs.compute.GetRegionInstanceTemplateNetworkPerformanceConfig[]; + readonly partnerMetadata: {[key: string]: string}; /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/nodejs/compute/getSecurityPolicy.ts b/sdk/nodejs/compute/getSecurityPolicy.ts new file mode 100644 index 0000000000..36268c7074 --- /dev/null +++ b/sdk/nodejs/compute/getSecurityPolicy.ts @@ -0,0 +1,121 @@ +// *** WARNING: this file 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"; + +/** + * To get more information about Google Compute Security Policy, see: + * + * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies) + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const sp1 = gcp.compute.getSecurityPolicy({ + * name: "my-policy", + * project: "my-project", + * }); + * const sp2 = gcp.compute.getSecurityPolicy({ + * selfLink: "https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy", + * }); + * ``` + */ +export function getSecurityPolicy(args?: GetSecurityPolicyArgs, opts?: pulumi.InvokeOptions): Promise { + args = args || {}; + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("gcp:compute/getSecurityPolicy:getSecurityPolicy", { + "name": args.name, + "project": args.project, + "selfLink": args.selfLink, + }, opts); +} + +/** + * A collection of arguments for invoking getSecurityPolicy. + */ +export interface GetSecurityPolicyArgs { + /** + * The name of the security policy. Provide either this or a `selfLink`. + */ + name?: string; + /** + * The project in which the resource belongs. If it is not provided, the provider project is used. + */ + project?: string; + /** + * The selfLink of the security policy. Provide either this or a `name` + */ + selfLink?: string; +} + +/** + * A collection of values returned by getSecurityPolicy. + */ +export interface GetSecurityPolicyResult { + readonly adaptiveProtectionConfigs: outputs.compute.GetSecurityPolicyAdaptiveProtectionConfig[]; + readonly advancedOptionsConfigs: outputs.compute.GetSecurityPolicyAdvancedOptionsConfig[]; + readonly description: string; + readonly fingerprint: string; + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + readonly name?: string; + readonly project?: string; + readonly recaptchaOptionsConfigs: outputs.compute.GetSecurityPolicyRecaptchaOptionsConfig[]; + readonly rules: outputs.compute.GetSecurityPolicyRule[]; + readonly selfLink?: string; + readonly type: string; +} +/** + * To get more information about Google Compute Security Policy, see: + * + * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies) + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const sp1 = gcp.compute.getSecurityPolicy({ + * name: "my-policy", + * project: "my-project", + * }); + * const sp2 = gcp.compute.getSecurityPolicy({ + * selfLink: "https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy", + * }); + * ``` + */ +export function getSecurityPolicyOutput(args?: GetSecurityPolicyOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getSecurityPolicy(a, opts)) +} + +/** + * A collection of arguments for invoking getSecurityPolicy. + */ +export interface GetSecurityPolicyOutputArgs { + /** + * The name of the security policy. Provide either this or a `selfLink`. + */ + name?: pulumi.Input; + /** + * The project in which the resource belongs. If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The selfLink of the security policy. Provide either this or a `name` + */ + selfLink?: pulumi.Input; +} diff --git a/sdk/nodejs/compute/index.ts b/sdk/nodejs/compute/index.ts index e197b090a0..9d39b1c62a 100644 --- a/sdk/nodejs/compute/index.ts +++ b/sdk/nodejs/compute/index.ts @@ -370,6 +370,11 @@ export const getSSLPolicy: typeof import("./getSSLPolicy").getSSLPolicy = null a export const getSSLPolicyOutput: typeof import("./getSSLPolicy").getSSLPolicyOutput = null as any; utilities.lazyLoad(exports, ["getSSLPolicy","getSSLPolicyOutput"], () => require("./getSSLPolicy")); +export { GetSecurityPolicyArgs, GetSecurityPolicyResult, GetSecurityPolicyOutputArgs } from "./getSecurityPolicy"; +export const getSecurityPolicy: typeof import("./getSecurityPolicy").getSecurityPolicy = null as any; +export const getSecurityPolicyOutput: typeof import("./getSecurityPolicy").getSecurityPolicyOutput = null as any; +utilities.lazyLoad(exports, ["getSecurityPolicy","getSecurityPolicyOutput"], () => require("./getSecurityPolicy")); + export { GetSnapshotArgs, GetSnapshotResult, GetSnapshotOutputArgs } from "./getSnapshot"; export const getSnapshot: typeof import("./getSnapshot").getSnapshot = null as any; export const getSnapshotOutput: typeof import("./getSnapshot").getSnapshotOutput = null as any; @@ -655,6 +660,11 @@ export type PerInstanceConfig = import("./perInstanceConfig").PerInstanceConfig; export const PerInstanceConfig: typeof import("./perInstanceConfig").PerInstanceConfig = null as any; utilities.lazyLoad(exports, ["PerInstanceConfig"], () => require("./perInstanceConfig")); +export { ProjectCloudArmorTierArgs, ProjectCloudArmorTierState } from "./projectCloudArmorTier"; +export type ProjectCloudArmorTier = import("./projectCloudArmorTier").ProjectCloudArmorTier; +export const ProjectCloudArmorTier: typeof import("./projectCloudArmorTier").ProjectCloudArmorTier = null as any; +utilities.lazyLoad(exports, ["ProjectCloudArmorTier"], () => require("./projectCloudArmorTier")); + export { ProjectDefaultNetworkTierArgs, ProjectDefaultNetworkTierState } from "./projectDefaultNetworkTier"; export type ProjectDefaultNetworkTier = import("./projectDefaultNetworkTier").ProjectDefaultNetworkTier; export const ProjectDefaultNetworkTier: typeof import("./projectDefaultNetworkTier").ProjectDefaultNetworkTier = null as any; @@ -1147,6 +1157,8 @@ const _module = { return new PacketMirroring(name, undefined, { urn }) case "gcp:compute/perInstanceConfig:PerInstanceConfig": return new PerInstanceConfig(name, undefined, { urn }) + case "gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier": + return new ProjectCloudArmorTier(name, undefined, { urn }) case "gcp:compute/projectDefaultNetworkTier:ProjectDefaultNetworkTier": return new ProjectDefaultNetworkTier(name, undefined, { urn }) case "gcp:compute/projectMetadata:ProjectMetadata": @@ -1360,6 +1372,7 @@ pulumi.runtime.registerResourceModule("gcp", "compute/organizationSecurityPolicy pulumi.runtime.registerResourceModule("gcp", "compute/organizationSecurityPolicyRule", _module) pulumi.runtime.registerResourceModule("gcp", "compute/packetMirroring", _module) pulumi.runtime.registerResourceModule("gcp", "compute/perInstanceConfig", _module) +pulumi.runtime.registerResourceModule("gcp", "compute/projectCloudArmorTier", _module) pulumi.runtime.registerResourceModule("gcp", "compute/projectDefaultNetworkTier", _module) pulumi.runtime.registerResourceModule("gcp", "compute/projectMetadata", _module) pulumi.runtime.registerResourceModule("gcp", "compute/projectMetadataItem", _module) diff --git a/sdk/nodejs/compute/instance.ts b/sdk/nodejs/compute/instance.ts index ff42aada96..ec8dc83102 100644 --- a/sdk/nodejs/compute/instance.ts +++ b/sdk/nodejs/compute/instance.ts @@ -267,6 +267,10 @@ export class Instance extends pulumi.CustomResource { * . */ public readonly params!: pulumi.Output; + /** + * Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + */ + public readonly partnerMetadata!: pulumi.Output<{[key: string]: string} | undefined>; /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -364,6 +368,7 @@ export class Instance extends pulumi.CustomResource { resourceInputs["networkInterfaces"] = state ? state.networkInterfaces : undefined; resourceInputs["networkPerformanceConfig"] = state ? state.networkPerformanceConfig : undefined; resourceInputs["params"] = state ? state.params : undefined; + resourceInputs["partnerMetadata"] = state ? state.partnerMetadata : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; resourceInputs["reservationAffinity"] = state ? state.reservationAffinity : undefined; @@ -408,6 +413,7 @@ export class Instance extends pulumi.CustomResource { resourceInputs["networkInterfaces"] = args ? args.networkInterfaces : undefined; resourceInputs["networkPerformanceConfig"] = args ? args.networkPerformanceConfig : undefined; resourceInputs["params"] = args ? args.params : undefined; + resourceInputs["partnerMetadata"] = args ? args.partnerMetadata : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["reservationAffinity"] = args ? args.reservationAffinity : undefined; resourceInputs["resourcePolicies"] = args ? args.resourcePolicies : undefined; @@ -597,6 +603,10 @@ export interface InstanceState { * . */ params?: pulumi.Input; + /** + * Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + */ + partnerMetadata?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -794,6 +804,10 @@ export interface InstanceArgs { * . */ params?: pulumi.Input; + /** + * Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + */ + partnerMetadata?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/nodejs/compute/instanceFromMachineImage.ts b/sdk/nodejs/compute/instanceFromMachineImage.ts index 91e9b73ab0..dd3e38f35f 100644 --- a/sdk/nodejs/compute/instanceFromMachineImage.ts +++ b/sdk/nodejs/compute/instanceFromMachineImage.ts @@ -172,6 +172,10 @@ export class InstanceFromMachineImage extends pulumi.CustomResource { * Stores additional params passed with the request, but not persisted as part of resource payload. */ public readonly params!: pulumi.Output; + /** + * Partner Metadata Map made available within the instance. + */ + public readonly partnerMetadata!: pulumi.Output<{[key: string]: string}>; /** * The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink * nor project are provided, the provider project is used. @@ -276,6 +280,7 @@ export class InstanceFromMachineImage extends pulumi.CustomResource { resourceInputs["networkInterfaces"] = state ? state.networkInterfaces : undefined; resourceInputs["networkPerformanceConfig"] = state ? state.networkPerformanceConfig : undefined; resourceInputs["params"] = state ? state.params : undefined; + resourceInputs["partnerMetadata"] = state ? state.partnerMetadata : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; resourceInputs["reservationAffinity"] = state ? state.reservationAffinity : undefined; @@ -313,6 +318,7 @@ export class InstanceFromMachineImage extends pulumi.CustomResource { resourceInputs["networkInterfaces"] = args ? args.networkInterfaces : undefined; resourceInputs["networkPerformanceConfig"] = args ? args.networkPerformanceConfig : undefined; resourceInputs["params"] = args ? args.params : undefined; + resourceInputs["partnerMetadata"] = args ? args.partnerMetadata : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["reservationAffinity"] = args ? args.reservationAffinity : undefined; resourceInputs["resourcePolicies"] = args ? args.resourcePolicies : undefined; @@ -457,6 +463,10 @@ export interface InstanceFromMachineImageState { * Stores additional params passed with the request, but not persisted as part of resource payload. */ params?: pulumi.Input; + /** + * Partner Metadata Map made available within the instance. + */ + partnerMetadata?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink * nor project are provided, the provider project is used. @@ -606,6 +616,10 @@ export interface InstanceFromMachineImageArgs { * Stores additional params passed with the request, but not persisted as part of resource payload. */ params?: pulumi.Input; + /** + * Partner Metadata Map made available within the instance. + */ + partnerMetadata?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink * nor project are provided, the provider project is used. diff --git a/sdk/nodejs/compute/instanceFromTemplate.ts b/sdk/nodejs/compute/instanceFromTemplate.ts index f4c6988efa..f38a0184d1 100644 --- a/sdk/nodejs/compute/instanceFromTemplate.ts +++ b/sdk/nodejs/compute/instanceFromTemplate.ts @@ -193,6 +193,10 @@ export class InstanceFromTemplate extends pulumi.CustomResource { * Stores additional params passed with the request, but not persisted as part of resource payload. */ public readonly params!: pulumi.Output; + /** + * Partner Metadata Map made available within the instance. + */ + public readonly partnerMetadata!: pulumi.Output<{[key: string]: string}>; /** * The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink * nor project are provided, the provider project is used. @@ -296,6 +300,7 @@ export class InstanceFromTemplate extends pulumi.CustomResource { resourceInputs["networkInterfaces"] = state ? state.networkInterfaces : undefined; resourceInputs["networkPerformanceConfig"] = state ? state.networkPerformanceConfig : undefined; resourceInputs["params"] = state ? state.params : undefined; + resourceInputs["partnerMetadata"] = state ? state.partnerMetadata : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; resourceInputs["reservationAffinity"] = state ? state.reservationAffinity : undefined; @@ -335,6 +340,7 @@ export class InstanceFromTemplate extends pulumi.CustomResource { resourceInputs["networkInterfaces"] = args ? args.networkInterfaces : undefined; resourceInputs["networkPerformanceConfig"] = args ? args.networkPerformanceConfig : undefined; resourceInputs["params"] = args ? args.params : undefined; + resourceInputs["partnerMetadata"] = args ? args.partnerMetadata : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["reservationAffinity"] = args ? args.reservationAffinity : undefined; resourceInputs["resourcePolicies"] = args ? args.resourcePolicies : undefined; @@ -477,6 +483,10 @@ export interface InstanceFromTemplateState { * Stores additional params passed with the request, but not persisted as part of resource payload. */ params?: pulumi.Input; + /** + * Partner Metadata Map made available within the instance. + */ + partnerMetadata?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink * nor project are provided, the provider project is used. @@ -633,6 +643,10 @@ export interface InstanceFromTemplateArgs { * Stores additional params passed with the request, but not persisted as part of resource payload. */ params?: pulumi.Input; + /** + * Partner Metadata Map made available within the instance. + */ + partnerMetadata?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * The ID of the project in which the resource belongs. If selfLink is provided, this value is ignored. If neither selfLink * nor project are provided, the provider project is used. diff --git a/sdk/nodejs/compute/instanceGroupManager.ts b/sdk/nodejs/compute/instanceGroupManager.ts index fa20ef9a20..354a143935 100644 --- a/sdk/nodejs/compute/instanceGroupManager.ts +++ b/sdk/nodejs/compute/instanceGroupManager.ts @@ -87,6 +87,29 @@ import * as utilities from "../utilities"; * }); * ``` * + * ### With Standby Policy (`Google-Beta` Provider) + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const igm_sr = new gcp.compute.InstanceGroupManager("igm-sr", { + * name: "tf-sr-igm", + * baseInstanceName: "tf-sr-igm-instance", + * zone: "us-central1-a", + * targetSize: 5, + * versions: [{ + * instanceTemplate: sr_igm.selfLink, + * name: "primary", + * }], + * standbyPolicy: { + * initialDelaySec: 30, + * mode: "MANUAL", + * }, + * targetSuspendedSize: 2, + * targetStoppedSize: 1, + * }); + * ``` + * * ## Import * * Instance group managers can be imported using any of these accepted formats: @@ -223,6 +246,10 @@ export class InstanceGroupManager extends pulumi.CustomResource { * The URL of the created resource. */ public /*out*/ readonly selfLink!: pulumi.Output; + /** + * The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + */ + public readonly standbyPolicy!: pulumi.Output; /** * Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). */ @@ -250,6 +277,14 @@ export class InstanceGroupManager extends pulumi.CustomResource { * unless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0. */ public readonly targetSize!: pulumi.Output; + /** + * The target number of stopped instances for this managed instance group. + */ + public readonly targetStoppedSize!: pulumi.Output; + /** + * The target number of suspended instances for this managed instance group. + */ + public readonly targetSuspendedSize!: pulumi.Output; /** * 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). */ @@ -309,12 +344,15 @@ export class InstanceGroupManager extends pulumi.CustomResource { resourceInputs["params"] = state ? state.params : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["selfLink"] = state ? state.selfLink : undefined; + resourceInputs["standbyPolicy"] = state ? state.standbyPolicy : undefined; resourceInputs["statefulDisks"] = state ? state.statefulDisks : undefined; resourceInputs["statefulExternalIps"] = state ? state.statefulExternalIps : undefined; resourceInputs["statefulInternalIps"] = state ? state.statefulInternalIps : undefined; resourceInputs["statuses"] = state ? state.statuses : undefined; resourceInputs["targetPools"] = state ? state.targetPools : undefined; resourceInputs["targetSize"] = state ? state.targetSize : undefined; + resourceInputs["targetStoppedSize"] = state ? state.targetStoppedSize : undefined; + resourceInputs["targetSuspendedSize"] = state ? state.targetSuspendedSize : undefined; resourceInputs["updatePolicy"] = state ? state.updatePolicy : undefined; resourceInputs["versions"] = state ? state.versions : undefined; resourceInputs["waitForInstances"] = state ? state.waitForInstances : undefined; @@ -338,11 +376,14 @@ export class InstanceGroupManager extends pulumi.CustomResource { resourceInputs["namedPorts"] = args ? args.namedPorts : undefined; resourceInputs["params"] = args ? args.params : undefined; resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["standbyPolicy"] = args ? args.standbyPolicy : undefined; resourceInputs["statefulDisks"] = args ? args.statefulDisks : undefined; resourceInputs["statefulExternalIps"] = args ? args.statefulExternalIps : undefined; resourceInputs["statefulInternalIps"] = args ? args.statefulInternalIps : undefined; resourceInputs["targetPools"] = args ? args.targetPools : undefined; resourceInputs["targetSize"] = args ? args.targetSize : undefined; + resourceInputs["targetStoppedSize"] = args ? args.targetStoppedSize : undefined; + resourceInputs["targetSuspendedSize"] = args ? args.targetSuspendedSize : undefined; resourceInputs["updatePolicy"] = args ? args.updatePolicy : undefined; resourceInputs["versions"] = args ? args.versions : undefined; resourceInputs["waitForInstances"] = args ? args.waitForInstances : undefined; @@ -442,6 +483,10 @@ export interface InstanceGroupManagerState { * The URL of the created resource. */ selfLink?: pulumi.Input; + /** + * The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + */ + standbyPolicy?: pulumi.Input; /** * Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). */ @@ -469,6 +514,14 @@ export interface InstanceGroupManagerState { * unless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0. */ targetSize?: pulumi.Input; + /** + * The target number of stopped instances for this managed instance group. + */ + targetStoppedSize?: pulumi.Input; + /** + * The target number of suspended instances for this managed instance group. + */ + targetSuspendedSize?: pulumi.Input; /** * 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). */ @@ -566,6 +619,10 @@ export interface InstanceGroupManagerArgs { * is not provided, the provider project is used. */ project?: pulumi.Input; + /** + * The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + */ + standbyPolicy?: pulumi.Input; /** * Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). */ @@ -589,6 +646,14 @@ export interface InstanceGroupManagerArgs { * unless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0. */ targetSize?: pulumi.Input; + /** + * The target number of stopped instances for this managed instance group. + */ + targetStoppedSize?: pulumi.Input; + /** + * The target number of suspended instances for this managed instance group. + */ + targetSuspendedSize?: pulumi.Input; /** * 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). */ diff --git a/sdk/nodejs/compute/instanceTemplate.ts b/sdk/nodejs/compute/instanceTemplate.ts index f5655a25f1..3425b34978 100644 --- a/sdk/nodejs/compute/instanceTemplate.ts +++ b/sdk/nodejs/compute/instanceTemplate.ts @@ -340,6 +340,10 @@ export class InstanceTemplate extends pulumi.CustomResource { * in order for this setting to take effect. */ public readonly networkPerformanceConfig!: pulumi.Output; + /** + * Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + */ + public readonly partnerMetadata!: pulumi.Output<{[key: string]: string} | undefined>; /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -435,6 +439,7 @@ export class InstanceTemplate extends pulumi.CustomResource { resourceInputs["namePrefix"] = state ? state.namePrefix : undefined; resourceInputs["networkInterfaces"] = state ? state.networkInterfaces : undefined; resourceInputs["networkPerformanceConfig"] = state ? state.networkPerformanceConfig : undefined; + resourceInputs["partnerMetadata"] = state ? state.partnerMetadata : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; resourceInputs["region"] = state ? state.region : undefined; @@ -473,6 +478,7 @@ export class InstanceTemplate extends pulumi.CustomResource { resourceInputs["namePrefix"] = args ? args.namePrefix : undefined; resourceInputs["networkInterfaces"] = args ? args.networkInterfaces : undefined; resourceInputs["networkPerformanceConfig"] = args ? args.networkPerformanceConfig : undefined; + resourceInputs["partnerMetadata"] = args ? args.partnerMetadata : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["region"] = args ? args.region : undefined; resourceInputs["reservationAffinity"] = args ? args.reservationAffinity : undefined; @@ -603,6 +609,10 @@ export interface InstanceTemplateState { * in order for this setting to take effect. */ networkPerformanceConfig?: pulumi.Input; + /** + * Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + */ + partnerMetadata?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -766,6 +776,10 @@ export interface InstanceTemplateArgs { * in order for this setting to take effect. */ networkPerformanceConfig?: pulumi.Input; + /** + * Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + */ + partnerMetadata?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/nodejs/compute/projectCloudArmorTier.ts b/sdk/nodejs/compute/projectCloudArmorTier.ts new file mode 100644 index 0000000000..abc797f6da --- /dev/null +++ b/sdk/nodejs/compute/projectCloudArmorTier.ts @@ -0,0 +1,174 @@ +// *** WARNING: this file 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"; + +/** + * Sets the Cloud Armor tier of the project. + * + * To get more information about ProjectCloudArmorTier, see: + * + * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/projects/setCloudArmorTier) + * * How-to Guides + * * [Subscribing to Cloud Armor Enterprise](https://cloud.google.com/armor/docs/managed-protection-overview#subscribing_to_plus) + * + * ## Example Usage + * + * ### Compute Project Cloud Armor Tier Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const cloudArmorTierConfig = new gcp.compute.ProjectCloudArmorTier("cloud_armor_tier_config", {cloudArmorTier: "CA_STANDARD"}); + * ``` + * ### Compute Project Cloud Armor Tier Project Set + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const project = new gcp.organizations.Project("project", { + * projectId: "your_project_id", + * name: "your_project_id", + * orgId: "123456789", + * billingAccount: "000000-0000000-0000000-000000", + * }); + * const compute = new gcp.projects.Service("compute", { + * project: project.projectId, + * service: "compute.googleapis.com", + * }); + * const cloudArmorTierConfig = new gcp.compute.ProjectCloudArmorTier("cloud_armor_tier_config", { + * project: project.projectId, + * cloudArmorTier: "CA_STANDARD", + * }, { + * dependsOn: [compute], + * }); + * ``` + * + * ## Import + * + * ProjectCloudArmorTier can be imported using any of these accepted formats: + * + * * `projects/{{project}}` + * + * * `{{project}}` + * + * When using the `pulumi import` command, ProjectCloudArmorTier can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default projects/{{project}} + * ``` + * + * ```sh + * $ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default {{project}} + * ``` + */ +export class ProjectCloudArmorTier extends pulumi.CustomResource { + /** + * Get an existing ProjectCloudArmorTier 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?: ProjectCloudArmorTierState, opts?: pulumi.CustomResourceOptions): ProjectCloudArmorTier { + return new ProjectCloudArmorTier(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier'; + + /** + * Returns true if the given object is an instance of ProjectCloudArmorTier. 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 ProjectCloudArmorTier { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === ProjectCloudArmorTier.__pulumiType; + } + + /** + * Managed protection tier to be set. + * Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + * + * + * - - - + */ + public readonly cloudArmorTier!: 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; + + /** + * Create a ProjectCloudArmorTier 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: ProjectCloudArmorTierArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ProjectCloudArmorTierArgs | ProjectCloudArmorTierState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ProjectCloudArmorTierState | undefined; + resourceInputs["cloudArmorTier"] = state ? state.cloudArmorTier : undefined; + resourceInputs["project"] = state ? state.project : undefined; + } else { + const args = argsOrState as ProjectCloudArmorTierArgs | undefined; + if ((!args || args.cloudArmorTier === undefined) && !opts.urn) { + throw new Error("Missing required property 'cloudArmorTier'"); + } + resourceInputs["cloudArmorTier"] = args ? args.cloudArmorTier : undefined; + resourceInputs["project"] = args ? args.project : undefined; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(ProjectCloudArmorTier.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering ProjectCloudArmorTier resources. + */ +export interface ProjectCloudArmorTierState { + /** + * Managed protection tier to be set. + * Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + * + * + * - - - + */ + cloudArmorTier?: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; +} + +/** + * The set of arguments for constructing a ProjectCloudArmorTier resource. + */ +export interface ProjectCloudArmorTierArgs { + /** + * Managed protection tier to be set. + * Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + * + * + * - - - + */ + cloudArmorTier: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; +} diff --git a/sdk/nodejs/compute/regionInstanceGroupManager.ts b/sdk/nodejs/compute/regionInstanceGroupManager.ts index eeb5afa137..40849fe705 100644 --- a/sdk/nodejs/compute/regionInstanceGroupManager.ts +++ b/sdk/nodejs/compute/regionInstanceGroupManager.ts @@ -94,6 +94,29 @@ import * as utilities from "../utilities"; * }); * ``` * + * ### With Standby Policy (`Google-Beta` Provider) + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const igm_sr = new gcp.compute.RegionInstanceGroupManager("igm-sr", { + * name: "tf-sr-igm", + * baseInstanceName: "tf-sr-igm-instance", + * region: "us-central1", + * targetSize: 5, + * versions: [{ + * instanceTemplate: sr_igm.selfLink, + * name: "primary", + * }], + * standbyPolicy: { + * initialDelaySec: 50, + * mode: "SCALE_OUT_POOL", + * }, + * targetSuspendedSize: 1, + * targetStoppedSize: 1, + * }); + * ``` + * * ## Import * * Instance group managers can be imported using any of these accepted formats: @@ -226,6 +249,10 @@ export class RegionInstanceGroupManager extends pulumi.CustomResource { * The URL of the created resource. */ public /*out*/ readonly selfLink!: pulumi.Output; + /** + * The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + */ + public readonly standbyPolicy!: pulumi.Output; /** * Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `updatePolicy`. */ @@ -253,6 +280,14 @@ export class RegionInstanceGroupManager extends pulumi.CustomResource { * unless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0. */ public readonly targetSize!: pulumi.Output; + /** + * The target number of stopped instances for this managed instance group. + */ + public readonly targetStoppedSize!: pulumi.Output; + /** + * The target number of suspended instances for this managed instance group. + */ + public readonly targetSuspendedSize!: pulumi.Output; /** * 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) */ @@ -307,12 +342,15 @@ export class RegionInstanceGroupManager extends pulumi.CustomResource { resourceInputs["project"] = state ? state.project : undefined; resourceInputs["region"] = state ? state.region : undefined; resourceInputs["selfLink"] = state ? state.selfLink : undefined; + resourceInputs["standbyPolicy"] = state ? state.standbyPolicy : undefined; resourceInputs["statefulDisks"] = state ? state.statefulDisks : undefined; resourceInputs["statefulExternalIps"] = state ? state.statefulExternalIps : undefined; resourceInputs["statefulInternalIps"] = state ? state.statefulInternalIps : undefined; resourceInputs["statuses"] = state ? state.statuses : undefined; resourceInputs["targetPools"] = state ? state.targetPools : undefined; resourceInputs["targetSize"] = state ? state.targetSize : undefined; + resourceInputs["targetStoppedSize"] = state ? state.targetStoppedSize : undefined; + resourceInputs["targetSuspendedSize"] = state ? state.targetSuspendedSize : undefined; resourceInputs["updatePolicy"] = state ? state.updatePolicy : undefined; resourceInputs["versions"] = state ? state.versions : undefined; resourceInputs["waitForInstances"] = state ? state.waitForInstances : undefined; @@ -338,11 +376,14 @@ export class RegionInstanceGroupManager extends pulumi.CustomResource { resourceInputs["params"] = args ? args.params : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["region"] = args ? args.region : undefined; + resourceInputs["standbyPolicy"] = args ? args.standbyPolicy : undefined; resourceInputs["statefulDisks"] = args ? args.statefulDisks : undefined; resourceInputs["statefulExternalIps"] = args ? args.statefulExternalIps : undefined; resourceInputs["statefulInternalIps"] = args ? args.statefulInternalIps : undefined; resourceInputs["targetPools"] = args ? args.targetPools : undefined; resourceInputs["targetSize"] = args ? args.targetSize : undefined; + resourceInputs["targetStoppedSize"] = args ? args.targetStoppedSize : undefined; + resourceInputs["targetSuspendedSize"] = args ? args.targetSuspendedSize : undefined; resourceInputs["updatePolicy"] = args ? args.updatePolicy : undefined; resourceInputs["versions"] = args ? args.versions : undefined; resourceInputs["waitForInstances"] = args ? args.waitForInstances : undefined; @@ -454,6 +495,10 @@ export interface RegionInstanceGroupManagerState { * The URL of the created resource. */ selfLink?: pulumi.Input; + /** + * The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + */ + standbyPolicy?: pulumi.Input; /** * Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `updatePolicy`. */ @@ -481,6 +526,14 @@ export interface RegionInstanceGroupManagerState { * unless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0. */ targetSize?: pulumi.Input; + /** + * The target number of stopped instances for this managed instance group. + */ + targetStoppedSize?: pulumi.Input; + /** + * The target number of suspended instances for this managed instance group. + */ + targetSuspendedSize?: pulumi.Input; /** * 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) */ @@ -586,6 +639,10 @@ export interface RegionInstanceGroupManagerArgs { * - - - */ region?: pulumi.Input; + /** + * The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + */ + standbyPolicy?: pulumi.Input; /** * Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `updatePolicy`. */ @@ -609,6 +666,14 @@ export interface RegionInstanceGroupManagerArgs { * unless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0. */ targetSize?: pulumi.Input; + /** + * The target number of stopped instances for this managed instance group. + */ + targetStoppedSize?: pulumi.Input; + /** + * The target number of suspended instances for this managed instance group. + */ + targetSuspendedSize?: pulumi.Input; /** * 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) */ diff --git a/sdk/nodejs/compute/regionInstanceTemplate.ts b/sdk/nodejs/compute/regionInstanceTemplate.ts index d2f269a234..ebfe98c959 100644 --- a/sdk/nodejs/compute/regionInstanceTemplate.ts +++ b/sdk/nodejs/compute/regionInstanceTemplate.ts @@ -158,6 +158,10 @@ export class RegionInstanceTemplate extends pulumi.CustomResource { * in order for this setting to take effect. */ public readonly networkPerformanceConfig!: pulumi.Output; + /** + * Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + */ + public readonly partnerMetadata!: pulumi.Output<{[key: string]: string} | undefined>; /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -244,6 +248,7 @@ export class RegionInstanceTemplate extends pulumi.CustomResource { resourceInputs["namePrefix"] = state ? state.namePrefix : undefined; resourceInputs["networkInterfaces"] = state ? state.networkInterfaces : undefined; resourceInputs["networkPerformanceConfig"] = state ? state.networkPerformanceConfig : undefined; + resourceInputs["partnerMetadata"] = state ? state.partnerMetadata : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; resourceInputs["region"] = state ? state.region : undefined; @@ -281,6 +286,7 @@ export class RegionInstanceTemplate extends pulumi.CustomResource { resourceInputs["namePrefix"] = args ? args.namePrefix : undefined; resourceInputs["networkInterfaces"] = args ? args.networkInterfaces : undefined; resourceInputs["networkPerformanceConfig"] = args ? args.networkPerformanceConfig : undefined; + resourceInputs["partnerMetadata"] = args ? args.partnerMetadata : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["region"] = args ? args.region : undefined; resourceInputs["reservationAffinity"] = args ? args.reservationAffinity : undefined; @@ -406,6 +412,10 @@ export interface RegionInstanceTemplateState { * in order for this setting to take effect. */ networkPerformanceConfig?: pulumi.Input; + /** + * Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + */ + partnerMetadata?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -556,6 +566,10 @@ export interface RegionInstanceTemplateArgs { * in order for this setting to take effect. */ networkPerformanceConfig?: pulumi.Input; + /** + * Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + */ + partnerMetadata?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/nodejs/config/vars.ts b/sdk/nodejs/config/vars.ts index 03f5092f0f..58e2331e69 100644 --- a/sdk/nodejs/config/vars.ts +++ b/sdk/nodejs/config/vars.ts @@ -1153,6 +1153,14 @@ Object.defineProperty(exports, "securityCenterCustomEndpoint", { enumerable: true, }); +export declare const securityCenterManagementCustomEndpoint: string | undefined; +Object.defineProperty(exports, "securityCenterManagementCustomEndpoint", { + get() { + return __config.get("securityCenterManagementCustomEndpoint"); + }, + enumerable: true, +}); + export declare const securityScannerCustomEndpoint: string | undefined; Object.defineProperty(exports, "securityScannerCustomEndpoint", { get() { diff --git a/sdk/nodejs/container/cluster.ts b/sdk/nodejs/container/cluster.ts index 9273f6096f..e83e38ea14 100644 --- a/sdk/nodejs/container/cluster.ts +++ b/sdk/nodejs/container/cluster.ts @@ -549,6 +549,12 @@ export class Cluster extends pulumi.CustomResource { * Structure is documented below. */ public readonly resourceUsageExportConfig!: pulumi.Output; + /** + * Configuration for the + * [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + * Structure is documented below. + */ + public readonly secretManagerConfig!: pulumi.Output; /** * Enable/Disable Security Posture API features for the cluster. Structure is documented below. */ @@ -680,6 +686,7 @@ export class Cluster extends pulumi.CustomResource { resourceInputs["removeDefaultNodePool"] = state ? state.removeDefaultNodePool : undefined; resourceInputs["resourceLabels"] = state ? state.resourceLabels : undefined; resourceInputs["resourceUsageExportConfig"] = state ? state.resourceUsageExportConfig : undefined; + resourceInputs["secretManagerConfig"] = state ? state.secretManagerConfig : undefined; resourceInputs["securityPostureConfig"] = state ? state.securityPostureConfig : undefined; resourceInputs["selfLink"] = state ? state.selfLink : undefined; resourceInputs["serviceExternalIpsConfig"] = state ? state.serviceExternalIpsConfig : undefined; @@ -754,6 +761,7 @@ export class Cluster extends pulumi.CustomResource { resourceInputs["removeDefaultNodePool"] = args ? args.removeDefaultNodePool : undefined; resourceInputs["resourceLabels"] = args ? args.resourceLabels : undefined; resourceInputs["resourceUsageExportConfig"] = args ? args.resourceUsageExportConfig : undefined; + resourceInputs["secretManagerConfig"] = args ? args.secretManagerConfig : undefined; resourceInputs["securityPostureConfig"] = args ? args.securityPostureConfig : undefined; resourceInputs["serviceExternalIpsConfig"] = args ? args.serviceExternalIpsConfig : undefined; resourceInputs["subnetwork"] = args ? args.subnetwork : undefined; @@ -1165,6 +1173,12 @@ export interface ClusterState { * Structure is documented below. */ resourceUsageExportConfig?: pulumi.Input; + /** + * Configuration for the + * [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + * Structure is documented below. + */ + secretManagerConfig?: pulumi.Input; /** * Enable/Disable Security Posture API features for the cluster. Structure is documented below. */ @@ -1594,6 +1608,12 @@ export interface ClusterArgs { * Structure is documented below. */ resourceUsageExportConfig?: pulumi.Input; + /** + * Configuration for the + * [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + * Structure is documented below. + */ + secretManagerConfig?: pulumi.Input; /** * Enable/Disable Security Posture API features for the cluster. Structure is documented below. */ diff --git a/sdk/nodejs/container/getCluster.ts b/sdk/nodejs/container/getCluster.ts index ddbfa466db..74e9757c1c 100644 --- a/sdk/nodejs/container/getCluster.ts +++ b/sdk/nodejs/container/getCluster.ts @@ -116,6 +116,7 @@ export interface GetClusterResult { readonly removeDefaultNodePool: boolean; readonly resourceLabels: {[key: string]: string}; readonly resourceUsageExportConfigs: outputs.container.GetClusterResourceUsageExportConfig[]; + readonly secretManagerConfigs: outputs.container.GetClusterSecretManagerConfig[]; readonly securityPostureConfigs: outputs.container.GetClusterSecurityPostureConfig[]; readonly selfLink: string; readonly serviceExternalIpsConfigs: outputs.container.GetClusterServiceExternalIpsConfig[]; diff --git a/sdk/nodejs/dataloss/preventionInspectTemplate.ts b/sdk/nodejs/dataloss/preventionInspectTemplate.ts index 5212cc33b9..617e705597 100644 --- a/sdk/nodejs/dataloss/preventionInspectTemplate.ts +++ b/sdk/nodejs/dataloss/preventionInspectTemplate.ts @@ -258,6 +258,34 @@ import * as utilities from "../utilities"; * }, * }); * ``` + * ### Dlp Inspect Template Max Infotype Per Finding Default + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const maxInfotypePerFindingDefault = new gcp.dataloss.PreventionInspectTemplate("max_infotype_per_finding_default", { + * parent: "projects/my-project-name", + * inspectConfig: { + * infoTypes: [ + * { + * name: "EMAIL_ADDRESS", + * }, + * { + * name: "PERSON_NAME", + * }, + * ], + * minLikelihood: "UNLIKELY", + * limits: { + * maxFindingsPerRequest: 333, + * maxFindingsPerItem: 222, + * maxFindingsPerInfoTypes: [{ + * maxFindings: 111, + * }], + * }, + * }, + * }); + * ``` * * ## Import * diff --git a/sdk/nodejs/gkebackup/backupPlan.ts b/sdk/nodejs/gkebackup/backupPlan.ts index a7310e1320..96e31a36ed 100644 --- a/sdk/nodejs/gkebackup/backupPlan.ts +++ b/sdk/nodejs/gkebackup/backupPlan.ts @@ -184,6 +184,58 @@ import * as utilities from "../utilities"; * }, * }); * ``` + * ### Gkebackup Backupplan Permissive + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const primary = new gcp.container.Cluster("primary", { + * name: "permissive-cluster", + * location: "us-central1", + * initialNodeCount: 1, + * workloadIdentityConfig: { + * workloadPool: "my-project-name.svc.id.goog", + * }, + * addonsConfig: { + * gkeBackupAgentConfig: { + * enabled: true, + * }, + * }, + * deletionProtection: true, + * network: "default", + * subnetwork: "default", + * }); + * const permissive = new gcp.gkebackup.BackupPlan("permissive", { + * name: "permissive-plan", + * cluster: primary.id, + * location: "us-central1", + * retentionPolicy: { + * backupDeleteLockDays: 30, + * backupRetainDays: 180, + * }, + * backupSchedule: { + * cronSchedule: "0 9 * * 1", + * }, + * backupConfig: { + * includeVolumeData: true, + * includeSecrets: true, + * permissiveMode: true, + * selectedApplications: { + * namespacedNames: [ + * { + * name: "app1", + * namespace: "ns1", + * }, + * { + * name: "app2", + * namespace: "ns2", + * }, + * ], + * }, + * }, + * }); + * ``` * ### Gkebackup Backupplan Rpo Daily Window * * ```typescript diff --git a/sdk/nodejs/gkebackup/restorePlan.ts b/sdk/nodejs/gkebackup/restorePlan.ts index 3f30dedc1a..9449326ddc 100644 --- a/sdk/nodejs/gkebackup/restorePlan.ts +++ b/sdk/nodejs/gkebackup/restorePlan.ts @@ -371,6 +371,178 @@ import * as utilities from "../utilities"; * }, * }); * ``` + * ### Gkebackup Restoreplan Gitops Mode + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const primary = new gcp.container.Cluster("primary", { + * name: "gitops-mode-cluster", + * location: "us-central1", + * initialNodeCount: 1, + * workloadIdentityConfig: { + * workloadPool: "my-project-name.svc.id.goog", + * }, + * addonsConfig: { + * gkeBackupAgentConfig: { + * enabled: true, + * }, + * }, + * deletionProtection: "", + * network: "default", + * subnetwork: "default", + * }); + * const basic = new gcp.gkebackup.BackupPlan("basic", { + * name: "gitops-mode", + * cluster: primary.id, + * location: "us-central1", + * backupConfig: { + * includeVolumeData: true, + * includeSecrets: true, + * allNamespaces: true, + * }, + * }); + * const gitopsMode = new gcp.gkebackup.RestorePlan("gitops_mode", { + * name: "gitops-mode", + * location: "us-central1", + * backupPlan: basic.id, + * cluster: primary.id, + * restoreConfig: { + * allNamespaces: true, + * namespacedResourceRestoreMode: "MERGE_SKIP_ON_CONFLICT", + * volumeDataRestorePolicy: "RESTORE_VOLUME_DATA_FROM_BACKUP", + * clusterResourceRestoreScope: { + * allGroupKinds: true, + * }, + * clusterResourceConflictPolicy: "USE_EXISTING_VERSION", + * }, + * }); + * ``` + * ### Gkebackup Restoreplan Restore Order + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const primary = new gcp.container.Cluster("primary", { + * name: "restore-order-cluster", + * location: "us-central1", + * initialNodeCount: 1, + * workloadIdentityConfig: { + * workloadPool: "my-project-name.svc.id.goog", + * }, + * addonsConfig: { + * gkeBackupAgentConfig: { + * enabled: true, + * }, + * }, + * deletionProtection: "", + * network: "default", + * subnetwork: "default", + * }); + * const basic = new gcp.gkebackup.BackupPlan("basic", { + * name: "restore-order", + * cluster: primary.id, + * location: "us-central1", + * backupConfig: { + * includeVolumeData: true, + * includeSecrets: true, + * allNamespaces: true, + * }, + * }); + * const restoreOrder = new gcp.gkebackup.RestorePlan("restore_order", { + * name: "restore-order", + * location: "us-central1", + * backupPlan: basic.id, + * cluster: primary.id, + * restoreConfig: { + * allNamespaces: true, + * namespacedResourceRestoreMode: "FAIL_ON_CONFLICT", + * volumeDataRestorePolicy: "RESTORE_VOLUME_DATA_FROM_BACKUP", + * clusterResourceRestoreScope: { + * allGroupKinds: true, + * }, + * clusterResourceConflictPolicy: "USE_EXISTING_VERSION", + * restoreOrder: { + * groupKindDependencies: [ + * { + * satisfying: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindA", + * }, + * requiring: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindB", + * }, + * }, + * { + * satisfying: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindB", + * }, + * requiring: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindC", + * }, + * }, + * ], + * }, + * }, + * }); + * ``` + * ### Gkebackup Restoreplan Volume Res + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const primary = new gcp.container.Cluster("primary", { + * name: "volume-res-cluster", + * location: "us-central1", + * initialNodeCount: 1, + * workloadIdentityConfig: { + * workloadPool: "my-project-name.svc.id.goog", + * }, + * addonsConfig: { + * gkeBackupAgentConfig: { + * enabled: true, + * }, + * }, + * deletionProtection: "", + * network: "default", + * subnetwork: "default", + * }); + * const basic = new gcp.gkebackup.BackupPlan("basic", { + * name: "volume-res", + * cluster: primary.id, + * location: "us-central1", + * backupConfig: { + * includeVolumeData: true, + * includeSecrets: true, + * allNamespaces: true, + * }, + * }); + * const volumeRes = new gcp.gkebackup.RestorePlan("volume_res", { + * name: "volume-res", + * location: "us-central1", + * backupPlan: basic.id, + * cluster: primary.id, + * restoreConfig: { + * allNamespaces: true, + * namespacedResourceRestoreMode: "FAIL_ON_CONFLICT", + * volumeDataRestorePolicy: "NO_VOLUME_DATA_RESTORATION", + * clusterResourceRestoreScope: { + * allGroupKinds: true, + * }, + * clusterResourceConflictPolicy: "USE_EXISTING_VERSION", + * volumeDataRestorePolicyBindings: [{ + * policy: "RESTORE_VOLUME_DATA_FROM_BACKUP", + * volumeType: "GCE_PERSISTENT_DISK", + * }], + * }, + * }); + * ``` * * ## Import * diff --git a/sdk/nodejs/gkebackup/restorePlanIamBinding.ts b/sdk/nodejs/gkebackup/restorePlanIamBinding.ts index 29d7cac263..af59b3ab0d 100644 --- a/sdk/nodejs/gkebackup/restorePlanIamBinding.ts +++ b/sdk/nodejs/gkebackup/restorePlanIamBinding.ts @@ -371,6 +371,178 @@ import * as utilities from "../utilities"; * }, * }); * ``` + * ### Gkebackup Restoreplan Gitops Mode + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const primary = new gcp.container.Cluster("primary", { + * name: "gitops-mode-cluster", + * location: "us-central1", + * initialNodeCount: 1, + * workloadIdentityConfig: { + * workloadPool: "my-project-name.svc.id.goog", + * }, + * addonsConfig: { + * gkeBackupAgentConfig: { + * enabled: true, + * }, + * }, + * deletionProtection: "", + * network: "default", + * subnetwork: "default", + * }); + * const basic = new gcp.gkebackup.BackupPlan("basic", { + * name: "gitops-mode", + * cluster: primary.id, + * location: "us-central1", + * backupConfig: { + * includeVolumeData: true, + * includeSecrets: true, + * allNamespaces: true, + * }, + * }); + * const gitopsMode = new gcp.gkebackup.RestorePlan("gitops_mode", { + * name: "gitops-mode", + * location: "us-central1", + * backupPlan: basic.id, + * cluster: primary.id, + * restoreConfig: { + * allNamespaces: true, + * namespacedResourceRestoreMode: "MERGE_SKIP_ON_CONFLICT", + * volumeDataRestorePolicy: "RESTORE_VOLUME_DATA_FROM_BACKUP", + * clusterResourceRestoreScope: { + * allGroupKinds: true, + * }, + * clusterResourceConflictPolicy: "USE_EXISTING_VERSION", + * }, + * }); + * ``` + * ### Gkebackup Restoreplan Restore Order + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const primary = new gcp.container.Cluster("primary", { + * name: "restore-order-cluster", + * location: "us-central1", + * initialNodeCount: 1, + * workloadIdentityConfig: { + * workloadPool: "my-project-name.svc.id.goog", + * }, + * addonsConfig: { + * gkeBackupAgentConfig: { + * enabled: true, + * }, + * }, + * deletionProtection: "", + * network: "default", + * subnetwork: "default", + * }); + * const basic = new gcp.gkebackup.BackupPlan("basic", { + * name: "restore-order", + * cluster: primary.id, + * location: "us-central1", + * backupConfig: { + * includeVolumeData: true, + * includeSecrets: true, + * allNamespaces: true, + * }, + * }); + * const restoreOrder = new gcp.gkebackup.RestorePlan("restore_order", { + * name: "restore-order", + * location: "us-central1", + * backupPlan: basic.id, + * cluster: primary.id, + * restoreConfig: { + * allNamespaces: true, + * namespacedResourceRestoreMode: "FAIL_ON_CONFLICT", + * volumeDataRestorePolicy: "RESTORE_VOLUME_DATA_FROM_BACKUP", + * clusterResourceRestoreScope: { + * allGroupKinds: true, + * }, + * clusterResourceConflictPolicy: "USE_EXISTING_VERSION", + * restoreOrder: { + * groupKindDependencies: [ + * { + * satisfying: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindA", + * }, + * requiring: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindB", + * }, + * }, + * { + * satisfying: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindB", + * }, + * requiring: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindC", + * }, + * }, + * ], + * }, + * }, + * }); + * ``` + * ### Gkebackup Restoreplan Volume Res + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const primary = new gcp.container.Cluster("primary", { + * name: "volume-res-cluster", + * location: "us-central1", + * initialNodeCount: 1, + * workloadIdentityConfig: { + * workloadPool: "my-project-name.svc.id.goog", + * }, + * addonsConfig: { + * gkeBackupAgentConfig: { + * enabled: true, + * }, + * }, + * deletionProtection: "", + * network: "default", + * subnetwork: "default", + * }); + * const basic = new gcp.gkebackup.BackupPlan("basic", { + * name: "volume-res", + * cluster: primary.id, + * location: "us-central1", + * backupConfig: { + * includeVolumeData: true, + * includeSecrets: true, + * allNamespaces: true, + * }, + * }); + * const volumeRes = new gcp.gkebackup.RestorePlan("volume_res", { + * name: "volume-res", + * location: "us-central1", + * backupPlan: basic.id, + * cluster: primary.id, + * restoreConfig: { + * allNamespaces: true, + * namespacedResourceRestoreMode: "FAIL_ON_CONFLICT", + * volumeDataRestorePolicy: "NO_VOLUME_DATA_RESTORATION", + * clusterResourceRestoreScope: { + * allGroupKinds: true, + * }, + * clusterResourceConflictPolicy: "USE_EXISTING_VERSION", + * volumeDataRestorePolicyBindings: [{ + * policy: "RESTORE_VOLUME_DATA_FROM_BACKUP", + * volumeType: "GCE_PERSISTENT_DISK", + * }], + * }, + * }); + * ``` * * ## Import * diff --git a/sdk/nodejs/gkebackup/restorePlanIamMember.ts b/sdk/nodejs/gkebackup/restorePlanIamMember.ts index 2eadb60ebd..3258deccc3 100644 --- a/sdk/nodejs/gkebackup/restorePlanIamMember.ts +++ b/sdk/nodejs/gkebackup/restorePlanIamMember.ts @@ -371,6 +371,178 @@ import * as utilities from "../utilities"; * }, * }); * ``` + * ### Gkebackup Restoreplan Gitops Mode + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const primary = new gcp.container.Cluster("primary", { + * name: "gitops-mode-cluster", + * location: "us-central1", + * initialNodeCount: 1, + * workloadIdentityConfig: { + * workloadPool: "my-project-name.svc.id.goog", + * }, + * addonsConfig: { + * gkeBackupAgentConfig: { + * enabled: true, + * }, + * }, + * deletionProtection: "", + * network: "default", + * subnetwork: "default", + * }); + * const basic = new gcp.gkebackup.BackupPlan("basic", { + * name: "gitops-mode", + * cluster: primary.id, + * location: "us-central1", + * backupConfig: { + * includeVolumeData: true, + * includeSecrets: true, + * allNamespaces: true, + * }, + * }); + * const gitopsMode = new gcp.gkebackup.RestorePlan("gitops_mode", { + * name: "gitops-mode", + * location: "us-central1", + * backupPlan: basic.id, + * cluster: primary.id, + * restoreConfig: { + * allNamespaces: true, + * namespacedResourceRestoreMode: "MERGE_SKIP_ON_CONFLICT", + * volumeDataRestorePolicy: "RESTORE_VOLUME_DATA_FROM_BACKUP", + * clusterResourceRestoreScope: { + * allGroupKinds: true, + * }, + * clusterResourceConflictPolicy: "USE_EXISTING_VERSION", + * }, + * }); + * ``` + * ### Gkebackup Restoreplan Restore Order + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const primary = new gcp.container.Cluster("primary", { + * name: "restore-order-cluster", + * location: "us-central1", + * initialNodeCount: 1, + * workloadIdentityConfig: { + * workloadPool: "my-project-name.svc.id.goog", + * }, + * addonsConfig: { + * gkeBackupAgentConfig: { + * enabled: true, + * }, + * }, + * deletionProtection: "", + * network: "default", + * subnetwork: "default", + * }); + * const basic = new gcp.gkebackup.BackupPlan("basic", { + * name: "restore-order", + * cluster: primary.id, + * location: "us-central1", + * backupConfig: { + * includeVolumeData: true, + * includeSecrets: true, + * allNamespaces: true, + * }, + * }); + * const restoreOrder = new gcp.gkebackup.RestorePlan("restore_order", { + * name: "restore-order", + * location: "us-central1", + * backupPlan: basic.id, + * cluster: primary.id, + * restoreConfig: { + * allNamespaces: true, + * namespacedResourceRestoreMode: "FAIL_ON_CONFLICT", + * volumeDataRestorePolicy: "RESTORE_VOLUME_DATA_FROM_BACKUP", + * clusterResourceRestoreScope: { + * allGroupKinds: true, + * }, + * clusterResourceConflictPolicy: "USE_EXISTING_VERSION", + * restoreOrder: { + * groupKindDependencies: [ + * { + * satisfying: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindA", + * }, + * requiring: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindB", + * }, + * }, + * { + * satisfying: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindB", + * }, + * requiring: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindC", + * }, + * }, + * ], + * }, + * }, + * }); + * ``` + * ### Gkebackup Restoreplan Volume Res + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const primary = new gcp.container.Cluster("primary", { + * name: "volume-res-cluster", + * location: "us-central1", + * initialNodeCount: 1, + * workloadIdentityConfig: { + * workloadPool: "my-project-name.svc.id.goog", + * }, + * addonsConfig: { + * gkeBackupAgentConfig: { + * enabled: true, + * }, + * }, + * deletionProtection: "", + * network: "default", + * subnetwork: "default", + * }); + * const basic = new gcp.gkebackup.BackupPlan("basic", { + * name: "volume-res", + * cluster: primary.id, + * location: "us-central1", + * backupConfig: { + * includeVolumeData: true, + * includeSecrets: true, + * allNamespaces: true, + * }, + * }); + * const volumeRes = new gcp.gkebackup.RestorePlan("volume_res", { + * name: "volume-res", + * location: "us-central1", + * backupPlan: basic.id, + * cluster: primary.id, + * restoreConfig: { + * allNamespaces: true, + * namespacedResourceRestoreMode: "FAIL_ON_CONFLICT", + * volumeDataRestorePolicy: "NO_VOLUME_DATA_RESTORATION", + * clusterResourceRestoreScope: { + * allGroupKinds: true, + * }, + * clusterResourceConflictPolicy: "USE_EXISTING_VERSION", + * volumeDataRestorePolicyBindings: [{ + * policy: "RESTORE_VOLUME_DATA_FROM_BACKUP", + * volumeType: "GCE_PERSISTENT_DISK", + * }], + * }, + * }); + * ``` * * ## Import * diff --git a/sdk/nodejs/gkebackup/restorePlanIamPolicy.ts b/sdk/nodejs/gkebackup/restorePlanIamPolicy.ts index ec01aee241..1f68cc8190 100644 --- a/sdk/nodejs/gkebackup/restorePlanIamPolicy.ts +++ b/sdk/nodejs/gkebackup/restorePlanIamPolicy.ts @@ -369,6 +369,178 @@ import * as utilities from "../utilities"; * }, * }); * ``` + * ### Gkebackup Restoreplan Gitops Mode + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const primary = new gcp.container.Cluster("primary", { + * name: "gitops-mode-cluster", + * location: "us-central1", + * initialNodeCount: 1, + * workloadIdentityConfig: { + * workloadPool: "my-project-name.svc.id.goog", + * }, + * addonsConfig: { + * gkeBackupAgentConfig: { + * enabled: true, + * }, + * }, + * deletionProtection: "", + * network: "default", + * subnetwork: "default", + * }); + * const basic = new gcp.gkebackup.BackupPlan("basic", { + * name: "gitops-mode", + * cluster: primary.id, + * location: "us-central1", + * backupConfig: { + * includeVolumeData: true, + * includeSecrets: true, + * allNamespaces: true, + * }, + * }); + * const gitopsMode = new gcp.gkebackup.RestorePlan("gitops_mode", { + * name: "gitops-mode", + * location: "us-central1", + * backupPlan: basic.id, + * cluster: primary.id, + * restoreConfig: { + * allNamespaces: true, + * namespacedResourceRestoreMode: "MERGE_SKIP_ON_CONFLICT", + * volumeDataRestorePolicy: "RESTORE_VOLUME_DATA_FROM_BACKUP", + * clusterResourceRestoreScope: { + * allGroupKinds: true, + * }, + * clusterResourceConflictPolicy: "USE_EXISTING_VERSION", + * }, + * }); + * ``` + * ### Gkebackup Restoreplan Restore Order + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const primary = new gcp.container.Cluster("primary", { + * name: "restore-order-cluster", + * location: "us-central1", + * initialNodeCount: 1, + * workloadIdentityConfig: { + * workloadPool: "my-project-name.svc.id.goog", + * }, + * addonsConfig: { + * gkeBackupAgentConfig: { + * enabled: true, + * }, + * }, + * deletionProtection: "", + * network: "default", + * subnetwork: "default", + * }); + * const basic = new gcp.gkebackup.BackupPlan("basic", { + * name: "restore-order", + * cluster: primary.id, + * location: "us-central1", + * backupConfig: { + * includeVolumeData: true, + * includeSecrets: true, + * allNamespaces: true, + * }, + * }); + * const restoreOrder = new gcp.gkebackup.RestorePlan("restore_order", { + * name: "restore-order", + * location: "us-central1", + * backupPlan: basic.id, + * cluster: primary.id, + * restoreConfig: { + * allNamespaces: true, + * namespacedResourceRestoreMode: "FAIL_ON_CONFLICT", + * volumeDataRestorePolicy: "RESTORE_VOLUME_DATA_FROM_BACKUP", + * clusterResourceRestoreScope: { + * allGroupKinds: true, + * }, + * clusterResourceConflictPolicy: "USE_EXISTING_VERSION", + * restoreOrder: { + * groupKindDependencies: [ + * { + * satisfying: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindA", + * }, + * requiring: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindB", + * }, + * }, + * { + * satisfying: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindB", + * }, + * requiring: { + * resourceGroup: "stable.example.com", + * resourceKind: "kindC", + * }, + * }, + * ], + * }, + * }, + * }); + * ``` + * ### Gkebackup Restoreplan Volume Res + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const primary = new gcp.container.Cluster("primary", { + * name: "volume-res-cluster", + * location: "us-central1", + * initialNodeCount: 1, + * workloadIdentityConfig: { + * workloadPool: "my-project-name.svc.id.goog", + * }, + * addonsConfig: { + * gkeBackupAgentConfig: { + * enabled: true, + * }, + * }, + * deletionProtection: "", + * network: "default", + * subnetwork: "default", + * }); + * const basic = new gcp.gkebackup.BackupPlan("basic", { + * name: "volume-res", + * cluster: primary.id, + * location: "us-central1", + * backupConfig: { + * includeVolumeData: true, + * includeSecrets: true, + * allNamespaces: true, + * }, + * }); + * const volumeRes = new gcp.gkebackup.RestorePlan("volume_res", { + * name: "volume-res", + * location: "us-central1", + * backupPlan: basic.id, + * cluster: primary.id, + * restoreConfig: { + * allNamespaces: true, + * namespacedResourceRestoreMode: "FAIL_ON_CONFLICT", + * volumeDataRestorePolicy: "NO_VOLUME_DATA_RESTORATION", + * clusterResourceRestoreScope: { + * allGroupKinds: true, + * }, + * clusterResourceConflictPolicy: "USE_EXISTING_VERSION", + * volumeDataRestorePolicyBindings: [{ + * policy: "RESTORE_VOLUME_DATA_FROM_BACKUP", + * volumeType: "GCE_PERSISTENT_DISK", + * }], + * }, + * }); + * ``` * * ## Import * diff --git a/sdk/nodejs/healthcare/dicomStore.ts b/sdk/nodejs/healthcare/dicomStore.ts index 206aa1d596..f0f4785f15 100644 --- a/sdk/nodejs/healthcare/dicomStore.ts +++ b/sdk/nodejs/healthcare/dicomStore.ts @@ -68,6 +68,7 @@ import * as utilities from "../utilities"; * dataset: dataset.id, * notificationConfig: { * pubsubTopic: topic.id, + * sendForBulkImport: true, * }, * labels: { * label1: "labelvalue1", diff --git a/sdk/nodejs/healthcare/fhirStore.ts b/sdk/nodejs/healthcare/fhirStore.ts index b4e5f7021e..ebdc3ee284 100644 --- a/sdk/nodejs/healthcare/fhirStore.ts +++ b/sdk/nodejs/healthcare/fhirStore.ts @@ -39,9 +39,9 @@ import * as utilities from "../utilities"; * disableResourceVersioning: false, * enableHistoryImport: false, * defaultSearchHandlingStrict: false, - * notificationConfig: { + * notificationConfigs: [{ * pubsubTopic: topic.id, - * }, + * }], * labels: { * label1: "labelvalue1", * }, @@ -91,33 +91,6 @@ import * as utilities from "../utilities"; * }); * const topic = new gcp.pubsub.Topic("topic", {name: "fhir-notifications"}); * ``` - * ### Healthcare Fhir Store Notification Config - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const topic = new gcp.pubsub.Topic("topic", {name: "fhir-notifications"}); - * const dataset = new gcp.healthcare.Dataset("dataset", { - * name: "example-dataset", - * location: "us-central1", - * }); - * const _default = new gcp.healthcare.FhirStore("default", { - * name: "example-fhir-store", - * dataset: dataset.id, - * version: "R4", - * enableUpdateCreate: false, - * disableReferentialIntegrity: false, - * disableResourceVersioning: false, - * enableHistoryImport: false, - * labels: { - * label1: "labelvalue1", - * }, - * notificationConfig: { - * pubsubTopic: topic.id, - * }, - * }); - * ``` * ### Healthcare Fhir Store Notification Configs * * ```typescript @@ -137,7 +110,6 @@ import * as utilities from "../utilities"; * disableReferentialIntegrity: false, * disableResourceVersioning: false, * enableHistoryImport: false, - * enableHistoryModifications: false, * labels: { * label1: "labelvalue1", * }, @@ -279,8 +251,13 @@ export class FhirStore extends pulumi.CustomResource { */ public readonly name!: pulumi.Output; /** + * (Optional, Deprecated) * A nested object resource * Structure is documented below. + * + * > **Warning:** `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. + * + * @deprecated `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. */ public readonly notificationConfig!: pulumi.Output; /** @@ -462,8 +439,13 @@ export interface FhirStoreState { */ name?: pulumi.Input; /** + * (Optional, Deprecated) * A nested object resource * Structure is documented below. + * + * > **Warning:** `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. + * + * @deprecated `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. */ notificationConfig?: pulumi.Input; /** @@ -582,8 +564,13 @@ export interface FhirStoreArgs { */ name?: pulumi.Input; /** + * (Optional, Deprecated) * A nested object resource * Structure is documented below. + * + * > **Warning:** `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. + * + * @deprecated `notificationConfig` is deprecated and will be removed in a future major release. Use `notificationConfigs` instead. */ notificationConfig?: pulumi.Input; /** diff --git a/sdk/nodejs/integrationconnectors/endpointAttachment.ts b/sdk/nodejs/integrationconnectors/endpointAttachment.ts index 9244585356..cf83b38328 100644 --- a/sdk/nodejs/integrationconnectors/endpointAttachment.ts +++ b/sdk/nodejs/integrationconnectors/endpointAttachment.ts @@ -96,6 +96,10 @@ export class EndpointAttachment extends pulumi.CustomResource { * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. */ public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Enable global access for endpoint attachment. + */ + public readonly endpointGlobalAccess!: pulumi.Output; /** * The Private Service Connect connection endpoint ip. */ @@ -153,6 +157,7 @@ export class EndpointAttachment extends pulumi.CustomResource { resourceInputs["createTime"] = state ? state.createTime : undefined; resourceInputs["description"] = state ? state.description : undefined; resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["endpointGlobalAccess"] = state ? state.endpointGlobalAccess : undefined; resourceInputs["endpointIp"] = state ? state.endpointIp : undefined; resourceInputs["labels"] = state ? state.labels : undefined; resourceInputs["location"] = state ? state.location : undefined; @@ -170,6 +175,7 @@ export class EndpointAttachment extends pulumi.CustomResource { throw new Error("Missing required property 'serviceAttachment'"); } resourceInputs["description"] = args ? args.description : undefined; + resourceInputs["endpointGlobalAccess"] = args ? args.endpointGlobalAccess : undefined; resourceInputs["labels"] = args ? args.labels : undefined; resourceInputs["location"] = args ? args.location : undefined; resourceInputs["name"] = args ? args.name : undefined; @@ -204,6 +210,10 @@ export interface EndpointAttachmentState { * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. */ effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Enable global access for endpoint attachment. + */ + endpointGlobalAccess?: pulumi.Input; /** * The Private Service Connect connection endpoint ip. */ @@ -254,6 +264,10 @@ export interface EndpointAttachmentArgs { * Description of the resource. */ description?: pulumi.Input; + /** + * Enable global access for endpoint attachment. + */ + endpointGlobalAccess?: pulumi.Input; /** * Resource labels to represent user provided metadata. * diff --git a/sdk/nodejs/kms/cryptoKey.ts b/sdk/nodejs/kms/cryptoKey.ts index 5a1c2d810e..60f2f11d95 100644 --- a/sdk/nodejs/kms/cryptoKey.ts +++ b/sdk/nodejs/kms/cryptoKey.ts @@ -172,7 +172,8 @@ export class CryptoKey extends pulumi.CustomResource { public readonly rotationPeriod!: pulumi.Output; /** * If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - * You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + * You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + * or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. */ public readonly skipInitialVersionCreation!: pulumi.Output; /** @@ -301,7 +302,8 @@ export interface CryptoKeyState { rotationPeriod?: pulumi.Input; /** * If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - * You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + * You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + * or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. */ skipInitialVersionCreation?: pulumi.Input; /** @@ -364,7 +366,8 @@ export interface CryptoKeyArgs { rotationPeriod?: pulumi.Input; /** * If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - * You must use the `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + * You must use the `gcp.kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + * or `gcp.kms.KeyRingImportJob` resource to import the CryptoKeyVersion. */ skipInitialVersionCreation?: pulumi.Input; /** diff --git a/sdk/nodejs/netapp/volume.ts b/sdk/nodejs/netapp/volume.ts index 72769b91ea..fa24027bd2 100644 --- a/sdk/nodejs/netapp/volume.ts +++ b/sdk/nodejs/netapp/volume.ts @@ -105,6 +105,11 @@ export class Volume extends pulumi.CustomResource { * Reports the resource name of the Active Directory policy being used. Inherited from storage pool. */ public /*out*/ readonly activeDirectory!: pulumi.Output; + /** + * Backup configuration for the volume. + * Structure is documented below. + */ + public readonly backupConfig!: pulumi.Output; /** * Capacity of the volume (in GiB). */ @@ -272,6 +277,7 @@ export class Volume extends pulumi.CustomResource { if (opts.id) { const state = argsOrState as VolumeState | undefined; resourceInputs["activeDirectory"] = state ? state.activeDirectory : undefined; + resourceInputs["backupConfig"] = state ? state.backupConfig : undefined; resourceInputs["capacityGib"] = state ? state.capacityGib : undefined; resourceInputs["createTime"] = state ? state.createTime : undefined; resourceInputs["deletionPolicy"] = state ? state.deletionPolicy : undefined; @@ -322,6 +328,7 @@ export class Volume extends pulumi.CustomResource { if ((!args || args.storagePool === undefined) && !opts.urn) { throw new Error("Missing required property 'storagePool'"); } + resourceInputs["backupConfig"] = args ? args.backupConfig : undefined; resourceInputs["capacityGib"] = args ? args.capacityGib : undefined; resourceInputs["deletionPolicy"] = args ? args.deletionPolicy : undefined; resourceInputs["description"] = args ? args.description : undefined; @@ -372,6 +379,11 @@ export interface VolumeState { * Reports the resource name of the Active Directory policy being used. Inherited from storage pool. */ activeDirectory?: pulumi.Input; + /** + * Backup configuration for the volume. + * Structure is documented below. + */ + backupConfig?: pulumi.Input; /** * Capacity of the volume (in GiB). */ @@ -530,6 +542,11 @@ export interface VolumeState { * The set of arguments for constructing a Volume resource. */ export interface VolumeArgs { + /** + * Backup configuration for the volume. + * Structure is documented below. + */ + backupConfig?: pulumi.Input; /** * Capacity of the volume (in GiB). */ diff --git a/sdk/nodejs/networkservices/index.ts b/sdk/nodejs/networkservices/index.ts index 9c7d673708..75e5772746 100644 --- a/sdk/nodejs/networkservices/index.ts +++ b/sdk/nodejs/networkservices/index.ts @@ -60,6 +60,11 @@ export type ServiceBinding = import("./serviceBinding").ServiceBinding; export const ServiceBinding: typeof import("./serviceBinding").ServiceBinding = null as any; utilities.lazyLoad(exports, ["ServiceBinding"], () => require("./serviceBinding")); +export { ServiceLbPoliciesArgs, ServiceLbPoliciesState } from "./serviceLbPolicies"; +export type ServiceLbPolicies = import("./serviceLbPolicies").ServiceLbPolicies; +export const ServiceLbPolicies: typeof import("./serviceLbPolicies").ServiceLbPolicies = null as any; +utilities.lazyLoad(exports, ["ServiceLbPolicies"], () => require("./serviceLbPolicies")); + export { TcpRouteArgs, TcpRouteState } from "./tcpRoute"; export type TcpRoute = import("./tcpRoute").TcpRoute; export const TcpRoute: typeof import("./tcpRoute").TcpRoute = null as any; @@ -97,6 +102,8 @@ const _module = { return new Mesh(name, undefined, { urn }) case "gcp:networkservices/serviceBinding:ServiceBinding": return new ServiceBinding(name, undefined, { urn }) + case "gcp:networkservices/serviceLbPolicies:ServiceLbPolicies": + return new ServiceLbPolicies(name, undefined, { urn }) case "gcp:networkservices/tcpRoute:TcpRoute": return new TcpRoute(name, undefined, { urn }) case "gcp:networkservices/tlsRoute:TlsRoute": @@ -117,5 +124,6 @@ pulumi.runtime.registerResourceModule("gcp", "networkservices/lbRouteExtension", pulumi.runtime.registerResourceModule("gcp", "networkservices/lbTrafficExtension", _module) pulumi.runtime.registerResourceModule("gcp", "networkservices/mesh", _module) pulumi.runtime.registerResourceModule("gcp", "networkservices/serviceBinding", _module) +pulumi.runtime.registerResourceModule("gcp", "networkservices/serviceLbPolicies", _module) pulumi.runtime.registerResourceModule("gcp", "networkservices/tcpRoute", _module) pulumi.runtime.registerResourceModule("gcp", "networkservices/tlsRoute", _module) diff --git a/sdk/nodejs/networkservices/serviceLbPolicies.ts b/sdk/nodejs/networkservices/serviceLbPolicies.ts new file mode 100644 index 0000000000..8ac84e1ff7 --- /dev/null +++ b/sdk/nodejs/networkservices/serviceLbPolicies.ts @@ -0,0 +1,323 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ### Network Services Service Lb Policies Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const _default = new gcp.networkservices.ServiceLbPolicies("default", { + * name: "my-lb-policy", + * location: "global", + * }); + * ``` + * ### Network Services Service Lb Policies Advanced + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const _default = new gcp.networkservices.ServiceLbPolicies("default", { + * name: "my-lb-policy", + * location: "global", + * description: "my description", + * loadBalancingAlgorithm: "SPRAY_TO_REGION", + * autoCapacityDrain: { + * enable: true, + * }, + * failoverConfig: { + * failoverHealthThreshold: 70, + * }, + * labels: { + * foo: "bar", + * }, + * }); + * const defaultBackendService = new gcp.compute.BackendService("default", { + * name: "my-lb-backend", + * description: "my description", + * loadBalancingScheme: "INTERNAL_SELF_MANAGED", + * protocol: "HTTP", + * serviceLbPolicy: pulumi.interpolate`//networkservices.googleapis.com/${_default.id}`, + * }); + * ``` + * + * ## Import + * + * ServiceLbPolicies can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}}` + * + * * `{{project}}/{{location}}/{{name}}` + * + * * `{{location}}/{{name}}` + * + * When using the `pulumi import` command, ServiceLbPolicies can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{project}}/{{location}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{location}}/{{name}} + * ``` + */ +export class ServiceLbPolicies extends pulumi.CustomResource { + /** + * Get an existing ServiceLbPolicies 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?: ServiceLbPoliciesState, opts?: pulumi.CustomResourceOptions): ServiceLbPolicies { + return new ServiceLbPolicies(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:networkservices/serviceLbPolicies:ServiceLbPolicies'; + + /** + * Returns true if the given object is an instance of ServiceLbPolicies. 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 ServiceLbPolicies { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === ServiceLbPolicies.__pulumiType; + } + + /** + * Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + * Structure is documented below. + */ + public readonly autoCapacityDrain!: pulumi.Output; + /** + * Time the ServiceLbPolicy was created in UTC. + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * A free-text description of the resource. Max length 1024 characters. + */ + public readonly description!: pulumi.Output; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + * Structure is documented below. + */ + public readonly failoverConfig!: pulumi.Output; + /** + * Set of label tags associated with the ServiceLbPolicy resource. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + * Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + */ + public readonly loadBalancingAlgorithm!: pulumi.Output; + /** + * The location of the service lb policy. + * + * + * - - - + */ + public readonly location!: pulumi.Output; + /** + * Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + */ + public readonly name!: pulumi.Output; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + public readonly project!: pulumi.Output; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + public /*out*/ readonly pulumiLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Time the ServiceLbPolicy was updated in UTC. + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a ServiceLbPolicies 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: ServiceLbPoliciesArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ServiceLbPoliciesArgs | ServiceLbPoliciesState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ServiceLbPoliciesState | undefined; + resourceInputs["autoCapacityDrain"] = state ? state.autoCapacityDrain : undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["description"] = state ? state.description : undefined; + resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["failoverConfig"] = state ? state.failoverConfig : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; + resourceInputs["loadBalancingAlgorithm"] = state ? state.loadBalancingAlgorithm : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as ServiceLbPoliciesArgs | undefined; + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + resourceInputs["autoCapacityDrain"] = args ? args.autoCapacityDrain : undefined; + resourceInputs["description"] = args ? args.description : undefined; + resourceInputs["failoverConfig"] = args ? args.failoverConfig : undefined; + resourceInputs["labels"] = args ? args.labels : undefined; + resourceInputs["loadBalancingAlgorithm"] = args ? args.loadBalancingAlgorithm : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["effectiveLabels"] = undefined /*out*/; + resourceInputs["pulumiLabels"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["effectiveLabels", "pulumiLabels"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(ServiceLbPolicies.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering ServiceLbPolicies resources. + */ +export interface ServiceLbPoliciesState { + /** + * Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + * Structure is documented below. + */ + autoCapacityDrain?: pulumi.Input; + /** + * Time the ServiceLbPolicy was created in UTC. + */ + createTime?: pulumi.Input; + /** + * A free-text description of the resource. Max length 1024 characters. + */ + description?: pulumi.Input; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + * Structure is documented below. + */ + failoverConfig?: pulumi.Input; + /** + * Set of label tags associated with the ServiceLbPolicy resource. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + * Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + */ + loadBalancingAlgorithm?: pulumi.Input; + /** + * The location of the service lb policy. + * + * + * - - - + */ + location?: pulumi.Input; + /** + * Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + */ + name?: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + pulumiLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Time the ServiceLbPolicy was updated in UTC. + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a ServiceLbPolicies resource. + */ +export interface ServiceLbPoliciesArgs { + /** + * Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + * Structure is documented below. + */ + autoCapacityDrain?: pulumi.Input; + /** + * A free-text description of the resource. Max length 1024 characters. + */ + description?: pulumi.Input; + /** + * Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + * Structure is documented below. + */ + failoverConfig?: pulumi.Input; + /** + * Set of label tags associated with the ServiceLbPolicy resource. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + * Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + */ + loadBalancingAlgorithm?: pulumi.Input; + /** + * The location of the service lb policy. + * + * + * - - - + */ + location: pulumi.Input; + /** + * Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + */ + name?: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; +} diff --git a/sdk/nodejs/provider.ts b/sdk/nodejs/provider.ts index e8940761bd..378e6b839e 100644 --- a/sdk/nodejs/provider.ts +++ b/sdk/nodejs/provider.ts @@ -164,6 +164,7 @@ export class Provider extends pulumi.ProviderResource { public readonly secretManagerCustomEndpoint!: pulumi.Output; public readonly secureSourceManagerCustomEndpoint!: pulumi.Output; public readonly securityCenterCustomEndpoint!: pulumi.Output; + public readonly securityCenterManagementCustomEndpoint!: pulumi.Output; public readonly securityScannerCustomEndpoint!: pulumi.Output; public readonly securitypostureCustomEndpoint!: pulumi.Output; public readonly serviceDirectoryCustomEndpoint!: pulumi.Output; @@ -344,6 +345,7 @@ export class Provider extends pulumi.ProviderResource { resourceInputs["secretManagerCustomEndpoint"] = args ? args.secretManagerCustomEndpoint : undefined; resourceInputs["secureSourceManagerCustomEndpoint"] = args ? args.secureSourceManagerCustomEndpoint : undefined; resourceInputs["securityCenterCustomEndpoint"] = args ? args.securityCenterCustomEndpoint : undefined; + resourceInputs["securityCenterManagementCustomEndpoint"] = args ? args.securityCenterManagementCustomEndpoint : undefined; resourceInputs["securityScannerCustomEndpoint"] = args ? args.securityScannerCustomEndpoint : undefined; resourceInputs["securitypostureCustomEndpoint"] = args ? args.securitypostureCustomEndpoint : undefined; resourceInputs["serviceDirectoryCustomEndpoint"] = args ? args.serviceDirectoryCustomEndpoint : undefined; @@ -525,6 +527,7 @@ export interface ProviderArgs { secretManagerCustomEndpoint?: pulumi.Input; secureSourceManagerCustomEndpoint?: pulumi.Input; securityCenterCustomEndpoint?: pulumi.Input; + securityCenterManagementCustomEndpoint?: pulumi.Input; securityScannerCustomEndpoint?: pulumi.Input; securitypostureCustomEndpoint?: pulumi.Input; serviceDirectoryCustomEndpoint?: pulumi.Input; diff --git a/sdk/nodejs/redis/cluster.ts b/sdk/nodejs/redis/cluster.ts index 899b9787ea..5dc6034594 100644 --- a/sdk/nodejs/redis/cluster.ts +++ b/sdk/nodejs/redis/cluster.ts @@ -57,6 +57,50 @@ import * as utilities from "../utilities"; * redisConfigs: { * "maxmemory-policy": "volatile-ttl", * }, + * zoneDistributionConfig: { + * mode: "MULTI_ZONE", + * }, + * }, { + * dependsOn: [_default], + * }); + * ``` + * ### Redis Cluster Ha Single Zone + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const producerNet = new gcp.compute.Network("producer_net", { + * name: "mynetwork", + * autoCreateSubnetworks: false, + * }); + * const producerSubnet = new gcp.compute.Subnetwork("producer_subnet", { + * name: "mysubnet", + * ipCidrRange: "10.0.0.248/29", + * region: "us-central1", + * network: producerNet.id, + * }); + * const _default = new gcp.networkconnectivity.ServiceConnectionPolicy("default", { + * name: "mypolicy", + * location: "us-central1", + * serviceClass: "gcp-memorystore-redis", + * description: "my basic service connection policy", + * network: producerNet.id, + * pscConfig: { + * subnetworks: [producerSubnet.id], + * }, + * }); + * const cluster_ha_single_zone = new gcp.redis.Cluster("cluster-ha-single-zone", { + * name: "ha-cluster-single-zone", + * shardCount: 3, + * pscConfigs: [{ + * network: producerNet.id, + * }], + * region: "us-central1", + * zoneDistributionConfig: { + * mode: "SINGLE_ZONE", + * zone: "us-central1-f", + * }, * }, { * dependsOn: [_default], * }); @@ -207,6 +251,10 @@ export class Cluster extends pulumi.CustomResource { * System assigned, unique identifier for the cluster. */ public /*out*/ readonly uid!: pulumi.Output; + /** + * Immutable. Zone distribution config for Memorystore Redis cluster. + */ + public readonly zoneDistributionConfig!: pulumi.Output; /** * Create a Cluster resource with the given unique name, arguments, and options. @@ -239,6 +287,7 @@ export class Cluster extends pulumi.CustomResource { resourceInputs["stateInfos"] = state ? state.stateInfos : undefined; resourceInputs["transitEncryptionMode"] = state ? state.transitEncryptionMode : undefined; resourceInputs["uid"] = state ? state.uid : undefined; + resourceInputs["zoneDistributionConfig"] = state ? state.zoneDistributionConfig : undefined; } else { const args = argsOrState as ClusterArgs | undefined; if ((!args || args.pscConfigs === undefined) && !opts.urn) { @@ -257,6 +306,7 @@ export class Cluster extends pulumi.CustomResource { resourceInputs["replicaCount"] = args ? args.replicaCount : undefined; resourceInputs["shardCount"] = args ? args.shardCount : undefined; resourceInputs["transitEncryptionMode"] = args ? args.transitEncryptionMode : undefined; + resourceInputs["zoneDistributionConfig"] = args ? args.zoneDistributionConfig : undefined; resourceInputs["createTime"] = undefined /*out*/; resourceInputs["discoveryEndpoints"] = undefined /*out*/; resourceInputs["preciseSizeGb"] = undefined /*out*/; @@ -362,6 +412,10 @@ export interface ClusterState { * System assigned, unique identifier for the cluster. */ uid?: pulumi.Input; + /** + * Immutable. Zone distribution config for Memorystore Redis cluster. + */ + zoneDistributionConfig?: pulumi.Input; } /** @@ -416,4 +470,8 @@ export interface ClusterArgs { * "TRANSIT_ENCRYPTION_MODE_DISABLED", "TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION"] */ transitEncryptionMode?: pulumi.Input; + /** + * Immutable. Zone distribution config for Memorystore Redis cluster. + */ + zoneDistributionConfig?: pulumi.Input; } diff --git a/sdk/nodejs/secretmanager/secretIamBinding.ts b/sdk/nodejs/secretmanager/secretIamBinding.ts index 5a326c16eb..eedbdcbaa0 100644 --- a/sdk/nodejs/secretmanager/secretIamBinding.ts +++ b/sdk/nodejs/secretmanager/secretIamBinding.ts @@ -21,6 +21,8 @@ import * as utilities from "../utilities"; * * > **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. * + * > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. + * * ## gcp.secretmanager.SecretIamPolicy * * ```typescript @@ -40,6 +42,29 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const admin = gcp.organizations.getIAMPolicy({ + * bindings: [{ + * role: "roles/secretmanager.secretAccessor", + * 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.secretmanager.SecretIamPolicy("policy", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * policyData: admin.then(admin => admin.policyData), + * }); + * ``` * ## gcp.secretmanager.SecretIamBinding * * ```typescript @@ -54,6 +79,24 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const binding = new gcp.secretmanager.SecretIamBinding("binding", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * role: "roles/secretmanager.secretAccessor", + * 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\")", + * }, + * }); + * ``` * ## gcp.secretmanager.SecretIamMember * * ```typescript @@ -68,6 +111,25 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const member = new gcp.secretmanager.SecretIamMember("member", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * role: "roles/secretmanager.secretAccessor", + * 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\")", + * }, + * }); + * ``` + * * ## gcp.secretmanager.SecretIamPolicy * * ```typescript @@ -87,6 +149,29 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const admin = gcp.organizations.getIAMPolicy({ + * bindings: [{ + * role: "roles/secretmanager.secretAccessor", + * 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.secretmanager.SecretIamPolicy("policy", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * policyData: admin.then(admin => admin.policyData), + * }); + * ``` * ## gcp.secretmanager.SecretIamBinding * * ```typescript @@ -101,6 +186,24 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const binding = new gcp.secretmanager.SecretIamBinding("binding", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * role: "roles/secretmanager.secretAccessor", + * 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\")", + * }, + * }); + * ``` * ## gcp.secretmanager.SecretIamMember * * ```typescript @@ -115,6 +218,25 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const member = new gcp.secretmanager.SecretIamMember("member", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * role: "roles/secretmanager.secretAccessor", + * 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 * * For all import syntaxes, the "resource in question" can take any of the following forms: @@ -179,6 +301,10 @@ export class SecretIamBinding extends pulumi.CustomResource { return obj['__pulumiType'] === SecretIamBinding.__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 IAM policy. @@ -257,6 +383,10 @@ export class SecretIamBinding extends pulumi.CustomResource { * Input properties used for looking up and filtering SecretIamBinding resources. */ export interface SecretIamBindingState { + /** + * 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 IAM policy. @@ -294,6 +424,10 @@ export interface SecretIamBindingState { * The set of arguments for constructing a SecretIamBinding resource. */ export interface SecretIamBindingArgs { + /** + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + */ condition?: pulumi.Input; /** * Identities that will be granted the privilege in `role`. diff --git a/sdk/nodejs/secretmanager/secretIamMember.ts b/sdk/nodejs/secretmanager/secretIamMember.ts index ff41baad20..d2f1247b7c 100644 --- a/sdk/nodejs/secretmanager/secretIamMember.ts +++ b/sdk/nodejs/secretmanager/secretIamMember.ts @@ -21,6 +21,8 @@ import * as utilities from "../utilities"; * * > **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. * + * > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. + * * ## gcp.secretmanager.SecretIamPolicy * * ```typescript @@ -40,6 +42,29 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const admin = gcp.organizations.getIAMPolicy({ + * bindings: [{ + * role: "roles/secretmanager.secretAccessor", + * 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.secretmanager.SecretIamPolicy("policy", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * policyData: admin.then(admin => admin.policyData), + * }); + * ``` * ## gcp.secretmanager.SecretIamBinding * * ```typescript @@ -54,6 +79,24 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const binding = new gcp.secretmanager.SecretIamBinding("binding", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * role: "roles/secretmanager.secretAccessor", + * 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\")", + * }, + * }); + * ``` * ## gcp.secretmanager.SecretIamMember * * ```typescript @@ -68,6 +111,25 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const member = new gcp.secretmanager.SecretIamMember("member", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * role: "roles/secretmanager.secretAccessor", + * 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\")", + * }, + * }); + * ``` + * * ## gcp.secretmanager.SecretIamPolicy * * ```typescript @@ -87,6 +149,29 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const admin = gcp.organizations.getIAMPolicy({ + * bindings: [{ + * role: "roles/secretmanager.secretAccessor", + * 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.secretmanager.SecretIamPolicy("policy", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * policyData: admin.then(admin => admin.policyData), + * }); + * ``` * ## gcp.secretmanager.SecretIamBinding * * ```typescript @@ -101,6 +186,24 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const binding = new gcp.secretmanager.SecretIamBinding("binding", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * role: "roles/secretmanager.secretAccessor", + * 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\")", + * }, + * }); + * ``` * ## gcp.secretmanager.SecretIamMember * * ```typescript @@ -115,6 +218,25 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const member = new gcp.secretmanager.SecretIamMember("member", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * role: "roles/secretmanager.secretAccessor", + * 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 * * For all import syntaxes, the "resource in question" can take any of the following forms: @@ -179,6 +301,10 @@ export class SecretIamMember extends pulumi.CustomResource { return obj['__pulumiType'] === SecretIamMember.__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 IAM policy. @@ -257,6 +383,10 @@ export class SecretIamMember extends pulumi.CustomResource { * Input properties used for looking up and filtering SecretIamMember resources. */ export interface SecretIamMemberState { + /** + * 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 IAM policy. @@ -294,6 +424,10 @@ export interface SecretIamMemberState { * The set of arguments for constructing a SecretIamMember resource. */ export interface SecretIamMemberArgs { + /** + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + */ condition?: pulumi.Input; /** * Identities that will be granted the privilege in `role`. diff --git a/sdk/nodejs/secretmanager/secretIamPolicy.ts b/sdk/nodejs/secretmanager/secretIamPolicy.ts index 1a3e94ccff..feb6da264f 100644 --- a/sdk/nodejs/secretmanager/secretIamPolicy.ts +++ b/sdk/nodejs/secretmanager/secretIamPolicy.ts @@ -19,6 +19,8 @@ import * as utilities from "../utilities"; * * > **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. * + * > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. + * * ## gcp.secretmanager.SecretIamPolicy * * ```typescript @@ -38,6 +40,29 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const admin = gcp.organizations.getIAMPolicy({ + * bindings: [{ + * role: "roles/secretmanager.secretAccessor", + * 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.secretmanager.SecretIamPolicy("policy", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * policyData: admin.then(admin => admin.policyData), + * }); + * ``` * ## gcp.secretmanager.SecretIamBinding * * ```typescript @@ -52,6 +77,24 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const binding = new gcp.secretmanager.SecretIamBinding("binding", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * role: "roles/secretmanager.secretAccessor", + * 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\")", + * }, + * }); + * ``` * ## gcp.secretmanager.SecretIamMember * * ```typescript @@ -66,6 +109,25 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const member = new gcp.secretmanager.SecretIamMember("member", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * role: "roles/secretmanager.secretAccessor", + * 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\")", + * }, + * }); + * ``` + * * ## gcp.secretmanager.SecretIamPolicy * * ```typescript @@ -85,6 +147,29 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const admin = gcp.organizations.getIAMPolicy({ + * bindings: [{ + * role: "roles/secretmanager.secretAccessor", + * 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.secretmanager.SecretIamPolicy("policy", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * policyData: admin.then(admin => admin.policyData), + * }); + * ``` * ## gcp.secretmanager.SecretIamBinding * * ```typescript @@ -99,6 +184,24 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const binding = new gcp.secretmanager.SecretIamBinding("binding", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * role: "roles/secretmanager.secretAccessor", + * 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\")", + * }, + * }); + * ``` * ## gcp.secretmanager.SecretIamMember * * ```typescript @@ -113,6 +216,25 @@ import * as utilities from "../utilities"; * }); * ``` * + * With IAM Conditions: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const member = new gcp.secretmanager.SecretIamMember("member", { + * project: secret_basic.project, + * secretId: secret_basic.secretId, + * role: "roles/secretmanager.secretAccessor", + * 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 * * For all import syntaxes, the "resource in question" can take any of the following forms: diff --git a/sdk/nodejs/securitycenter/index.ts b/sdk/nodejs/securitycenter/index.ts index 6260e7de00..96244b109f 100644 --- a/sdk/nodejs/securitycenter/index.ts +++ b/sdk/nodejs/securitycenter/index.ts @@ -35,6 +35,11 @@ export type InstanceIamPolicy = import("./instanceIamPolicy").InstanceIamPolicy; export const InstanceIamPolicy: typeof import("./instanceIamPolicy").InstanceIamPolicy = null as any; utilities.lazyLoad(exports, ["InstanceIamPolicy"], () => require("./instanceIamPolicy")); +export { ManagementOrganizationEventThreatDetectionCustomModuleArgs, ManagementOrganizationEventThreatDetectionCustomModuleState } from "./managementOrganizationEventThreatDetectionCustomModule"; +export type ManagementOrganizationEventThreatDetectionCustomModule = import("./managementOrganizationEventThreatDetectionCustomModule").ManagementOrganizationEventThreatDetectionCustomModule; +export const ManagementOrganizationEventThreatDetectionCustomModule: typeof import("./managementOrganizationEventThreatDetectionCustomModule").ManagementOrganizationEventThreatDetectionCustomModule = null as any; +utilities.lazyLoad(exports, ["ManagementOrganizationEventThreatDetectionCustomModule"], () => require("./managementOrganizationEventThreatDetectionCustomModule")); + export { MuteConfigArgs, MuteConfigState } from "./muteConfig"; export type MuteConfig = import("./muteConfig").MuteConfig; export const MuteConfig: typeof import("./muteConfig").MuteConfig = null as any; @@ -90,6 +95,8 @@ const _module = { return new InstanceIamMember(name, undefined, { urn }) case "gcp:securitycenter/instanceIamPolicy:InstanceIamPolicy": return new InstanceIamPolicy(name, undefined, { urn }) + case "gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule": + return new ManagementOrganizationEventThreatDetectionCustomModule(name, undefined, { urn }) case "gcp:securitycenter/muteConfig:MuteConfig": return new MuteConfig(name, undefined, { urn }) case "gcp:securitycenter/notificationConfig:NotificationConfig": @@ -116,6 +123,7 @@ pulumi.runtime.registerResourceModule("gcp", "securitycenter/folderCustomModule" pulumi.runtime.registerResourceModule("gcp", "securitycenter/instanceIamBinding", _module) pulumi.runtime.registerResourceModule("gcp", "securitycenter/instanceIamMember", _module) pulumi.runtime.registerResourceModule("gcp", "securitycenter/instanceIamPolicy", _module) +pulumi.runtime.registerResourceModule("gcp", "securitycenter/managementOrganizationEventThreatDetectionCustomModule", _module) pulumi.runtime.registerResourceModule("gcp", "securitycenter/muteConfig", _module) pulumi.runtime.registerResourceModule("gcp", "securitycenter/notificationConfig", _module) pulumi.runtime.registerResourceModule("gcp", "securitycenter/organizationCustomModule", _module) diff --git a/sdk/nodejs/securitycenter/managementOrganizationEventThreatDetectionCustomModule.ts b/sdk/nodejs/securitycenter/managementOrganizationEventThreatDetectionCustomModule.ts new file mode 100644 index 0000000000..85576e12a9 --- /dev/null +++ b/sdk/nodejs/securitycenter/managementOrganizationEventThreatDetectionCustomModule.ts @@ -0,0 +1,236 @@ +// *** WARNING: this file 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"; + +/** + * Represents an instance of an Event Threat Detection custom module, including + * its full module name, display name, enablement state, and last updated time. + * You can create a custom module at the organization level only. + * + * To get more information about OrganizationEventThreatDetectionCustomModule, see: + * + * * [API documentation](https://cloud.google.com/security-command-center/docs/reference/security-center-management/rest/v1/organizations.locations.eventThreatDetectionCustomModules) + * * How-to Guides + * * [Overview of custom modules for Event Threat Detection](https://cloud.google.com/security-command-center/docs/custom-modules-etd-overview) + * + * ## Example Usage + * + * ## Import + * + * OrganizationEventThreatDetectionCustomModule can be imported using any of these accepted formats: + * + * * `organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}}` + * + * * `{{organization}}/{{location}}/{{name}}` + * + * When using the `pulumi import` command, OrganizationEventThreatDetectionCustomModule can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default {{organization}}/{{location}}/{{name}} + * ``` + */ +export class ManagementOrganizationEventThreatDetectionCustomModule extends pulumi.CustomResource { + /** + * Get an existing ManagementOrganizationEventThreatDetectionCustomModule 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?: ManagementOrganizationEventThreatDetectionCustomModuleState, opts?: pulumi.CustomResourceOptions): ManagementOrganizationEventThreatDetectionCustomModule { + return new ManagementOrganizationEventThreatDetectionCustomModule(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule'; + + /** + * Returns true if the given object is an instance of ManagementOrganizationEventThreatDetectionCustomModule. 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 ManagementOrganizationEventThreatDetectionCustomModule { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === ManagementOrganizationEventThreatDetectionCustomModule.__pulumiType; + } + + /** + * Config for the module. For the resident module, its config value is defined at this level. + * For the inherited module, its config value is inherited from the ancestor module. + */ + public readonly config!: pulumi.Output; + /** + * The human readable name to be displayed for the module. + */ + public readonly displayName!: pulumi.Output; + /** + * The state of enablement for the module at the given level of the hierarchy. + * Possible values are: `ENABLED`, `DISABLED`. + */ + public readonly enablementState!: pulumi.Output; + /** + * The editor that last updated the custom module + */ + public /*out*/ readonly lastEditor!: pulumi.Output; + /** + * Location ID of the parent organization. Only global is supported at the moment. + */ + public readonly location!: pulumi.Output; + /** + * The resource name of the Event Threat Detection custom module. + * Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * Numerical ID of the parent organization. + * + * + * - - - + */ + public readonly organization!: pulumi.Output; + /** + * Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + */ + public readonly type!: pulumi.Output; + /** + * The time at which the custom module was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + * up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a ManagementOrganizationEventThreatDetectionCustomModule 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: ManagementOrganizationEventThreatDetectionCustomModuleArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ManagementOrganizationEventThreatDetectionCustomModuleArgs | ManagementOrganizationEventThreatDetectionCustomModuleState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ManagementOrganizationEventThreatDetectionCustomModuleState | undefined; + resourceInputs["config"] = state ? state.config : undefined; + resourceInputs["displayName"] = state ? state.displayName : undefined; + resourceInputs["enablementState"] = state ? state.enablementState : undefined; + resourceInputs["lastEditor"] = state ? state.lastEditor : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["organization"] = state ? state.organization : undefined; + resourceInputs["type"] = state ? state.type : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as ManagementOrganizationEventThreatDetectionCustomModuleArgs | undefined; + if ((!args || args.organization === undefined) && !opts.urn) { + throw new Error("Missing required property 'organization'"); + } + resourceInputs["config"] = args ? args.config : undefined; + resourceInputs["displayName"] = args ? args.displayName : undefined; + resourceInputs["enablementState"] = args ? args.enablementState : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["organization"] = args ? args.organization : undefined; + resourceInputs["type"] = args ? args.type : undefined; + resourceInputs["lastEditor"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(ManagementOrganizationEventThreatDetectionCustomModule.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering ManagementOrganizationEventThreatDetectionCustomModule resources. + */ +export interface ManagementOrganizationEventThreatDetectionCustomModuleState { + /** + * Config for the module. For the resident module, its config value is defined at this level. + * For the inherited module, its config value is inherited from the ancestor module. + */ + config?: pulumi.Input; + /** + * The human readable name to be displayed for the module. + */ + displayName?: pulumi.Input; + /** + * The state of enablement for the module at the given level of the hierarchy. + * Possible values are: `ENABLED`, `DISABLED`. + */ + enablementState?: pulumi.Input; + /** + * The editor that last updated the custom module + */ + lastEditor?: pulumi.Input; + /** + * Location ID of the parent organization. Only global is supported at the moment. + */ + location?: pulumi.Input; + /** + * The resource name of the Event Threat Detection custom module. + * Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + */ + name?: pulumi.Input; + /** + * Numerical ID of the parent organization. + * + * + * - - - + */ + organization?: pulumi.Input; + /** + * Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + */ + type?: pulumi.Input; + /** + * The time at which the custom module was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + * up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a ManagementOrganizationEventThreatDetectionCustomModule resource. + */ +export interface ManagementOrganizationEventThreatDetectionCustomModuleArgs { + /** + * Config for the module. For the resident module, its config value is defined at this level. + * For the inherited module, its config value is inherited from the ancestor module. + */ + config?: pulumi.Input; + /** + * The human readable name to be displayed for the module. + */ + displayName?: pulumi.Input; + /** + * The state of enablement for the module at the given level of the hierarchy. + * Possible values are: `ENABLED`, `DISABLED`. + */ + enablementState?: pulumi.Input; + /** + * Location ID of the parent organization. Only global is supported at the moment. + */ + location?: pulumi.Input; + /** + * Numerical ID of the parent organization. + * + * + * - - - + */ + organization: pulumi.Input; + /** + * Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + */ + type?: pulumi.Input; +} diff --git a/sdk/nodejs/spanner/index.ts b/sdk/nodejs/spanner/index.ts index 9ea83acbe6..f7c113c68b 100644 --- a/sdk/nodejs/spanner/index.ts +++ b/sdk/nodejs/spanner/index.ts @@ -45,6 +45,11 @@ export type Instance = import("./instance").Instance; export const Instance: typeof import("./instance").Instance = null as any; utilities.lazyLoad(exports, ["Instance"], () => require("./instance")); +export { InstanceConfigArgs, InstanceConfigState } from "./instanceConfig"; +export type InstanceConfig = import("./instanceConfig").InstanceConfig; +export const InstanceConfig: typeof import("./instanceConfig").InstanceConfig = null as any; +utilities.lazyLoad(exports, ["InstanceConfig"], () => require("./instanceConfig")); + export { InstanceIAMBindingArgs, InstanceIAMBindingState } from "./instanceIAMBinding"; export type InstanceIAMBinding = import("./instanceIAMBinding").InstanceIAMBinding; export const InstanceIAMBinding: typeof import("./instanceIAMBinding").InstanceIAMBinding = null as any; @@ -75,6 +80,8 @@ const _module = { return new DatabaseIAMPolicy(name, undefined, { urn }) case "gcp:spanner/instance:Instance": return new Instance(name, undefined, { urn }) + case "gcp:spanner/instanceConfig:InstanceConfig": + return new InstanceConfig(name, undefined, { urn }) case "gcp:spanner/instanceIAMBinding:InstanceIAMBinding": return new InstanceIAMBinding(name, undefined, { urn }) case "gcp:spanner/instanceIAMMember:InstanceIAMMember": @@ -91,6 +98,7 @@ pulumi.runtime.registerResourceModule("gcp", "spanner/databaseIAMBinding", _modu pulumi.runtime.registerResourceModule("gcp", "spanner/databaseIAMMember", _module) pulumi.runtime.registerResourceModule("gcp", "spanner/databaseIAMPolicy", _module) pulumi.runtime.registerResourceModule("gcp", "spanner/instance", _module) +pulumi.runtime.registerResourceModule("gcp", "spanner/instanceConfig", _module) pulumi.runtime.registerResourceModule("gcp", "spanner/instanceIAMBinding", _module) pulumi.runtime.registerResourceModule("gcp", "spanner/instanceIAMMember", _module) pulumi.runtime.registerResourceModule("gcp", "spanner/instanceIAMPolicy", _module) diff --git a/sdk/nodejs/spanner/instanceConfig.ts b/sdk/nodejs/spanner/instanceConfig.ts new file mode 100644 index 0000000000..d5b1b7f2b4 --- /dev/null +++ b/sdk/nodejs/spanner/instanceConfig.ts @@ -0,0 +1,238 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * A possible configuration for a Cloud Spanner instance. Configurations + * define the geographic placement of nodes and their replication. + * + * To get more information about InstanceConfig, see: + * + * * [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instanceConfigs) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/spanner/) + * + * ## Example Usage + * + * ## Import + * + * InstanceConfig can be imported using any of these accepted formats: + * + * * `projects/{{project}}/instanceConfigs/{{name}}` + * + * * `{{project}}/{{name}}` + * + * * `{{name}}` + * + * When using the `pulumi import` command, InstanceConfig can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default projects/{{project}}/instanceConfigs/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{project}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{name}} + * ``` + */ +export class InstanceConfig extends pulumi.CustomResource { + /** + * Get an existing InstanceConfig 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?: InstanceConfigState, opts?: pulumi.CustomResourceOptions): InstanceConfig { + return new InstanceConfig(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:spanner/instanceConfig:InstanceConfig'; + + /** + * Returns true if the given object is an instance of InstanceConfig. 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 InstanceConfig { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === InstanceConfig.__pulumiType; + } + + /** + * Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + * configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + * configuration. + */ + public readonly baseConfig!: pulumi.Output; + /** + * Output only. Whether this instance config is a Google or User Managed Configuration. + */ + public /*out*/ readonly configType!: pulumi.Output; + /** + * The name of this instance configuration as it appears in UIs. + */ + public readonly displayName!: pulumi.Output; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + * to the field 'effective_labels' for all of the labels present on the resource. + */ + public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * A unique identifier for the instance configuration. Values are of the + * form projects//instanceConfigs/[a-z][-a-z0-9]* + */ + public readonly name!: pulumi.Output; + public readonly project!: pulumi.Output; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + public /*out*/ readonly pulumiLabels!: pulumi.Output<{[key: string]: string}>; + /** + * The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + */ + public readonly replicas!: pulumi.Output; + + /** + * Create a InstanceConfig 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: InstanceConfigArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: InstanceConfigArgs | InstanceConfigState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as InstanceConfigState | undefined; + resourceInputs["baseConfig"] = state ? state.baseConfig : undefined; + resourceInputs["configType"] = state ? state.configType : undefined; + resourceInputs["displayName"] = state ? state.displayName : undefined; + resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; + resourceInputs["replicas"] = state ? state.replicas : undefined; + } else { + const args = argsOrState as InstanceConfigArgs | undefined; + if ((!args || args.displayName === undefined) && !opts.urn) { + throw new Error("Missing required property 'displayName'"); + } + if ((!args || args.replicas === undefined) && !opts.urn) { + throw new Error("Missing required property 'replicas'"); + } + resourceInputs["baseConfig"] = args ? args.baseConfig : undefined; + resourceInputs["displayName"] = args ? args.displayName : undefined; + resourceInputs["labels"] = args ? args.labels : undefined; + resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["replicas"] = args ? args.replicas : undefined; + resourceInputs["configType"] = undefined /*out*/; + resourceInputs["effectiveLabels"] = undefined /*out*/; + resourceInputs["pulumiLabels"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["effectiveLabels", "pulumiLabels"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(InstanceConfig.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering InstanceConfig resources. + */ +export interface InstanceConfigState { + /** + * Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + * configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + * configuration. + */ + baseConfig?: pulumi.Input; + /** + * Output only. Whether this instance config is a Google or User Managed Configuration. + */ + configType?: pulumi.Input; + /** + * The name of this instance configuration as it appears in UIs. + */ + displayName?: pulumi.Input; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + * to the field 'effective_labels' for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * A unique identifier for the instance configuration. Values are of the + * form projects//instanceConfigs/[a-z][-a-z0-9]* + */ + name?: pulumi.Input; + project?: pulumi.Input; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + pulumiLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + */ + replicas?: pulumi.Input[]>; +} + +/** + * The set of arguments for constructing a InstanceConfig resource. + */ +export interface InstanceConfigArgs { + /** + * Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + * configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + * configuration. + */ + baseConfig?: pulumi.Input; + /** + * The name of this instance configuration as it appears in UIs. + */ + displayName: pulumi.Input; + /** + * An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + * to the field 'effective_labels' for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * A unique identifier for the instance configuration. Values are of the + * form projects//instanceConfigs/[a-z][-a-z0-9]* + */ + name?: pulumi.Input; + project?: pulumi.Input; + /** + * The geographic placement of nodes in this instance configuration and their replication properties. + * Structure is documented below. + */ + replicas: pulumi.Input[]>; +} diff --git a/sdk/nodejs/tsconfig.json b/sdk/nodejs/tsconfig.json index cbcf48de16..46401f78d8 100644 --- a/sdk/nodejs/tsconfig.json +++ b/sdk/nodejs/tsconfig.json @@ -400,6 +400,7 @@ "compute/getRouterNat.ts", "compute/getRouterStatus.ts", "compute/getSSLPolicy.ts", + "compute/getSecurityPolicy.ts", "compute/getSnapshot.ts", "compute/getSnapshotIamPolicy.ts", "compute/getSubnetwork.ts", @@ -458,6 +459,7 @@ "compute/organizationSecurityPolicyRule.ts", "compute/packetMirroring.ts", "compute/perInstanceConfig.ts", + "compute/projectCloudArmorTier.ts", "compute/projectDefaultNetworkTier.ts", "compute/projectMetadata.ts", "compute/projectMetadataItem.ts", @@ -1047,6 +1049,7 @@ "networkservices/lbTrafficExtension.ts", "networkservices/mesh.ts", "networkservices/serviceBinding.ts", + "networkservices/serviceLbPolicies.ts", "networkservices/tcpRoute.ts", "networkservices/tlsRoute.ts", "notebooks/environment.ts", @@ -1176,6 +1179,7 @@ "securitycenter/instanceIamBinding.ts", "securitycenter/instanceIamMember.ts", "securitycenter/instanceIamPolicy.ts", + "securitycenter/managementOrganizationEventThreatDetectionCustomModule.ts", "securitycenter/muteConfig.ts", "securitycenter/notificationConfig.ts", "securitycenter/organizationCustomModule.ts", @@ -1233,6 +1237,7 @@ "spanner/getInstanceIamPolicy.ts", "spanner/index.ts", "spanner/instance.ts", + "spanner/instanceConfig.ts", "spanner/instanceIAMBinding.ts", "spanner/instanceIAMMember.ts", "spanner/instanceIAMPolicy.ts", diff --git a/sdk/nodejs/types/input.ts b/sdk/nodejs/types/input.ts index 8124b2f8cf..682f941891 100644 --- a/sdk/nodejs/types/input.ts +++ b/sdk/nodejs/types/input.ts @@ -3151,6 +3151,17 @@ export namespace appengine { shell: pulumi.Input; } + export interface FlexibleAppVersionFlexibleRuntimeSettings { + /** + * Operating System of the application runtime. + */ + operatingSystem?: pulumi.Input; + /** + * The runtime version of an App Engine flexible application. + */ + runtimeVersion?: pulumi.Input; + } + export interface FlexibleAppVersionHandler { /** * Actions to take when the user is not logged in. @@ -10920,6 +10931,10 @@ export namespace clouddeploy { * Required. Usages when this configuration should be applied. */ usages: pulumi.Input[]>; + /** + * Optional. If true, additional logging will be enabled when running builds in this execution environment. + */ + verbose?: pulumi.Input; /** * Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. */ @@ -17564,6 +17579,18 @@ export namespace compute { resourceManagerTags?: pulumi.Input<{[key: string]: any}>; } + export interface InstanceGroupManagerStandbyPolicy { + /** + * Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + */ + initialDelaySec?: pulumi.Input; + /** + * Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * - - - + */ + mode?: pulumi.Input; + } + export interface InstanceGroupManagerStatefulDisk { /** * , A value that prescribes what should happen to the stateful disk when the VM instance is deleted. The available options are `NEVER` and `ON_PERMANENT_INSTANCE_DELETION`. `NEVER` - detach the disk when the VM is deleted, but do not delete the disk. `ON_PERMANENT_INSTANCE_DELETION` will delete the stateful disk when the VM is permanently deleted from the instance group. The default is `NEVER`. @@ -20566,6 +20593,18 @@ export namespace compute { resourceManagerTags?: pulumi.Input<{[key: string]: any}>; } + export interface RegionInstanceGroupManagerStandbyPolicy { + /** + * Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + */ + initialDelaySec?: pulumi.Input; + /** + * Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * - - - + */ + mode?: pulumi.Input; + } + export interface RegionInstanceGroupManagerStatefulDisk { /** * , A value that prescribes what should happen to the stateful disk when the VM instance is deleted. The available options are `NEVER` and `ON_PERMANENT_INSTANCE_DELETION`. `NEVER` - detach the disk when the VM is deleted, but do not delete the disk. `ON_PERMANENT_INSTANCE_DELETION` will delete the stateful disk when the VM is permanently deleted from the instance group. The default is `NEVER`. @@ -29747,6 +29786,13 @@ export namespace container { datasetId: pulumi.Input; } + export interface ClusterSecretManagerConfig { + /** + * Enable the Secret Manager add-on for this cluster. + */ + enabled: pulumi.Input; + } + export interface ClusterSecurityPostureConfig { /** * Sets the mode of the Kubernetes security posture API's off-cluster features. Available options include `DISABLED` and `BASIC`. @@ -29865,11 +29911,11 @@ export namespace container { */ enablePrivateNodes?: pulumi.Input; /** - * Network bandwidth tier configuration. + * Network bandwidth tier configuration. Structure is documented below. */ networkPerformanceConfig?: pulumi.Input; /** - * Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + * Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. */ podCidrOverprovisionConfig?: pulumi.Input; /** @@ -29916,6 +29962,9 @@ export namespace container { } export interface NodePoolNetworkConfigPodCidrOverprovisionConfig { + /** + * Whether pod cidr overprovision is disabled. + */ disabled: pulumi.Input; } @@ -35261,6 +35310,10 @@ export namespace dataloss { * Structure is documented below. */ cloudSqlTarget?: pulumi.Input; + /** + * Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + */ + secretsTarget?: pulumi.Input; } export interface PreventionDiscoveryConfigTargetBigQueryTarget { @@ -35373,6 +35426,11 @@ export namespace dataloss { * Catch-all. This should always be the last filter in the list because anything above it will apply first. */ otherTables?: pulumi.Input; + /** + * The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + * Structure is documented below. + */ + tableReference?: pulumi.Input; /** * A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. * Structure is documented below. @@ -35383,6 +35441,17 @@ export namespace dataloss { export interface PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables { } + export interface PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference { + /** + * Dataset ID of the table. + */ + datasetId: pulumi.Input; + /** + * Name of the table. + */ + tableId: pulumi.Input; + } + export interface PreventionDiscoveryConfigTargetBigQueryTargetFilterTables { /** * A collection of regular expressions to match a BQ table against. @@ -35458,6 +35527,11 @@ export namespace dataloss { * Structure is documented below. */ collection?: pulumi.Input; + /** + * The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + * Structure is documented below. + */ + databaseResourceReference?: pulumi.Input; /** * Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. */ @@ -35499,6 +35573,25 @@ export namespace dataloss { projectIdRegex?: pulumi.Input; } + export interface PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference { + /** + * Required. Name of a database within the instance. + */ + database: pulumi.Input; + /** + * Required. Name of a database resource, for example, a table within the database. + */ + databaseResource: pulumi.Input; + /** + * Required. The instance where this resource is located. For example: Cloud SQL instance ID. + */ + instance: pulumi.Input; + /** + * Required. If within a project-level config, then this must match the config's project ID. + */ + projectId: pulumi.Input; + } + export interface PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers { } @@ -35528,6 +35621,9 @@ export namespace dataloss { types?: pulumi.Input[]>; } + export interface PreventionDiscoveryConfigTargetSecretsTarget { + } + export interface PreventionInspectTemplateInspectConfig { /** * List of options defining data content to scan. If empty, text, images, and other content will be included. @@ -35753,7 +35849,7 @@ export namespace dataloss { * specified in another InfoTypeLimit. * Structure is documented below. */ - infoType: pulumi.Input; + infoType?: pulumi.Input; /** * Max findings limit for the given infoType. */ @@ -46608,6 +46704,12 @@ export namespace gkebackup { * included in the scope of a Backup. */ includeVolumeData?: pulumi.Input; + /** + * This flag specifies whether Backups will not fail when + * Backup for GKE detects Kubernetes configuration that is + * non-standard or requires additional setup to restore. + */ + permissiveMode?: pulumi.Input; /** * A list of namespaced Kubernetes Resources. * Structure is documented below. @@ -46865,7 +46967,7 @@ export namespace gkebackup { * if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode * for more information on each mode. - * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. */ namespacedResourceRestoreMode?: pulumi.Input; /** @@ -46873,6 +46975,11 @@ export namespace gkebackup { * Specifying this field to "False" is not allowed. */ noNamespaces?: pulumi.Input; + /** + * It contains custom ordering to use on a Restore. + * Structure is documented below. + */ + restoreOrder?: pulumi.Input; /** * A list of selected ProtectedApplications to restore. * The listed ProtectedApplications and all the resources @@ -46905,6 +47012,13 @@ export namespace gkebackup { * Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. */ volumeDataRestorePolicy?: pulumi.Input; + /** + * A table that binds volumes by their scope to a restore policy. Bindings + * must have a unique scope. Any volumes not scoped in the bindings are + * subject to the policy defined in volume_data_restore_policy. + * Structure is documented below. + */ + volumeDataRestorePolicyBindings?: pulumi.Input[]>; } export interface RestorePlanRestoreConfigClusterResourceRestoreScope { @@ -46970,6 +47084,61 @@ export namespace gkebackup { namespaces: pulumi.Input[]>; } + export interface RestorePlanRestoreConfigRestoreOrder { + /** + * A list of group kind dependency pairs + * that is used by Backup for GKE to + * generate a group kind restore order. + * Structure is documented below. + */ + groupKindDependencies: pulumi.Input[]>; + } + + export interface RestorePlanRestoreConfigRestoreOrderGroupKindDependency { + /** + * The requiring group kind requires that the satisfying + * group kind be restored first. + * Structure is documented below. + */ + requiring: pulumi.Input; + /** + * The satisfying group kind must be restored first + * in order to satisfy the dependency. + * Structure is documented below. + */ + satisfying: pulumi.Input; + } + + export interface RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring { + /** + * API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + */ + resourceGroup?: pulumi.Input; + /** + * Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + * - - - + */ + resourceKind?: pulumi.Input; + } + + export interface RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying { + /** + * API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + */ + resourceGroup?: pulumi.Input; + /** + * Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + */ + resourceKind?: pulumi.Input; + } + export interface RestorePlanRestoreConfigSelectedApplications { /** * A list of namespaced Kubernetes resources. @@ -47039,8 +47208,6 @@ export namespace gkebackup { /** * A string that specifies the desired value in string format * to use for transformation. - * - * - - - */ value?: pulumi.Input; } @@ -47087,6 +47254,22 @@ export namespace gkebackup { */ resourceKind?: pulumi.Input; } + + export interface RestorePlanRestoreConfigVolumeDataRestorePolicyBinding { + /** + * Specifies the mechanism to be used to restore this volume data. + * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + * for more information on each policy option. + * Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + */ + policy: pulumi.Input; + /** + * The volume type, as determined by the PVC's + * bound PV, to apply the policy to. + * Possible values are: `GCE_PERSISTENT_DISK`. + */ + volumeType: pulumi.Input; + } } export namespace gkehub { @@ -50039,6 +50222,10 @@ export namespace healthcare { * Cloud Pub/Sub topic. Not having adequate permissions will cause the calls that send notifications to fail. */ pubsubTopic: pulumi.Input; + /** + * Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + */ + sendForBulkImport?: pulumi.Input; } export interface DicomStoreStreamConfig { @@ -54793,6 +54980,22 @@ export namespace monitoring { } export namespace netapp { + export interface VolumeBackupConfig { + /** + * Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + */ + backupPolicies?: pulumi.Input[]>; + /** + * ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + * Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + */ + backupVault?: pulumi.Input; + /** + * When set to true, scheduled backup is enabled on the volume. Omit if no backupPolicy is specified. + */ + scheduledBackupEnabled?: pulumi.Input; + } + export interface VolumeExportPolicy { /** * Export rules (up to 5) control NFS volume access. @@ -56976,6 +57179,20 @@ export namespace networkservices { celExpression: pulumi.Input; } + export interface ServiceLbPoliciesAutoCapacityDrain { + /** + * Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + */ + enable?: pulumi.Input; + } + + export interface ServiceLbPoliciesFailoverConfig { + /** + * Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + */ + failoverHealthThreshold: pulumi.Input; + } + export interface TcpRouteRule { /** * A detailed rule defining how to route traffic. @@ -60749,6 +60966,19 @@ export namespace redis { targetShardCount?: pulumi.Input; } + export interface ClusterZoneDistributionConfig { + /** + * Immutable. The mode for zone distribution for Memorystore Redis cluster. + * If not provided, MULTI_ZONE will be used as default + * Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`. + */ + mode?: pulumi.Input; + /** + * Immutable. The zone for single zone Memorystore Redis cluster. + */ + zone?: pulumi.Input; + } + export interface InstanceMaintenancePolicy { /** * (Output) @@ -60949,13 +61179,25 @@ export namespace runtimeconfig { export namespace secretmanager { export interface SecretIamBindingCondition { 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; } export interface SecretIamMemberCondition { 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; } @@ -62079,6 +62321,27 @@ export namespace spanner { storageUtilizationPercent?: pulumi.Input; } + export interface InstanceConfigReplica { + /** + * If true, this location is designated as the default leader location where + * leader replicas are placed. + * + * - - - + */ + defaultLeaderLocation?: pulumi.Input; + /** + * The location of the serving resources, e.g. "us-central1". + */ + location?: pulumi.Input; + /** + * Indicates the type of replica. See the [replica types + * documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + * for more details. + * Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + */ + type?: pulumi.Input; + } + export interface InstanceIAMBindingCondition { description?: pulumi.Input; expression: pulumi.Input; @@ -62473,7 +62736,9 @@ export namespace sql { */ pscConfigs?: pulumi.Input[]>; /** - * Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `sslMode`. + * Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `sslMode`. It will be fully deprecated in a future major release. For now, please use `sslMode` with a compatible `requireSsl` value instead. + * + * @deprecated `requireSsl` will be fully deprecated in a future major release. For now, please use `sslMode` with a compatible `requireSsl` value instead. */ requireSsl?: pulumi.Input; /** @@ -64949,6 +65214,15 @@ export namespace workstations { * Structure is documented below. */ accelerators?: pulumi.Input[]>; + /** + * Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + */ + bootDiskSizeGb?: pulumi.Input; + /** + * Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + * See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + */ + enableNestedVirtualization?: pulumi.Input; /** * The id to be used for the boost config. */ @@ -64957,6 +65231,10 @@ export namespace workstations { * The type of machine that boosted VM instances will use—for example, e2-standard-4. For more information about machine types that Cloud Workstations supports, see the list of available machine types https://cloud.google.com/workstations/docs/available-machine-types. Defaults to e2-standard-4. */ machineType?: pulumi.Input; + /** + * Number of instances to pool for faster workstation boosting. + */ + poolSize?: pulumi.Input; } export interface WorkstationConfigHostGceInstanceBoostConfigAccelerator { diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts index 61b8486ac9..9b2217f643 100644 --- a/sdk/nodejs/types/output.ts +++ b/sdk/nodejs/types/output.ts @@ -3227,6 +3227,17 @@ export namespace appengine { shell: string; } + export interface FlexibleAppVersionFlexibleRuntimeSettings { + /** + * Operating System of the application runtime. + */ + operatingSystem?: string; + /** + * The runtime version of an App Engine flexible application. + */ + runtimeVersion?: string; + } + export interface FlexibleAppVersionHandler { /** * Actions to take when the user is not logged in. @@ -12980,6 +12991,10 @@ export namespace clouddeploy { * Required. Usages when this configuration should be applied. */ usages: string[]; + /** + * Optional. If true, additional logging will be enabled when running builds in this execution environment. + */ + verbose?: boolean; /** * Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. */ @@ -22677,6 +22692,17 @@ export namespace compute { resourceManagerTags: {[key: string]: any}; } + export interface GetInstanceGroupManagerStandbyPolicy { + /** + * Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + */ + initialDelaySec: number; + /** + * Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. The default mode is "MANUAL". + */ + mode: string; + } + export interface GetInstanceGroupManagerStatefulDisk { /** * A value that prescribes what should happen to the stateful disk when the VM instance is deleted. The available options are NEVER and ON_PERMANENT_INSTANCE_DELETION. NEVER - detach the disk when the VM is deleted, but do not delete the disk. ON_PERMANENT_INSTANCE_DELETION will delete the stateful disk when the VM is permanently deleted from the instance group. The default is NEVER. @@ -24976,6 +25002,338 @@ export namespace compute { tags: string[]; } + export interface GetSecurityPolicyAdaptiveProtectionConfig { + /** + * Auto Deploy Config of this security policy + */ + autoDeployConfigs: outputs.compute.GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig[]; + /** + * Layer 7 DDoS Defense Config of this security policy + */ + layer7DdosDefenseConfigs: outputs.compute.GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig[]; + } + + export interface GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfig { + /** + * 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 GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig { + /** + * If set to true, enables CAAP for L7 DDoS detection. + */ + enable: boolean; + /** + * Rule visibility. Supported values include: "STANDARD", "PREMIUM". + */ + ruleVisibility: string; + } + + export interface GetSecurityPolicyAdvancedOptionsConfig { + /** + * Custom configuration to apply the JSON parsing. Only applicable when JSON parsing is set to STANDARD. + */ + jsonCustomConfigs: outputs.compute.GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig[]; + /** + * JSON body parsing. Supported values include: "DISABLED", "STANDARD". + */ + jsonParsing: string; + /** + * Logging level. Supported values include: "NORMAL", "VERBOSE". + */ + logLevel: string; + /** + * An optional list of case-insensitive request header names to use for resolving the callers client IP address. + */ + userIpRequestHeaders: string[]; + } + + export interface GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig { + /** + * A list of custom Content-Type header values to apply the JSON parsing. + */ + contentTypes: string[]; + } + + export interface GetSecurityPolicyRecaptchaOptionsConfig { + /** + * A field to supply a reCAPTCHA site key to be used for all the rules using the redirect action with the type of GOOGLE_RECAPTCHA under the security policy. The specified site key needs to be created from the reCAPTCHA API. The user is responsible for the validity of the specified site key. If not specified, a Google-managed site key is used. + */ + redirectSiteKey: string; + } + + export interface GetSecurityPolicyRule { + /** + * Action to take when match matches the request. + */ + action: string; + /** + * An optional description of this rule. Max size is 64. + */ + description: string; + /** + * Additional actions that are performed on headers. + */ + headerActions: outputs.compute.GetSecurityPolicyRuleHeaderAction[]; + /** + * A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding action is enforced. + */ + matches: outputs.compute.GetSecurityPolicyRuleMatch[]; + /** + * Preconfigured WAF configuration to be applied for the rule. If the rule does not evaluate preconfigured WAF rules, i.e., if evaluatePreconfiguredWaf() is not used, this field will have no effect. + */ + preconfiguredWafConfigs: outputs.compute.GetSecurityPolicyRulePreconfiguredWafConfig[]; + /** + * When set to true, the action specified above is not enforced. Stackdriver logs for requests that trigger a preview action are annotated as such. + */ + preview: boolean; + /** + * An unique positive integer indicating the priority of evaluation for a rule. Rules are evaluated from highest priority (lowest numerically) to lowest priority (highest numerically) in order. + */ + priority: number; + /** + * Rate limit threshold for this security policy. Must be specified if the action is "rateBasedBan" or "throttle". Cannot be specified for any other actions. + */ + rateLimitOptions: outputs.compute.GetSecurityPolicyRuleRateLimitOption[]; + /** + * Parameters defining the redirect action. Cannot be specified for any other actions. + */ + redirectOptions: outputs.compute.GetSecurityPolicyRuleRedirectOption[]; + } + + export interface GetSecurityPolicyRuleHeaderAction { + /** + * The list of request headers to add or overwrite if they're already present. + */ + requestHeadersToAdds: outputs.compute.GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd[]; + } + + export interface GetSecurityPolicyRuleHeaderActionRequestHeadersToAdd { + /** + * The name of the header to set. + */ + headerName: string; + /** + * The value to set the named header to. + */ + headerValue: string; + } + + export interface GetSecurityPolicyRuleMatch { + /** + * The configuration options available when specifying versioned_expr. This field must be specified if versionedExpr is specified and cannot be specified if versionedExpr is not specified. + */ + configs: outputs.compute.GetSecurityPolicyRuleMatchConfig[]; + /** + * User defined CEVAL expression. A CEVAL expression is used to specify match criteria such as origin.ip, source.region_code and contents in the request header. + */ + exprs: outputs.compute.GetSecurityPolicyRuleMatchExpr[]; + /** + * Predefined rule expression. If this field is specified, config must also be specified. Available options: SRC_IPS_V1: Must specify the corresponding srcIpRanges field in config. + */ + versionedExpr: string; + } + + export interface GetSecurityPolicyRuleMatchConfig { + /** + * Set of IP addresses or ranges (IPV4 or IPV6) in CIDR notation to match against inbound traffic. There is a limit of 10 IP ranges per rule. A value of '*' matches all IPs (can be used to override the default behavior). + */ + srcIpRanges: string[]; + } + + export interface GetSecurityPolicyRuleMatchExpr { + /** + * Textual representation of an expression in Common Expression Language syntax. The application context of the containing message determines which well-known feature set of CEL is supported. + */ + expression: string; + } + + export interface GetSecurityPolicyRulePreconfiguredWafConfig { + /** + * An exclusion to apply during preconfigured WAF evaluation. + */ + exclusions: outputs.compute.GetSecurityPolicyRulePreconfiguredWafConfigExclusion[]; + } + + export interface GetSecurityPolicyRulePreconfiguredWafConfigExclusion { + /** + * Request cookie whose value will be excluded from inspection during preconfigured WAF evaluation. + */ + requestCookies: outputs.compute.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky[]; + /** + * Request header whose value will be excluded from inspection during preconfigured WAF evaluation. + */ + requestHeaders: outputs.compute.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader[]; + /** + * Request query parameter whose value will be excluded from inspection during preconfigured WAF evaluation. Note that the parameter can be in the query string or in the POST body. + */ + requestQueryParams: outputs.compute.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam[]; + /** + * Request URI from the request line to be excluded from inspection during preconfigured WAF evaluation. When specifying this field, the query or fragment part should be excluded. + */ + requestUris: outputs.compute.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri[]; + /** + * A list of target rule IDs under the WAF rule set to apply the preconfigured WAF exclusion. If omitted, it refers to all the rule IDs under the WAF rule set. + */ + targetRuleIds: string[]; + /** + * Target WAF rule set to apply the preconfigured WAF exclusion. + */ + targetRuleSet: string; + } + + export interface GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCooky { + /** + * You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + */ + operator: string; + /** + * A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + */ + value: string; + } + + export interface GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeader { + /** + * You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + */ + operator: string; + /** + * A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + */ + value: string; + } + + export interface GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParam { + /** + * You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + */ + operator: string; + /** + * A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + */ + value: string; + } + + export interface GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUri { + /** + * You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + */ + operator: string; + /** + * A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + */ + value: string; + } + + export interface GetSecurityPolicyRuleRateLimitOption { + /** + * Can only be specified if the action for the rule is "rateBasedBan". If specified, determines the time (in seconds) the traffic will continue to be banned by the rate limit after the rate falls below the threshold. + */ + banDurationSec: number; + /** + * Can only be specified if the action for the rule is "rateBasedBan". If specified, the key will be banned for the configured 'banDurationSec' when the number of requests that exceed the 'rateLimitThreshold' also exceed this 'banThreshold'. + */ + banThresholds: outputs.compute.GetSecurityPolicyRuleRateLimitOptionBanThreshold[]; + /** + * Action to take for requests that are under the configured rate limit threshold. Valid option is "allow" only. + */ + conformAction: string; + /** + * Determines the key to enforce the rateLimitThreshold on + */ + enforceOnKey: string; + /** + * Enforce On Key Config of this security policy + */ + enforceOnKeyConfigs: outputs.compute.GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig[]; + /** + * Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + */ + enforceOnKeyName: string; + /** + * Action to take for requests that are above the configured rate limit threshold, to either deny with a specified HTTP response code, or redirect to a different endpoint. Valid options are "deny()" where valid values for status are 403, 404, 429, and 502, and "redirect" where the redirect parameters come from exceedRedirectOptions below. + */ + exceedAction: string; + /** + * Parameters defining the redirect action that is used as the exceed action. Cannot be specified if the exceed action is not redirect. + */ + exceedRedirectOptions: outputs.compute.GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption[]; + /** + * Threshold at which to begin ratelimiting. + */ + rateLimitThresholds: outputs.compute.GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold[]; + } + + export interface GetSecurityPolicyRuleRateLimitOptionBanThreshold { + /** + * Number of HTTP(S) requests for calculating the threshold. + */ + count: number; + /** + * Interval over which the threshold is computed. + */ + intervalSec: number; + } + + export interface GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfig { + /** + * Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + */ + enforceOnKeyName: string; + /** + * Determines the key to enforce the rateLimitThreshold on + */ + enforceOnKeyType: string; + } + + export interface GetSecurityPolicyRuleRateLimitOptionExceedRedirectOption { + /** + * Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + */ + target: string; + /** + * Type of the redirect action. + */ + type: string; + } + + export interface GetSecurityPolicyRuleRateLimitOptionRateLimitThreshold { + /** + * Number of HTTP(S) requests for calculating the threshold. + */ + count: number; + /** + * Interval over which the threshold is computed. + */ + intervalSec: number; + } + + export interface GetSecurityPolicyRuleRedirectOption { + /** + * Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + */ + target: string; + /** + * Type of the redirect action. Available options: EXTERNAL_302: Must specify the corresponding target field in config. GOOGLE_RECAPTCHA: Cannot specify target field in config. + */ + type: string; + } + export interface GetSnapshotSnapshotEncryptionKey { /** * The name of the encryption key that is stored in Google Cloud KMS. @@ -26581,6 +26939,18 @@ export namespace compute { resourceManagerTags?: {[key: string]: any}; } + export interface InstanceGroupManagerStandbyPolicy { + /** + * Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + */ + initialDelaySec: number; + /** + * Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * - - - + */ + mode: string; + } + export interface InstanceGroupManagerStatefulDisk { /** * , A value that prescribes what should happen to the stateful disk when the VM instance is deleted. The available options are `NEVER` and `ON_PERMANENT_INSTANCE_DELETION`. `NEVER` - detach the disk when the VM is deleted, but do not delete the disk. `ON_PERMANENT_INSTANCE_DELETION` will delete the stateful disk when the VM is permanently deleted from the instance group. The default is `NEVER`. @@ -29583,6 +29953,18 @@ export namespace compute { resourceManagerTags?: {[key: string]: any}; } + export interface RegionInstanceGroupManagerStandbyPolicy { + /** + * Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + */ + initialDelaySec: number; + /** + * Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + * - - - + */ + mode: string; + } + export interface RegionInstanceGroupManagerStatefulDisk { /** * , A value that prescribes what should happen to the stateful disk when the VM instance is deleted. The available options are `NEVER` and `ON_PERMANENT_INSTANCE_DELETION`. `NEVER` - detach the disk when the VM is deleted, but do not delete the disk. `ON_PERMANENT_INSTANCE_DELETION` will delete the stateful disk when the VM is permanently deleted from the instance group. The default is `NEVER`. @@ -38962,6 +39344,13 @@ export namespace container { datasetId: string; } + export interface ClusterSecretManagerConfig { + /** + * Enable the Secret Manager add-on for this cluster. + */ + enabled: boolean; + } + export interface ClusterSecurityPostureConfig { /** * Sets the mode of the Kubernetes security posture API's off-cluster features. Available options include `DISABLED` and `BASIC`. @@ -40939,6 +41328,13 @@ export namespace container { datasetId: string; } + export interface GetClusterSecretManagerConfig { + /** + * Enable the Secret manager csi component. + */ + enabled: boolean; + } + export interface GetClusterSecurityPostureConfig { /** * Sets the mode of the Kubernetes security posture API's off-cluster features. Available options include DISABLED and BASIC. @@ -41057,11 +41453,11 @@ export namespace container { */ enablePrivateNodes: boolean; /** - * Network bandwidth tier configuration. + * Network bandwidth tier configuration. Structure is documented below. */ networkPerformanceConfig?: outputs.container.NodePoolNetworkConfigNetworkPerformanceConfig; /** - * Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + * Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. */ podCidrOverprovisionConfig: outputs.container.NodePoolNetworkConfigPodCidrOverprovisionConfig; /** @@ -41108,6 +41504,9 @@ export namespace container { } export interface NodePoolNetworkConfigPodCidrOverprovisionConfig { + /** + * Whether pod cidr overprovision is disabled. + */ disabled: boolean; } @@ -46460,6 +46859,10 @@ export namespace dataloss { * Structure is documented below. */ cloudSqlTarget?: outputs.dataloss.PreventionDiscoveryConfigTargetCloudSqlTarget; + /** + * Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + */ + secretsTarget?: outputs.dataloss.PreventionDiscoveryConfigTargetSecretsTarget; } export interface PreventionDiscoveryConfigTargetBigQueryTarget { @@ -46572,6 +46975,11 @@ export namespace dataloss { * Catch-all. This should always be the last filter in the list because anything above it will apply first. */ otherTables?: outputs.dataloss.PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables; + /** + * The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + * Structure is documented below. + */ + tableReference?: outputs.dataloss.PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference; /** * A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. * Structure is documented below. @@ -46582,6 +46990,17 @@ export namespace dataloss { export interface PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables { } + export interface PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference { + /** + * Dataset ID of the table. + */ + datasetId: string; + /** + * Name of the table. + */ + tableId: string; + } + export interface PreventionDiscoveryConfigTargetBigQueryTargetFilterTables { /** * A collection of regular expressions to match a BQ table against. @@ -46657,6 +47076,11 @@ export namespace dataloss { * Structure is documented below. */ collection?: outputs.dataloss.PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollection; + /** + * The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + * Structure is documented below. + */ + databaseResourceReference?: outputs.dataloss.PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference; /** * Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. */ @@ -46698,6 +47122,25 @@ export namespace dataloss { projectIdRegex?: string; } + export interface PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference { + /** + * Required. Name of a database within the instance. + */ + database: string; + /** + * Required. Name of a database resource, for example, a table within the database. + */ + databaseResource: string; + /** + * Required. The instance where this resource is located. For example: Cloud SQL instance ID. + */ + instance: string; + /** + * Required. If within a project-level config, then this must match the config's project ID. + */ + projectId: string; + } + export interface PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers { } @@ -46727,6 +47170,9 @@ export namespace dataloss { types?: string[]; } + export interface PreventionDiscoveryConfigTargetSecretsTarget { + } + export interface PreventionInspectTemplateInspectConfig { /** * List of options defining data content to scan. If empty, text, images, and other content will be included. @@ -46952,7 +47398,7 @@ export namespace dataloss { * specified in another InfoTypeLimit. * Structure is documented below. */ - infoType: outputs.dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType; + infoType?: outputs.dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType; /** * Max findings limit for the given infoType. */ @@ -58241,6 +58687,12 @@ export namespace gkebackup { * included in the scope of a Backup. */ includeVolumeData: boolean; + /** + * This flag specifies whether Backups will not fail when + * Backup for GKE detects Kubernetes configuration that is + * non-standard or requires additional setup to restore. + */ + permissiveMode?: boolean; /** * A list of namespaced Kubernetes Resources. * Structure is documented below. @@ -58498,7 +58950,7 @@ export namespace gkebackup { * if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode * for more information on each mode. - * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + * Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. */ namespacedResourceRestoreMode?: string; /** @@ -58506,6 +58958,11 @@ export namespace gkebackup { * Specifying this field to "False" is not allowed. */ noNamespaces?: boolean; + /** + * It contains custom ordering to use on a Restore. + * Structure is documented below. + */ + restoreOrder?: outputs.gkebackup.RestorePlanRestoreConfigRestoreOrder; /** * A list of selected ProtectedApplications to restore. * The listed ProtectedApplications and all the resources @@ -58538,6 +58995,13 @@ export namespace gkebackup { * Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. */ volumeDataRestorePolicy?: string; + /** + * A table that binds volumes by their scope to a restore policy. Bindings + * must have a unique scope. Any volumes not scoped in the bindings are + * subject to the policy defined in volume_data_restore_policy. + * Structure is documented below. + */ + volumeDataRestorePolicyBindings?: outputs.gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBinding[]; } export interface RestorePlanRestoreConfigClusterResourceRestoreScope { @@ -58603,6 +59067,61 @@ export namespace gkebackup { namespaces: string[]; } + export interface RestorePlanRestoreConfigRestoreOrder { + /** + * A list of group kind dependency pairs + * that is used by Backup for GKE to + * generate a group kind restore order. + * Structure is documented below. + */ + groupKindDependencies: outputs.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependency[]; + } + + export interface RestorePlanRestoreConfigRestoreOrderGroupKindDependency { + /** + * The requiring group kind requires that the satisfying + * group kind be restored first. + * Structure is documented below. + */ + requiring: outputs.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring; + /** + * The satisfying group kind must be restored first + * in order to satisfy the dependency. + * Structure is documented below. + */ + satisfying: outputs.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying; + } + + export interface RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring { + /** + * API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + */ + resourceGroup?: string; + /** + * Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + * + * - - - + */ + resourceKind?: string; + } + + export interface RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying { + /** + * API Group of a Kubernetes resource, e.g. + * "apiextensions.k8s.io", "storage.k8s.io", etc. + * Use empty string for core group. + */ + resourceGroup?: string; + /** + * Kind of a Kubernetes resource, e.g. + * "CustomResourceDefinition", "StorageClass", etc. + */ + resourceKind?: string; + } + export interface RestorePlanRestoreConfigSelectedApplications { /** * A list of namespaced Kubernetes resources. @@ -58672,8 +59191,6 @@ export namespace gkebackup { /** * A string that specifies the desired value in string format * to use for transformation. - * - * - - - */ value?: string; } @@ -58721,6 +59238,22 @@ export namespace gkebackup { resourceKind?: string; } + export interface RestorePlanRestoreConfigVolumeDataRestorePolicyBinding { + /** + * Specifies the mechanism to be used to restore this volume data. + * See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + * for more information on each policy option. + * Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + */ + policy: string; + /** + * The volume type, as determined by the PVC's + * bound PV, to apply the policy to. + * Possible values are: `GCE_PERSISTENT_DISK`. + */ + volumeType: string; + } + } export namespace gkehub { @@ -61675,6 +62208,10 @@ export namespace healthcare { * Cloud Pub/Sub topic. Not having adequate permissions will cause the calls that send notifications to fail. */ pubsubTopic: string; + /** + * Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + */ + sendForBulkImport?: boolean; } export interface DicomStoreStreamConfig { @@ -66657,6 +67194,22 @@ export namespace monitoring { } export namespace netapp { + export interface VolumeBackupConfig { + /** + * Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + */ + backupPolicies?: string[]; + /** + * ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + * Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + */ + backupVault?: string; + /** + * When set to true, scheduled backup is enabled on the volume. Omit if no backupPolicy is specified. + */ + scheduledBackupEnabled?: boolean; + } + export interface VolumeExportPolicy { /** * Export rules (up to 5) control NFS volume access. @@ -68844,6 +69397,20 @@ export namespace networkservices { celExpression: string; } + export interface ServiceLbPoliciesAutoCapacityDrain { + /** + * Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + */ + enable?: boolean; + } + + export interface ServiceLbPoliciesFailoverConfig { + /** + * Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + */ + failoverHealthThreshold: number; + } + export interface TcpRouteRule { /** * A detailed rule defining how to route traffic. @@ -72947,6 +73514,19 @@ export namespace redis { targetShardCount?: number; } + export interface ClusterZoneDistributionConfig { + /** + * Immutable. The mode for zone distribution for Memorystore Redis cluster. + * If not provided, MULTI_ZONE will be used as default + * Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`. + */ + mode: string; + /** + * Immutable. The zone for single zone Memorystore Redis cluster. + */ + zone?: string; + } + export interface GetInstanceMaintenancePolicy { /** * Output only. The time when the policy was created. @@ -73532,13 +74112,25 @@ export namespace secretmanager { export interface SecretIamBindingCondition { 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; } export interface SecretIamMemberCondition { 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; } @@ -74742,6 +75334,27 @@ export namespace spanner { storageUtilizationPercent?: number; } + export interface InstanceConfigReplica { + /** + * If true, this location is designated as the default leader location where + * leader replicas are placed. + * + * - - - + */ + defaultLeaderLocation?: boolean; + /** + * The location of the serving resources, e.g. "us-central1". + */ + location?: string; + /** + * Indicates the type of replica. See the [replica types + * documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + * for more details. + * Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + */ + type?: string; + } + export interface InstanceIAMBindingCondition { description?: string; expression: string; @@ -75137,7 +75750,9 @@ export namespace sql { */ pscConfigs?: outputs.sql.DatabaseInstanceSettingsIpConfigurationPscConfig[]; /** - * Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `sslMode`. + * Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `sslMode`. It will be fully deprecated in a future major release. For now, please use `sslMode` with a compatible `requireSsl` value instead. + * + * @deprecated `requireSsl` will be fully deprecated in a future major release. For now, please use `sslMode` with a compatible `requireSsl` value instead. */ requireSsl?: boolean; /** @@ -75618,7 +76233,7 @@ export namespace sql { */ requireSsl: boolean; /** - * Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + * Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in requireSsl until next major release. */ sslMode: string; } @@ -76134,7 +76749,7 @@ export namespace sql { */ requireSsl: boolean; /** - * Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + * Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in requireSsl until next major release. */ sslMode: string; } @@ -79342,6 +79957,15 @@ export namespace workstations { * Structure is documented below. */ accelerators?: outputs.workstations.WorkstationConfigHostGceInstanceBoostConfigAccelerator[]; + /** + * Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + */ + bootDiskSizeGb: number; + /** + * Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + * See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + */ + enableNestedVirtualization: boolean; /** * The id to be used for the boost config. */ @@ -79350,6 +79974,10 @@ export namespace workstations { * The type of machine that boosted VM instances will use—for example, e2-standard-4. For more information about machine types that Cloud Workstations supports, see the list of available machine types https://cloud.google.com/workstations/docs/available-machine-types. Defaults to e2-standard-4. */ machineType?: string; + /** + * Number of instances to pool for faster workstation boosting. + */ + poolSize: number; } export interface WorkstationConfigHostGceInstanceBoostConfigAccelerator { diff --git a/sdk/nodejs/workstations/workstationConfig.ts b/sdk/nodejs/workstations/workstationConfig.ts index c3a39852a4..dae248949a 100644 --- a/sdk/nodejs/workstations/workstationConfig.ts +++ b/sdk/nodejs/workstations/workstationConfig.ts @@ -349,8 +349,11 @@ import * as utilities from "../utilities"; * }], * }, * { - * id: "boost-1", - * machineType: "e2-standard-2", + * id: "boost-2", + * machineType: "n1-standard-2", + * poolSize: 2, + * bootDiskSizeGb: 30, + * enableNestedVirtualization: true, * }, * ], * }, diff --git a/sdk/python/pulumi_gcp/__init__.py b/sdk/python/pulumi_gcp/__init__.py index 1be683f441..80fe9307a1 100644 --- a/sdk/python/pulumi_gcp/__init__.py +++ b/sdk/python/pulumi_gcp/__init__.py @@ -2684,6 +2684,14 @@ "gcp:compute/perInstanceConfig:PerInstanceConfig": "PerInstanceConfig" } }, + { + "pkg": "gcp", + "mod": "compute/projectCloudArmorTier", + "fqn": "pulumi_gcp.compute", + "classes": { + "gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier": "ProjectCloudArmorTier" + } + }, { "pkg": "gcp", "mod": "compute/projectDefaultNetworkTier", @@ -6244,6 +6252,14 @@ "gcp:networkservices/serviceBinding:ServiceBinding": "ServiceBinding" } }, + { + "pkg": "gcp", + "mod": "networkservices/serviceLbPolicies", + "fqn": "pulumi_gcp.networkservices", + "classes": { + "gcp:networkservices/serviceLbPolicies:ServiceLbPolicies": "ServiceLbPolicies" + } + }, { "pkg": "gcp", "mod": "networkservices/tcpRoute", @@ -6884,6 +6900,14 @@ "gcp:securitycenter/instanceIamPolicy:InstanceIamPolicy": "InstanceIamPolicy" } }, + { + "pkg": "gcp", + "mod": "securitycenter/managementOrganizationEventThreatDetectionCustomModule", + "fqn": "pulumi_gcp.securitycenter", + "classes": { + "gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule": "ManagementOrganizationEventThreatDetectionCustomModule" + } + }, { "pkg": "gcp", "mod": "securitycenter/muteConfig", @@ -7172,6 +7196,14 @@ "gcp:spanner/instance:Instance": "Instance" } }, + { + "pkg": "gcp", + "mod": "spanner/instanceConfig", + "fqn": "pulumi_gcp.spanner", + "classes": { + "gcp:spanner/instanceConfig:InstanceConfig": "InstanceConfig" + } + }, { "pkg": "gcp", "mod": "spanner/instanceIAMBinding", diff --git a/sdk/python/pulumi_gcp/appengine/_inputs.py b/sdk/python/pulumi_gcp/appengine/_inputs.py index 134eb6b0a7..6fbc01b483 100644 --- a/sdk/python/pulumi_gcp/appengine/_inputs.py +++ b/sdk/python/pulumi_gcp/appengine/_inputs.py @@ -30,6 +30,7 @@ 'FlexibleAppVersionDeploymentZipArgs', 'FlexibleAppVersionEndpointsApiServiceArgs', 'FlexibleAppVersionEntrypointArgs', + 'FlexibleAppVersionFlexibleRuntimeSettingsArgs', 'FlexibleAppVersionHandlerArgs', 'FlexibleAppVersionHandlerScriptArgs', 'FlexibleAppVersionHandlerStaticFilesArgs', @@ -1307,6 +1308,45 @@ def shell(self, value: pulumi.Input[str]): pulumi.set(self, "shell", value) +@pulumi.input_type +class FlexibleAppVersionFlexibleRuntimeSettingsArgs: + def __init__(__self__, *, + operating_system: Optional[pulumi.Input[str]] = None, + runtime_version: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] operating_system: Operating System of the application runtime. + :param pulumi.Input[str] runtime_version: The runtime version of an App Engine flexible application. + """ + if operating_system is not None: + pulumi.set(__self__, "operating_system", operating_system) + if runtime_version is not None: + pulumi.set(__self__, "runtime_version", runtime_version) + + @property + @pulumi.getter(name="operatingSystem") + def operating_system(self) -> Optional[pulumi.Input[str]]: + """ + Operating System of the application runtime. + """ + return pulumi.get(self, "operating_system") + + @operating_system.setter + def operating_system(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "operating_system", value) + + @property + @pulumi.getter(name="runtimeVersion") + def runtime_version(self) -> Optional[pulumi.Input[str]]: + """ + The runtime version of an App Engine flexible application. + """ + return pulumi.get(self, "runtime_version") + + @runtime_version.setter + def runtime_version(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "runtime_version", value) + + @pulumi.input_type class FlexibleAppVersionHandlerArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/appengine/flexible_app_version.py b/sdk/python/pulumi_gcp/appengine/flexible_app_version.py index cdc034f1ad..1447c7141e 100644 --- a/sdk/python/pulumi_gcp/appengine/flexible_app_version.py +++ b/sdk/python/pulumi_gcp/appengine/flexible_app_version.py @@ -29,6 +29,7 @@ def __init__(__self__, *, endpoints_api_service: Optional[pulumi.Input['FlexibleAppVersionEndpointsApiServiceArgs']] = None, entrypoint: Optional[pulumi.Input['FlexibleAppVersionEntrypointArgs']] = None, env_variables: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + flexible_runtime_settings: Optional[pulumi.Input['FlexibleAppVersionFlexibleRuntimeSettingsArgs']] = None, handlers: Optional[pulumi.Input[Sequence[pulumi.Input['FlexibleAppVersionHandlerArgs']]]] = None, inbound_services: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, instance_class: Optional[pulumi.Input[str]] = None, @@ -62,6 +63,7 @@ def __init__(__self__, *, :param pulumi.Input['FlexibleAppVersionDeploymentArgs'] deployment: Code and application artifacts that make up this version. :param pulumi.Input['FlexibleAppVersionEndpointsApiServiceArgs'] endpoints_api_service: Code and application artifacts that make up this version. :param pulumi.Input['FlexibleAppVersionEntrypointArgs'] entrypoint: The entrypoint for the application. + :param pulumi.Input['FlexibleAppVersionFlexibleRuntimeSettingsArgs'] flexible_runtime_settings: Runtime settings for App Engine flexible environment. :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. :param pulumi.Input[Sequence[pulumi.Input[str]]] inbound_services: A list of the types of messages that this application is able to receive. Possible values: ["INBOUND_SERVICE_MAIL", @@ -111,6 +113,8 @@ def __init__(__self__, *, pulumi.set(__self__, "entrypoint", entrypoint) if env_variables is not None: pulumi.set(__self__, "env_variables", env_variables) + if flexible_runtime_settings is not None: + pulumi.set(__self__, "flexible_runtime_settings", flexible_runtime_settings) if handlers is not None: pulumi.set(__self__, "handlers", handlers) if inbound_services is not None: @@ -300,6 +304,18 @@ def env_variables(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]] def env_variables(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): pulumi.set(self, "env_variables", value) + @property + @pulumi.getter(name="flexibleRuntimeSettings") + def flexible_runtime_settings(self) -> Optional[pulumi.Input['FlexibleAppVersionFlexibleRuntimeSettingsArgs']]: + """ + Runtime settings for App Engine flexible environment. + """ + return pulumi.get(self, "flexible_runtime_settings") + + @flexible_runtime_settings.setter + def flexible_runtime_settings(self, value: Optional[pulumi.Input['FlexibleAppVersionFlexibleRuntimeSettingsArgs']]): + pulumi.set(self, "flexible_runtime_settings", value) + @property @pulumi.getter def handlers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FlexibleAppVersionHandlerArgs']]]]: @@ -513,6 +529,7 @@ def __init__(__self__, *, endpoints_api_service: Optional[pulumi.Input['FlexibleAppVersionEndpointsApiServiceArgs']] = None, entrypoint: Optional[pulumi.Input['FlexibleAppVersionEntrypointArgs']] = None, env_variables: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + flexible_runtime_settings: Optional[pulumi.Input['FlexibleAppVersionFlexibleRuntimeSettingsArgs']] = None, handlers: Optional[pulumi.Input[Sequence[pulumi.Input['FlexibleAppVersionHandlerArgs']]]] = None, inbound_services: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, instance_class: Optional[pulumi.Input[str]] = None, @@ -545,6 +562,7 @@ def __init__(__self__, *, :param pulumi.Input['FlexibleAppVersionDeploymentArgs'] deployment: Code and application artifacts that make up this version. :param pulumi.Input['FlexibleAppVersionEndpointsApiServiceArgs'] endpoints_api_service: Code and application artifacts that make up this version. :param pulumi.Input['FlexibleAppVersionEntrypointArgs'] entrypoint: The entrypoint for the application. + :param pulumi.Input['FlexibleAppVersionFlexibleRuntimeSettingsArgs'] flexible_runtime_settings: Runtime settings for App Engine flexible environment. :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. :param pulumi.Input[Sequence[pulumi.Input[str]]] inbound_services: A list of the types of messages that this application is able to receive. Possible values: ["INBOUND_SERVICE_MAIL", @@ -597,6 +615,8 @@ def __init__(__self__, *, pulumi.set(__self__, "entrypoint", entrypoint) if env_variables is not None: pulumi.set(__self__, "env_variables", env_variables) + if flexible_runtime_settings is not None: + pulumi.set(__self__, "flexible_runtime_settings", flexible_runtime_settings) if handlers is not None: pulumi.set(__self__, "handlers", handlers) if inbound_services is not None: @@ -746,6 +766,18 @@ def env_variables(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]] def env_variables(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): pulumi.set(self, "env_variables", value) + @property + @pulumi.getter(name="flexibleRuntimeSettings") + def flexible_runtime_settings(self) -> Optional[pulumi.Input['FlexibleAppVersionFlexibleRuntimeSettingsArgs']]: + """ + Runtime settings for App Engine flexible environment. + """ + return pulumi.get(self, "flexible_runtime_settings") + + @flexible_runtime_settings.setter + def flexible_runtime_settings(self, value: Optional[pulumi.Input['FlexibleAppVersionFlexibleRuntimeSettingsArgs']]): + pulumi.set(self, "flexible_runtime_settings", value) + @property @pulumi.getter def handlers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FlexibleAppVersionHandlerArgs']]]]: @@ -1023,6 +1055,7 @@ def __init__(__self__, endpoints_api_service: Optional[pulumi.Input[pulumi.InputType['FlexibleAppVersionEndpointsApiServiceArgs']]] = None, entrypoint: Optional[pulumi.Input[pulumi.InputType['FlexibleAppVersionEntrypointArgs']]] = None, env_variables: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + flexible_runtime_settings: Optional[pulumi.Input[pulumi.InputType['FlexibleAppVersionFlexibleRuntimeSettingsArgs']]] = None, handlers: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['FlexibleAppVersionHandlerArgs']]]]] = None, inbound_services: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, instance_class: Optional[pulumi.Input[str]] = None, @@ -1180,6 +1213,7 @@ def __init__(__self__, :param pulumi.Input[pulumi.InputType['FlexibleAppVersionDeploymentArgs']] deployment: Code and application artifacts that make up this version. :param pulumi.Input[pulumi.InputType['FlexibleAppVersionEndpointsApiServiceArgs']] endpoints_api_service: Code and application artifacts that make up this version. :param pulumi.Input[pulumi.InputType['FlexibleAppVersionEntrypointArgs']] entrypoint: The entrypoint for the application. + :param pulumi.Input[pulumi.InputType['FlexibleAppVersionFlexibleRuntimeSettingsArgs']] flexible_runtime_settings: Runtime settings for App Engine flexible environment. :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. :param pulumi.Input[Sequence[pulumi.Input[str]]] inbound_services: A list of the types of messages that this application is able to receive. Possible values: ["INBOUND_SERVICE_MAIL", @@ -1368,6 +1402,7 @@ def _internal_init(__self__, endpoints_api_service: Optional[pulumi.Input[pulumi.InputType['FlexibleAppVersionEndpointsApiServiceArgs']]] = None, entrypoint: Optional[pulumi.Input[pulumi.InputType['FlexibleAppVersionEntrypointArgs']]] = None, env_variables: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + flexible_runtime_settings: Optional[pulumi.Input[pulumi.InputType['FlexibleAppVersionFlexibleRuntimeSettingsArgs']]] = None, handlers: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['FlexibleAppVersionHandlerArgs']]]]] = None, inbound_services: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, instance_class: Optional[pulumi.Input[str]] = None, @@ -1406,6 +1441,7 @@ def _internal_init(__self__, __props__.__dict__["endpoints_api_service"] = endpoints_api_service __props__.__dict__["entrypoint"] = entrypoint __props__.__dict__["env_variables"] = env_variables + __props__.__dict__["flexible_runtime_settings"] = flexible_runtime_settings __props__.__dict__["handlers"] = handlers __props__.__dict__["inbound_services"] = inbound_services __props__.__dict__["instance_class"] = instance_class @@ -1454,6 +1490,7 @@ def get(resource_name: str, endpoints_api_service: Optional[pulumi.Input[pulumi.InputType['FlexibleAppVersionEndpointsApiServiceArgs']]] = None, entrypoint: Optional[pulumi.Input[pulumi.InputType['FlexibleAppVersionEntrypointArgs']]] = None, env_variables: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + flexible_runtime_settings: Optional[pulumi.Input[pulumi.InputType['FlexibleAppVersionFlexibleRuntimeSettingsArgs']]] = None, handlers: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['FlexibleAppVersionHandlerArgs']]]]] = None, inbound_services: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, instance_class: Optional[pulumi.Input[str]] = None, @@ -1491,6 +1528,7 @@ def get(resource_name: str, :param pulumi.Input[pulumi.InputType['FlexibleAppVersionDeploymentArgs']] deployment: Code and application artifacts that make up this version. :param pulumi.Input[pulumi.InputType['FlexibleAppVersionEndpointsApiServiceArgs']] endpoints_api_service: Code and application artifacts that make up this version. :param pulumi.Input[pulumi.InputType['FlexibleAppVersionEntrypointArgs']] entrypoint: The entrypoint for the application. + :param pulumi.Input[pulumi.InputType['FlexibleAppVersionFlexibleRuntimeSettingsArgs']] flexible_runtime_settings: Runtime settings for App Engine flexible environment. :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. :param pulumi.Input[Sequence[pulumi.Input[str]]] inbound_services: A list of the types of messages that this application is able to receive. Possible values: ["INBOUND_SERVICE_MAIL", @@ -1538,6 +1576,7 @@ def get(resource_name: str, __props__.__dict__["endpoints_api_service"] = endpoints_api_service __props__.__dict__["entrypoint"] = entrypoint __props__.__dict__["env_variables"] = env_variables + __props__.__dict__["flexible_runtime_settings"] = flexible_runtime_settings __props__.__dict__["handlers"] = handlers __props__.__dict__["inbound_services"] = inbound_services __props__.__dict__["instance_class"] = instance_class @@ -1631,6 +1670,14 @@ def entrypoint(self) -> pulumi.Output[Optional['outputs.FlexibleAppVersionEntryp def env_variables(self) -> pulumi.Output[Optional[Mapping[str, str]]]: return pulumi.get(self, "env_variables") + @property + @pulumi.getter(name="flexibleRuntimeSettings") + def flexible_runtime_settings(self) -> pulumi.Output[Optional['outputs.FlexibleAppVersionFlexibleRuntimeSettings']]: + """ + Runtime settings for App Engine flexible environment. + """ + return pulumi.get(self, "flexible_runtime_settings") + @property @pulumi.getter def handlers(self) -> pulumi.Output[Sequence['outputs.FlexibleAppVersionHandler']]: diff --git a/sdk/python/pulumi_gcp/appengine/outputs.py b/sdk/python/pulumi_gcp/appengine/outputs.py index e6c2ef6a7c..8546f24b10 100644 --- a/sdk/python/pulumi_gcp/appengine/outputs.py +++ b/sdk/python/pulumi_gcp/appengine/outputs.py @@ -31,6 +31,7 @@ 'FlexibleAppVersionDeploymentZip', 'FlexibleAppVersionEndpointsApiService', 'FlexibleAppVersionEntrypoint', + 'FlexibleAppVersionFlexibleRuntimeSettings', 'FlexibleAppVersionHandler', 'FlexibleAppVersionHandlerScript', 'FlexibleAppVersionHandlerStaticFiles', @@ -1361,6 +1362,56 @@ def shell(self) -> str: return pulumi.get(self, "shell") +@pulumi.output_type +class FlexibleAppVersionFlexibleRuntimeSettings(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "operatingSystem": + suggest = "operating_system" + elif key == "runtimeVersion": + suggest = "runtime_version" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in FlexibleAppVersionFlexibleRuntimeSettings. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + FlexibleAppVersionFlexibleRuntimeSettings.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + FlexibleAppVersionFlexibleRuntimeSettings.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + operating_system: Optional[str] = None, + runtime_version: Optional[str] = None): + """ + :param str operating_system: Operating System of the application runtime. + :param str runtime_version: The runtime version of an App Engine flexible application. + """ + if operating_system is not None: + pulumi.set(__self__, "operating_system", operating_system) + if runtime_version is not None: + pulumi.set(__self__, "runtime_version", runtime_version) + + @property + @pulumi.getter(name="operatingSystem") + def operating_system(self) -> Optional[str]: + """ + Operating System of the application runtime. + """ + return pulumi.get(self, "operating_system") + + @property + @pulumi.getter(name="runtimeVersion") + def runtime_version(self) -> Optional[str]: + """ + The runtime version of an App Engine flexible application. + """ + return pulumi.get(self, "runtime_version") + + @pulumi.output_type class FlexibleAppVersionHandler(dict): @staticmethod diff --git a/sdk/python/pulumi_gcp/bigtable/instance.py b/sdk/python/pulumi_gcp/bigtable/instance.py index 56a67ac05b..2ea3103828 100644 --- a/sdk/python/pulumi_gcp/bigtable/instance.py +++ b/sdk/python/pulumi_gcp/bigtable/instance.py @@ -19,6 +19,7 @@ def __init__(__self__, *, clusters: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceClusterArgs']]]] = None, deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, + force_destroy: Optional[pulumi.Input[bool]] = None, instance_type: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, name: Optional[pulumi.Input[str]] = None, @@ -33,6 +34,7 @@ def __init__(__self__, *, :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[str] display_name: The human-readable display name of the Bigtable instance. Defaults to the instance `name`. + :param pulumi.Input[bool] force_destroy: Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. :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, and all instances will become `"PRODUCTION"` instances. This means that new and existing `"DEVELOPMENT"` instances will be converted to @@ -52,6 +54,8 @@ def __init__(__self__, *, pulumi.set(__self__, "deletion_protection", deletion_protection) if display_name is not None: pulumi.set(__self__, "display_name", display_name) + if force_destroy is not None: + pulumi.set(__self__, "force_destroy", force_destroy) if instance_type is not None: warnings.warn("""It is recommended to leave this field unspecified since the distinction between \"DEVELOPMENT\" and \"PRODUCTION\" instances is going away, and all instances will become \"PRODUCTION\" instances. This means that new and existing \"DEVELOPMENT\" instances will be converted to \"PRODUCTION\" instances. It is recommended for users to use \"PRODUCTION\" instances in any case, since a 1-node \"PRODUCTION\" instance is functionally identical to a \"DEVELOPMENT\" instance, but without the accompanying restrictions.""", DeprecationWarning) pulumi.log.warn("""instance_type is deprecated: It is recommended to leave this field unspecified since the distinction between \"DEVELOPMENT\" and \"PRODUCTION\" instances is going away, and all instances will become \"PRODUCTION\" instances. This means that new and existing \"DEVELOPMENT\" instances will be converted to \"PRODUCTION\" instances. It is recommended for users to use \"PRODUCTION\" instances in any case, since a 1-node \"PRODUCTION\" instance is functionally identical to a \"DEVELOPMENT\" instance, but without the accompanying restrictions.""") @@ -105,6 +109,18 @@ def display_name(self) -> Optional[pulumi.Input[str]]: def display_name(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "display_name", value) + @property + @pulumi.getter(name="forceDestroy") + def force_destroy(self) -> Optional[pulumi.Input[bool]]: + """ + Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + """ + return pulumi.get(self, "force_destroy") + + @force_destroy.setter + def force_destroy(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "force_destroy", value) + @property @pulumi.getter(name="instanceType") def instance_type(self) -> Optional[pulumi.Input[str]]: @@ -172,6 +188,7 @@ def __init__(__self__, *, deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + force_destroy: Optional[pulumi.Input[bool]] = None, instance_type: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, name: Optional[pulumi.Input[str]] = None, @@ -190,6 +207,7 @@ def __init__(__self__, *, :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. ----- + :param pulumi.Input[bool] force_destroy: Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. :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, and all instances will become `"PRODUCTION"` instances. This means that new and existing `"DEVELOPMENT"` instances will be converted to @@ -212,6 +230,8 @@ def __init__(__self__, *, pulumi.set(__self__, "display_name", display_name) if effective_labels is not None: pulumi.set(__self__, "effective_labels", effective_labels) + if force_destroy is not None: + pulumi.set(__self__, "force_destroy", force_destroy) if instance_type is not None: warnings.warn("""It is recommended to leave this field unspecified since the distinction between \"DEVELOPMENT\" and \"PRODUCTION\" instances is going away, and all instances will become \"PRODUCTION\" instances. This means that new and existing \"DEVELOPMENT\" instances will be converted to \"PRODUCTION\" instances. It is recommended for users to use \"PRODUCTION\" instances in any case, since a 1-node \"PRODUCTION\" instance is functionally identical to a \"DEVELOPMENT\" instance, but without the accompanying restrictions.""", DeprecationWarning) pulumi.log.warn("""instance_type is deprecated: It is recommended to leave this field unspecified since the distinction between \"DEVELOPMENT\" and \"PRODUCTION\" instances is going away, and all instances will become \"PRODUCTION\" instances. This means that new and existing \"DEVELOPMENT\" instances will be converted to \"PRODUCTION\" instances. It is recommended for users to use \"PRODUCTION\" instances in any case, since a 1-node \"PRODUCTION\" instance is functionally identical to a \"DEVELOPMENT\" instance, but without the accompanying restrictions.""") @@ -281,6 +301,18 @@ def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[st def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): pulumi.set(self, "effective_labels", value) + @property + @pulumi.getter(name="forceDestroy") + def force_destroy(self) -> Optional[pulumi.Input[bool]]: + """ + Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + """ + return pulumi.get(self, "force_destroy") + + @force_destroy.setter + def force_destroy(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "force_destroy", value) + @property @pulumi.getter(name="instanceType") def instance_type(self) -> Optional[pulumi.Input[str]]: @@ -361,6 +393,7 @@ def __init__(__self__, clusters: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceClusterArgs']]]]] = None, deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, + force_destroy: Optional[pulumi.Input[bool]] = None, instance_type: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, name: Optional[pulumi.Input[str]] = None, @@ -467,6 +500,7 @@ def __init__(__self__, :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[str] display_name: The human-readable display name of the Bigtable instance. Defaults to the instance `name`. + :param pulumi.Input[bool] force_destroy: Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. :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, and all instances will become `"PRODUCTION"` instances. This means that new and existing `"DEVELOPMENT"` instances will be converted to @@ -595,6 +629,7 @@ def _internal_init(__self__, clusters: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceClusterArgs']]]]] = None, deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, + force_destroy: Optional[pulumi.Input[bool]] = None, instance_type: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, name: Optional[pulumi.Input[str]] = None, @@ -611,6 +646,7 @@ def _internal_init(__self__, __props__.__dict__["clusters"] = clusters __props__.__dict__["deletion_protection"] = deletion_protection __props__.__dict__["display_name"] = display_name + __props__.__dict__["force_destroy"] = force_destroy __props__.__dict__["instance_type"] = instance_type __props__.__dict__["labels"] = labels __props__.__dict__["name"] = name @@ -633,6 +669,7 @@ def get(resource_name: str, deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + force_destroy: Optional[pulumi.Input[bool]] = None, instance_type: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, name: Optional[pulumi.Input[str]] = None, @@ -656,6 +693,7 @@ def get(resource_name: str, :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. ----- + :param pulumi.Input[bool] force_destroy: Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. :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, and all instances will become `"PRODUCTION"` instances. This means that new and existing `"DEVELOPMENT"` instances will be converted to @@ -678,6 +716,7 @@ def get(resource_name: str, __props__.__dict__["deletion_protection"] = deletion_protection __props__.__dict__["display_name"] = display_name __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["force_destroy"] = force_destroy __props__.__dict__["instance_type"] = instance_type __props__.__dict__["labels"] = labels __props__.__dict__["name"] = name @@ -724,6 +763,14 @@ def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: """ return pulumi.get(self, "effective_labels") + @property + @pulumi.getter(name="forceDestroy") + def force_destroy(self) -> pulumi.Output[Optional[bool]]: + """ + Deleting a BigTable instance can be blocked if any backups are present in the instance. When `force_destroy` is set to true, the Provider will delete all backups found in the BigTable instance before attempting to delete the instance itself. Defaults to false. + """ + return pulumi.get(self, "force_destroy") + @property @pulumi.getter(name="instanceType") def instance_type(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/clouddeploy/_inputs.py b/sdk/python/pulumi_gcp/clouddeploy/_inputs.py index 5225cc84dd..b9820757ff 100644 --- a/sdk/python/pulumi_gcp/clouddeploy/_inputs.py +++ b/sdk/python/pulumi_gcp/clouddeploy/_inputs.py @@ -1869,12 +1869,14 @@ def __init__(__self__, *, artifact_storage: Optional[pulumi.Input[str]] = None, execution_timeout: Optional[pulumi.Input[str]] = None, service_account: Optional[pulumi.Input[str]] = None, + verbose: Optional[pulumi.Input[bool]] = None, worker_pool: Optional[pulumi.Input[str]] = None): """ :param pulumi.Input[Sequence[pulumi.Input[str]]] usages: Required. Usages when this configuration should be applied. :param pulumi.Input[str] artifact_storage: Optional. Cloud Storage location in which to store execution outputs. This can either be a bucket ("gs://my-bucket") or a path within a bucket ("gs://my-bucket/my-dir"). If unspecified, a default bucket located in the same region will be used. :param pulumi.Input[str] execution_timeout: Optional. Execution timeout for a Cloud Build Execution. This must be between 10m and 24h in seconds format. If unspecified, a default timeout of 1h is used. :param pulumi.Input[str] service_account: Optional. Google service account to use for execution. If unspecified, the project execution service account (-compute@developer.gserviceaccount.com) is used. + :param pulumi.Input[bool] verbose: Optional. If true, additional logging will be enabled when running builds in this execution environment. :param pulumi.Input[str] worker_pool: Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. """ pulumi.set(__self__, "usages", usages) @@ -1884,6 +1886,8 @@ def __init__(__self__, *, pulumi.set(__self__, "execution_timeout", execution_timeout) if service_account is not None: pulumi.set(__self__, "service_account", service_account) + if verbose is not None: + pulumi.set(__self__, "verbose", verbose) if worker_pool is not None: pulumi.set(__self__, "worker_pool", worker_pool) @@ -1935,6 +1939,18 @@ def service_account(self) -> Optional[pulumi.Input[str]]: def service_account(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "service_account", value) + @property + @pulumi.getter + def verbose(self) -> Optional[pulumi.Input[bool]]: + """ + Optional. If true, additional logging will be enabled when running builds in this execution environment. + """ + return pulumi.get(self, "verbose") + + @verbose.setter + def verbose(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "verbose", value) + @property @pulumi.getter(name="workerPool") def worker_pool(self) -> Optional[pulumi.Input[str]]: diff --git a/sdk/python/pulumi_gcp/clouddeploy/outputs.py b/sdk/python/pulumi_gcp/clouddeploy/outputs.py index f98409ed72..7cc349d4ef 100644 --- a/sdk/python/pulumi_gcp/clouddeploy/outputs.py +++ b/sdk/python/pulumi_gcp/clouddeploy/outputs.py @@ -1871,12 +1871,14 @@ def __init__(__self__, *, artifact_storage: Optional[str] = None, execution_timeout: Optional[str] = None, service_account: Optional[str] = None, + verbose: Optional[bool] = None, worker_pool: Optional[str] = None): """ :param Sequence[str] usages: Required. Usages when this configuration should be applied. :param str artifact_storage: Optional. Cloud Storage location in which to store execution outputs. This can either be a bucket ("gs://my-bucket") or a path within a bucket ("gs://my-bucket/my-dir"). If unspecified, a default bucket located in the same region will be used. :param str execution_timeout: Optional. Execution timeout for a Cloud Build Execution. This must be between 10m and 24h in seconds format. If unspecified, a default timeout of 1h is used. :param str service_account: Optional. Google service account to use for execution. If unspecified, the project execution service account (-compute@developer.gserviceaccount.com) is used. + :param bool verbose: Optional. If true, additional logging will be enabled when running builds in this execution environment. :param str worker_pool: Optional. The resource name of the `WorkerPool`, with the format `projects/{project}/locations/{location}/workerPools/{worker_pool}`. If this optional field is unspecified, the default Cloud Build pool will be used. """ pulumi.set(__self__, "usages", usages) @@ -1886,6 +1888,8 @@ def __init__(__self__, *, pulumi.set(__self__, "execution_timeout", execution_timeout) if service_account is not None: pulumi.set(__self__, "service_account", service_account) + if verbose is not None: + pulumi.set(__self__, "verbose", verbose) if worker_pool is not None: pulumi.set(__self__, "worker_pool", worker_pool) @@ -1921,6 +1925,14 @@ def service_account(self) -> Optional[str]: """ return pulumi.get(self, "service_account") + @property + @pulumi.getter + def verbose(self) -> Optional[bool]: + """ + Optional. If true, additional logging will be enabled when running builds in this execution environment. + """ + return pulumi.get(self, "verbose") + @property @pulumi.getter(name="workerPool") def worker_pool(self) -> Optional[str]: diff --git a/sdk/python/pulumi_gcp/compute/__init__.py b/sdk/python/pulumi_gcp/compute/__init__.py index 1a317e1703..43e0a5221a 100644 --- a/sdk/python/pulumi_gcp/compute/__init__.py +++ b/sdk/python/pulumi_gcp/compute/__init__.py @@ -77,6 +77,7 @@ from .get_router import * from .get_router_nat import * from .get_router_status import * +from .get_security_policy import * from .get_snapshot import * from .get_snapshot_iam_policy import * from .get_ssl_policy import * @@ -135,6 +136,7 @@ from .organization_security_policy_rule import * from .packet_mirroring import * from .per_instance_config import * +from .project_cloud_armor_tier import * from .project_default_network_tier import * from .project_metadata import * from .project_metadata_item import * diff --git a/sdk/python/pulumi_gcp/compute/_inputs.py b/sdk/python/pulumi_gcp/compute/_inputs.py index 64034a0fb2..f4964d7b68 100644 --- a/sdk/python/pulumi_gcp/compute/_inputs.py +++ b/sdk/python/pulumi_gcp/compute/_inputs.py @@ -131,6 +131,7 @@ 'InstanceGroupManagerInstanceLifecyclePolicyArgs', 'InstanceGroupManagerNamedPortArgs', 'InstanceGroupManagerParamsArgs', + 'InstanceGroupManagerStandbyPolicyArgs', 'InstanceGroupManagerStatefulDiskArgs', 'InstanceGroupManagerStatefulExternalIpArgs', 'InstanceGroupManagerStatefulInternalIpArgs', @@ -269,6 +270,7 @@ 'RegionInstanceGroupManagerInstanceLifecyclePolicyArgs', 'RegionInstanceGroupManagerNamedPortArgs', 'RegionInstanceGroupManagerParamsArgs', + 'RegionInstanceGroupManagerStandbyPolicyArgs', 'RegionInstanceGroupManagerStatefulDiskArgs', 'RegionInstanceGroupManagerStatefulExternalIpArgs', 'RegionInstanceGroupManagerStatefulInternalIpArgs', @@ -9696,6 +9698,47 @@ def resource_manager_tags(self, value: Optional[pulumi.Input[Mapping[str, Any]]] pulumi.set(self, "resource_manager_tags", value) +@pulumi.input_type +class InstanceGroupManagerStandbyPolicyArgs: + def __init__(__self__, *, + initial_delay_sec: Optional[pulumi.Input[int]] = None, + mode: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[int] initial_delay_sec: Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + :param pulumi.Input[str] mode: Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + - - - + """ + if initial_delay_sec is not None: + pulumi.set(__self__, "initial_delay_sec", initial_delay_sec) + if mode is not None: + pulumi.set(__self__, "mode", mode) + + @property + @pulumi.getter(name="initialDelaySec") + def initial_delay_sec(self) -> Optional[pulumi.Input[int]]: + """ + Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + """ + return pulumi.get(self, "initial_delay_sec") + + @initial_delay_sec.setter + def initial_delay_sec(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "initial_delay_sec", value) + + @property + @pulumi.getter + def mode(self) -> Optional[pulumi.Input[str]]: + """ + Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + - - - + """ + return pulumi.get(self, "mode") + + @mode.setter + def mode(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mode", value) + + @pulumi.input_type class InstanceGroupManagerStatefulDiskArgs: def __init__(__self__, *, @@ -19477,6 +19520,47 @@ def resource_manager_tags(self, value: Optional[pulumi.Input[Mapping[str, Any]]] pulumi.set(self, "resource_manager_tags", value) +@pulumi.input_type +class RegionInstanceGroupManagerStandbyPolicyArgs: + def __init__(__self__, *, + initial_delay_sec: Optional[pulumi.Input[int]] = None, + mode: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[int] initial_delay_sec: Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + :param pulumi.Input[str] mode: Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + - - - + """ + if initial_delay_sec is not None: + pulumi.set(__self__, "initial_delay_sec", initial_delay_sec) + if mode is not None: + pulumi.set(__self__, "mode", mode) + + @property + @pulumi.getter(name="initialDelaySec") + def initial_delay_sec(self) -> Optional[pulumi.Input[int]]: + """ + Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + """ + return pulumi.get(self, "initial_delay_sec") + + @initial_delay_sec.setter + def initial_delay_sec(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "initial_delay_sec", value) + + @property + @pulumi.getter + def mode(self) -> Optional[pulumi.Input[str]]: + """ + Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + - - - + """ + return pulumi.get(self, "mode") + + @mode.setter + def mode(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mode", value) + + @pulumi.input_type class RegionInstanceGroupManagerStatefulDiskArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/compute/backend_service.py b/sdk/python/pulumi_gcp/compute/backend_service.py index 567149cd7d..69ceba2628 100644 --- a/sdk/python/pulumi_gcp/compute/backend_service.py +++ b/sdk/python/pulumi_gcp/compute/backend_service.py @@ -41,6 +41,7 @@ def __init__(__self__, *, protocol: Optional[pulumi.Input[str]] = None, security_policy: Optional[pulumi.Input[str]] = None, security_settings: Optional[pulumi.Input['BackendServiceSecuritySettingsArgs']] = None, + service_lb_policy: Optional[pulumi.Input[str]] = None, session_affinity: Optional[pulumi.Input[str]] = None, timeout_sec: Optional[pulumi.Input[int]] = None): """ @@ -179,6 +180,8 @@ def __init__(__self__, *, load_balancing_scheme set to INTERNAL_MANAGED; or a global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED. Structure is documented below. + :param pulumi.Input[str] service_lb_policy: URL to networkservices.ServiceLbPolicy resource. + Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. :param pulumi.Input[str] session_affinity: Type of session affinity to use. The default is NONE. Session affinity is not applicable if the protocol is UDP. Possible values are: `NONE`, `CLIENT_IP`, `CLIENT_IP_PORT_PROTO`, `CLIENT_IP_PROTO`, `GENERATED_COOKIE`, `HEADER_FIELD`, `HTTP_COOKIE`. @@ -235,6 +238,8 @@ def __init__(__self__, *, pulumi.set(__self__, "security_policy", security_policy) if security_settings is not None: pulumi.set(__self__, "security_settings", security_settings) + if service_lb_policy is not None: + pulumi.set(__self__, "service_lb_policy", service_lb_policy) if session_affinity is not None: pulumi.set(__self__, "session_affinity", session_affinity) if timeout_sec is not None: @@ -649,6 +654,19 @@ def security_settings(self) -> Optional[pulumi.Input['BackendServiceSecuritySett def security_settings(self, value: Optional[pulumi.Input['BackendServiceSecuritySettingsArgs']]): pulumi.set(self, "security_settings", value) + @property + @pulumi.getter(name="serviceLbPolicy") + def service_lb_policy(self) -> Optional[pulumi.Input[str]]: + """ + URL to networkservices.ServiceLbPolicy resource. + Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + """ + return pulumi.get(self, "service_lb_policy") + + @service_lb_policy.setter + def service_lb_policy(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "service_lb_policy", value) + @property @pulumi.getter(name="sessionAffinity") def session_affinity(self) -> Optional[pulumi.Input[str]]: @@ -709,6 +727,7 @@ def __init__(__self__, *, security_policy: Optional[pulumi.Input[str]] = None, security_settings: Optional[pulumi.Input['BackendServiceSecuritySettingsArgs']] = None, self_link: Optional[pulumi.Input[str]] = None, + service_lb_policy: Optional[pulumi.Input[str]] = None, session_affinity: Optional[pulumi.Input[str]] = None, timeout_sec: Optional[pulumi.Input[int]] = None): """ @@ -852,6 +871,8 @@ def __init__(__self__, *, load_balancing_scheme set to INTERNAL_SELF_MANAGED. Structure is documented below. :param pulumi.Input[str] self_link: The URI of the created resource. + :param pulumi.Input[str] service_lb_policy: URL to networkservices.ServiceLbPolicy resource. + Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. :param pulumi.Input[str] session_affinity: Type of session affinity to use. The default is NONE. Session affinity is not applicable if the protocol is UDP. Possible values are: `NONE`, `CLIENT_IP`, `CLIENT_IP_PORT_PROTO`, `CLIENT_IP_PROTO`, `GENERATED_COOKIE`, `HEADER_FIELD`, `HTTP_COOKIE`. @@ -916,6 +937,8 @@ def __init__(__self__, *, pulumi.set(__self__, "security_settings", security_settings) if self_link is not None: pulumi.set(__self__, "self_link", self_link) + if service_lb_policy is not None: + pulumi.set(__self__, "service_lb_policy", service_lb_policy) if session_affinity is not None: pulumi.set(__self__, "session_affinity", session_affinity) if timeout_sec is not None: @@ -1379,6 +1402,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="serviceLbPolicy") + def service_lb_policy(self) -> Optional[pulumi.Input[str]]: + """ + URL to networkservices.ServiceLbPolicy resource. + Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + """ + return pulumi.get(self, "service_lb_policy") + + @service_lb_policy.setter + def service_lb_policy(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "service_lb_policy", value) + @property @pulumi.getter(name="sessionAffinity") def session_affinity(self) -> Optional[pulumi.Input[str]]: @@ -1437,6 +1473,7 @@ def __init__(__self__, protocol: Optional[pulumi.Input[str]] = None, security_policy: Optional[pulumi.Input[str]] = None, security_settings: Optional[pulumi.Input[pulumi.InputType['BackendServiceSecuritySettingsArgs']]] = None, + service_lb_policy: Optional[pulumi.Input[str]] = None, session_affinity: Optional[pulumi.Input[str]] = None, timeout_sec: Optional[pulumi.Input[int]] = None, __props__=None): @@ -1857,6 +1894,8 @@ def __init__(__self__, load_balancing_scheme set to INTERNAL_MANAGED; or a global backend service with the load_balancing_scheme set to INTERNAL_SELF_MANAGED. Structure is documented below. + :param pulumi.Input[str] service_lb_policy: URL to networkservices.ServiceLbPolicy resource. + Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. :param pulumi.Input[str] session_affinity: Type of session affinity to use. The default is NONE. Session affinity is not applicable if the protocol is UDP. Possible values are: `NONE`, `CLIENT_IP`, `CLIENT_IP_PORT_PROTO`, `CLIENT_IP_PROTO`, `GENERATED_COOKIE`, `HEADER_FIELD`, `HTTP_COOKIE`. @@ -2190,6 +2229,7 @@ def _internal_init(__self__, protocol: Optional[pulumi.Input[str]] = None, security_policy: Optional[pulumi.Input[str]] = None, security_settings: Optional[pulumi.Input[pulumi.InputType['BackendServiceSecuritySettingsArgs']]] = None, + service_lb_policy: Optional[pulumi.Input[str]] = None, session_affinity: Optional[pulumi.Input[str]] = None, timeout_sec: Optional[pulumi.Input[int]] = None, __props__=None): @@ -2226,6 +2266,7 @@ def _internal_init(__self__, __props__.__dict__["protocol"] = protocol __props__.__dict__["security_policy"] = security_policy __props__.__dict__["security_settings"] = security_settings + __props__.__dict__["service_lb_policy"] = service_lb_policy __props__.__dict__["session_affinity"] = session_affinity __props__.__dict__["timeout_sec"] = timeout_sec __props__.__dict__["creation_timestamp"] = None @@ -2271,6 +2312,7 @@ def get(resource_name: str, security_policy: Optional[pulumi.Input[str]] = None, security_settings: Optional[pulumi.Input[pulumi.InputType['BackendServiceSecuritySettingsArgs']]] = None, self_link: Optional[pulumi.Input[str]] = None, + service_lb_policy: Optional[pulumi.Input[str]] = None, session_affinity: Optional[pulumi.Input[str]] = None, timeout_sec: Optional[pulumi.Input[int]] = None) -> 'BackendService': """ @@ -2419,6 +2461,8 @@ def get(resource_name: str, load_balancing_scheme set to INTERNAL_SELF_MANAGED. Structure is documented below. :param pulumi.Input[str] self_link: The URI of the created resource. + :param pulumi.Input[str] service_lb_policy: URL to networkservices.ServiceLbPolicy resource. + Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. :param pulumi.Input[str] session_affinity: Type of session affinity to use. The default is NONE. Session affinity is not applicable if the protocol is UDP. Possible values are: `NONE`, `CLIENT_IP`, `CLIENT_IP_PORT_PROTO`, `CLIENT_IP_PROTO`, `GENERATED_COOKIE`, `HEADER_FIELD`, `HTTP_COOKIE`. @@ -2458,6 +2502,7 @@ def get(resource_name: str, __props__.__dict__["security_policy"] = security_policy __props__.__dict__["security_settings"] = security_settings __props__.__dict__["self_link"] = self_link + __props__.__dict__["service_lb_policy"] = service_lb_policy __props__.__dict__["session_affinity"] = session_affinity __props__.__dict__["timeout_sec"] = timeout_sec return BackendService(resource_name, opts=opts, __props__=__props__) @@ -2804,6 +2849,15 @@ def self_link(self) -> pulumi.Output[str]: """ return pulumi.get(self, "self_link") + @property + @pulumi.getter(name="serviceLbPolicy") + def service_lb_policy(self) -> pulumi.Output[Optional[str]]: + """ + URL to networkservices.ServiceLbPolicy resource. + Can only be set if load balancing scheme is EXTERNAL, EXTERNAL_MANAGED, INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global. + """ + return pulumi.get(self, "service_lb_policy") + @property @pulumi.getter(name="sessionAffinity") def session_affinity(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/compute/disk.py b/sdk/python/pulumi_gcp/compute/disk.py index 8b447e7519..01e5dafae9 100644 --- a/sdk/python/pulumi_gcp/compute/disk.py +++ b/sdk/python/pulumi_gcp/compute/disk.py @@ -37,6 +37,7 @@ def __init__(__self__, *, source_disk: Optional[pulumi.Input[str]] = None, source_image_encryption_key: Optional[pulumi.Input['DiskSourceImageEncryptionKeyArgs']] = None, source_snapshot_encryption_key: Optional[pulumi.Input['DiskSourceSnapshotEncryptionKeyArgs']] = None, + storage_pool: Optional[pulumi.Input[str]] = None, type: Optional[pulumi.Input[str]] = None, zone: Optional[pulumi.Input[str]] = None): """ @@ -140,6 +141,10 @@ def __init__(__self__, *, if the source snapshot is protected by a customer-supplied encryption key. Structure is documented below. + :param pulumi.Input[str] storage_pool: The URL of the storage pool in which the new disk is created. + For example: + * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * /projects/{project}/zones/{zone}/storagePools/{storagePool} :param pulumi.Input[str] type: URL of the disk type resource describing which disk type to use to create the disk. Provide this when creating the disk. :param pulumi.Input[str] zone: A reference to the zone where the disk resides. @@ -189,6 +194,8 @@ def __init__(__self__, *, pulumi.set(__self__, "source_image_encryption_key", source_image_encryption_key) if source_snapshot_encryption_key is not None: pulumi.set(__self__, "source_snapshot_encryption_key", source_snapshot_encryption_key) + if storage_pool is not None: + pulumi.set(__self__, "storage_pool", storage_pool) if type is not None: pulumi.set(__self__, "type", type) if zone is not None: @@ -527,6 +534,21 @@ def source_snapshot_encryption_key(self) -> Optional[pulumi.Input['DiskSourceSna def source_snapshot_encryption_key(self, value: Optional[pulumi.Input['DiskSourceSnapshotEncryptionKeyArgs']]): pulumi.set(self, "source_snapshot_encryption_key", value) + @property + @pulumi.getter(name="storagePool") + def storage_pool(self) -> Optional[pulumi.Input[str]]: + """ + The URL of the storage pool in which the new disk is created. + For example: + * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * /projects/{project}/zones/{zone}/storagePools/{storagePool} + """ + return pulumi.get(self, "storage_pool") + + @storage_pool.setter + def storage_pool(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "storage_pool", value) + @property @pulumi.getter def type(self) -> Optional[pulumi.Input[str]]: @@ -588,6 +610,7 @@ def __init__(__self__, *, source_image_id: Optional[pulumi.Input[str]] = None, source_snapshot_encryption_key: Optional[pulumi.Input['DiskSourceSnapshotEncryptionKeyArgs']] = None, source_snapshot_id: Optional[pulumi.Input[str]] = None, + storage_pool: Optional[pulumi.Input[str]] = None, type: Optional[pulumi.Input[str]] = None, users: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, zone: Optional[pulumi.Input[str]] = None): @@ -716,6 +739,10 @@ def __init__(__self__, *, that was later deleted and recreated under the same name, the source snapshot ID would identify the exact version of the snapshot that was used. + :param pulumi.Input[str] storage_pool: The URL of the storage pool in which the new disk is created. + For example: + * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * /projects/{project}/zones/{zone}/storagePools/{storagePool} :param pulumi.Input[str] type: URL of the disk type resource describing which disk type to use to create the disk. Provide this when creating the disk. :param pulumi.Input[Sequence[pulumi.Input[str]]] users: Links to the users of the disk (attached instances) in form: @@ -789,6 +816,8 @@ def __init__(__self__, *, pulumi.set(__self__, "source_snapshot_encryption_key", source_snapshot_encryption_key) if source_snapshot_id is not None: pulumi.set(__self__, "source_snapshot_id", source_snapshot_id) + if storage_pool is not None: + pulumi.set(__self__, "storage_pool", storage_pool) if type is not None: pulumi.set(__self__, "type", type) if users is not None: @@ -1274,6 +1303,21 @@ def source_snapshot_id(self) -> Optional[pulumi.Input[str]]: def source_snapshot_id(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "source_snapshot_id", value) + @property + @pulumi.getter(name="storagePool") + def storage_pool(self) -> Optional[pulumi.Input[str]]: + """ + The URL of the storage pool in which the new disk is created. + For example: + * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * /projects/{project}/zones/{zone}/storagePools/{storagePool} + """ + return pulumi.get(self, "storage_pool") + + @storage_pool.setter + def storage_pool(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "storage_pool", value) + @property @pulumi.getter def type(self) -> Optional[pulumi.Input[str]]: @@ -1339,6 +1383,7 @@ def __init__(__self__, source_disk: Optional[pulumi.Input[str]] = None, source_image_encryption_key: Optional[pulumi.Input[pulumi.InputType['DiskSourceImageEncryptionKeyArgs']]] = None, source_snapshot_encryption_key: Optional[pulumi.Input[pulumi.InputType['DiskSourceSnapshotEncryptionKeyArgs']]] = None, + storage_pool: Optional[pulumi.Input[str]] = None, type: Optional[pulumi.Input[str]] = None, zone: Optional[pulumi.Input[str]] = None, __props__=None): @@ -1562,6 +1607,10 @@ def __init__(__self__, if the source snapshot is protected by a customer-supplied encryption key. Structure is documented below. + :param pulumi.Input[str] storage_pool: The URL of the storage pool in which the new disk is created. + For example: + * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * /projects/{project}/zones/{zone}/storagePools/{storagePool} :param pulumi.Input[str] type: URL of the disk type resource describing which disk type to use to create the disk. Provide this when creating the disk. :param pulumi.Input[str] zone: A reference to the zone where the disk resides. @@ -1727,6 +1776,7 @@ def _internal_init(__self__, source_disk: Optional[pulumi.Input[str]] = None, source_image_encryption_key: Optional[pulumi.Input[pulumi.InputType['DiskSourceImageEncryptionKeyArgs']]] = None, source_snapshot_encryption_key: Optional[pulumi.Input[pulumi.InputType['DiskSourceSnapshotEncryptionKeyArgs']]] = None, + storage_pool: Optional[pulumi.Input[str]] = None, type: Optional[pulumi.Input[str]] = None, zone: Optional[pulumi.Input[str]] = None, __props__=None): @@ -1759,6 +1809,7 @@ def _internal_init(__self__, __props__.__dict__["source_disk"] = source_disk __props__.__dict__["source_image_encryption_key"] = source_image_encryption_key __props__.__dict__["source_snapshot_encryption_key"] = source_snapshot_encryption_key + __props__.__dict__["storage_pool"] = storage_pool __props__.__dict__["type"] = type __props__.__dict__["zone"] = zone __props__.__dict__["creation_timestamp"] = None @@ -1817,6 +1868,7 @@ def get(resource_name: str, source_image_id: Optional[pulumi.Input[str]] = None, source_snapshot_encryption_key: Optional[pulumi.Input[pulumi.InputType['DiskSourceSnapshotEncryptionKeyArgs']]] = None, source_snapshot_id: Optional[pulumi.Input[str]] = None, + storage_pool: Optional[pulumi.Input[str]] = None, type: Optional[pulumi.Input[str]] = None, users: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, zone: Optional[pulumi.Input[str]] = None) -> 'Disk': @@ -1950,6 +2002,10 @@ def get(resource_name: str, that was later deleted and recreated under the same name, the source snapshot ID would identify the exact version of the snapshot that was used. + :param pulumi.Input[str] storage_pool: The URL of the storage pool in which the new disk is created. + For example: + * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * /projects/{project}/zones/{zone}/storagePools/{storagePool} :param pulumi.Input[str] type: URL of the disk type resource describing which disk type to use to create the disk. Provide this when creating the disk. :param pulumi.Input[Sequence[pulumi.Input[str]]] users: Links to the users of the disk (attached instances) in form: @@ -1992,6 +2048,7 @@ def get(resource_name: str, __props__.__dict__["source_image_id"] = source_image_id __props__.__dict__["source_snapshot_encryption_key"] = source_snapshot_encryption_key __props__.__dict__["source_snapshot_id"] = source_snapshot_id + __props__.__dict__["storage_pool"] = storage_pool __props__.__dict__["type"] = type __props__.__dict__["users"] = users __props__.__dict__["zone"] = zone @@ -2347,6 +2404,17 @@ def source_snapshot_id(self) -> pulumi.Output[str]: """ return pulumi.get(self, "source_snapshot_id") + @property + @pulumi.getter(name="storagePool") + def storage_pool(self) -> pulumi.Output[Optional[str]]: + """ + The URL of the storage pool in which the new disk is created. + For example: + * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool} + * /projects/{project}/zones/{zone}/storagePools/{storagePool} + """ + return pulumi.get(self, "storage_pool") + @property @pulumi.getter def type(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/compute/get_backend_service.py b/sdk/python/pulumi_gcp/compute/get_backend_service.py index c0911f0660..8af5825976 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_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): + 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, service_lb_policy=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) @@ -113,6 +113,9 @@ def __init__(__self__, affinity_cookie_ttl_sec=None, backends=None, cdn_policies if self_link and not isinstance(self_link, str): raise TypeError("Expected argument 'self_link' to be a str") pulumi.set(__self__, "self_link", self_link) + if service_lb_policy and not isinstance(service_lb_policy, str): + raise TypeError("Expected argument 'service_lb_policy' to be a str") + pulumi.set(__self__, "service_lb_policy", service_lb_policy) if session_affinity and not isinstance(session_affinity, str): raise TypeError("Expected argument 'session_affinity' to be a str") pulumi.set(__self__, "session_affinity", session_affinity) @@ -303,6 +306,11 @@ def self_link(self) -> str: """ return pulumi.get(self, "self_link") + @property + @pulumi.getter(name="serviceLbPolicy") + def service_lb_policy(self) -> str: + return pulumi.get(self, "service_lb_policy") + @property @pulumi.getter(name="sessionAffinity") def session_affinity(self) -> str: @@ -356,6 +364,7 @@ def __await__(self): security_policy=self.security_policy, security_settings=self.security_settings, self_link=self.self_link, + service_lb_policy=self.service_lb_policy, session_affinity=self.session_affinity, timeout_sec=self.timeout_sec) @@ -413,6 +422,7 @@ def get_backend_service(name: Optional[str] = None, security_policy=pulumi.get(__ret__, 'security_policy'), security_settings=pulumi.get(__ret__, 'security_settings'), self_link=pulumi.get(__ret__, 'self_link'), + service_lb_policy=pulumi.get(__ret__, 'service_lb_policy'), session_affinity=pulumi.get(__ret__, 'session_affinity'), timeout_sec=pulumi.get(__ret__, 'timeout_sec')) diff --git a/sdk/python/pulumi_gcp/compute/get_disk.py b/sdk/python/pulumi_gcp/compute/get_disk.py index 46e7c3ec82..db3c6ade43 100644 --- a/sdk/python/pulumi_gcp/compute/get_disk.py +++ b/sdk/python/pulumi_gcp/compute/get_disk.py @@ -22,7 +22,7 @@ class GetDiskResult: """ A collection of values returned by getDisk. """ - def __init__(__self__, async_primary_disks=None, creation_timestamp=None, description=None, disk_encryption_keys=None, disk_id=None, effective_labels=None, enable_confidential_compute=None, guest_os_features=None, id=None, image=None, interface=None, label_fingerprint=None, labels=None, last_attach_timestamp=None, last_detach_timestamp=None, licenses=None, multi_writer=None, name=None, physical_block_size_bytes=None, project=None, provisioned_iops=None, provisioned_throughput=None, pulumi_labels=None, resource_policies=None, self_link=None, size=None, snapshot=None, source_disk=None, source_disk_id=None, source_image_encryption_keys=None, source_image_id=None, source_snapshot_encryption_keys=None, source_snapshot_id=None, type=None, users=None, zone=None): + def __init__(__self__, async_primary_disks=None, creation_timestamp=None, description=None, disk_encryption_keys=None, disk_id=None, effective_labels=None, enable_confidential_compute=None, guest_os_features=None, id=None, image=None, interface=None, label_fingerprint=None, labels=None, last_attach_timestamp=None, last_detach_timestamp=None, licenses=None, multi_writer=None, name=None, physical_block_size_bytes=None, project=None, provisioned_iops=None, provisioned_throughput=None, pulumi_labels=None, resource_policies=None, self_link=None, size=None, snapshot=None, source_disk=None, source_disk_id=None, source_image_encryption_keys=None, source_image_id=None, source_snapshot_encryption_keys=None, source_snapshot_id=None, storage_pool=None, type=None, users=None, zone=None): if async_primary_disks and not isinstance(async_primary_disks, list): raise TypeError("Expected argument 'async_primary_disks' to be a list") pulumi.set(__self__, "async_primary_disks", async_primary_disks) @@ -122,6 +122,9 @@ def __init__(__self__, async_primary_disks=None, creation_timestamp=None, descri if source_snapshot_id and not isinstance(source_snapshot_id, str): raise TypeError("Expected argument 'source_snapshot_id' to be a str") pulumi.set(__self__, "source_snapshot_id", source_snapshot_id) + if storage_pool and not isinstance(storage_pool, str): + raise TypeError("Expected argument 'storage_pool' to be a str") + pulumi.set(__self__, "storage_pool", storage_pool) if type and not isinstance(type, str): raise TypeError("Expected argument 'type' to be a str") pulumi.set(__self__, "type", type) @@ -355,6 +358,11 @@ def source_snapshot_id(self) -> str: """ return pulumi.get(self, "source_snapshot_id") + @property + @pulumi.getter(name="storagePool") + def storage_pool(self) -> str: + return pulumi.get(self, "storage_pool") + @property @pulumi.getter def type(self) -> str: @@ -421,6 +429,7 @@ def __await__(self): source_image_id=self.source_image_id, source_snapshot_encryption_keys=self.source_snapshot_encryption_keys, source_snapshot_id=self.source_snapshot_id, + storage_pool=self.storage_pool, type=self.type, users=self.users, zone=self.zone) @@ -498,6 +507,7 @@ def get_disk(name: Optional[str] = None, source_image_id=pulumi.get(__ret__, 'source_image_id'), source_snapshot_encryption_keys=pulumi.get(__ret__, 'source_snapshot_encryption_keys'), source_snapshot_id=pulumi.get(__ret__, 'source_snapshot_id'), + storage_pool=pulumi.get(__ret__, 'storage_pool'), type=pulumi.get(__ret__, 'type'), users=pulumi.get(__ret__, 'users'), zone=pulumi.get(__ret__, 'zone')) diff --git a/sdk/python/pulumi_gcp/compute/get_instance.py b/sdk/python/pulumi_gcp/compute/get_instance.py index 804c43b5e7..767399595f 100644 --- a/sdk/python/pulumi_gcp/compute/get_instance.py +++ b/sdk/python/pulumi_gcp/compute/get_instance.py @@ -22,7 +22,7 @@ class GetInstanceResult: """ A collection of values returned by getInstance. """ - def __init__(__self__, advanced_machine_features=None, allow_stopping_for_update=None, attached_disks=None, boot_disks=None, can_ip_forward=None, confidential_instance_configs=None, cpu_platform=None, current_status=None, deletion_protection=None, description=None, desired_status=None, effective_labels=None, enable_display=None, guest_accelerators=None, hostname=None, id=None, instance_id=None, label_fingerprint=None, labels=None, machine_type=None, metadata=None, metadata_fingerprint=None, metadata_startup_script=None, min_cpu_platform=None, name=None, network_interfaces=None, network_performance_configs=None, params=None, project=None, pulumi_labels=None, reservation_affinities=None, resource_policies=None, schedulings=None, scratch_disks=None, self_link=None, service_accounts=None, shielded_instance_configs=None, tags=None, tags_fingerprint=None, zone=None): + def __init__(__self__, advanced_machine_features=None, allow_stopping_for_update=None, attached_disks=None, boot_disks=None, can_ip_forward=None, confidential_instance_configs=None, cpu_platform=None, current_status=None, deletion_protection=None, description=None, desired_status=None, effective_labels=None, enable_display=None, guest_accelerators=None, hostname=None, id=None, instance_id=None, label_fingerprint=None, labels=None, machine_type=None, metadata=None, metadata_fingerprint=None, metadata_startup_script=None, min_cpu_platform=None, name=None, network_interfaces=None, network_performance_configs=None, params=None, partner_metadata=None, project=None, pulumi_labels=None, reservation_affinities=None, resource_policies=None, schedulings=None, scratch_disks=None, self_link=None, service_accounts=None, shielded_instance_configs=None, tags=None, tags_fingerprint=None, zone=None): if advanced_machine_features and not isinstance(advanced_machine_features, list): raise TypeError("Expected argument 'advanced_machine_features' to be a list") pulumi.set(__self__, "advanced_machine_features", advanced_machine_features) @@ -107,6 +107,9 @@ def __init__(__self__, advanced_machine_features=None, allow_stopping_for_update if params and not isinstance(params, list): raise TypeError("Expected argument 'params' to be a list") pulumi.set(__self__, "params", params) + if partner_metadata and not isinstance(partner_metadata, dict): + raise TypeError("Expected argument 'partner_metadata' to be a dict") + pulumi.set(__self__, "partner_metadata", partner_metadata) if project and not isinstance(project, str): raise TypeError("Expected argument 'project' to be a str") pulumi.set(__self__, "project", project) @@ -341,6 +344,11 @@ def network_performance_configs(self) -> Sequence['outputs.GetInstanceNetworkPer def params(self) -> Sequence['outputs.GetInstanceParamResult']: return pulumi.get(self, "params") + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> Mapping[str, str]: + return pulumi.get(self, "partner_metadata") + @property @pulumi.getter def project(self) -> Optional[str]: @@ -457,6 +465,7 @@ def __await__(self): network_interfaces=self.network_interfaces, network_performance_configs=self.network_performance_configs, params=self.params, + partner_metadata=self.partner_metadata, project=self.project, pulumi_labels=self.pulumi_labels, reservation_affinities=self.reservation_affinities, @@ -539,6 +548,7 @@ def get_instance(name: Optional[str] = None, network_interfaces=pulumi.get(__ret__, 'network_interfaces'), network_performance_configs=pulumi.get(__ret__, 'network_performance_configs'), params=pulumi.get(__ret__, 'params'), + partner_metadata=pulumi.get(__ret__, 'partner_metadata'), project=pulumi.get(__ret__, 'project'), pulumi_labels=pulumi.get(__ret__, 'pulumi_labels'), reservation_affinities=pulumi.get(__ret__, 'reservation_affinities'), diff --git a/sdk/python/pulumi_gcp/compute/get_instance_group_manager.py b/sdk/python/pulumi_gcp/compute/get_instance_group_manager.py index 2d73d89c0c..8ebcac41e0 100644 --- a/sdk/python/pulumi_gcp/compute/get_instance_group_manager.py +++ b/sdk/python/pulumi_gcp/compute/get_instance_group_manager.py @@ -22,7 +22,7 @@ class GetInstanceGroupManagerResult: """ A collection of values returned by getInstanceGroupManager. """ - def __init__(__self__, all_instances_configs=None, auto_healing_policies=None, base_instance_name=None, creation_timestamp=None, description=None, fingerprint=None, id=None, instance_group=None, instance_lifecycle_policies=None, list_managed_instances_results=None, name=None, named_ports=None, operation=None, params=None, project=None, self_link=None, stateful_disks=None, stateful_external_ips=None, stateful_internal_ips=None, statuses=None, target_pools=None, target_size=None, update_policies=None, versions=None, wait_for_instances=None, wait_for_instances_status=None, zone=None): + def __init__(__self__, all_instances_configs=None, auto_healing_policies=None, base_instance_name=None, creation_timestamp=None, description=None, fingerprint=None, id=None, instance_group=None, instance_lifecycle_policies=None, list_managed_instances_results=None, name=None, named_ports=None, operation=None, params=None, project=None, self_link=None, standby_policies=None, stateful_disks=None, stateful_external_ips=None, stateful_internal_ips=None, statuses=None, target_pools=None, target_size=None, target_stopped_size=None, target_suspended_size=None, update_policies=None, versions=None, wait_for_instances=None, wait_for_instances_status=None, zone=None): if all_instances_configs and not isinstance(all_instances_configs, list): raise TypeError("Expected argument 'all_instances_configs' to be a list") pulumi.set(__self__, "all_instances_configs", all_instances_configs) @@ -71,6 +71,9 @@ def __init__(__self__, all_instances_configs=None, auto_healing_policies=None, b if self_link and not isinstance(self_link, str): raise TypeError("Expected argument 'self_link' to be a str") pulumi.set(__self__, "self_link", self_link) + if standby_policies and not isinstance(standby_policies, list): + raise TypeError("Expected argument 'standby_policies' to be a list") + pulumi.set(__self__, "standby_policies", standby_policies) if stateful_disks and not isinstance(stateful_disks, list): raise TypeError("Expected argument 'stateful_disks' to be a list") pulumi.set(__self__, "stateful_disks", stateful_disks) @@ -89,6 +92,12 @@ def __init__(__self__, all_instances_configs=None, auto_healing_policies=None, b if target_size and not isinstance(target_size, int): raise TypeError("Expected argument 'target_size' to be a int") pulumi.set(__self__, "target_size", target_size) + if target_stopped_size and not isinstance(target_stopped_size, int): + raise TypeError("Expected argument 'target_stopped_size' to be a int") + pulumi.set(__self__, "target_stopped_size", target_stopped_size) + if target_suspended_size and not isinstance(target_suspended_size, int): + raise TypeError("Expected argument 'target_suspended_size' to be a int") + pulumi.set(__self__, "target_suspended_size", target_suspended_size) if update_policies and not isinstance(update_policies, list): raise TypeError("Expected argument 'update_policies' to be a list") pulumi.set(__self__, "update_policies", update_policies) @@ -188,6 +197,11 @@ def project(self) -> Optional[str]: def self_link(self) -> Optional[str]: return pulumi.get(self, "self_link") + @property + @pulumi.getter(name="standbyPolicies") + def standby_policies(self) -> Sequence['outputs.GetInstanceGroupManagerStandbyPolicyResult']: + return pulumi.get(self, "standby_policies") + @property @pulumi.getter(name="statefulDisks") def stateful_disks(self) -> Sequence['outputs.GetInstanceGroupManagerStatefulDiskResult']: @@ -218,6 +232,16 @@ def target_pools(self) -> Sequence[str]: def target_size(self) -> int: return pulumi.get(self, "target_size") + @property + @pulumi.getter(name="targetStoppedSize") + def target_stopped_size(self) -> int: + return pulumi.get(self, "target_stopped_size") + + @property + @pulumi.getter(name="targetSuspendedSize") + def target_suspended_size(self) -> int: + return pulumi.get(self, "target_suspended_size") + @property @pulumi.getter(name="updatePolicies") def update_policies(self) -> Sequence['outputs.GetInstanceGroupManagerUpdatePolicyResult']: @@ -266,12 +290,15 @@ def __await__(self): params=self.params, project=self.project, self_link=self.self_link, + standby_policies=self.standby_policies, stateful_disks=self.stateful_disks, stateful_external_ips=self.stateful_external_ips, stateful_internal_ips=self.stateful_internal_ips, statuses=self.statuses, target_pools=self.target_pools, target_size=self.target_size, + target_stopped_size=self.target_stopped_size, + target_suspended_size=self.target_suspended_size, update_policies=self.update_policies, versions=self.versions, wait_for_instances=self.wait_for_instances, @@ -331,12 +358,15 @@ def get_instance_group_manager(name: Optional[str] = None, params=pulumi.get(__ret__, 'params'), project=pulumi.get(__ret__, 'project'), self_link=pulumi.get(__ret__, 'self_link'), + standby_policies=pulumi.get(__ret__, 'standby_policies'), stateful_disks=pulumi.get(__ret__, 'stateful_disks'), stateful_external_ips=pulumi.get(__ret__, 'stateful_external_ips'), stateful_internal_ips=pulumi.get(__ret__, 'stateful_internal_ips'), statuses=pulumi.get(__ret__, 'statuses'), target_pools=pulumi.get(__ret__, 'target_pools'), target_size=pulumi.get(__ret__, 'target_size'), + target_stopped_size=pulumi.get(__ret__, 'target_stopped_size'), + target_suspended_size=pulumi.get(__ret__, 'target_suspended_size'), update_policies=pulumi.get(__ret__, 'update_policies'), versions=pulumi.get(__ret__, 'versions'), wait_for_instances=pulumi.get(__ret__, 'wait_for_instances'), diff --git a/sdk/python/pulumi_gcp/compute/get_instance_template.py b/sdk/python/pulumi_gcp/compute/get_instance_template.py index 21b00c0dc9..f04d9e8702 100644 --- a/sdk/python/pulumi_gcp/compute/get_instance_template.py +++ b/sdk/python/pulumi_gcp/compute/get_instance_template.py @@ -22,7 +22,7 @@ class GetInstanceTemplateResult: """ A collection of values returned by getInstanceTemplate. """ - def __init__(__self__, advanced_machine_features=None, can_ip_forward=None, confidential_instance_configs=None, description=None, disks=None, effective_labels=None, enable_display=None, filter=None, guest_accelerators=None, id=None, instance_description=None, labels=None, machine_type=None, metadata=None, metadata_fingerprint=None, metadata_startup_script=None, min_cpu_platform=None, most_recent=None, name=None, name_prefix=None, network_interfaces=None, network_performance_configs=None, project=None, pulumi_labels=None, region=None, reservation_affinities=None, resource_manager_tags=None, resource_policies=None, schedulings=None, self_link=None, self_link_unique=None, service_accounts=None, shielded_instance_configs=None, tags=None, tags_fingerprint=None): + def __init__(__self__, advanced_machine_features=None, can_ip_forward=None, confidential_instance_configs=None, description=None, disks=None, effective_labels=None, enable_display=None, filter=None, guest_accelerators=None, id=None, instance_description=None, labels=None, machine_type=None, metadata=None, metadata_fingerprint=None, metadata_startup_script=None, min_cpu_platform=None, most_recent=None, name=None, name_prefix=None, network_interfaces=None, network_performance_configs=None, partner_metadata=None, project=None, pulumi_labels=None, region=None, reservation_affinities=None, resource_manager_tags=None, resource_policies=None, schedulings=None, self_link=None, self_link_unique=None, service_accounts=None, shielded_instance_configs=None, tags=None, tags_fingerprint=None): if advanced_machine_features and not isinstance(advanced_machine_features, list): raise TypeError("Expected argument 'advanced_machine_features' to be a list") pulumi.set(__self__, "advanced_machine_features", advanced_machine_features) @@ -89,6 +89,9 @@ def __init__(__self__, advanced_machine_features=None, can_ip_forward=None, conf if network_performance_configs and not isinstance(network_performance_configs, list): raise TypeError("Expected argument 'network_performance_configs' to be a list") pulumi.set(__self__, "network_performance_configs", network_performance_configs) + if partner_metadata and not isinstance(partner_metadata, dict): + raise TypeError("Expected argument 'partner_metadata' to be a dict") + pulumi.set(__self__, "partner_metadata", partner_metadata) if project and not isinstance(project, str): raise TypeError("Expected argument 'project' to be a str") pulumi.set(__self__, "project", project) @@ -307,6 +310,11 @@ def network_performance_configs(self) -> Sequence['outputs.GetInstanceTemplateNe """ return pulumi.get(self, "network_performance_configs") + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> Mapping[str, str]: + return pulumi.get(self, "partner_metadata") + @property @pulumi.getter def project(self) -> Optional[str]: @@ -440,6 +448,7 @@ def __await__(self): name_prefix=self.name_prefix, network_interfaces=self.network_interfaces, network_performance_configs=self.network_performance_configs, + partner_metadata=self.partner_metadata, project=self.project, pulumi_labels=self.pulumi_labels, region=self.region, @@ -512,6 +521,7 @@ def get_instance_template(filter: Optional[str] = None, name_prefix=pulumi.get(__ret__, 'name_prefix'), network_interfaces=pulumi.get(__ret__, 'network_interfaces'), network_performance_configs=pulumi.get(__ret__, 'network_performance_configs'), + partner_metadata=pulumi.get(__ret__, 'partner_metadata'), project=pulumi.get(__ret__, 'project'), pulumi_labels=pulumi.get(__ret__, 'pulumi_labels'), region=pulumi.get(__ret__, 'region'), diff --git a/sdk/python/pulumi_gcp/compute/get_region_instance_template.py b/sdk/python/pulumi_gcp/compute/get_region_instance_template.py index 5b65619d46..3258faa603 100644 --- a/sdk/python/pulumi_gcp/compute/get_region_instance_template.py +++ b/sdk/python/pulumi_gcp/compute/get_region_instance_template.py @@ -22,7 +22,7 @@ class GetRegionInstanceTemplateResult: """ A collection of values returned by getRegionInstanceTemplate. """ - def __init__(__self__, advanced_machine_features=None, can_ip_forward=None, confidential_instance_configs=None, description=None, disks=None, effective_labels=None, enable_display=None, filter=None, guest_accelerators=None, id=None, instance_description=None, labels=None, machine_type=None, metadata=None, metadata_fingerprint=None, metadata_startup_script=None, min_cpu_platform=None, most_recent=None, name=None, name_prefix=None, network_interfaces=None, network_performance_configs=None, project=None, pulumi_labels=None, region=None, reservation_affinities=None, resource_manager_tags=None, resource_policies=None, schedulings=None, self_link=None, service_accounts=None, shielded_instance_configs=None, tags=None, tags_fingerprint=None): + def __init__(__self__, advanced_machine_features=None, can_ip_forward=None, confidential_instance_configs=None, description=None, disks=None, effective_labels=None, enable_display=None, filter=None, guest_accelerators=None, id=None, instance_description=None, labels=None, machine_type=None, metadata=None, metadata_fingerprint=None, metadata_startup_script=None, min_cpu_platform=None, most_recent=None, name=None, name_prefix=None, network_interfaces=None, network_performance_configs=None, partner_metadata=None, project=None, pulumi_labels=None, region=None, reservation_affinities=None, resource_manager_tags=None, resource_policies=None, schedulings=None, self_link=None, service_accounts=None, shielded_instance_configs=None, tags=None, tags_fingerprint=None): if advanced_machine_features and not isinstance(advanced_machine_features, list): raise TypeError("Expected argument 'advanced_machine_features' to be a list") pulumi.set(__self__, "advanced_machine_features", advanced_machine_features) @@ -89,6 +89,9 @@ def __init__(__self__, advanced_machine_features=None, can_ip_forward=None, conf if network_performance_configs and not isinstance(network_performance_configs, list): raise TypeError("Expected argument 'network_performance_configs' to be a list") pulumi.set(__self__, "network_performance_configs", network_performance_configs) + if partner_metadata and not isinstance(partner_metadata, dict): + raise TypeError("Expected argument 'partner_metadata' to be a dict") + pulumi.set(__self__, "partner_metadata", partner_metadata) if project and not isinstance(project, str): raise TypeError("Expected argument 'project' to be a str") pulumi.set(__self__, "project", project) @@ -302,6 +305,11 @@ def network_performance_configs(self) -> Sequence['outputs.GetRegionInstanceTemp """ return pulumi.get(self, "network_performance_configs") + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> Mapping[str, str]: + return pulumi.get(self, "partner_metadata") + @property @pulumi.getter def project(self) -> Optional[str]: @@ -418,6 +426,7 @@ def __await__(self): name_prefix=self.name_prefix, network_interfaces=self.network_interfaces, network_performance_configs=self.network_performance_configs, + partner_metadata=self.partner_metadata, project=self.project, pulumi_labels=self.pulumi_labels, region=self.region, @@ -500,6 +509,7 @@ def get_region_instance_template(filter: Optional[str] = None, name_prefix=pulumi.get(__ret__, 'name_prefix'), network_interfaces=pulumi.get(__ret__, 'network_interfaces'), network_performance_configs=pulumi.get(__ret__, 'network_performance_configs'), + partner_metadata=pulumi.get(__ret__, 'partner_metadata'), project=pulumi.get(__ret__, 'project'), pulumi_labels=pulumi.get(__ret__, 'pulumi_labels'), region=pulumi.get(__ret__, 'region'), diff --git a/sdk/python/pulumi_gcp/compute/get_security_policy.py b/sdk/python/pulumi_gcp/compute/get_security_policy.py new file mode 100644 index 0000000000..63eee092df --- /dev/null +++ b/sdk/python/pulumi_gcp/compute/get_security_policy.py @@ -0,0 +1,214 @@ +# 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__ = [ + 'GetSecurityPolicyResult', + 'AwaitableGetSecurityPolicyResult', + 'get_security_policy', + 'get_security_policy_output', +] + +@pulumi.output_type +class GetSecurityPolicyResult: + """ + A collection of values returned by getSecurityPolicy. + """ + def __init__(__self__, adaptive_protection_configs=None, advanced_options_configs=None, description=None, fingerprint=None, id=None, name=None, project=None, recaptcha_options_configs=None, rules=None, self_link=None, type=None): + if adaptive_protection_configs and not isinstance(adaptive_protection_configs, list): + raise TypeError("Expected argument 'adaptive_protection_configs' to be a list") + pulumi.set(__self__, "adaptive_protection_configs", adaptive_protection_configs) + if advanced_options_configs and not isinstance(advanced_options_configs, list): + raise TypeError("Expected argument 'advanced_options_configs' to be a list") + pulumi.set(__self__, "advanced_options_configs", advanced_options_configs) + if description and not isinstance(description, str): + raise TypeError("Expected argument 'description' to be a str") + pulumi.set(__self__, "description", description) + if fingerprint and not isinstance(fingerprint, str): + raise TypeError("Expected argument 'fingerprint' to be a str") + pulumi.set(__self__, "fingerprint", fingerprint) + 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 recaptcha_options_configs and not isinstance(recaptcha_options_configs, list): + raise TypeError("Expected argument 'recaptcha_options_configs' to be a list") + pulumi.set(__self__, "recaptcha_options_configs", recaptcha_options_configs) + if rules and not isinstance(rules, list): + raise TypeError("Expected argument 'rules' to be a list") + pulumi.set(__self__, "rules", rules) + if self_link and not isinstance(self_link, str): + raise TypeError("Expected argument 'self_link' to be a str") + pulumi.set(__self__, "self_link", self_link) + if type and not isinstance(type, str): + raise TypeError("Expected argument 'type' to be a str") + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter(name="adaptiveProtectionConfigs") + def adaptive_protection_configs(self) -> Sequence['outputs.GetSecurityPolicyAdaptiveProtectionConfigResult']: + return pulumi.get(self, "adaptive_protection_configs") + + @property + @pulumi.getter(name="advancedOptionsConfigs") + def advanced_options_configs(self) -> Sequence['outputs.GetSecurityPolicyAdvancedOptionsConfigResult']: + return pulumi.get(self, "advanced_options_configs") + + @property + @pulumi.getter + def description(self) -> str: + return pulumi.get(self, "description") + + @property + @pulumi.getter + def fingerprint(self) -> str: + return pulumi.get(self, "fingerprint") + + @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) -> Optional[str]: + return pulumi.get(self, "name") + + @property + @pulumi.getter + def project(self) -> Optional[str]: + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="recaptchaOptionsConfigs") + def recaptcha_options_configs(self) -> Sequence['outputs.GetSecurityPolicyRecaptchaOptionsConfigResult']: + return pulumi.get(self, "recaptcha_options_configs") + + @property + @pulumi.getter + def rules(self) -> Sequence['outputs.GetSecurityPolicyRuleResult']: + return pulumi.get(self, "rules") + + @property + @pulumi.getter(name="selfLink") + def self_link(self) -> Optional[str]: + return pulumi.get(self, "self_link") + + @property + @pulumi.getter + def type(self) -> str: + return pulumi.get(self, "type") + + +class AwaitableGetSecurityPolicyResult(GetSecurityPolicyResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetSecurityPolicyResult( + adaptive_protection_configs=self.adaptive_protection_configs, + advanced_options_configs=self.advanced_options_configs, + description=self.description, + fingerprint=self.fingerprint, + id=self.id, + name=self.name, + project=self.project, + recaptcha_options_configs=self.recaptcha_options_configs, + rules=self.rules, + self_link=self.self_link, + type=self.type) + + +def get_security_policy(name: Optional[str] = None, + project: Optional[str] = None, + self_link: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetSecurityPolicyResult: + """ + To get more information about Google Compute Security Policy, see: + + * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies) + * How-to Guides + * [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies) + + ## Example Usage + + ```python + import pulumi + import pulumi_gcp as gcp + + sp1 = gcp.compute.get_security_policy(name="my-policy", + project="my-project") + sp2 = gcp.compute.get_security_policy(self_link="https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy") + ``` + + + :param str name: The name of the security policy. Provide either this or a `self_link`. + :param str project: The project in which the resource belongs. If it is not provided, the provider project is used. + :param str self_link: The self_link of the security policy. Provide either this or a `name` + """ + __args__ = dict() + __args__['name'] = name + __args__['project'] = project + __args__['selfLink'] = self_link + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('gcp:compute/getSecurityPolicy:getSecurityPolicy', __args__, opts=opts, typ=GetSecurityPolicyResult).value + + return AwaitableGetSecurityPolicyResult( + adaptive_protection_configs=pulumi.get(__ret__, 'adaptive_protection_configs'), + advanced_options_configs=pulumi.get(__ret__, 'advanced_options_configs'), + description=pulumi.get(__ret__, 'description'), + fingerprint=pulumi.get(__ret__, 'fingerprint'), + id=pulumi.get(__ret__, 'id'), + name=pulumi.get(__ret__, 'name'), + project=pulumi.get(__ret__, 'project'), + recaptcha_options_configs=pulumi.get(__ret__, 'recaptcha_options_configs'), + rules=pulumi.get(__ret__, 'rules'), + self_link=pulumi.get(__ret__, 'self_link'), + type=pulumi.get(__ret__, 'type')) + + +@_utilities.lift_output_func(get_security_policy) +def get_security_policy_output(name: Optional[pulumi.Input[Optional[str]]] = None, + project: Optional[pulumi.Input[Optional[str]]] = None, + self_link: Optional[pulumi.Input[Optional[str]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetSecurityPolicyResult]: + """ + To get more information about Google Compute Security Policy, see: + + * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies) + * How-to Guides + * [Official Documentation](https://cloud.google.com/armor/docs/configure-security-policies) + + ## Example Usage + + ```python + import pulumi + import pulumi_gcp as gcp + + sp1 = gcp.compute.get_security_policy(name="my-policy", + project="my-project") + sp2 = gcp.compute.get_security_policy(self_link="https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy") + ``` + + + :param str name: The name of the security policy. Provide either this or a `self_link`. + :param str project: The project in which the resource belongs. If it is not provided, the provider project is used. + :param str self_link: The self_link of the security policy. Provide either this or a `name` + """ + ... diff --git a/sdk/python/pulumi_gcp/compute/instance.py b/sdk/python/pulumi_gcp/compute/instance.py index 598f333e7b..e4d46b6600 100644 --- a/sdk/python/pulumi_gcp/compute/instance.py +++ b/sdk/python/pulumi_gcp/compute/instance.py @@ -37,6 +37,7 @@ def __init__(__self__, *, name: Optional[pulumi.Input[str]] = None, network_performance_config: Optional[pulumi.Input['InstanceNetworkPerformanceConfigArgs']] = None, params: Optional[pulumi.Input['InstanceParamsArgs']] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input['InstanceReservationAffinityArgs']] = None, resource_policies: Optional[pulumi.Input[str]] = None, @@ -120,6 +121,7 @@ def __init__(__self__, *, in order for this setting to take effect. :param pulumi.Input['InstanceParamsArgs'] params: Additional instance parameters. . + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. :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['InstanceReservationAffinityArgs'] reservation_affinity: Specifies the reservations that this instance can consume from. @@ -177,6 +179,8 @@ def __init__(__self__, *, pulumi.set(__self__, "network_performance_config", network_performance_config) if params is not None: pulumi.set(__self__, "params", params) + if partner_metadata is not None: + pulumi.set(__self__, "partner_metadata", partner_metadata) if project is not None: pulumi.set(__self__, "project", project) if reservation_affinity is not None: @@ -499,6 +503,18 @@ def params(self) -> Optional[pulumi.Input['InstanceParamsArgs']]: def params(self, value: Optional[pulumi.Input['InstanceParamsArgs']]): pulumi.set(self, "params", value) + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + """ + return pulumi.get(self, "partner_metadata") + + @partner_metadata.setter + def partner_metadata(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "partner_metadata", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -646,6 +662,7 @@ def __init__(__self__, *, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceNetworkInterfaceArgs']]]] = None, network_performance_config: Optional[pulumi.Input['InstanceNetworkPerformanceConfigArgs']] = None, params: Optional[pulumi.Input['InstanceParamsArgs']] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, reservation_affinity: Optional[pulumi.Input['InstanceReservationAffinityArgs']] = None, @@ -738,6 +755,7 @@ def __init__(__self__, *, in order for this setting to take effect. :param pulumi.Input['InstanceParamsArgs'] params: Additional instance parameters. . + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource and default labels configured on the provider. @@ -813,6 +831,8 @@ def __init__(__self__, *, pulumi.set(__self__, "network_performance_config", network_performance_config) if params is not None: pulumi.set(__self__, "params", params) + if partner_metadata is not None: + pulumi.set(__self__, "partner_metadata", partner_metadata) if project is not None: pulumi.set(__self__, "project", project) if pulumi_labels is not None: @@ -1213,6 +1233,18 @@ def params(self) -> Optional[pulumi.Input['InstanceParamsArgs']]: def params(self, value: Optional[pulumi.Input['InstanceParamsArgs']]): pulumi.set(self, "params", value) + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + """ + return pulumi.get(self, "partner_metadata") + + @partner_metadata.setter + def partner_metadata(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "partner_metadata", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -1392,6 +1424,7 @@ def __init__(__self__, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['InstanceNetworkPerformanceConfigArgs']]] = None, params: Optional[pulumi.Input[pulumi.InputType['InstanceParamsArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input[pulumi.InputType['InstanceReservationAffinityArgs']]] = None, resource_policies: Optional[pulumi.Input[str]] = None, @@ -1548,6 +1581,7 @@ def __init__(__self__, in order for this setting to take effect. :param pulumi.Input[pulumi.InputType['InstanceParamsArgs']] params: Additional instance parameters. . + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. :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['InstanceReservationAffinityArgs']] reservation_affinity: Specifies the reservations that this instance can consume from. @@ -1680,6 +1714,7 @@ def _internal_init(__self__, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['InstanceNetworkPerformanceConfigArgs']]] = None, params: Optional[pulumi.Input[pulumi.InputType['InstanceParamsArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input[pulumi.InputType['InstanceReservationAffinityArgs']]] = None, resource_policies: Optional[pulumi.Input[str]] = None, @@ -1725,6 +1760,7 @@ def _internal_init(__self__, __props__.__dict__["network_interfaces"] = network_interfaces __props__.__dict__["network_performance_config"] = network_performance_config __props__.__dict__["params"] = params + __props__.__dict__["partner_metadata"] = partner_metadata __props__.__dict__["project"] = project __props__.__dict__["reservation_affinity"] = reservation_affinity __props__.__dict__["resource_policies"] = resource_policies @@ -1782,6 +1818,7 @@ def get(resource_name: str, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['InstanceNetworkPerformanceConfigArgs']]] = None, params: Optional[pulumi.Input[pulumi.InputType['InstanceParamsArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, reservation_affinity: Optional[pulumi.Input[pulumi.InputType['InstanceReservationAffinityArgs']]] = None, @@ -1879,6 +1916,7 @@ def get(resource_name: str, in order for this setting to take effect. :param pulumi.Input[pulumi.InputType['InstanceParamsArgs']] params: Additional instance parameters. . + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource and default labels configured on the provider. @@ -1931,6 +1969,7 @@ def get(resource_name: str, __props__.__dict__["network_interfaces"] = network_interfaces __props__.__dict__["network_performance_config"] = network_performance_config __props__.__dict__["params"] = params + __props__.__dict__["partner_metadata"] = partner_metadata __props__.__dict__["project"] = project __props__.__dict__["pulumi_labels"] = pulumi_labels __props__.__dict__["reservation_affinity"] = reservation_affinity @@ -2212,6 +2251,14 @@ def params(self) -> pulumi.Output[Optional['outputs.InstanceParams']]: """ return pulumi.get(self, "params") + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + """ + return pulumi.get(self, "partner_metadata") + @property @pulumi.getter def project(self) -> pulumi.Output[str]: 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 746f69a5f9..c6faf9657e 100644 --- a/sdk/python/pulumi_gcp/compute/instance_from_machine_image.py +++ b/sdk/python/pulumi_gcp/compute/instance_from_machine_image.py @@ -36,6 +36,7 @@ def __init__(__self__, *, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceFromMachineImageNetworkInterfaceArgs']]]] = None, network_performance_config: Optional[pulumi.Input['InstanceFromMachineImageNetworkPerformanceConfigArgs']] = None, params: Optional[pulumi.Input['InstanceFromMachineImageParamsArgs']] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input['InstanceFromMachineImageReservationAffinityArgs']] = None, resource_policies: Optional[pulumi.Input[str]] = None, @@ -75,6 +76,7 @@ def __init__(__self__, *, :param pulumi.Input['InstanceFromMachineImageNetworkPerformanceConfigArgs'] network_performance_config: Configures network performance settings for the instance. If not specified, the instance will be created with its default network performance configuration. :param pulumi.Input['InstanceFromMachineImageParamsArgs'] params: Stores additional params passed with the request, but not persisted as part of resource payload. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Partner Metadata Map made available within the instance. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither self_link nor project are provided, the provider project is used. :param pulumi.Input['InstanceFromMachineImageReservationAffinityArgs'] reservation_affinity: Specifies the reservations that this instance can consume from. @@ -131,6 +133,8 @@ def __init__(__self__, *, pulumi.set(__self__, "network_performance_config", network_performance_config) if params is not None: pulumi.set(__self__, "params", params) + if partner_metadata is not None: + pulumi.set(__self__, "partner_metadata", partner_metadata) if project is not None: pulumi.set(__self__, "project", project) if reservation_affinity is not None: @@ -395,6 +399,18 @@ def params(self) -> Optional[pulumi.Input['InstanceFromMachineImageParamsArgs']] def params(self, value: Optional[pulumi.Input['InstanceFromMachineImageParamsArgs']]): pulumi.set(self, "params", value) + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Partner Metadata Map made available within the instance. + """ + return pulumi.get(self, "partner_metadata") + + @partner_metadata.setter + def partner_metadata(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "partner_metadata", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -530,6 +546,7 @@ def __init__(__self__, *, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceFromMachineImageNetworkInterfaceArgs']]]] = None, network_performance_config: Optional[pulumi.Input['InstanceFromMachineImageNetworkPerformanceConfigArgs']] = None, params: Optional[pulumi.Input['InstanceFromMachineImageParamsArgs']] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, reservation_affinity: Optional[pulumi.Input['InstanceFromMachineImageReservationAffinityArgs']] = None, @@ -579,6 +596,7 @@ def __init__(__self__, *, :param pulumi.Input['InstanceFromMachineImageNetworkPerformanceConfigArgs'] network_performance_config: Configures network performance settings for the instance. If not specified, the instance will be created with its default network performance configuration. :param pulumi.Input['InstanceFromMachineImageParamsArgs'] params: Stores additional params passed with the request, but not persisted as part of resource payload. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Partner Metadata Map made available within the instance. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither self_link nor project are provided, the provider project is used. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource and default labels configured on the provider. @@ -658,6 +676,8 @@ def __init__(__self__, *, pulumi.set(__self__, "network_performance_config", network_performance_config) if params is not None: pulumi.set(__self__, "params", params) + if partner_metadata is not None: + pulumi.set(__self__, "partner_metadata", partner_metadata) if project is not None: pulumi.set(__self__, "project", project) if pulumi_labels is not None: @@ -1012,6 +1032,18 @@ def params(self) -> Optional[pulumi.Input['InstanceFromMachineImageParamsArgs']] def params(self, value: Optional[pulumi.Input['InstanceFromMachineImageParamsArgs']]): pulumi.set(self, "params", value) + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Partner Metadata Map made available within the instance. + """ + return pulumi.get(self, "partner_metadata") + + @partner_metadata.setter + def partner_metadata(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "partner_metadata", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -1204,6 +1236,7 @@ def __init__(__self__, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceFromMachineImageNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['InstanceFromMachineImageNetworkPerformanceConfigArgs']]] = None, params: Optional[pulumi.Input[pulumi.InputType['InstanceFromMachineImageParamsArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input[pulumi.InputType['InstanceFromMachineImageReservationAffinityArgs']]] = None, resource_policies: Optional[pulumi.Input[str]] = None, @@ -1267,6 +1300,7 @@ def __init__(__self__, :param pulumi.Input[pulumi.InputType['InstanceFromMachineImageNetworkPerformanceConfigArgs']] network_performance_config: Configures network performance settings for the instance. If not specified, the instance will be created with its default network performance configuration. :param pulumi.Input[pulumi.InputType['InstanceFromMachineImageParamsArgs']] params: Stores additional params passed with the request, but not persisted as part of resource payload. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Partner Metadata Map made available within the instance. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither self_link nor project are provided, the provider project is used. :param pulumi.Input[pulumi.InputType['InstanceFromMachineImageReservationAffinityArgs']] reservation_affinity: Specifies the reservations that this instance can consume from. @@ -1354,6 +1388,7 @@ def _internal_init(__self__, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceFromMachineImageNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['InstanceFromMachineImageNetworkPerformanceConfigArgs']]] = None, params: Optional[pulumi.Input[pulumi.InputType['InstanceFromMachineImageParamsArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input[pulumi.InputType['InstanceFromMachineImageReservationAffinityArgs']]] = None, resource_policies: Optional[pulumi.Input[str]] = None, @@ -1391,6 +1426,7 @@ def _internal_init(__self__, __props__.__dict__["network_interfaces"] = network_interfaces __props__.__dict__["network_performance_config"] = network_performance_config __props__.__dict__["params"] = params + __props__.__dict__["partner_metadata"] = partner_metadata __props__.__dict__["project"] = project __props__.__dict__["reservation_affinity"] = reservation_affinity __props__.__dict__["resource_policies"] = resource_policies @@ -1453,6 +1489,7 @@ def get(resource_name: str, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceFromMachineImageNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['InstanceFromMachineImageNetworkPerformanceConfigArgs']]] = None, params: Optional[pulumi.Input[pulumi.InputType['InstanceFromMachineImageParamsArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, reservation_affinity: Optional[pulumi.Input[pulumi.InputType['InstanceFromMachineImageReservationAffinityArgs']]] = None, @@ -1507,6 +1544,7 @@ def get(resource_name: str, :param pulumi.Input[pulumi.InputType['InstanceFromMachineImageNetworkPerformanceConfigArgs']] network_performance_config: Configures network performance settings for the instance. If not specified, the instance will be created with its default network performance configuration. :param pulumi.Input[pulumi.InputType['InstanceFromMachineImageParamsArgs']] params: Stores additional params passed with the request, but not persisted as part of resource payload. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Partner Metadata Map made available within the instance. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither self_link nor project are provided, the provider project is used. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource and default labels configured on the provider. @@ -1563,6 +1601,7 @@ def get(resource_name: str, __props__.__dict__["network_interfaces"] = network_interfaces __props__.__dict__["network_performance_config"] = network_performance_config __props__.__dict__["params"] = params + __props__.__dict__["partner_metadata"] = partner_metadata __props__.__dict__["project"] = project __props__.__dict__["pulumi_labels"] = pulumi_labels __props__.__dict__["reservation_affinity"] = reservation_affinity @@ -1797,6 +1836,14 @@ def params(self) -> pulumi.Output['outputs.InstanceFromMachineImageParams']: """ return pulumi.get(self, "params") + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> pulumi.Output[Mapping[str, str]]: + """ + Partner Metadata Map made available within the instance. + """ + return pulumi.get(self, "partner_metadata") + @property @pulumi.getter def project(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/compute/instance_from_template.py b/sdk/python/pulumi_gcp/compute/instance_from_template.py index 427cd3c706..e32824279c 100644 --- a/sdk/python/pulumi_gcp/compute/instance_from_template.py +++ b/sdk/python/pulumi_gcp/compute/instance_from_template.py @@ -38,6 +38,7 @@ def __init__(__self__, *, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceFromTemplateNetworkInterfaceArgs']]]] = None, network_performance_config: Optional[pulumi.Input['InstanceFromTemplateNetworkPerformanceConfigArgs']] = None, params: Optional[pulumi.Input['InstanceFromTemplateParamsArgs']] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input['InstanceFromTemplateReservationAffinityArgs']] = None, resource_policies: Optional[pulumi.Input[str]] = None, @@ -81,6 +82,7 @@ def __init__(__self__, *, :param pulumi.Input['InstanceFromTemplateNetworkPerformanceConfigArgs'] network_performance_config: Configures network performance settings for the instance. If not specified, the instance will be created with its default network performance configuration. :param pulumi.Input['InstanceFromTemplateParamsArgs'] params: Stores additional params passed with the request, but not persisted as part of resource payload. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Partner Metadata Map made available within the instance. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither self_link nor project are provided, the provider project is used. :param pulumi.Input['InstanceFromTemplateReservationAffinityArgs'] reservation_affinity: Specifies the reservations that this instance can consume from. @@ -140,6 +142,8 @@ def __init__(__self__, *, pulumi.set(__self__, "network_performance_config", network_performance_config) if params is not None: pulumi.set(__self__, "params", params) + if partner_metadata is not None: + pulumi.set(__self__, "partner_metadata", partner_metadata) if project is not None: pulumi.set(__self__, "project", project) if reservation_affinity is not None: @@ -431,6 +435,18 @@ def params(self) -> Optional[pulumi.Input['InstanceFromTemplateParamsArgs']]: def params(self, value: Optional[pulumi.Input['InstanceFromTemplateParamsArgs']]): pulumi.set(self, "params", value) + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Partner Metadata Map made available within the instance. + """ + return pulumi.get(self, "partner_metadata") + + @partner_metadata.setter + def partner_metadata(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "partner_metadata", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -576,6 +592,7 @@ def __init__(__self__, *, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceFromTemplateNetworkInterfaceArgs']]]] = None, network_performance_config: Optional[pulumi.Input['InstanceFromTemplateNetworkPerformanceConfigArgs']] = None, params: Optional[pulumi.Input['InstanceFromTemplateParamsArgs']] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, reservation_affinity: Optional[pulumi.Input['InstanceFromTemplateReservationAffinityArgs']] = None, @@ -625,6 +642,7 @@ def __init__(__self__, *, :param pulumi.Input['InstanceFromTemplateNetworkPerformanceConfigArgs'] network_performance_config: Configures network performance settings for the instance. If not specified, the instance will be created with its default network performance configuration. :param pulumi.Input['InstanceFromTemplateParamsArgs'] params: Stores additional params passed with the request, but not persisted as part of resource payload. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Partner Metadata Map made available within the instance. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither self_link nor project are provided, the provider project is used. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource and default labels configured on the provider. @@ -703,6 +721,8 @@ def __init__(__self__, *, pulumi.set(__self__, "network_performance_config", network_performance_config) if params is not None: pulumi.set(__self__, "params", params) + if partner_metadata is not None: + pulumi.set(__self__, "partner_metadata", partner_metadata) if project is not None: pulumi.set(__self__, "project", project) if pulumi_labels is not None: @@ -1057,6 +1077,18 @@ def params(self) -> Optional[pulumi.Input['InstanceFromTemplateParamsArgs']]: def params(self, value: Optional[pulumi.Input['InstanceFromTemplateParamsArgs']]): pulumi.set(self, "params", value) + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Partner Metadata Map made available within the instance. + """ + return pulumi.get(self, "partner_metadata") + + @partner_metadata.setter + def partner_metadata(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "partner_metadata", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -1250,6 +1282,7 @@ def __init__(__self__, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceFromTemplateNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['InstanceFromTemplateNetworkPerformanceConfigArgs']]] = None, params: Optional[pulumi.Input[pulumi.InputType['InstanceFromTemplateParamsArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input[pulumi.InputType['InstanceFromTemplateReservationAffinityArgs']]] = None, resource_policies: Optional[pulumi.Input[str]] = None, @@ -1336,6 +1369,7 @@ def __init__(__self__, :param pulumi.Input[pulumi.InputType['InstanceFromTemplateNetworkPerformanceConfigArgs']] network_performance_config: Configures network performance settings for the instance. If not specified, the instance will be created with its default network performance configuration. :param pulumi.Input[pulumi.InputType['InstanceFromTemplateParamsArgs']] params: Stores additional params passed with the request, but not persisted as part of resource payload. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Partner Metadata Map made available within the instance. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither self_link nor project are provided, the provider project is used. :param pulumi.Input[pulumi.InputType['InstanceFromTemplateReservationAffinityArgs']] reservation_affinity: Specifies the reservations that this instance can consume from. @@ -1445,6 +1479,7 @@ def _internal_init(__self__, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceFromTemplateNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['InstanceFromTemplateNetworkPerformanceConfigArgs']]] = None, params: Optional[pulumi.Input[pulumi.InputType['InstanceFromTemplateParamsArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input[pulumi.InputType['InstanceFromTemplateReservationAffinityArgs']]] = None, resource_policies: Optional[pulumi.Input[str]] = None, @@ -1485,6 +1520,7 @@ def _internal_init(__self__, __props__.__dict__["network_interfaces"] = network_interfaces __props__.__dict__["network_performance_config"] = network_performance_config __props__.__dict__["params"] = params + __props__.__dict__["partner_metadata"] = partner_metadata __props__.__dict__["project"] = project __props__.__dict__["reservation_affinity"] = reservation_affinity __props__.__dict__["resource_policies"] = resource_policies @@ -1545,6 +1581,7 @@ def get(resource_name: str, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceFromTemplateNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['InstanceFromTemplateNetworkPerformanceConfigArgs']]] = None, params: Optional[pulumi.Input[pulumi.InputType['InstanceFromTemplateParamsArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, reservation_affinity: Optional[pulumi.Input[pulumi.InputType['InstanceFromTemplateReservationAffinityArgs']]] = None, @@ -1599,6 +1636,7 @@ def get(resource_name: str, :param pulumi.Input[pulumi.InputType['InstanceFromTemplateNetworkPerformanceConfigArgs']] network_performance_config: Configures network performance settings for the instance. If not specified, the instance will be created with its default network performance configuration. :param pulumi.Input[pulumi.InputType['InstanceFromTemplateParamsArgs']] params: Stores additional params passed with the request, but not persisted as part of resource payload. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Partner Metadata Map made available within the instance. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If self_link is provided, this value is ignored. If neither self_link nor project are provided, the provider project is used. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource and default labels configured on the provider. @@ -1654,6 +1692,7 @@ def get(resource_name: str, __props__.__dict__["network_interfaces"] = network_interfaces __props__.__dict__["network_performance_config"] = network_performance_config __props__.__dict__["params"] = params + __props__.__dict__["partner_metadata"] = partner_metadata __props__.__dict__["project"] = project __props__.__dict__["pulumi_labels"] = pulumi_labels __props__.__dict__["reservation_affinity"] = reservation_affinity @@ -1888,6 +1927,14 @@ def params(self) -> pulumi.Output['outputs.InstanceFromTemplateParams']: """ return pulumi.get(self, "params") + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> pulumi.Output[Mapping[str, str]]: + """ + Partner Metadata Map made available within the instance. + """ + return pulumi.get(self, "partner_metadata") + @property @pulumi.getter def project(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/compute/instance_group_manager.py b/sdk/python/pulumi_gcp/compute/instance_group_manager.py index 93f544e972..c0052faf63 100644 --- a/sdk/python/pulumi_gcp/compute/instance_group_manager.py +++ b/sdk/python/pulumi_gcp/compute/instance_group_manager.py @@ -27,11 +27,14 @@ def __init__(__self__, *, named_ports: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerNamedPortArgs']]]] = None, params: Optional[pulumi.Input['InstanceGroupManagerParamsArgs']] = None, project: Optional[pulumi.Input[str]] = None, + standby_policy: Optional[pulumi.Input['InstanceGroupManagerStandbyPolicyArgs']] = None, stateful_disks: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulDiskArgs']]]] = None, stateful_external_ips: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulExternalIpArgs']]]] = None, stateful_internal_ips: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulInternalIpArgs']]]] = None, target_pools: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, target_size: Optional[pulumi.Input[int]] = None, + target_stopped_size: Optional[pulumi.Input[int]] = None, + target_suspended_size: Optional[pulumi.Input[int]] = None, update_policy: Optional[pulumi.Input['InstanceGroupManagerUpdatePolicyArgs']] = None, wait_for_instances: Optional[pulumi.Input[bool]] = None, wait_for_instances_status: Optional[pulumi.Input[str]] = None, @@ -72,6 +75,7 @@ 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['InstanceGroupManagerStandbyPolicyArgs'] standby_policy: The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) :param pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulDiskArgs']]] stateful_disks: Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). :param pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulExternalIpArgs']]] stateful_external_ips: External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulInternalIpArgs']]] stateful_internal_ips: Internal network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -80,6 +84,8 @@ def __init__(__self__, *, not affect existing instances. :param pulumi.Input[int] target_size: The target number of running instances for this managed 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[int] target_stopped_size: The target number of stopped instances for this managed instance group. + :param pulumi.Input[int] target_suspended_size: The target number of suspended instances for this managed instance group. :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 @@ -113,6 +119,8 @@ def __init__(__self__, *, pulumi.set(__self__, "params", params) if project is not None: pulumi.set(__self__, "project", project) + if standby_policy is not None: + pulumi.set(__self__, "standby_policy", standby_policy) if stateful_disks is not None: pulumi.set(__self__, "stateful_disks", stateful_disks) if stateful_external_ips is not None: @@ -123,6 +131,10 @@ def __init__(__self__, *, pulumi.set(__self__, "target_pools", target_pools) if target_size is not None: pulumi.set(__self__, "target_size", target_size) + if target_stopped_size is not None: + pulumi.set(__self__, "target_stopped_size", target_stopped_size) + if target_suspended_size is not None: + pulumi.set(__self__, "target_suspended_size", target_suspended_size) if update_policy is not None: pulumi.set(__self__, "update_policy", update_policy) if wait_for_instances is not None: @@ -287,6 +299,18 @@ def project(self) -> Optional[pulumi.Input[str]]: def project(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "project", value) + @property + @pulumi.getter(name="standbyPolicy") + def standby_policy(self) -> Optional[pulumi.Input['InstanceGroupManagerStandbyPolicyArgs']]: + """ + The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + """ + return pulumi.get(self, "standby_policy") + + @standby_policy.setter + def standby_policy(self, value: Optional[pulumi.Input['InstanceGroupManagerStandbyPolicyArgs']]): + pulumi.set(self, "standby_policy", value) + @property @pulumi.getter(name="statefulDisks") def stateful_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulDiskArgs']]]]: @@ -350,6 +374,30 @@ def target_size(self) -> Optional[pulumi.Input[int]]: def target_size(self, value: Optional[pulumi.Input[int]]): pulumi.set(self, "target_size", value) + @property + @pulumi.getter(name="targetStoppedSize") + def target_stopped_size(self) -> Optional[pulumi.Input[int]]: + """ + The target number of stopped instances for this managed instance group. + """ + return pulumi.get(self, "target_stopped_size") + + @target_stopped_size.setter + def target_stopped_size(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "target_stopped_size", value) + + @property + @pulumi.getter(name="targetSuspendedSize") + def target_suspended_size(self) -> Optional[pulumi.Input[int]]: + """ + The target number of suspended instances for this managed instance group. + """ + return pulumi.get(self, "target_suspended_size") + + @target_suspended_size.setter + def target_suspended_size(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "target_suspended_size", value) + @property @pulumi.getter(name="updatePolicy") def update_policy(self) -> Optional[pulumi.Input['InstanceGroupManagerUpdatePolicyArgs']]: @@ -425,12 +473,15 @@ def __init__(__self__, *, params: Optional[pulumi.Input['InstanceGroupManagerParamsArgs']] = None, project: Optional[pulumi.Input[str]] = None, self_link: Optional[pulumi.Input[str]] = None, + standby_policy: Optional[pulumi.Input['InstanceGroupManagerStandbyPolicyArgs']] = None, stateful_disks: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulDiskArgs']]]] = None, stateful_external_ips: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulExternalIpArgs']]]] = None, stateful_internal_ips: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulInternalIpArgs']]]] = None, statuses: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatusArgs']]]] = None, target_pools: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, target_size: Optional[pulumi.Input[int]] = None, + target_stopped_size: Optional[pulumi.Input[int]] = None, + target_suspended_size: Optional[pulumi.Input[int]] = None, update_policy: Optional[pulumi.Input['InstanceGroupManagerUpdatePolicyArgs']] = None, versions: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerVersionArgs']]]] = None, wait_for_instances: Optional[pulumi.Input[bool]] = None, @@ -473,6 +524,7 @@ 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 URL of the created resource. + :param pulumi.Input['InstanceGroupManagerStandbyPolicyArgs'] standby_policy: The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) :param pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulDiskArgs']]] stateful_disks: Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). :param pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulExternalIpArgs']]] stateful_external_ips: External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulInternalIpArgs']]] stateful_internal_ips: Internal network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -482,6 +534,8 @@ def __init__(__self__, *, not affect existing instances. :param pulumi.Input[int] target_size: The target number of running instances for this managed 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[int] target_stopped_size: The target number of stopped instances for this managed instance group. + :param pulumi.Input[int] target_suspended_size: The target number of suspended instances for this managed instance group. :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[Sequence[pulumi.Input['InstanceGroupManagerVersionArgs']]] versions: Application versions managed by this instance group. Each version deals with a specific instance template, allowing canary release scenarios. @@ -528,6 +582,8 @@ def __init__(__self__, *, pulumi.set(__self__, "project", project) if self_link is not None: pulumi.set(__self__, "self_link", self_link) + if standby_policy is not None: + pulumi.set(__self__, "standby_policy", standby_policy) if stateful_disks is not None: pulumi.set(__self__, "stateful_disks", stateful_disks) if stateful_external_ips is not None: @@ -540,6 +596,10 @@ def __init__(__self__, *, pulumi.set(__self__, "target_pools", target_pools) if target_size is not None: pulumi.set(__self__, "target_size", target_size) + if target_stopped_size is not None: + pulumi.set(__self__, "target_stopped_size", target_stopped_size) + if target_suspended_size is not None: + pulumi.set(__self__, "target_suspended_size", target_suspended_size) if update_policy is not None: pulumi.set(__self__, "update_policy", update_policy) if versions is not None: @@ -749,6 +809,18 @@ 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="standbyPolicy") + def standby_policy(self) -> Optional[pulumi.Input['InstanceGroupManagerStandbyPolicyArgs']]: + """ + The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + """ + return pulumi.get(self, "standby_policy") + + @standby_policy.setter + def standby_policy(self, value: Optional[pulumi.Input['InstanceGroupManagerStandbyPolicyArgs']]): + pulumi.set(self, "standby_policy", value) + @property @pulumi.getter(name="statefulDisks") def stateful_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerStatefulDiskArgs']]]]: @@ -824,6 +896,30 @@ def target_size(self) -> Optional[pulumi.Input[int]]: def target_size(self, value: Optional[pulumi.Input[int]]): pulumi.set(self, "target_size", value) + @property + @pulumi.getter(name="targetStoppedSize") + def target_stopped_size(self) -> Optional[pulumi.Input[int]]: + """ + The target number of stopped instances for this managed instance group. + """ + return pulumi.get(self, "target_stopped_size") + + @target_stopped_size.setter + def target_stopped_size(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "target_stopped_size", value) + + @property + @pulumi.getter(name="targetSuspendedSize") + def target_suspended_size(self) -> Optional[pulumi.Input[int]]: + """ + The target number of suspended instances for this managed instance group. + """ + return pulumi.get(self, "target_suspended_size") + + @target_suspended_size.setter + def target_suspended_size(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "target_suspended_size", value) + @property @pulumi.getter(name="updatePolicy") def update_policy(self) -> Optional[pulumi.Input['InstanceGroupManagerUpdatePolicyArgs']]: @@ -910,11 +1006,14 @@ def __init__(__self__, named_ports: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerNamedPortArgs']]]]] = None, params: Optional[pulumi.Input[pulumi.InputType['InstanceGroupManagerParamsArgs']]] = None, project: Optional[pulumi.Input[str]] = None, + standby_policy: Optional[pulumi.Input[pulumi.InputType['InstanceGroupManagerStandbyPolicyArgs']]] = None, stateful_disks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulDiskArgs']]]]] = None, stateful_external_ips: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulExternalIpArgs']]]]] = None, stateful_internal_ips: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulInternalIpArgs']]]]] = None, target_pools: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, target_size: Optional[pulumi.Input[int]] = None, + target_stopped_size: Optional[pulumi.Input[int]] = None, + target_suspended_size: Optional[pulumi.Input[int]] = None, update_policy: Optional[pulumi.Input[pulumi.InputType['InstanceGroupManagerUpdatePolicyArgs']]] = None, versions: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerVersionArgs']]]]] = None, wait_for_instances: Optional[pulumi.Input[bool]] = None, @@ -999,6 +1098,28 @@ def __init__(__self__, ]) ``` + ### With Standby Policy (`Google-Beta` Provider) + ```python + import pulumi + import pulumi_gcp as gcp + + igm_sr = gcp.compute.InstanceGroupManager("igm-sr", + name="tf-sr-igm", + base_instance_name="tf-sr-igm-instance", + zone="us-central1-a", + target_size=5, + versions=[gcp.compute.InstanceGroupManagerVersionArgs( + instance_template=sr_igm["selfLink"], + name="primary", + )], + standby_policy=gcp.compute.InstanceGroupManagerStandbyPolicyArgs( + initial_delay_sec=30, + mode="MANUAL", + ), + target_suspended_size=2, + target_stopped_size=1) + ``` + ## Import Instance group managers can be imported using any of these accepted formats: @@ -1062,6 +1183,7 @@ 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[pulumi.InputType['InstanceGroupManagerStandbyPolicyArgs']] standby_policy: The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulDiskArgs']]]] stateful_disks: Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulExternalIpArgs']]]] stateful_external_ips: External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulInternalIpArgs']]]] stateful_internal_ips: Internal network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -1070,6 +1192,8 @@ def __init__(__self__, not affect existing instances. :param pulumi.Input[int] target_size: The target number of running instances for this managed 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[int] target_stopped_size: The target number of stopped instances for this managed instance group. + :param pulumi.Input[int] target_suspended_size: The target number of suspended instances for this managed instance group. :param pulumi.Input[pulumi.InputType['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[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. @@ -1170,6 +1294,28 @@ def __init__(__self__, ]) ``` + ### With Standby Policy (`Google-Beta` Provider) + ```python + import pulumi + import pulumi_gcp as gcp + + igm_sr = gcp.compute.InstanceGroupManager("igm-sr", + name="tf-sr-igm", + base_instance_name="tf-sr-igm-instance", + zone="us-central1-a", + target_size=5, + versions=[gcp.compute.InstanceGroupManagerVersionArgs( + instance_template=sr_igm["selfLink"], + name="primary", + )], + standby_policy=gcp.compute.InstanceGroupManagerStandbyPolicyArgs( + initial_delay_sec=30, + mode="MANUAL", + ), + target_suspended_size=2, + target_stopped_size=1) + ``` + ## Import Instance group managers can be imported using any of these accepted formats: @@ -1225,11 +1371,14 @@ def _internal_init(__self__, named_ports: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerNamedPortArgs']]]]] = None, params: Optional[pulumi.Input[pulumi.InputType['InstanceGroupManagerParamsArgs']]] = None, project: Optional[pulumi.Input[str]] = None, + standby_policy: Optional[pulumi.Input[pulumi.InputType['InstanceGroupManagerStandbyPolicyArgs']]] = None, stateful_disks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulDiskArgs']]]]] = None, stateful_external_ips: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulExternalIpArgs']]]]] = None, stateful_internal_ips: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulInternalIpArgs']]]]] = None, target_pools: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, target_size: Optional[pulumi.Input[int]] = None, + target_stopped_size: Optional[pulumi.Input[int]] = None, + target_suspended_size: Optional[pulumi.Input[int]] = None, update_policy: Optional[pulumi.Input[pulumi.InputType['InstanceGroupManagerUpdatePolicyArgs']]] = None, versions: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerVersionArgs']]]]] = None, wait_for_instances: Optional[pulumi.Input[bool]] = None, @@ -1256,11 +1405,14 @@ def _internal_init(__self__, __props__.__dict__["named_ports"] = named_ports __props__.__dict__["params"] = params __props__.__dict__["project"] = project + __props__.__dict__["standby_policy"] = standby_policy __props__.__dict__["stateful_disks"] = stateful_disks __props__.__dict__["stateful_external_ips"] = stateful_external_ips __props__.__dict__["stateful_internal_ips"] = stateful_internal_ips __props__.__dict__["target_pools"] = target_pools __props__.__dict__["target_size"] = target_size + __props__.__dict__["target_stopped_size"] = target_stopped_size + __props__.__dict__["target_suspended_size"] = target_suspended_size __props__.__dict__["update_policy"] = update_policy if versions is None and not opts.urn: raise TypeError("Missing required property 'versions'") @@ -1299,12 +1451,15 @@ def get(resource_name: str, params: Optional[pulumi.Input[pulumi.InputType['InstanceGroupManagerParamsArgs']]] = None, project: Optional[pulumi.Input[str]] = None, self_link: Optional[pulumi.Input[str]] = None, + standby_policy: Optional[pulumi.Input[pulumi.InputType['InstanceGroupManagerStandbyPolicyArgs']]] = None, stateful_disks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulDiskArgs']]]]] = None, stateful_external_ips: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulExternalIpArgs']]]]] = None, stateful_internal_ips: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulInternalIpArgs']]]]] = None, statuses: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatusArgs']]]]] = None, target_pools: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, target_size: Optional[pulumi.Input[int]] = None, + target_stopped_size: Optional[pulumi.Input[int]] = None, + target_suspended_size: Optional[pulumi.Input[int]] = None, update_policy: Optional[pulumi.Input[pulumi.InputType['InstanceGroupManagerUpdatePolicyArgs']]] = None, versions: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerVersionArgs']]]]] = None, wait_for_instances: Optional[pulumi.Input[bool]] = None, @@ -1352,6 +1507,7 @@ 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 URL of the created resource. + :param pulumi.Input[pulumi.InputType['InstanceGroupManagerStandbyPolicyArgs']] standby_policy: The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulDiskArgs']]]] stateful_disks: Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulExternalIpArgs']]]] stateful_external_ips: External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerStatefulInternalIpArgs']]]] stateful_internal_ips: Internal network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -1361,6 +1517,8 @@ def get(resource_name: str, not affect existing instances. :param pulumi.Input[int] target_size: The target number of running instances for this managed 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[int] target_stopped_size: The target number of stopped instances for this managed instance group. + :param pulumi.Input[int] target_suspended_size: The target number of suspended instances for this managed instance group. :param pulumi.Input[pulumi.InputType['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[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. @@ -1396,12 +1554,15 @@ def get(resource_name: str, __props__.__dict__["params"] = params __props__.__dict__["project"] = project __props__.__dict__["self_link"] = self_link + __props__.__dict__["standby_policy"] = standby_policy __props__.__dict__["stateful_disks"] = stateful_disks __props__.__dict__["stateful_external_ips"] = stateful_external_ips __props__.__dict__["stateful_internal_ips"] = stateful_internal_ips __props__.__dict__["statuses"] = statuses __props__.__dict__["target_pools"] = target_pools __props__.__dict__["target_size"] = target_size + __props__.__dict__["target_stopped_size"] = target_stopped_size + __props__.__dict__["target_suspended_size"] = target_suspended_size __props__.__dict__["update_policy"] = update_policy __props__.__dict__["versions"] = versions __props__.__dict__["wait_for_instances"] = wait_for_instances @@ -1547,6 +1708,14 @@ def self_link(self) -> pulumi.Output[str]: """ return pulumi.get(self, "self_link") + @property + @pulumi.getter(name="standbyPolicy") + def standby_policy(self) -> pulumi.Output['outputs.InstanceGroupManagerStandbyPolicy']: + """ + The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + """ + return pulumi.get(self, "standby_policy") + @property @pulumi.getter(name="statefulDisks") def stateful_disks(self) -> pulumi.Output[Optional[Sequence['outputs.InstanceGroupManagerStatefulDisk']]]: @@ -1598,6 +1767,22 @@ def target_size(self) -> pulumi.Output[int]: """ return pulumi.get(self, "target_size") + @property + @pulumi.getter(name="targetStoppedSize") + def target_stopped_size(self) -> pulumi.Output[int]: + """ + The target number of stopped instances for this managed instance group. + """ + return pulumi.get(self, "target_stopped_size") + + @property + @pulumi.getter(name="targetSuspendedSize") + def target_suspended_size(self) -> pulumi.Output[int]: + """ + The target number of suspended instances for this managed instance group. + """ + return pulumi.get(self, "target_suspended_size") + @property @pulumi.getter(name="updatePolicy") def update_policy(self) -> pulumi.Output['outputs.InstanceGroupManagerUpdatePolicy']: diff --git a/sdk/python/pulumi_gcp/compute/instance_template.py b/sdk/python/pulumi_gcp/compute/instance_template.py index 70cd56d863..b68ea2b566 100644 --- a/sdk/python/pulumi_gcp/compute/instance_template.py +++ b/sdk/python/pulumi_gcp/compute/instance_template.py @@ -33,6 +33,7 @@ def __init__(__self__, *, name_prefix: Optional[pulumi.Input[str]] = None, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceTemplateNetworkInterfaceArgs']]]] = None, network_performance_config: Optional[pulumi.Input['InstanceTemplateNetworkPerformanceConfigArgs']] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input['InstanceTemplateReservationAffinityArgs']] = None, @@ -88,6 +89,7 @@ def __init__(__self__, *, the `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image) in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` in order for this setting to take effect. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. :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: An instance template is a global resource that is not @@ -139,6 +141,8 @@ def __init__(__self__, *, pulumi.set(__self__, "network_interfaces", network_interfaces) if network_performance_config is not None: pulumi.set(__self__, "network_performance_config", network_performance_config) + if partner_metadata is not None: + pulumi.set(__self__, "partner_metadata", partner_metadata) if project is not None: pulumi.set(__self__, "project", project) if region is not None: @@ -389,6 +393,18 @@ def network_performance_config(self) -> Optional[pulumi.Input['InstanceTemplateN def network_performance_config(self, value: Optional[pulumi.Input['InstanceTemplateNetworkPerformanceConfigArgs']]): pulumi.set(self, "network_performance_config", value) + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + """ + return pulumi.get(self, "partner_metadata") + + @partner_metadata.setter + def partner_metadata(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "partner_metadata", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -529,6 +545,7 @@ def __init__(__self__, *, name_prefix: Optional[pulumi.Input[str]] = None, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceTemplateNetworkInterfaceArgs']]]] = None, network_performance_config: Optional[pulumi.Input['InstanceTemplateNetworkPerformanceConfigArgs']] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, region: Optional[pulumi.Input[str]] = None, @@ -590,6 +607,7 @@ def __init__(__self__, *, the `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image) in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` in order for this setting to take effect. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource and default labels configured on the provider. @@ -652,6 +670,8 @@ def __init__(__self__, *, pulumi.set(__self__, "network_interfaces", network_interfaces) if network_performance_config is not None: pulumi.set(__self__, "network_performance_config", network_performance_config) + if partner_metadata is not None: + pulumi.set(__self__, "partner_metadata", partner_metadata) if project is not None: pulumi.set(__self__, "project", project) if pulumi_labels is not None: @@ -934,6 +954,18 @@ def network_performance_config(self) -> Optional[pulumi.Input['InstanceTemplateN def network_performance_config(self, value: Optional[pulumi.Input['InstanceTemplateNetworkPerformanceConfigArgs']]): pulumi.set(self, "network_performance_config", value) + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + """ + return pulumi.get(self, "partner_metadata") + + @partner_metadata.setter + def partner_metadata(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "partner_metadata", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -1123,6 +1155,7 @@ def __init__(__self__, name_prefix: Optional[pulumi.Input[str]] = None, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceTemplateNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['InstanceTemplateNetworkPerformanceConfigArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input[pulumi.InputType['InstanceTemplateReservationAffinityArgs']]] = None, @@ -1373,6 +1406,7 @@ def __init__(__self__, the `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image) in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` in order for this setting to take effect. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. :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: An instance template is a global resource that is not @@ -1624,6 +1658,7 @@ def _internal_init(__self__, name_prefix: Optional[pulumi.Input[str]] = None, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceTemplateNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['InstanceTemplateNetworkPerformanceConfigArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input[pulumi.InputType['InstanceTemplateReservationAffinityArgs']]] = None, @@ -1663,6 +1698,7 @@ def _internal_init(__self__, __props__.__dict__["name_prefix"] = name_prefix __props__.__dict__["network_interfaces"] = network_interfaces __props__.__dict__["network_performance_config"] = network_performance_config + __props__.__dict__["partner_metadata"] = partner_metadata __props__.__dict__["project"] = project __props__.__dict__["region"] = region __props__.__dict__["reservation_affinity"] = reservation_affinity @@ -1709,6 +1745,7 @@ def get(resource_name: str, name_prefix: Optional[pulumi.Input[str]] = None, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceTemplateNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['InstanceTemplateNetworkPerformanceConfigArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, region: Optional[pulumi.Input[str]] = None, @@ -1775,6 +1812,7 @@ def get(resource_name: str, the `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image) in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` in order for this setting to take effect. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource and default labels configured on the provider. @@ -1822,6 +1860,7 @@ def get(resource_name: str, __props__.__dict__["name_prefix"] = name_prefix __props__.__dict__["network_interfaces"] = network_interfaces __props__.__dict__["network_performance_config"] = network_performance_config + __props__.__dict__["partner_metadata"] = partner_metadata __props__.__dict__["project"] = project __props__.__dict__["pulumi_labels"] = pulumi_labels __props__.__dict__["region"] = region @@ -2016,6 +2055,14 @@ def network_performance_config(self) -> pulumi.Output[Optional['outputs.Instance """ return pulumi.get(self, "network_performance_config") + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + """ + return pulumi.get(self, "partner_metadata") + @property @pulumi.getter def project(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/compute/outputs.py b/sdk/python/pulumi_gcp/compute/outputs.py index 11f3638a22..94e0db46a8 100644 --- a/sdk/python/pulumi_gcp/compute/outputs.py +++ b/sdk/python/pulumi_gcp/compute/outputs.py @@ -132,6 +132,7 @@ 'InstanceGroupManagerInstanceLifecyclePolicy', 'InstanceGroupManagerNamedPort', 'InstanceGroupManagerParams', + 'InstanceGroupManagerStandbyPolicy', 'InstanceGroupManagerStatefulDisk', 'InstanceGroupManagerStatefulExternalIp', 'InstanceGroupManagerStatefulInternalIp', @@ -270,6 +271,7 @@ 'RegionInstanceGroupManagerInstanceLifecyclePolicy', 'RegionInstanceGroupManagerNamedPort', 'RegionInstanceGroupManagerParams', + 'RegionInstanceGroupManagerStandbyPolicy', 'RegionInstanceGroupManagerStatefulDisk', 'RegionInstanceGroupManagerStatefulExternalIp', 'RegionInstanceGroupManagerStatefulInternalIp', @@ -601,6 +603,7 @@ 'GetInstanceGroupManagerInstanceLifecyclePolicyResult', 'GetInstanceGroupManagerNamedPortResult', 'GetInstanceGroupManagerParamResult', + 'GetInstanceGroupManagerStandbyPolicyResult', 'GetInstanceGroupManagerStatefulDiskResult', 'GetInstanceGroupManagerStatefulExternalIpResult', 'GetInstanceGroupManagerStatefulInternalIpResult', @@ -713,6 +716,30 @@ 'GetRouterNatSubnetworkResult', 'GetRouterStatusBestRouteResult', 'GetRouterStatusBestRoutesForRouterResult', + 'GetSecurityPolicyAdaptiveProtectionConfigResult', + 'GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigResult', + 'GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult', + 'GetSecurityPolicyAdvancedOptionsConfigResult', + 'GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigResult', + 'GetSecurityPolicyRecaptchaOptionsConfigResult', + 'GetSecurityPolicyRuleResult', + 'GetSecurityPolicyRuleHeaderActionResult', + 'GetSecurityPolicyRuleHeaderActionRequestHeadersToAddResult', + 'GetSecurityPolicyRuleMatchResult', + 'GetSecurityPolicyRuleMatchConfigResult', + 'GetSecurityPolicyRuleMatchExprResult', + 'GetSecurityPolicyRulePreconfiguredWafConfigResult', + 'GetSecurityPolicyRulePreconfiguredWafConfigExclusionResult', + 'GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyResult', + 'GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderResult', + 'GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamResult', + 'GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriResult', + 'GetSecurityPolicyRuleRateLimitOptionResult', + 'GetSecurityPolicyRuleRateLimitOptionBanThresholdResult', + 'GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigResult', + 'GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionResult', + 'GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdResult', + 'GetSecurityPolicyRuleRedirectOptionResult', 'GetSnapshotSnapshotEncryptionKeyResult', 'GetSnapshotSourceDiskEncryptionKeyResult', 'GetSubnetworkSecondaryIpRangeResult', @@ -9767,6 +9794,56 @@ def resource_manager_tags(self) -> Optional[Mapping[str, Any]]: return pulumi.get(self, "resource_manager_tags") +@pulumi.output_type +class InstanceGroupManagerStandbyPolicy(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "initialDelaySec": + suggest = "initial_delay_sec" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in InstanceGroupManagerStandbyPolicy. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + InstanceGroupManagerStandbyPolicy.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + InstanceGroupManagerStandbyPolicy.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + initial_delay_sec: Optional[int] = None, + mode: Optional[str] = None): + """ + :param int initial_delay_sec: Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + :param str mode: Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + - - - + """ + if initial_delay_sec is not None: + pulumi.set(__self__, "initial_delay_sec", initial_delay_sec) + if mode is not None: + pulumi.set(__self__, "mode", mode) + + @property + @pulumi.getter(name="initialDelaySec") + def initial_delay_sec(self) -> Optional[int]: + """ + Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + """ + return pulumi.get(self, "initial_delay_sec") + + @property + @pulumi.getter + def mode(self) -> Optional[str]: + """ + Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + - - - + """ + return pulumi.get(self, "mode") + + @pulumi.output_type class InstanceGroupManagerStatefulDisk(dict): @staticmethod @@ -19555,6 +19632,56 @@ def resource_manager_tags(self) -> Optional[Mapping[str, Any]]: return pulumi.get(self, "resource_manager_tags") +@pulumi.output_type +class RegionInstanceGroupManagerStandbyPolicy(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "initialDelaySec": + suggest = "initial_delay_sec" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RegionInstanceGroupManagerStandbyPolicy. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RegionInstanceGroupManagerStandbyPolicy.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RegionInstanceGroupManagerStandbyPolicy.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + initial_delay_sec: Optional[int] = None, + mode: Optional[str] = None): + """ + :param int initial_delay_sec: Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + :param str mode: Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + - - - + """ + if initial_delay_sec is not None: + pulumi.set(__self__, "initial_delay_sec", initial_delay_sec) + if mode is not None: + pulumi.set(__self__, "mode", mode) + + @property + @pulumi.getter(name="initialDelaySec") + def initial_delay_sec(self) -> Optional[int]: + """ + Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + """ + return pulumi.get(self, "initial_delay_sec") + + @property + @pulumi.getter + def mode(self) -> Optional[str]: + """ + Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. Valid options are: `MANUAL`, `SCALE_OUT_POOL`. If `MANUAL`(default), you have full control over which VMs are stopped and suspended in the MIG. If `SCALE_OUT_POOL`, the MIG uses the VMs from the standby pools to accelerate the scale out by resuming or starting them and then automatically replenishes the standby pool with new VMs to maintain the target sizes. + - - - + """ + return pulumi.get(self, "mode") + + @pulumi.output_type class RegionInstanceGroupManagerStatefulDisk(dict): @staticmethod @@ -44009,6 +44136,35 @@ def resource_manager_tags(self) -> Mapping[str, Any]: return pulumi.get(self, "resource_manager_tags") +@pulumi.output_type +class GetInstanceGroupManagerStandbyPolicyResult(dict): + def __init__(__self__, *, + initial_delay_sec: int, + mode: str): + """ + :param int initial_delay_sec: Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + :param str mode: Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. The default mode is "MANUAL". + """ + pulumi.set(__self__, "initial_delay_sec", initial_delay_sec) + pulumi.set(__self__, "mode", mode) + + @property + @pulumi.getter(name="initialDelaySec") + def initial_delay_sec(self) -> int: + """ + Specifies the number of seconds that the MIG should wait to suspend or stop a VM after that VM was created. The initial delay gives the initialization script the time to prepare your VM for a quick scale out. The value of initial delay must be between 0 and 3600 seconds. The default value is 0. + """ + return pulumi.get(self, "initial_delay_sec") + + @property + @pulumi.getter + def mode(self) -> str: + """ + Defines how a MIG resumes or starts VMs from a standby pool when the group scales out. The default mode is "MANUAL". + """ + return pulumi.get(self, "mode") + + @pulumi.output_type class GetInstanceGroupManagerStatefulDiskResult(dict): def __init__(__self__, *, @@ -49948,6 +50104,889 @@ def tags(self) -> Sequence[str]: return pulumi.get(self, "tags") +@pulumi.output_type +class GetSecurityPolicyAdaptiveProtectionConfigResult(dict): + def __init__(__self__, *, + auto_deploy_configs: Sequence['outputs.GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigResult'], + layer7_ddos_defense_configs: Sequence['outputs.GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult']): + """ + :param Sequence['GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs'] auto_deploy_configs: Auto Deploy Config of this security policy + :param Sequence['GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs'] layer7_ddos_defense_configs: Layer 7 DDoS Defense Config of this security policy + """ + pulumi.set(__self__, "auto_deploy_configs", auto_deploy_configs) + pulumi.set(__self__, "layer7_ddos_defense_configs", layer7_ddos_defense_configs) + + @property + @pulumi.getter(name="autoDeployConfigs") + def auto_deploy_configs(self) -> Sequence['outputs.GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigResult']: + """ + Auto Deploy Config of this security policy + """ + return pulumi.get(self, "auto_deploy_configs") + + @property + @pulumi.getter(name="layer7DdosDefenseConfigs") + def layer7_ddos_defense_configs(self) -> Sequence['outputs.GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult']: + """ + Layer 7 DDoS Defense Config of this security policy + """ + return pulumi.get(self, "layer7_ddos_defense_configs") + + +@pulumi.output_type +class GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigResult(dict): + def __init__(__self__, *, + confidence_threshold: float, + expiration_sec: int, + impacted_baseline_threshold: float, + load_threshold: float): + """ + :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. + """ + pulumi.set(__self__, "confidence_threshold", confidence_threshold) + pulumi.set(__self__, "expiration_sec", expiration_sec) + pulumi.set(__self__, "impacted_baseline_threshold", impacted_baseline_threshold) + pulumi.set(__self__, "load_threshold", load_threshold) + + @property + @pulumi.getter(name="confidenceThreshold") + def confidence_threshold(self) -> 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) -> 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) -> 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) -> 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 GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult(dict): + def __init__(__self__, *, + enable: bool, + rule_visibility: str): + """ + :param bool enable: If set to true, enables CAAP for L7 DDoS detection. + :param str rule_visibility: Rule visibility. Supported values include: "STANDARD", "PREMIUM". + """ + pulumi.set(__self__, "enable", enable) + pulumi.set(__self__, "rule_visibility", rule_visibility) + + @property + @pulumi.getter + def enable(self) -> bool: + """ + If set to true, enables CAAP for L7 DDoS detection. + """ + return pulumi.get(self, "enable") + + @property + @pulumi.getter(name="ruleVisibility") + def rule_visibility(self) -> str: + """ + Rule visibility. Supported values include: "STANDARD", "PREMIUM". + """ + return pulumi.get(self, "rule_visibility") + + +@pulumi.output_type +class GetSecurityPolicyAdvancedOptionsConfigResult(dict): + def __init__(__self__, *, + json_custom_configs: Sequence['outputs.GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigResult'], + json_parsing: str, + log_level: str, + user_ip_request_headers: Sequence[str]): + """ + :param Sequence['GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs'] json_custom_configs: Custom configuration to apply the JSON parsing. Only applicable when JSON parsing is set to STANDARD. + :param str json_parsing: JSON body parsing. Supported values include: "DISABLED", "STANDARD". + :param str log_level: Logging level. Supported values include: "NORMAL", "VERBOSE". + :param Sequence[str] user_ip_request_headers: An optional list of case-insensitive request header names to use for resolving the callers client IP address. + """ + pulumi.set(__self__, "json_custom_configs", json_custom_configs) + pulumi.set(__self__, "json_parsing", json_parsing) + pulumi.set(__self__, "log_level", log_level) + pulumi.set(__self__, "user_ip_request_headers", user_ip_request_headers) + + @property + @pulumi.getter(name="jsonCustomConfigs") + def json_custom_configs(self) -> Sequence['outputs.GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigResult']: + """ + Custom configuration to apply the JSON parsing. Only applicable when JSON parsing is set to STANDARD. + """ + return pulumi.get(self, "json_custom_configs") + + @property + @pulumi.getter(name="jsonParsing") + def json_parsing(self) -> str: + """ + JSON body parsing. Supported values include: "DISABLED", "STANDARD". + """ + return pulumi.get(self, "json_parsing") + + @property + @pulumi.getter(name="logLevel") + def log_level(self) -> str: + """ + Logging level. Supported values include: "NORMAL", "VERBOSE". + """ + return pulumi.get(self, "log_level") + + @property + @pulumi.getter(name="userIpRequestHeaders") + def user_ip_request_headers(self) -> Sequence[str]: + """ + An optional list of case-insensitive request header names to use for resolving the callers client IP address. + """ + return pulumi.get(self, "user_ip_request_headers") + + +@pulumi.output_type +class GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigResult(dict): + def __init__(__self__, *, + content_types: Sequence[str]): + """ + :param Sequence[str] content_types: A list of custom Content-Type header values to apply the JSON parsing. + """ + pulumi.set(__self__, "content_types", content_types) + + @property + @pulumi.getter(name="contentTypes") + def content_types(self) -> Sequence[str]: + """ + A list of custom Content-Type header values to apply the JSON parsing. + """ + return pulumi.get(self, "content_types") + + +@pulumi.output_type +class GetSecurityPolicyRecaptchaOptionsConfigResult(dict): + def __init__(__self__, *, + redirect_site_key: str): + """ + :param str redirect_site_key: A field to supply a reCAPTCHA site key to be used for all the rules using the redirect action with the type of GOOGLE_RECAPTCHA under the security policy. The specified site key needs to be created from the reCAPTCHA API. The user is responsible for the validity of the specified site key. If not specified, a Google-managed site key is used. + """ + pulumi.set(__self__, "redirect_site_key", redirect_site_key) + + @property + @pulumi.getter(name="redirectSiteKey") + def redirect_site_key(self) -> str: + """ + A field to supply a reCAPTCHA site key to be used for all the rules using the redirect action with the type of GOOGLE_RECAPTCHA under the security policy. The specified site key needs to be created from the reCAPTCHA API. The user is responsible for the validity of the specified site key. If not specified, a Google-managed site key is used. + """ + return pulumi.get(self, "redirect_site_key") + + +@pulumi.output_type +class GetSecurityPolicyRuleResult(dict): + def __init__(__self__, *, + action: str, + description: str, + header_actions: Sequence['outputs.GetSecurityPolicyRuleHeaderActionResult'], + matches: Sequence['outputs.GetSecurityPolicyRuleMatchResult'], + preconfigured_waf_configs: Sequence['outputs.GetSecurityPolicyRulePreconfiguredWafConfigResult'], + preview: bool, + priority: int, + rate_limit_options: Sequence['outputs.GetSecurityPolicyRuleRateLimitOptionResult'], + redirect_options: Sequence['outputs.GetSecurityPolicyRuleRedirectOptionResult']): + """ + :param str action: Action to take when match matches the request. + :param str description: An optional description of this rule. Max size is 64. + :param Sequence['GetSecurityPolicyRuleHeaderActionArgs'] header_actions: Additional actions that are performed on headers. + :param Sequence['GetSecurityPolicyRuleMatchArgs'] matches: A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding action is enforced. + :param Sequence['GetSecurityPolicyRulePreconfiguredWafConfigArgs'] preconfigured_waf_configs: Preconfigured WAF configuration to be applied for the rule. If the rule does not evaluate preconfigured WAF rules, i.e., if evaluatePreconfiguredWaf() is not used, this field will have no effect. + :param bool preview: When set to true, the action specified above is not enforced. Stackdriver logs for requests that trigger a preview action are annotated as such. + :param int priority: An unique positive integer indicating the priority of evaluation for a rule. Rules are evaluated from highest priority (lowest numerically) to lowest priority (highest numerically) in order. + :param Sequence['GetSecurityPolicyRuleRateLimitOptionArgs'] rate_limit_options: Rate limit threshold for this security policy. Must be specified if the action is "rate_based_ban" or "throttle". Cannot be specified for any other actions. + :param Sequence['GetSecurityPolicyRuleRedirectOptionArgs'] redirect_options: Parameters defining the redirect action. Cannot be specified for any other actions. + """ + pulumi.set(__self__, "action", action) + pulumi.set(__self__, "description", description) + pulumi.set(__self__, "header_actions", header_actions) + pulumi.set(__self__, "matches", matches) + pulumi.set(__self__, "preconfigured_waf_configs", preconfigured_waf_configs) + pulumi.set(__self__, "preview", preview) + pulumi.set(__self__, "priority", priority) + pulumi.set(__self__, "rate_limit_options", rate_limit_options) + pulumi.set(__self__, "redirect_options", redirect_options) + + @property + @pulumi.getter + def action(self) -> str: + """ + Action to take when match matches the request. + """ + return pulumi.get(self, "action") + + @property + @pulumi.getter + def description(self) -> str: + """ + An optional description of this rule. Max size is 64. + """ + return pulumi.get(self, "description") + + @property + @pulumi.getter(name="headerActions") + def header_actions(self) -> Sequence['outputs.GetSecurityPolicyRuleHeaderActionResult']: + """ + Additional actions that are performed on headers. + """ + return pulumi.get(self, "header_actions") + + @property + @pulumi.getter + def matches(self) -> Sequence['outputs.GetSecurityPolicyRuleMatchResult']: + """ + A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding action is enforced. + """ + return pulumi.get(self, "matches") + + @property + @pulumi.getter(name="preconfiguredWafConfigs") + def preconfigured_waf_configs(self) -> Sequence['outputs.GetSecurityPolicyRulePreconfiguredWafConfigResult']: + """ + Preconfigured WAF configuration to be applied for the rule. If the rule does not evaluate preconfigured WAF rules, i.e., if evaluatePreconfiguredWaf() is not used, this field will have no effect. + """ + return pulumi.get(self, "preconfigured_waf_configs") + + @property + @pulumi.getter + def preview(self) -> bool: + """ + When set to true, the action specified above is not enforced. Stackdriver logs for requests that trigger a preview action are annotated as such. + """ + return pulumi.get(self, "preview") + + @property + @pulumi.getter + def priority(self) -> int: + """ + An unique positive integer indicating the priority of evaluation for a rule. Rules are evaluated from highest priority (lowest numerically) to lowest priority (highest numerically) in order. + """ + return pulumi.get(self, "priority") + + @property + @pulumi.getter(name="rateLimitOptions") + def rate_limit_options(self) -> Sequence['outputs.GetSecurityPolicyRuleRateLimitOptionResult']: + """ + Rate limit threshold for this security policy. Must be specified if the action is "rate_based_ban" or "throttle". Cannot be specified for any other actions. + """ + return pulumi.get(self, "rate_limit_options") + + @property + @pulumi.getter(name="redirectOptions") + def redirect_options(self) -> Sequence['outputs.GetSecurityPolicyRuleRedirectOptionResult']: + """ + Parameters defining the redirect action. Cannot be specified for any other actions. + """ + return pulumi.get(self, "redirect_options") + + +@pulumi.output_type +class GetSecurityPolicyRuleHeaderActionResult(dict): + def __init__(__self__, *, + request_headers_to_adds: Sequence['outputs.GetSecurityPolicyRuleHeaderActionRequestHeadersToAddResult']): + """ + :param Sequence['GetSecurityPolicyRuleHeaderActionRequestHeadersToAddArgs'] request_headers_to_adds: The list of request headers to add or overwrite if they're already present. + """ + pulumi.set(__self__, "request_headers_to_adds", request_headers_to_adds) + + @property + @pulumi.getter(name="requestHeadersToAdds") + def request_headers_to_adds(self) -> Sequence['outputs.GetSecurityPolicyRuleHeaderActionRequestHeadersToAddResult']: + """ + The list of request headers to add or overwrite if they're already present. + """ + return pulumi.get(self, "request_headers_to_adds") + + +@pulumi.output_type +class GetSecurityPolicyRuleHeaderActionRequestHeadersToAddResult(dict): + def __init__(__self__, *, + header_name: str, + header_value: str): + """ + :param str header_name: The name of the header to set. + :param str header_value: The value to set the named header to. + """ + pulumi.set(__self__, "header_name", header_name) + pulumi.set(__self__, "header_value", header_value) + + @property + @pulumi.getter(name="headerName") + def header_name(self) -> str: + """ + The name of the header to set. + """ + return pulumi.get(self, "header_name") + + @property + @pulumi.getter(name="headerValue") + def header_value(self) -> str: + """ + The value to set the named header to. + """ + return pulumi.get(self, "header_value") + + +@pulumi.output_type +class GetSecurityPolicyRuleMatchResult(dict): + def __init__(__self__, *, + configs: Sequence['outputs.GetSecurityPolicyRuleMatchConfigResult'], + exprs: Sequence['outputs.GetSecurityPolicyRuleMatchExprResult'], + versioned_expr: str): + """ + :param Sequence['GetSecurityPolicyRuleMatchConfigArgs'] configs: The configuration options available when specifying versioned_expr. This field must be specified if versioned_expr is specified and cannot be specified if versioned_expr is not specified. + :param Sequence['GetSecurityPolicyRuleMatchExprArgs'] exprs: User defined CEVAL expression. A CEVAL expression is used to specify match criteria such as origin.ip, source.region_code and contents in the request header. + :param str versioned_expr: Predefined rule expression. If this field is specified, config must also be specified. Available options: SRC_IPS_V1: Must specify the corresponding src_ip_ranges field in config. + """ + pulumi.set(__self__, "configs", configs) + pulumi.set(__self__, "exprs", exprs) + pulumi.set(__self__, "versioned_expr", versioned_expr) + + @property + @pulumi.getter + def configs(self) -> Sequence['outputs.GetSecurityPolicyRuleMatchConfigResult']: + """ + The configuration options available when specifying versioned_expr. This field must be specified if versioned_expr is specified and cannot be specified if versioned_expr is not specified. + """ + return pulumi.get(self, "configs") + + @property + @pulumi.getter + def exprs(self) -> Sequence['outputs.GetSecurityPolicyRuleMatchExprResult']: + """ + User defined CEVAL expression. A CEVAL expression is used to specify match criteria such as origin.ip, source.region_code and contents in the request header. + """ + return pulumi.get(self, "exprs") + + @property + @pulumi.getter(name="versionedExpr") + def versioned_expr(self) -> str: + """ + Predefined rule expression. If this field is specified, config must also be specified. Available options: SRC_IPS_V1: Must specify the corresponding src_ip_ranges field in config. + """ + return pulumi.get(self, "versioned_expr") + + +@pulumi.output_type +class GetSecurityPolicyRuleMatchConfigResult(dict): + def __init__(__self__, *, + src_ip_ranges: Sequence[str]): + """ + :param Sequence[str] src_ip_ranges: Set of IP addresses or ranges (IPV4 or IPV6) in CIDR notation to match against inbound traffic. There is a limit of 10 IP ranges per rule. A value of '*' matches all IPs (can be used to override the default behavior). + """ + pulumi.set(__self__, "src_ip_ranges", src_ip_ranges) + + @property + @pulumi.getter(name="srcIpRanges") + def src_ip_ranges(self) -> Sequence[str]: + """ + Set of IP addresses or ranges (IPV4 or IPV6) in CIDR notation to match against inbound traffic. There is a limit of 10 IP ranges per rule. A value of '*' matches all IPs (can be used to override the default behavior). + """ + return pulumi.get(self, "src_ip_ranges") + + +@pulumi.output_type +class GetSecurityPolicyRuleMatchExprResult(dict): + def __init__(__self__, *, + expression: str): + """ + :param str expression: Textual representation of an expression in Common Expression Language syntax. The application context of the containing message determines which well-known feature set of CEL is supported. + """ + pulumi.set(__self__, "expression", expression) + + @property + @pulumi.getter + def expression(self) -> str: + """ + Textual representation of an expression in Common Expression Language syntax. The application context of the containing message determines which well-known feature set of CEL is supported. + """ + return pulumi.get(self, "expression") + + +@pulumi.output_type +class GetSecurityPolicyRulePreconfiguredWafConfigResult(dict): + def __init__(__self__, *, + exclusions: Sequence['outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionResult']): + """ + :param Sequence['GetSecurityPolicyRulePreconfiguredWafConfigExclusionArgs'] exclusions: An exclusion to apply during preconfigured WAF evaluation. + """ + pulumi.set(__self__, "exclusions", exclusions) + + @property + @pulumi.getter + def exclusions(self) -> Sequence['outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionResult']: + """ + An exclusion to apply during preconfigured WAF evaluation. + """ + return pulumi.get(self, "exclusions") + + +@pulumi.output_type +class GetSecurityPolicyRulePreconfiguredWafConfigExclusionResult(dict): + def __init__(__self__, *, + request_cookies: Sequence['outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyResult'], + request_headers: Sequence['outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderResult'], + request_query_params: Sequence['outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamResult'], + request_uris: Sequence['outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriResult'], + target_rule_ids: Sequence[str], + target_rule_set: str): + """ + :param Sequence['GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyArgs'] request_cookies: Request cookie whose value will be excluded from inspection during preconfigured WAF evaluation. + :param Sequence['GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderArgs'] request_headers: Request header whose value will be excluded from inspection during preconfigured WAF evaluation. + :param Sequence['GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamArgs'] request_query_params: Request query parameter whose value will be excluded from inspection during preconfigured WAF evaluation. Note that the parameter can be in the query string or in the POST body. + :param Sequence['GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriArgs'] request_uris: Request URI from the request line to be excluded from inspection during preconfigured WAF evaluation. When specifying this field, the query or fragment part should be excluded. + :param Sequence[str] target_rule_ids: A list of target rule IDs under the WAF rule set to apply the preconfigured WAF exclusion. If omitted, it refers to all the rule IDs under the WAF rule set. + :param str target_rule_set: Target WAF rule set to apply the preconfigured WAF exclusion. + """ + pulumi.set(__self__, "request_cookies", request_cookies) + pulumi.set(__self__, "request_headers", request_headers) + pulumi.set(__self__, "request_query_params", request_query_params) + pulumi.set(__self__, "request_uris", request_uris) + pulumi.set(__self__, "target_rule_ids", target_rule_ids) + pulumi.set(__self__, "target_rule_set", target_rule_set) + + @property + @pulumi.getter(name="requestCookies") + def request_cookies(self) -> Sequence['outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyResult']: + """ + Request cookie whose value will be excluded from inspection during preconfigured WAF evaluation. + """ + return pulumi.get(self, "request_cookies") + + @property + @pulumi.getter(name="requestHeaders") + def request_headers(self) -> Sequence['outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderResult']: + """ + Request header whose value will be excluded from inspection during preconfigured WAF evaluation. + """ + return pulumi.get(self, "request_headers") + + @property + @pulumi.getter(name="requestQueryParams") + def request_query_params(self) -> Sequence['outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamResult']: + """ + Request query parameter whose value will be excluded from inspection during preconfigured WAF evaluation. Note that the parameter can be in the query string or in the POST body. + """ + return pulumi.get(self, "request_query_params") + + @property + @pulumi.getter(name="requestUris") + def request_uris(self) -> Sequence['outputs.GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriResult']: + """ + Request URI from the request line to be excluded from inspection during preconfigured WAF evaluation. When specifying this field, the query or fragment part should be excluded. + """ + return pulumi.get(self, "request_uris") + + @property + @pulumi.getter(name="targetRuleIds") + def target_rule_ids(self) -> Sequence[str]: + """ + A list of target rule IDs under the WAF rule set to apply the preconfigured WAF exclusion. If omitted, it refers to all the rule IDs under the WAF rule set. + """ + return pulumi.get(self, "target_rule_ids") + + @property + @pulumi.getter(name="targetRuleSet") + def target_rule_set(self) -> str: + """ + Target WAF rule set to apply the preconfigured WAF exclusion. + """ + return pulumi.get(self, "target_rule_set") + + +@pulumi.output_type +class GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestCookyResult(dict): + def __init__(__self__, *, + operator: str, + value: str): + """ + :param str operator: You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + :param str value: A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + """ + pulumi.set(__self__, "operator", operator) + pulumi.set(__self__, "value", value) + + @property + @pulumi.getter + def operator(self) -> str: + """ + You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + """ + return pulumi.get(self, "operator") + + @property + @pulumi.getter + def value(self) -> str: + """ + A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + """ + return pulumi.get(self, "value") + + +@pulumi.output_type +class GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestHeaderResult(dict): + def __init__(__self__, *, + operator: str, + value: str): + """ + :param str operator: You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + :param str value: A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + """ + pulumi.set(__self__, "operator", operator) + pulumi.set(__self__, "value", value) + + @property + @pulumi.getter + def operator(self) -> str: + """ + You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + """ + return pulumi.get(self, "operator") + + @property + @pulumi.getter + def value(self) -> str: + """ + A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + """ + return pulumi.get(self, "value") + + +@pulumi.output_type +class GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestQueryParamResult(dict): + def __init__(__self__, *, + operator: str, + value: str): + """ + :param str operator: You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + :param str value: A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + """ + pulumi.set(__self__, "operator", operator) + pulumi.set(__self__, "value", value) + + @property + @pulumi.getter + def operator(self) -> str: + """ + You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + """ + return pulumi.get(self, "operator") + + @property + @pulumi.getter + def value(self) -> str: + """ + A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + """ + return pulumi.get(self, "value") + + +@pulumi.output_type +class GetSecurityPolicyRulePreconfiguredWafConfigExclusionRequestUriResult(dict): + def __init__(__self__, *, + operator: str, + value: str): + """ + :param str operator: You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + :param str value: A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + """ + pulumi.set(__self__, "operator", operator) + pulumi.set(__self__, "value", value) + + @property + @pulumi.getter + def operator(self) -> str: + """ + You can specify an exact match or a partial match by using a field operator and a field value. Available options: EQUALS: The operator matches if the field value equals the specified value. STARTS_WITH: The operator matches if the field value starts with the specified value. ENDS_WITH: The operator matches if the field value ends with the specified value. CONTAINS: The operator matches if the field value contains the specified value. EQUALS_ANY: The operator matches if the field value is any value. + """ + return pulumi.get(self, "operator") + + @property + @pulumi.getter + def value(self) -> str: + """ + A request field matching the specified value will be excluded from inspection during preconfigured WAF evaluation. The field value must be given if the field operator is not EQUALS_ANY, and cannot be given if the field operator is EQUALS_ANY. + """ + return pulumi.get(self, "value") + + +@pulumi.output_type +class GetSecurityPolicyRuleRateLimitOptionResult(dict): + def __init__(__self__, *, + ban_duration_sec: int, + ban_thresholds: Sequence['outputs.GetSecurityPolicyRuleRateLimitOptionBanThresholdResult'], + conform_action: str, + enforce_on_key: str, + enforce_on_key_configs: Sequence['outputs.GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigResult'], + enforce_on_key_name: str, + exceed_action: str, + exceed_redirect_options: Sequence['outputs.GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionResult'], + rate_limit_thresholds: Sequence['outputs.GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdResult']): + """ + :param int ban_duration_sec: Can only be specified if the action for the rule is "rate_based_ban". If specified, determines the time (in seconds) the traffic will continue to be banned by the rate limit after the rate falls below the threshold. + :param Sequence['GetSecurityPolicyRuleRateLimitOptionBanThresholdArgs'] ban_thresholds: Can only be specified if the action for the rule is "rate_based_ban". If specified, the key will be banned for the configured 'banDurationSec' when the number of requests that exceed the 'rateLimitThreshold' also exceed this 'banThreshold'. + :param str conform_action: Action to take for requests that are under the configured rate limit threshold. Valid option is "allow" only. + :param str enforce_on_key: Determines the key to enforce the rateLimitThreshold on + :param Sequence['GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigArgs'] enforce_on_key_configs: Enforce On Key Config of this security policy + :param str enforce_on_key_name: Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + :param str exceed_action: Action to take for requests that are above the configured rate limit threshold, to either deny with a specified HTTP response code, or redirect to a different endpoint. Valid options are "deny()" where valid values for status are 403, 404, 429, and 502, and "redirect" where the redirect parameters come from exceedRedirectOptions below. + :param Sequence['GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionArgs'] exceed_redirect_options: Parameters defining the redirect action that is used as the exceed action. Cannot be specified if the exceed action is not redirect. + :param Sequence['GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdArgs'] rate_limit_thresholds: Threshold at which to begin ratelimiting. + """ + pulumi.set(__self__, "ban_duration_sec", ban_duration_sec) + pulumi.set(__self__, "ban_thresholds", ban_thresholds) + pulumi.set(__self__, "conform_action", conform_action) + pulumi.set(__self__, "enforce_on_key", enforce_on_key) + pulumi.set(__self__, "enforce_on_key_configs", enforce_on_key_configs) + pulumi.set(__self__, "enforce_on_key_name", enforce_on_key_name) + pulumi.set(__self__, "exceed_action", exceed_action) + pulumi.set(__self__, "exceed_redirect_options", exceed_redirect_options) + pulumi.set(__self__, "rate_limit_thresholds", rate_limit_thresholds) + + @property + @pulumi.getter(name="banDurationSec") + def ban_duration_sec(self) -> int: + """ + Can only be specified if the action for the rule is "rate_based_ban". If specified, determines the time (in seconds) the traffic will continue to be banned by the rate limit after the rate falls below the threshold. + """ + return pulumi.get(self, "ban_duration_sec") + + @property + @pulumi.getter(name="banThresholds") + def ban_thresholds(self) -> Sequence['outputs.GetSecurityPolicyRuleRateLimitOptionBanThresholdResult']: + """ + Can only be specified if the action for the rule is "rate_based_ban". If specified, the key will be banned for the configured 'banDurationSec' when the number of requests that exceed the 'rateLimitThreshold' also exceed this 'banThreshold'. + """ + return pulumi.get(self, "ban_thresholds") + + @property + @pulumi.getter(name="conformAction") + def conform_action(self) -> str: + """ + Action to take for requests that are under the configured rate limit threshold. Valid option is "allow" only. + """ + return pulumi.get(self, "conform_action") + + @property + @pulumi.getter(name="enforceOnKey") + def enforce_on_key(self) -> str: + """ + Determines the key to enforce the rateLimitThreshold on + """ + return pulumi.get(self, "enforce_on_key") + + @property + @pulumi.getter(name="enforceOnKeyConfigs") + def enforce_on_key_configs(self) -> Sequence['outputs.GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigResult']: + """ + Enforce On Key Config of this security policy + """ + return pulumi.get(self, "enforce_on_key_configs") + + @property + @pulumi.getter(name="enforceOnKeyName") + def enforce_on_key_name(self) -> str: + """ + Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + """ + return pulumi.get(self, "enforce_on_key_name") + + @property + @pulumi.getter(name="exceedAction") + def exceed_action(self) -> str: + """ + Action to take for requests that are above the configured rate limit threshold, to either deny with a specified HTTP response code, or redirect to a different endpoint. Valid options are "deny()" where valid values for status are 403, 404, 429, and 502, and "redirect" where the redirect parameters come from exceedRedirectOptions below. + """ + return pulumi.get(self, "exceed_action") + + @property + @pulumi.getter(name="exceedRedirectOptions") + def exceed_redirect_options(self) -> Sequence['outputs.GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionResult']: + """ + Parameters defining the redirect action that is used as the exceed action. Cannot be specified if the exceed action is not redirect. + """ + return pulumi.get(self, "exceed_redirect_options") + + @property + @pulumi.getter(name="rateLimitThresholds") + def rate_limit_thresholds(self) -> Sequence['outputs.GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdResult']: + """ + Threshold at which to begin ratelimiting. + """ + return pulumi.get(self, "rate_limit_thresholds") + + +@pulumi.output_type +class GetSecurityPolicyRuleRateLimitOptionBanThresholdResult(dict): + def __init__(__self__, *, + count: int, + interval_sec: int): + """ + :param int count: Number of HTTP(S) requests for calculating the threshold. + :param int interval_sec: Interval over which the threshold is computed. + """ + pulumi.set(__self__, "count", count) + pulumi.set(__self__, "interval_sec", interval_sec) + + @property + @pulumi.getter + def count(self) -> int: + """ + Number of HTTP(S) requests for calculating the threshold. + """ + return pulumi.get(self, "count") + + @property + @pulumi.getter(name="intervalSec") + def interval_sec(self) -> int: + """ + Interval over which the threshold is computed. + """ + return pulumi.get(self, "interval_sec") + + +@pulumi.output_type +class GetSecurityPolicyRuleRateLimitOptionEnforceOnKeyConfigResult(dict): + def __init__(__self__, *, + enforce_on_key_name: str, + enforce_on_key_type: str): + """ + :param str enforce_on_key_name: Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + :param str enforce_on_key_type: Determines the key to enforce the rate_limit_threshold on + """ + pulumi.set(__self__, "enforce_on_key_name", enforce_on_key_name) + pulumi.set(__self__, "enforce_on_key_type", enforce_on_key_type) + + @property + @pulumi.getter(name="enforceOnKeyName") + def enforce_on_key_name(self) -> str: + """ + Rate limit key name applicable only for the following key types: HTTP_HEADER -- Name of the HTTP header whose value is taken as the key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key value. + """ + return pulumi.get(self, "enforce_on_key_name") + + @property + @pulumi.getter(name="enforceOnKeyType") + def enforce_on_key_type(self) -> str: + """ + Determines the key to enforce the rate_limit_threshold on + """ + return pulumi.get(self, "enforce_on_key_type") + + +@pulumi.output_type +class GetSecurityPolicyRuleRateLimitOptionExceedRedirectOptionResult(dict): + def __init__(__self__, *, + target: str, + type: str): + """ + :param str target: Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + :param str type: Type of the redirect action. + """ + pulumi.set(__self__, "target", target) + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter + def target(self) -> str: + """ + Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + """ + return pulumi.get(self, "target") + + @property + @pulumi.getter + def type(self) -> str: + """ + Type of the redirect action. + """ + return pulumi.get(self, "type") + + +@pulumi.output_type +class GetSecurityPolicyRuleRateLimitOptionRateLimitThresholdResult(dict): + def __init__(__self__, *, + count: int, + interval_sec: int): + """ + :param int count: Number of HTTP(S) requests for calculating the threshold. + :param int interval_sec: Interval over which the threshold is computed. + """ + pulumi.set(__self__, "count", count) + pulumi.set(__self__, "interval_sec", interval_sec) + + @property + @pulumi.getter + def count(self) -> int: + """ + Number of HTTP(S) requests for calculating the threshold. + """ + return pulumi.get(self, "count") + + @property + @pulumi.getter(name="intervalSec") + def interval_sec(self) -> int: + """ + Interval over which the threshold is computed. + """ + return pulumi.get(self, "interval_sec") + + +@pulumi.output_type +class GetSecurityPolicyRuleRedirectOptionResult(dict): + def __init__(__self__, *, + target: str, + type: str): + """ + :param str target: Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + :param str type: Type of the redirect action. Available options: EXTERNAL_302: Must specify the corresponding target field in config. GOOGLE_RECAPTCHA: Cannot specify target field in config. + """ + pulumi.set(__self__, "target", target) + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter + def target(self) -> str: + """ + Target for the redirect action. This is required if the type is EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA. + """ + return pulumi.get(self, "target") + + @property + @pulumi.getter + def type(self) -> str: + """ + Type of the redirect action. Available options: EXTERNAL_302: Must specify the corresponding target field in config. GOOGLE_RECAPTCHA: Cannot specify target field in config. + """ + return pulumi.get(self, "type") + + @pulumi.output_type class GetSnapshotSnapshotEncryptionKeyResult(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/compute/project_cloud_armor_tier.py b/sdk/python/pulumi_gcp/compute/project_cloud_armor_tier.py new file mode 100644 index 0000000000..d7789732de --- /dev/null +++ b/sdk/python/pulumi_gcp/compute/project_cloud_armor_tier.py @@ -0,0 +1,336 @@ +# 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__ = ['ProjectCloudArmorTierArgs', 'ProjectCloudArmorTier'] + +@pulumi.input_type +class ProjectCloudArmorTierArgs: + def __init__(__self__, *, + cloud_armor_tier: pulumi.Input[str], + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a ProjectCloudArmorTier resource. + :param pulumi.Input[str] cloud_armor_tier: Managed protection tier to be set. + Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + + + - - - + :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__, "cloud_armor_tier", cloud_armor_tier) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter(name="cloudArmorTier") + def cloud_armor_tier(self) -> pulumi.Input[str]: + """ + Managed protection tier to be set. + Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + + + - - - + """ + return pulumi.get(self, "cloud_armor_tier") + + @cloud_armor_tier.setter + def cloud_armor_tier(self, value: pulumi.Input[str]): + pulumi.set(self, "cloud_armor_tier", 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 _ProjectCloudArmorTierState: + def __init__(__self__, *, + cloud_armor_tier: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering ProjectCloudArmorTier resources. + :param pulumi.Input[str] cloud_armor_tier: Managed protection tier to be set. + Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + + + - - - + :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. + """ + if cloud_armor_tier is not None: + pulumi.set(__self__, "cloud_armor_tier", cloud_armor_tier) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter(name="cloudArmorTier") + def cloud_armor_tier(self) -> Optional[pulumi.Input[str]]: + """ + Managed protection tier to be set. + Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + + + - - - + """ + return pulumi.get(self, "cloud_armor_tier") + + @cloud_armor_tier.setter + def cloud_armor_tier(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "cloud_armor_tier", 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) + + +class ProjectCloudArmorTier(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + cloud_armor_tier: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + Sets the Cloud Armor tier of the project. + + To get more information about ProjectCloudArmorTier, see: + + * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/projects/setCloudArmorTier) + * How-to Guides + * [Subscribing to Cloud Armor Enterprise](https://cloud.google.com/armor/docs/managed-protection-overview#subscribing_to_plus) + + ## Example Usage + + ### Compute Project Cloud Armor Tier Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + cloud_armor_tier_config = gcp.compute.ProjectCloudArmorTier("cloud_armor_tier_config", cloud_armor_tier="CA_STANDARD") + ``` + ### Compute Project Cloud Armor Tier Project Set + + ```python + import pulumi + import pulumi_gcp as gcp + + project = gcp.organizations.Project("project", + project_id="your_project_id", + name="your_project_id", + org_id="123456789", + billing_account="000000-0000000-0000000-000000") + compute = gcp.projects.Service("compute", + project=project.project_id, + service="compute.googleapis.com") + cloud_armor_tier_config = gcp.compute.ProjectCloudArmorTier("cloud_armor_tier_config", + project=project.project_id, + cloud_armor_tier="CA_STANDARD", + opts=pulumi.ResourceOptions(depends_on=[compute])) + ``` + + ## Import + + ProjectCloudArmorTier can be imported using any of these accepted formats: + + * `projects/{{project}}` + + * `{{project}}` + + When using the `pulumi import` command, ProjectCloudArmorTier can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default projects/{{project}} + ``` + + ```sh + $ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default {{project}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] cloud_armor_tier: Managed protection tier to be set. + Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + + + - - - + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ProjectCloudArmorTierArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Sets the Cloud Armor tier of the project. + + To get more information about ProjectCloudArmorTier, see: + + * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/projects/setCloudArmorTier) + * How-to Guides + * [Subscribing to Cloud Armor Enterprise](https://cloud.google.com/armor/docs/managed-protection-overview#subscribing_to_plus) + + ## Example Usage + + ### Compute Project Cloud Armor Tier Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + cloud_armor_tier_config = gcp.compute.ProjectCloudArmorTier("cloud_armor_tier_config", cloud_armor_tier="CA_STANDARD") + ``` + ### Compute Project Cloud Armor Tier Project Set + + ```python + import pulumi + import pulumi_gcp as gcp + + project = gcp.organizations.Project("project", + project_id="your_project_id", + name="your_project_id", + org_id="123456789", + billing_account="000000-0000000-0000000-000000") + compute = gcp.projects.Service("compute", + project=project.project_id, + service="compute.googleapis.com") + cloud_armor_tier_config = gcp.compute.ProjectCloudArmorTier("cloud_armor_tier_config", + project=project.project_id, + cloud_armor_tier="CA_STANDARD", + opts=pulumi.ResourceOptions(depends_on=[compute])) + ``` + + ## Import + + ProjectCloudArmorTier can be imported using any of these accepted formats: + + * `projects/{{project}}` + + * `{{project}}` + + When using the `pulumi import` command, ProjectCloudArmorTier can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default projects/{{project}} + ``` + + ```sh + $ pulumi import gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier default {{project}} + ``` + + :param str resource_name: The name of the resource. + :param ProjectCloudArmorTierArgs 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(ProjectCloudArmorTierArgs, 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, + cloud_armor_tier: 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__ = ProjectCloudArmorTierArgs.__new__(ProjectCloudArmorTierArgs) + + if cloud_armor_tier is None and not opts.urn: + raise TypeError("Missing required property 'cloud_armor_tier'") + __props__.__dict__["cloud_armor_tier"] = cloud_armor_tier + __props__.__dict__["project"] = project + super(ProjectCloudArmorTier, __self__).__init__( + 'gcp:compute/projectCloudArmorTier:ProjectCloudArmorTier', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + cloud_armor_tier: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None) -> 'ProjectCloudArmorTier': + """ + Get an existing ProjectCloudArmorTier 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] cloud_armor_tier: Managed protection tier to be set. + Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + + + - - - + :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. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ProjectCloudArmorTierState.__new__(_ProjectCloudArmorTierState) + + __props__.__dict__["cloud_armor_tier"] = cloud_armor_tier + __props__.__dict__["project"] = project + return ProjectCloudArmorTier(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="cloudArmorTier") + def cloud_armor_tier(self) -> pulumi.Output[str]: + """ + Managed protection tier to be set. + Possible values are: `CA_STANDARD`, `CA_ENTERPRISE_PAYGO`. + + + - - - + """ + return pulumi.get(self, "cloud_armor_tier") + + @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") + 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 3e1aa60927..16a53456b4 100644 --- a/sdk/python/pulumi_gcp/compute/region_instance_group_manager.py +++ b/sdk/python/pulumi_gcp/compute/region_instance_group_manager.py @@ -30,11 +30,14 @@ def __init__(__self__, *, params: Optional[pulumi.Input['RegionInstanceGroupManagerParamsArgs']] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, + standby_policy: Optional[pulumi.Input['RegionInstanceGroupManagerStandbyPolicyArgs']] = None, stateful_disks: Optional[pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulDiskArgs']]]] = None, stateful_external_ips: Optional[pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulExternalIpArgs']]]] = None, stateful_internal_ips: Optional[pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulInternalIpArgs']]]] = None, target_pools: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, target_size: Optional[pulumi.Input[int]] = None, + target_stopped_size: Optional[pulumi.Input[int]] = None, + target_suspended_size: Optional[pulumi.Input[int]] = None, update_policy: Optional[pulumi.Input['RegionInstanceGroupManagerUpdatePolicyArgs']] = None, wait_for_instances: Optional[pulumi.Input[bool]] = None, wait_for_instances_status: Optional[pulumi.Input[str]] = None): @@ -80,6 +83,7 @@ def __init__(__self__, *, :param pulumi.Input[str] region: The region where the managed instance group resides. If not provided, the provider region is used. - - - + :param pulumi.Input['RegionInstanceGroupManagerStandbyPolicyArgs'] standby_policy: The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) :param pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulDiskArgs']]] stateful_disks: Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `update_policy`. :param pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulExternalIpArgs']]] stateful_external_ips: External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulInternalIpArgs']]] stateful_internal_ips: Internal network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -88,6 +92,8 @@ def __init__(__self__, *, not affect existing instances. :param pulumi.Input[int] target_size: The target number of running instances for this managed 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[int] target_stopped_size: The target number of stopped instances for this managed instance group. + :param pulumi.Input[int] target_suspended_size: The target number of suspended instances for this managed instance group. :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 @@ -123,6 +129,8 @@ def __init__(__self__, *, pulumi.set(__self__, "project", project) if region is not None: pulumi.set(__self__, "region", region) + if standby_policy is not None: + pulumi.set(__self__, "standby_policy", standby_policy) if stateful_disks is not None: pulumi.set(__self__, "stateful_disks", stateful_disks) if stateful_external_ips is not None: @@ -133,6 +141,10 @@ def __init__(__self__, *, pulumi.set(__self__, "target_pools", target_pools) if target_size is not None: pulumi.set(__self__, "target_size", target_size) + if target_stopped_size is not None: + pulumi.set(__self__, "target_stopped_size", target_stopped_size) + if target_suspended_size is not None: + pulumi.set(__self__, "target_suspended_size", target_suspended_size) if update_policy is not None: pulumi.set(__self__, "update_policy", update_policy) if wait_for_instances is not None: @@ -334,6 +346,18 @@ def region(self) -> Optional[pulumi.Input[str]]: def region(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "region", value) + @property + @pulumi.getter(name="standbyPolicy") + def standby_policy(self) -> Optional[pulumi.Input['RegionInstanceGroupManagerStandbyPolicyArgs']]: + """ + The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + """ + return pulumi.get(self, "standby_policy") + + @standby_policy.setter + def standby_policy(self, value: Optional[pulumi.Input['RegionInstanceGroupManagerStandbyPolicyArgs']]): + pulumi.set(self, "standby_policy", value) + @property @pulumi.getter(name="statefulDisks") def stateful_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulDiskArgs']]]]: @@ -397,6 +421,30 @@ def target_size(self) -> Optional[pulumi.Input[int]]: def target_size(self, value: Optional[pulumi.Input[int]]): pulumi.set(self, "target_size", value) + @property + @pulumi.getter(name="targetStoppedSize") + def target_stopped_size(self) -> Optional[pulumi.Input[int]]: + """ + The target number of stopped instances for this managed instance group. + """ + return pulumi.get(self, "target_stopped_size") + + @target_stopped_size.setter + def target_stopped_size(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "target_stopped_size", value) + + @property + @pulumi.getter(name="targetSuspendedSize") + def target_suspended_size(self) -> Optional[pulumi.Input[int]]: + """ + The target number of suspended instances for this managed instance group. + """ + return pulumi.get(self, "target_suspended_size") + + @target_suspended_size.setter + def target_suspended_size(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "target_suspended_size", value) + @property @pulumi.getter(name="updatePolicy") def update_policy(self) -> Optional[pulumi.Input['RegionInstanceGroupManagerUpdatePolicyArgs']]: @@ -459,12 +507,15 @@ def __init__(__self__, *, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, self_link: Optional[pulumi.Input[str]] = None, + standby_policy: Optional[pulumi.Input['RegionInstanceGroupManagerStandbyPolicyArgs']] = None, stateful_disks: Optional[pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulDiskArgs']]]] = None, stateful_external_ips: Optional[pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulExternalIpArgs']]]] = None, stateful_internal_ips: Optional[pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulInternalIpArgs']]]] = None, statuses: Optional[pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatusArgs']]]] = None, target_pools: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, target_size: Optional[pulumi.Input[int]] = None, + target_stopped_size: Optional[pulumi.Input[int]] = None, + target_suspended_size: Optional[pulumi.Input[int]] = None, update_policy: Optional[pulumi.Input['RegionInstanceGroupManagerUpdatePolicyArgs']] = None, versions: Optional[pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerVersionArgs']]]] = None, wait_for_instances: Optional[pulumi.Input[bool]] = None, @@ -512,6 +563,7 @@ def __init__(__self__, *, - - - :param pulumi.Input[str] self_link: The URL of the created resource. + :param pulumi.Input['RegionInstanceGroupManagerStandbyPolicyArgs'] standby_policy: The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) :param pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulDiskArgs']]] stateful_disks: Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `update_policy`. :param pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulExternalIpArgs']]] stateful_external_ips: External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulInternalIpArgs']]] stateful_internal_ips: Internal network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -521,6 +573,8 @@ def __init__(__self__, *, not affect existing instances. :param pulumi.Input[int] target_size: The target number of running instances for this managed 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[int] target_stopped_size: The target number of stopped instances for this managed instance group. + :param pulumi.Input[int] target_suspended_size: The target number of suspended instances for this managed instance group. :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[Sequence[pulumi.Input['RegionInstanceGroupManagerVersionArgs']]] versions: Application versions managed by this instance group. Each version deals with a specific instance template, allowing canary release scenarios. @@ -567,6 +621,8 @@ def __init__(__self__, *, pulumi.set(__self__, "region", region) if self_link is not None: pulumi.set(__self__, "self_link", self_link) + if standby_policy is not None: + pulumi.set(__self__, "standby_policy", standby_policy) if stateful_disks is not None: pulumi.set(__self__, "stateful_disks", stateful_disks) if stateful_external_ips is not None: @@ -579,6 +635,10 @@ def __init__(__self__, *, pulumi.set(__self__, "target_pools", target_pools) if target_size is not None: pulumi.set(__self__, "target_size", target_size) + if target_stopped_size is not None: + pulumi.set(__self__, "target_stopped_size", target_stopped_size) + if target_suspended_size is not None: + pulumi.set(__self__, "target_suspended_size", target_suspended_size) if update_policy is not None: pulumi.set(__self__, "update_policy", update_policy) if versions is not None: @@ -816,6 +876,18 @@ 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="standbyPolicy") + def standby_policy(self) -> Optional[pulumi.Input['RegionInstanceGroupManagerStandbyPolicyArgs']]: + """ + The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + """ + return pulumi.get(self, "standby_policy") + + @standby_policy.setter + def standby_policy(self, value: Optional[pulumi.Input['RegionInstanceGroupManagerStandbyPolicyArgs']]): + pulumi.set(self, "standby_policy", value) + @property @pulumi.getter(name="statefulDisks") def stateful_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerStatefulDiskArgs']]]]: @@ -891,6 +963,30 @@ def target_size(self) -> Optional[pulumi.Input[int]]: def target_size(self, value: Optional[pulumi.Input[int]]): pulumi.set(self, "target_size", value) + @property + @pulumi.getter(name="targetStoppedSize") + def target_stopped_size(self) -> Optional[pulumi.Input[int]]: + """ + The target number of stopped instances for this managed instance group. + """ + return pulumi.get(self, "target_stopped_size") + + @target_stopped_size.setter + def target_stopped_size(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "target_stopped_size", value) + + @property + @pulumi.getter(name="targetSuspendedSize") + def target_suspended_size(self) -> Optional[pulumi.Input[int]]: + """ + The target number of suspended instances for this managed instance group. + """ + return pulumi.get(self, "target_suspended_size") + + @target_suspended_size.setter + def target_suspended_size(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "target_suspended_size", value) + @property @pulumi.getter(name="updatePolicy") def update_policy(self) -> Optional[pulumi.Input['RegionInstanceGroupManagerUpdatePolicyArgs']]: @@ -965,11 +1061,14 @@ def __init__(__self__, params: Optional[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerParamsArgs']]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, + standby_policy: Optional[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStandbyPolicyArgs']]] = None, stateful_disks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulDiskArgs']]]]] = None, stateful_external_ips: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulExternalIpArgs']]]]] = None, stateful_internal_ips: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulInternalIpArgs']]]]] = None, target_pools: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, target_size: Optional[pulumi.Input[int]] = None, + target_stopped_size: Optional[pulumi.Input[int]] = None, + target_suspended_size: Optional[pulumi.Input[int]] = None, update_policy: Optional[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerUpdatePolicyArgs']]] = None, versions: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerVersionArgs']]]]] = None, wait_for_instances: Optional[pulumi.Input[bool]] = None, @@ -1060,6 +1159,28 @@ def __init__(__self__, ]) ``` + ### With Standby Policy (`Google-Beta` Provider) + ```python + import pulumi + import pulumi_gcp as gcp + + igm_sr = gcp.compute.RegionInstanceGroupManager("igm-sr", + name="tf-sr-igm", + base_instance_name="tf-sr-igm-instance", + region="us-central1", + target_size=5, + versions=[gcp.compute.RegionInstanceGroupManagerVersionArgs( + instance_template=sr_igm["selfLink"], + name="primary", + )], + standby_policy=gcp.compute.RegionInstanceGroupManagerStandbyPolicyArgs( + initial_delay_sec=50, + mode="SCALE_OUT_POOL", + ), + target_suspended_size=1, + target_stopped_size=1) + ``` + ## Import Instance group managers can be imported using any of these accepted formats: @@ -1111,6 +1232,7 @@ def __init__(__self__, :param pulumi.Input[str] region: The region where the managed instance group resides. If not provided, the provider region is used. - - - + :param pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStandbyPolicyArgs']] standby_policy: The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulDiskArgs']]]] stateful_disks: Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `update_policy`. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulExternalIpArgs']]]] stateful_external_ips: External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulInternalIpArgs']]]] stateful_internal_ips: Internal network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -1119,6 +1241,8 @@ def __init__(__self__, not affect existing instances. :param pulumi.Input[int] target_size: The target number of running instances for this managed 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[int] target_stopped_size: The target number of stopped instances for this managed instance group. + :param pulumi.Input[int] target_suspended_size: The target number of suspended instances for this managed instance group. :param pulumi.Input[pulumi.InputType['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[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. @@ -1222,6 +1346,28 @@ def __init__(__self__, ]) ``` + ### With Standby Policy (`Google-Beta` Provider) + ```python + import pulumi + import pulumi_gcp as gcp + + igm_sr = gcp.compute.RegionInstanceGroupManager("igm-sr", + name="tf-sr-igm", + base_instance_name="tf-sr-igm-instance", + region="us-central1", + target_size=5, + versions=[gcp.compute.RegionInstanceGroupManagerVersionArgs( + instance_template=sr_igm["selfLink"], + name="primary", + )], + standby_policy=gcp.compute.RegionInstanceGroupManagerStandbyPolicyArgs( + initial_delay_sec=50, + mode="SCALE_OUT_POOL", + ), + target_suspended_size=1, + target_stopped_size=1) + ``` + ## Import Instance group managers can be imported using any of these accepted formats: @@ -1262,11 +1408,14 @@ def _internal_init(__self__, params: Optional[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerParamsArgs']]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, + standby_policy: Optional[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStandbyPolicyArgs']]] = None, stateful_disks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulDiskArgs']]]]] = None, stateful_external_ips: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulExternalIpArgs']]]]] = None, stateful_internal_ips: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulInternalIpArgs']]]]] = None, target_pools: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, target_size: Optional[pulumi.Input[int]] = None, + target_stopped_size: Optional[pulumi.Input[int]] = None, + target_suspended_size: Optional[pulumi.Input[int]] = None, update_policy: Optional[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerUpdatePolicyArgs']]] = None, versions: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerVersionArgs']]]]] = None, wait_for_instances: Optional[pulumi.Input[bool]] = None, @@ -1295,11 +1444,14 @@ def _internal_init(__self__, __props__.__dict__["params"] = params __props__.__dict__["project"] = project __props__.__dict__["region"] = region + __props__.__dict__["standby_policy"] = standby_policy __props__.__dict__["stateful_disks"] = stateful_disks __props__.__dict__["stateful_external_ips"] = stateful_external_ips __props__.__dict__["stateful_internal_ips"] = stateful_internal_ips __props__.__dict__["target_pools"] = target_pools __props__.__dict__["target_size"] = target_size + __props__.__dict__["target_stopped_size"] = target_stopped_size + __props__.__dict__["target_suspended_size"] = target_suspended_size __props__.__dict__["update_policy"] = update_policy if versions is None and not opts.urn: raise TypeError("Missing required property 'versions'") @@ -1338,12 +1490,15 @@ def get(resource_name: str, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, self_link: Optional[pulumi.Input[str]] = None, + standby_policy: Optional[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStandbyPolicyArgs']]] = None, stateful_disks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulDiskArgs']]]]] = None, stateful_external_ips: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulExternalIpArgs']]]]] = None, stateful_internal_ips: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulInternalIpArgs']]]]] = None, statuses: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatusArgs']]]]] = None, target_pools: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, target_size: Optional[pulumi.Input[int]] = None, + target_stopped_size: Optional[pulumi.Input[int]] = None, + target_suspended_size: Optional[pulumi.Input[int]] = None, update_policy: Optional[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerUpdatePolicyArgs']]] = None, versions: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerVersionArgs']]]]] = None, wait_for_instances: Optional[pulumi.Input[bool]] = None, @@ -1396,6 +1551,7 @@ def get(resource_name: str, - - - :param pulumi.Input[str] self_link: The URL of the created resource. + :param pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStandbyPolicyArgs']] standby_policy: The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulDiskArgs']]]] stateful_disks: Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `update_policy`. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulExternalIpArgs']]]] stateful_external_ips: External network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerStatefulInternalIpArgs']]]] stateful_internal_ips: Internal network IPs assigned to the instances that will be preserved on instance delete, update, etc. This map is keyed with the network interface name. Structure is documented below. @@ -1405,6 +1561,8 @@ def get(resource_name: str, not affect existing instances. :param pulumi.Input[int] target_size: The target number of running instances for this managed 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[int] target_stopped_size: The target number of stopped instances for this managed instance group. + :param pulumi.Input[int] target_suspended_size: The target number of suspended instances for this managed instance group. :param pulumi.Input[pulumi.InputType['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[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. @@ -1438,12 +1596,15 @@ def get(resource_name: str, __props__.__dict__["project"] = project __props__.__dict__["region"] = region __props__.__dict__["self_link"] = self_link + __props__.__dict__["standby_policy"] = standby_policy __props__.__dict__["stateful_disks"] = stateful_disks __props__.__dict__["stateful_external_ips"] = stateful_external_ips __props__.__dict__["stateful_internal_ips"] = stateful_internal_ips __props__.__dict__["statuses"] = statuses __props__.__dict__["target_pools"] = target_pools __props__.__dict__["target_size"] = target_size + __props__.__dict__["target_stopped_size"] = target_stopped_size + __props__.__dict__["target_suspended_size"] = target_suspended_size __props__.__dict__["update_policy"] = update_policy __props__.__dict__["versions"] = versions __props__.__dict__["wait_for_instances"] = wait_for_instances @@ -1610,6 +1771,14 @@ def self_link(self) -> pulumi.Output[str]: """ return pulumi.get(self, "self_link") + @property + @pulumi.getter(name="standbyPolicy") + def standby_policy(self) -> pulumi.Output['outputs.RegionInstanceGroupManagerStandbyPolicy']: + """ + The standby policy for stopped and suspended instances. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/suspended-and-stopped-vms-in-mig) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) + """ + return pulumi.get(self, "standby_policy") + @property @pulumi.getter(name="statefulDisks") def stateful_disks(self) -> pulumi.Output[Optional[Sequence['outputs.RegionInstanceGroupManagerStatefulDisk']]]: @@ -1661,6 +1830,22 @@ def target_size(self) -> pulumi.Output[int]: """ return pulumi.get(self, "target_size") + @property + @pulumi.getter(name="targetStoppedSize") + def target_stopped_size(self) -> pulumi.Output[int]: + """ + The target number of stopped instances for this managed instance group. + """ + return pulumi.get(self, "target_stopped_size") + + @property + @pulumi.getter(name="targetSuspendedSize") + def target_suspended_size(self) -> pulumi.Output[int]: + """ + The target number of suspended instances for this managed instance group. + """ + return pulumi.get(self, "target_suspended_size") + @property @pulumi.getter(name="updatePolicy") def update_policy(self) -> pulumi.Output['outputs.RegionInstanceGroupManagerUpdatePolicy']: diff --git a/sdk/python/pulumi_gcp/compute/region_instance_template.py b/sdk/python/pulumi_gcp/compute/region_instance_template.py index e30092799c..aa9ab9d1ef 100644 --- a/sdk/python/pulumi_gcp/compute/region_instance_template.py +++ b/sdk/python/pulumi_gcp/compute/region_instance_template.py @@ -33,6 +33,7 @@ def __init__(__self__, *, name_prefix: Optional[pulumi.Input[str]] = None, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['RegionInstanceTemplateNetworkInterfaceArgs']]]] = None, network_performance_config: Optional[pulumi.Input['RegionInstanceTemplateNetworkPerformanceConfigArgs']] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input['RegionInstanceTemplateReservationAffinityArgs']] = None, @@ -86,6 +87,7 @@ def __init__(__self__, *, the `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image) in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` in order for this setting to take effect. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. :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 in which the resource belongs. @@ -133,6 +135,8 @@ def __init__(__self__, *, pulumi.set(__self__, "network_interfaces", network_interfaces) if network_performance_config is not None: pulumi.set(__self__, "network_performance_config", network_performance_config) + if partner_metadata is not None: + pulumi.set(__self__, "partner_metadata", partner_metadata) if project is not None: pulumi.set(__self__, "project", project) if region is not None: @@ -379,6 +383,18 @@ def network_performance_config(self) -> Optional[pulumi.Input['RegionInstanceTem def network_performance_config(self, value: Optional[pulumi.Input['RegionInstanceTemplateNetworkPerformanceConfigArgs']]): pulumi.set(self, "network_performance_config", value) + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + """ + return pulumi.get(self, "partner_metadata") + + @partner_metadata.setter + def partner_metadata(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "partner_metadata", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -515,6 +531,7 @@ def __init__(__self__, *, name_prefix: Optional[pulumi.Input[str]] = None, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['RegionInstanceTemplateNetworkInterfaceArgs']]]] = None, network_performance_config: Optional[pulumi.Input['RegionInstanceTemplateNetworkPerformanceConfigArgs']] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, region: Optional[pulumi.Input[str]] = None, @@ -573,6 +590,7 @@ def __init__(__self__, *, the `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image) in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` in order for this setting to take effect. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource and default labels configured on the provider. @@ -629,6 +647,8 @@ def __init__(__self__, *, pulumi.set(__self__, "network_interfaces", network_interfaces) if network_performance_config is not None: pulumi.set(__self__, "network_performance_config", network_performance_config) + if partner_metadata is not None: + pulumi.set(__self__, "partner_metadata", partner_metadata) if project is not None: pulumi.set(__self__, "project", project) if pulumi_labels is not None: @@ -905,6 +925,18 @@ def network_performance_config(self) -> Optional[pulumi.Input['RegionInstanceTem def network_performance_config(self, value: Optional[pulumi.Input['RegionInstanceTemplateNetworkPerformanceConfigArgs']]): pulumi.set(self, "network_performance_config", value) + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + """ + return pulumi.get(self, "partner_metadata") + + @partner_metadata.setter + def partner_metadata(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "partner_metadata", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -1077,6 +1109,7 @@ def __init__(__self__, name_prefix: Optional[pulumi.Input[str]] = None, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceTemplateNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['RegionInstanceTemplateNetworkPerformanceConfigArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input[pulumi.InputType['RegionInstanceTemplateReservationAffinityArgs']]] = None, @@ -1156,6 +1189,7 @@ def __init__(__self__, the `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image) in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` in order for this setting to take effect. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. :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 in which the resource belongs. @@ -1234,6 +1268,7 @@ def _internal_init(__self__, name_prefix: Optional[pulumi.Input[str]] = None, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceTemplateNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['RegionInstanceTemplateNetworkPerformanceConfigArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, reservation_affinity: Optional[pulumi.Input[pulumi.InputType['RegionInstanceTemplateReservationAffinityArgs']]] = None, @@ -1273,6 +1308,7 @@ def _internal_init(__self__, __props__.__dict__["name_prefix"] = name_prefix __props__.__dict__["network_interfaces"] = network_interfaces __props__.__dict__["network_performance_config"] = network_performance_config + __props__.__dict__["partner_metadata"] = partner_metadata __props__.__dict__["project"] = project __props__.__dict__["region"] = region __props__.__dict__["reservation_affinity"] = reservation_affinity @@ -1318,6 +1354,7 @@ def get(resource_name: str, name_prefix: Optional[pulumi.Input[str]] = None, network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceTemplateNetworkInterfaceArgs']]]]] = None, network_performance_config: Optional[pulumi.Input[pulumi.InputType['RegionInstanceTemplateNetworkPerformanceConfigArgs']]] = None, + partner_metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, region: Optional[pulumi.Input[str]] = None, @@ -1381,6 +1418,7 @@ def get(resource_name: str, the `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image) in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC` in order for this setting to take effect. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] partner_metadata: Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource and default labels configured on the provider. @@ -1422,6 +1460,7 @@ def get(resource_name: str, __props__.__dict__["name_prefix"] = name_prefix __props__.__dict__["network_interfaces"] = network_interfaces __props__.__dict__["network_performance_config"] = network_performance_config + __props__.__dict__["partner_metadata"] = partner_metadata __props__.__dict__["project"] = project __props__.__dict__["pulumi_labels"] = pulumi_labels __props__.__dict__["region"] = region @@ -1611,6 +1650,14 @@ def network_performance_config(self) -> pulumi.Output[Optional['outputs.RegionIn """ return pulumi.get(self, "network_performance_config") + @property + @pulumi.getter(name="partnerMetadata") + def partner_metadata(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + Beta key/value pair represents partner metadata assigned to instance template where key represent a defined namespace and value is a json string represent the entries associted with the namespace. + """ + return pulumi.get(self, "partner_metadata") + @property @pulumi.getter def project(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/config/__init__.pyi b/sdk/python/pulumi_gcp/config/__init__.pyi index ce17aed90e..a729ff157e 100644 --- a/sdk/python/pulumi_gcp/config/__init__.pyi +++ b/sdk/python/pulumi_gcp/config/__init__.pyi @@ -296,6 +296,8 @@ secureSourceManagerCustomEndpoint: Optional[str] securityCenterCustomEndpoint: Optional[str] +securityCenterManagementCustomEndpoint: Optional[str] + securityScannerCustomEndpoint: Optional[str] securitypostureCustomEndpoint: Optional[str] diff --git a/sdk/python/pulumi_gcp/config/vars.py b/sdk/python/pulumi_gcp/config/vars.py index 44a9eb7a46..ec2c8a54c8 100644 --- a/sdk/python/pulumi_gcp/config/vars.py +++ b/sdk/python/pulumi_gcp/config/vars.py @@ -588,6 +588,10 @@ def secure_source_manager_custom_endpoint(self) -> Optional[str]: def security_center_custom_endpoint(self) -> Optional[str]: return __config__.get('securityCenterCustomEndpoint') + @property + def security_center_management_custom_endpoint(self) -> Optional[str]: + return __config__.get('securityCenterManagementCustomEndpoint') + @property def security_scanner_custom_endpoint(self) -> Optional[str]: return __config__.get('securityScannerCustomEndpoint') diff --git a/sdk/python/pulumi_gcp/container/_inputs.py b/sdk/python/pulumi_gcp/container/_inputs.py index d06be0cfca..cfbdde63d0 100644 --- a/sdk/python/pulumi_gcp/container/_inputs.py +++ b/sdk/python/pulumi_gcp/container/_inputs.py @@ -219,6 +219,7 @@ 'ClusterReleaseChannelArgs', 'ClusterResourceUsageExportConfigArgs', 'ClusterResourceUsageExportConfigBigqueryDestinationArgs', + 'ClusterSecretManagerConfigArgs', 'ClusterSecurityPostureConfigArgs', 'ClusterServiceExternalIpsConfigArgs', 'ClusterTpuConfigArgs', @@ -11063,6 +11064,28 @@ def dataset_id(self, value: pulumi.Input[str]): pulumi.set(self, "dataset_id", value) +@pulumi.input_type +class ClusterSecretManagerConfigArgs: + def __init__(__self__, *, + enabled: pulumi.Input[bool]): + """ + :param pulumi.Input[bool] enabled: Enable the Secret Manager add-on for this cluster. + """ + pulumi.set(__self__, "enabled", enabled) + + @property + @pulumi.getter + def enabled(self) -> pulumi.Input[bool]: + """ + Enable the Secret Manager add-on for this cluster. + """ + return pulumi.get(self, "enabled") + + @enabled.setter + def enabled(self, value: pulumi.Input[bool]): + pulumi.set(self, "enabled", value) + + @pulumi.input_type class ClusterSecurityPostureConfigArgs: def __init__(__self__, *, @@ -11409,8 +11432,8 @@ def __init__(__self__, *, Structure is documented below :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: Whether nodes have internal IP addresses only. - :param pulumi.Input['NodePoolNetworkConfigNetworkPerformanceConfigArgs'] network_performance_config: Network bandwidth tier configuration. - :param pulumi.Input['NodePoolNetworkConfigPodCidrOverprovisionConfigArgs'] pod_cidr_overprovision_config: Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + :param pulumi.Input['NodePoolNetworkConfigNetworkPerformanceConfigArgs'] network_performance_config: Network bandwidth tier configuration. Structure is documented below. + :param pulumi.Input['NodePoolNetworkConfigPodCidrOverprovisionConfigArgs'] pod_cidr_overprovision_config: Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. :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. """ @@ -11485,7 +11508,7 @@ def enable_private_nodes(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="networkPerformanceConfig") def network_performance_config(self) -> Optional[pulumi.Input['NodePoolNetworkConfigNetworkPerformanceConfigArgs']]: """ - Network bandwidth tier configuration. + Network bandwidth tier configuration. Structure is documented below. """ return pulumi.get(self, "network_performance_config") @@ -11497,7 +11520,7 @@ def network_performance_config(self, value: Optional[pulumi.Input['NodePoolNetwo @pulumi.getter(name="podCidrOverprovisionConfig") def pod_cidr_overprovision_config(self) -> Optional[pulumi.Input['NodePoolNetworkConfigPodCidrOverprovisionConfigArgs']]: """ - Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. """ return pulumi.get(self, "pod_cidr_overprovision_config") @@ -11650,11 +11673,17 @@ def total_egress_bandwidth_tier(self, value: pulumi.Input[str]): class NodePoolNetworkConfigPodCidrOverprovisionConfigArgs: def __init__(__self__, *, disabled: pulumi.Input[bool]): + """ + :param pulumi.Input[bool] disabled: Whether pod cidr overprovision is disabled. + """ pulumi.set(__self__, "disabled", disabled) @property @pulumi.getter def disabled(self) -> pulumi.Input[bool]: + """ + Whether pod cidr overprovision is disabled. + """ return pulumi.get(self, "disabled") @disabled.setter diff --git a/sdk/python/pulumi_gcp/container/cluster.py b/sdk/python/pulumi_gcp/container/cluster.py index 2d665b55f1..32381a90b7 100644 --- a/sdk/python/pulumi_gcp/container/cluster.py +++ b/sdk/python/pulumi_gcp/container/cluster.py @@ -78,6 +78,7 @@ def __init__(__self__, *, remove_default_node_pool: Optional[pulumi.Input[bool]] = None, resource_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, resource_usage_export_config: Optional[pulumi.Input['ClusterResourceUsageExportConfigArgs']] = None, + secret_manager_config: Optional[pulumi.Input['ClusterSecretManagerConfigArgs']] = None, security_posture_config: Optional[pulumi.Input['ClusterSecurityPostureConfigArgs']] = None, service_external_ips_config: Optional[pulumi.Input['ClusterServiceExternalIpsConfigArgs']] = None, subnetwork: Optional[pulumi.Input[str]] = None, @@ -275,6 +276,9 @@ def __init__(__self__, *, :param pulumi.Input['ClusterResourceUsageExportConfigArgs'] resource_usage_export_config: Configuration for the [ResourceUsageExportConfig](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-usage-metering) feature. Structure is documented below. + :param pulumi.Input['ClusterSecretManagerConfigArgs'] secret_manager_config: Configuration for the + [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + Structure is documented below. :param pulumi.Input['ClusterSecurityPostureConfigArgs'] security_posture_config: Enable/Disable Security Posture API features for the cluster. Structure is documented below. :param pulumi.Input['ClusterServiceExternalIpsConfigArgs'] service_external_ips_config: Structure is documented below. :param pulumi.Input[str] subnetwork: The name or self_link of the Google Compute Engine @@ -413,6 +417,8 @@ def __init__(__self__, *, pulumi.set(__self__, "resource_labels", resource_labels) if resource_usage_export_config is not None: pulumi.set(__self__, "resource_usage_export_config", resource_usage_export_config) + if secret_manager_config is not None: + pulumi.set(__self__, "secret_manager_config", secret_manager_config) if security_posture_config is not None: pulumi.set(__self__, "security_posture_config", security_posture_config) if service_external_ips_config is not None: @@ -1296,6 +1302,20 @@ def resource_usage_export_config(self) -> Optional[pulumi.Input['ClusterResource def resource_usage_export_config(self, value: Optional[pulumi.Input['ClusterResourceUsageExportConfigArgs']]): pulumi.set(self, "resource_usage_export_config", value) + @property + @pulumi.getter(name="secretManagerConfig") + def secret_manager_config(self) -> Optional[pulumi.Input['ClusterSecretManagerConfigArgs']]: + """ + Configuration for the + [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + Structure is documented below. + """ + return pulumi.get(self, "secret_manager_config") + + @secret_manager_config.setter + def secret_manager_config(self, value: Optional[pulumi.Input['ClusterSecretManagerConfigArgs']]): + pulumi.set(self, "secret_manager_config", value) + @property @pulumi.getter(name="securityPostureConfig") def security_posture_config(self) -> Optional[pulumi.Input['ClusterSecurityPostureConfigArgs']]: @@ -1456,6 +1476,7 @@ def __init__(__self__, *, remove_default_node_pool: Optional[pulumi.Input[bool]] = None, resource_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, resource_usage_export_config: Optional[pulumi.Input['ClusterResourceUsageExportConfigArgs']] = None, + secret_manager_config: Optional[pulumi.Input['ClusterSecretManagerConfigArgs']] = None, security_posture_config: Optional[pulumi.Input['ClusterSecurityPostureConfigArgs']] = None, self_link: Optional[pulumi.Input[str]] = None, service_external_ips_config: Optional[pulumi.Input['ClusterServiceExternalIpsConfigArgs']] = None, @@ -1661,6 +1682,9 @@ def __init__(__self__, *, :param pulumi.Input['ClusterResourceUsageExportConfigArgs'] resource_usage_export_config: Configuration for the [ResourceUsageExportConfig](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-usage-metering) feature. Structure is documented below. + :param pulumi.Input['ClusterSecretManagerConfigArgs'] secret_manager_config: Configuration for the + [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + Structure is documented below. :param pulumi.Input['ClusterSecurityPostureConfigArgs'] security_posture_config: Enable/Disable Security Posture API features for the cluster. Structure is documented below. :param pulumi.Input[str] self_link: The server-defined URL for the resource. :param pulumi.Input['ClusterServiceExternalIpsConfigArgs'] service_external_ips_config: Structure is documented below. @@ -1815,6 +1839,8 @@ def __init__(__self__, *, pulumi.set(__self__, "resource_labels", resource_labels) if resource_usage_export_config is not None: pulumi.set(__self__, "resource_usage_export_config", resource_usage_export_config) + if secret_manager_config is not None: + pulumi.set(__self__, "secret_manager_config", secret_manager_config) if security_posture_config is not None: pulumi.set(__self__, "security_posture_config", security_posture_config) if self_link is not None: @@ -2751,6 +2777,20 @@ def resource_usage_export_config(self) -> Optional[pulumi.Input['ClusterResource def resource_usage_export_config(self, value: Optional[pulumi.Input['ClusterResourceUsageExportConfigArgs']]): pulumi.set(self, "resource_usage_export_config", value) + @property + @pulumi.getter(name="secretManagerConfig") + def secret_manager_config(self) -> Optional[pulumi.Input['ClusterSecretManagerConfigArgs']]: + """ + Configuration for the + [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + Structure is documented below. + """ + return pulumi.get(self, "secret_manager_config") + + @secret_manager_config.setter + def secret_manager_config(self, value: Optional[pulumi.Input['ClusterSecretManagerConfigArgs']]): + pulumi.set(self, "secret_manager_config", value) + @property @pulumi.getter(name="securityPostureConfig") def security_posture_config(self) -> Optional[pulumi.Input['ClusterSecurityPostureConfigArgs']]: @@ -2950,6 +2990,7 @@ def __init__(__self__, remove_default_node_pool: Optional[pulumi.Input[bool]] = None, resource_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, resource_usage_export_config: Optional[pulumi.Input[pulumi.InputType['ClusterResourceUsageExportConfigArgs']]] = None, + secret_manager_config: Optional[pulumi.Input[pulumi.InputType['ClusterSecretManagerConfigArgs']]] = None, security_posture_config: Optional[pulumi.Input[pulumi.InputType['ClusterSecurityPostureConfigArgs']]] = None, service_external_ips_config: Optional[pulumi.Input[pulumi.InputType['ClusterServiceExternalIpsConfigArgs']]] = None, subnetwork: Optional[pulumi.Input[str]] = None, @@ -3269,6 +3310,9 @@ def __init__(__self__, :param pulumi.Input[pulumi.InputType['ClusterResourceUsageExportConfigArgs']] resource_usage_export_config: Configuration for the [ResourceUsageExportConfig](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-usage-metering) feature. Structure is documented below. + :param pulumi.Input[pulumi.InputType['ClusterSecretManagerConfigArgs']] secret_manager_config: Configuration for the + [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + Structure is documented below. :param pulumi.Input[pulumi.InputType['ClusterSecurityPostureConfigArgs']] security_posture_config: Enable/Disable Security Posture API features for the cluster. Structure is documented below. :param pulumi.Input[pulumi.InputType['ClusterServiceExternalIpsConfigArgs']] service_external_ips_config: Structure is documented below. :param pulumi.Input[str] subnetwork: The name or self_link of the Google Compute Engine @@ -3487,6 +3531,7 @@ def _internal_init(__self__, remove_default_node_pool: Optional[pulumi.Input[bool]] = None, resource_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, resource_usage_export_config: Optional[pulumi.Input[pulumi.InputType['ClusterResourceUsageExportConfigArgs']]] = None, + secret_manager_config: Optional[pulumi.Input[pulumi.InputType['ClusterSecretManagerConfigArgs']]] = None, security_posture_config: Optional[pulumi.Input[pulumi.InputType['ClusterSecurityPostureConfigArgs']]] = None, service_external_ips_config: Optional[pulumi.Input[pulumi.InputType['ClusterServiceExternalIpsConfigArgs']]] = None, subnetwork: Optional[pulumi.Input[str]] = None, @@ -3565,6 +3610,7 @@ def _internal_init(__self__, __props__.__dict__["remove_default_node_pool"] = remove_default_node_pool __props__.__dict__["resource_labels"] = resource_labels __props__.__dict__["resource_usage_export_config"] = resource_usage_export_config + __props__.__dict__["secret_manager_config"] = secret_manager_config __props__.__dict__["security_posture_config"] = security_posture_config __props__.__dict__["service_external_ips_config"] = service_external_ips_config __props__.__dict__["subnetwork"] = subnetwork @@ -3655,6 +3701,7 @@ def get(resource_name: str, remove_default_node_pool: Optional[pulumi.Input[bool]] = None, resource_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, resource_usage_export_config: Optional[pulumi.Input[pulumi.InputType['ClusterResourceUsageExportConfigArgs']]] = None, + secret_manager_config: Optional[pulumi.Input[pulumi.InputType['ClusterSecretManagerConfigArgs']]] = None, security_posture_config: Optional[pulumi.Input[pulumi.InputType['ClusterSecurityPostureConfigArgs']]] = None, self_link: Optional[pulumi.Input[str]] = None, service_external_ips_config: Optional[pulumi.Input[pulumi.InputType['ClusterServiceExternalIpsConfigArgs']]] = None, @@ -3865,6 +3912,9 @@ def get(resource_name: str, :param pulumi.Input[pulumi.InputType['ClusterResourceUsageExportConfigArgs']] resource_usage_export_config: Configuration for the [ResourceUsageExportConfig](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-usage-metering) feature. Structure is documented below. + :param pulumi.Input[pulumi.InputType['ClusterSecretManagerConfigArgs']] secret_manager_config: Configuration for the + [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + Structure is documented below. :param pulumi.Input[pulumi.InputType['ClusterSecurityPostureConfigArgs']] security_posture_config: Enable/Disable Security Posture API features for the cluster. Structure is documented below. :param pulumi.Input[str] self_link: The server-defined URL for the resource. :param pulumi.Input[pulumi.InputType['ClusterServiceExternalIpsConfigArgs']] service_external_ips_config: Structure is documented below. @@ -3957,6 +4007,7 @@ def get(resource_name: str, __props__.__dict__["remove_default_node_pool"] = remove_default_node_pool __props__.__dict__["resource_labels"] = resource_labels __props__.__dict__["resource_usage_export_config"] = resource_usage_export_config + __props__.__dict__["secret_manager_config"] = secret_manager_config __props__.__dict__["security_posture_config"] = security_posture_config __props__.__dict__["self_link"] = self_link __props__.__dict__["service_external_ips_config"] = service_external_ips_config @@ -4620,6 +4671,16 @@ def resource_usage_export_config(self) -> pulumi.Output[Optional['outputs.Cluste """ return pulumi.get(self, "resource_usage_export_config") + @property + @pulumi.getter(name="secretManagerConfig") + def secret_manager_config(self) -> pulumi.Output[Optional['outputs.ClusterSecretManagerConfig']]: + """ + Configuration for the + [SecretManagerConfig](https://cloud.google.com/secret-manager/docs/secret-manager-managed-csi-component) feature. + Structure is documented below. + """ + return pulumi.get(self, "secret_manager_config") + @property @pulumi.getter(name="securityPostureConfig") def security_posture_config(self) -> pulumi.Output['outputs.ClusterSecurityPostureConfig']: diff --git a/sdk/python/pulumi_gcp/container/get_cluster.py b/sdk/python/pulumi_gcp/container/get_cluster.py index 7cee620a00..1e1094d7c6 100644 --- a/sdk/python/pulumi_gcp/container/get_cluster.py +++ b/sdk/python/pulumi_gcp/container/get_cluster.py @@ -22,7 +22,7 @@ class GetClusterResult: """ A collection of values returned by getCluster. """ - def __init__(__self__, addons_configs=None, allow_net_admin=None, authenticator_groups_configs=None, binary_authorizations=None, cluster_autoscalings=None, cluster_ipv4_cidr=None, cluster_telemetries=None, confidential_nodes=None, cost_management_configs=None, database_encryptions=None, datapath_provider=None, default_max_pods_per_node=None, default_snat_statuses=None, deletion_protection=None, description=None, dns_configs=None, enable_autopilot=None, enable_cilium_clusterwide_network_policy=None, enable_fqdn_network_policy=None, enable_intranode_visibility=None, enable_k8s_beta_apis=None, enable_kubernetes_alpha=None, enable_l4_ilb_subsetting=None, enable_legacy_abac=None, enable_multi_networking=None, enable_shielded_nodes=None, enable_tpu=None, endpoint=None, fleets=None, gateway_api_configs=None, id=None, identity_service_configs=None, initial_node_count=None, ip_allocation_policies=None, label_fingerprint=None, location=None, logging_configs=None, logging_service=None, maintenance_policies=None, master_authorized_networks_configs=None, master_auths=None, master_version=None, mesh_certificates=None, min_master_version=None, monitoring_configs=None, monitoring_service=None, name=None, network=None, network_policies=None, networking_mode=None, node_configs=None, node_locations=None, node_pool_auto_configs=None, node_pool_defaults=None, node_pools=None, node_version=None, notification_configs=None, operation=None, pod_security_policy_configs=None, private_cluster_configs=None, private_ipv6_google_access=None, project=None, protect_configs=None, release_channels=None, remove_default_node_pool=None, resource_labels=None, resource_usage_export_configs=None, security_posture_configs=None, self_link=None, service_external_ips_configs=None, services_ipv4_cidr=None, subnetwork=None, tpu_configs=None, tpu_ipv4_cidr_block=None, vertical_pod_autoscalings=None, workload_alts_configs=None, workload_identity_configs=None): + def __init__(__self__, addons_configs=None, allow_net_admin=None, authenticator_groups_configs=None, binary_authorizations=None, cluster_autoscalings=None, cluster_ipv4_cidr=None, cluster_telemetries=None, confidential_nodes=None, cost_management_configs=None, database_encryptions=None, datapath_provider=None, default_max_pods_per_node=None, default_snat_statuses=None, deletion_protection=None, description=None, dns_configs=None, enable_autopilot=None, enable_cilium_clusterwide_network_policy=None, enable_fqdn_network_policy=None, enable_intranode_visibility=None, enable_k8s_beta_apis=None, enable_kubernetes_alpha=None, enable_l4_ilb_subsetting=None, enable_legacy_abac=None, enable_multi_networking=None, enable_shielded_nodes=None, enable_tpu=None, endpoint=None, fleets=None, gateway_api_configs=None, id=None, identity_service_configs=None, initial_node_count=None, ip_allocation_policies=None, label_fingerprint=None, location=None, logging_configs=None, logging_service=None, maintenance_policies=None, master_authorized_networks_configs=None, master_auths=None, master_version=None, mesh_certificates=None, min_master_version=None, monitoring_configs=None, monitoring_service=None, name=None, network=None, network_policies=None, networking_mode=None, node_configs=None, node_locations=None, node_pool_auto_configs=None, node_pool_defaults=None, node_pools=None, node_version=None, notification_configs=None, operation=None, pod_security_policy_configs=None, private_cluster_configs=None, private_ipv6_google_access=None, project=None, protect_configs=None, release_channels=None, remove_default_node_pool=None, resource_labels=None, resource_usage_export_configs=None, secret_manager_configs=None, security_posture_configs=None, self_link=None, service_external_ips_configs=None, services_ipv4_cidr=None, subnetwork=None, tpu_configs=None, tpu_ipv4_cidr_block=None, vertical_pod_autoscalings=None, workload_alts_configs=None, workload_identity_configs=None): if addons_configs and not isinstance(addons_configs, list): raise TypeError("Expected argument 'addons_configs' to be a list") pulumi.set(__self__, "addons_configs", addons_configs) @@ -224,6 +224,9 @@ def __init__(__self__, addons_configs=None, allow_net_admin=None, authenticator_ if resource_usage_export_configs and not isinstance(resource_usage_export_configs, list): raise TypeError("Expected argument 'resource_usage_export_configs' to be a list") pulumi.set(__self__, "resource_usage_export_configs", resource_usage_export_configs) + if secret_manager_configs and not isinstance(secret_manager_configs, list): + raise TypeError("Expected argument 'secret_manager_configs' to be a list") + pulumi.set(__self__, "secret_manager_configs", secret_manager_configs) if security_posture_configs and not isinstance(security_posture_configs, list): raise TypeError("Expected argument 'security_posture_configs' to be a list") pulumi.set(__self__, "security_posture_configs", security_posture_configs) @@ -593,6 +596,11 @@ def resource_labels(self) -> Mapping[str, str]: def resource_usage_export_configs(self) -> Sequence['outputs.GetClusterResourceUsageExportConfigResult']: return pulumi.get(self, "resource_usage_export_configs") + @property + @pulumi.getter(name="secretManagerConfigs") + def secret_manager_configs(self) -> Sequence['outputs.GetClusterSecretManagerConfigResult']: + return pulumi.get(self, "secret_manager_configs") + @property @pulumi.getter(name="securityPostureConfigs") def security_posture_configs(self) -> Sequence['outputs.GetClusterSecurityPostureConfigResult']: @@ -717,6 +725,7 @@ def __await__(self): remove_default_node_pool=self.remove_default_node_pool, resource_labels=self.resource_labels, resource_usage_export_configs=self.resource_usage_export_configs, + secret_manager_configs=self.secret_manager_configs, security_posture_configs=self.security_posture_configs, self_link=self.self_link, service_external_ips_configs=self.service_external_ips_configs, @@ -821,6 +830,7 @@ def get_cluster(location: Optional[str] = None, remove_default_node_pool=pulumi.get(__ret__, 'remove_default_node_pool'), resource_labels=pulumi.get(__ret__, 'resource_labels'), resource_usage_export_configs=pulumi.get(__ret__, 'resource_usage_export_configs'), + secret_manager_configs=pulumi.get(__ret__, 'secret_manager_configs'), security_posture_configs=pulumi.get(__ret__, 'security_posture_configs'), self_link=pulumi.get(__ret__, 'self_link'), service_external_ips_configs=pulumi.get(__ret__, 'service_external_ips_configs'), diff --git a/sdk/python/pulumi_gcp/container/outputs.py b/sdk/python/pulumi_gcp/container/outputs.py index 8c3f62a4eb..81d0b23706 100644 --- a/sdk/python/pulumi_gcp/container/outputs.py +++ b/sdk/python/pulumi_gcp/container/outputs.py @@ -220,6 +220,7 @@ 'ClusterReleaseChannel', 'ClusterResourceUsageExportConfig', 'ClusterResourceUsageExportConfigBigqueryDestination', + 'ClusterSecretManagerConfig', 'ClusterSecurityPostureConfig', 'ClusterServiceExternalIpsConfig', 'ClusterTpuConfig', @@ -408,6 +409,7 @@ 'GetClusterReleaseChannelResult', 'GetClusterResourceUsageExportConfigResult', 'GetClusterResourceUsageExportConfigBigqueryDestinationResult', + 'GetClusterSecretManagerConfigResult', 'GetClusterSecurityPostureConfigResult', 'GetClusterServiceExternalIpsConfigResult', 'GetClusterTpuConfigResult', @@ -12019,6 +12021,24 @@ def dataset_id(self) -> str: return pulumi.get(self, "dataset_id") +@pulumi.output_type +class ClusterSecretManagerConfig(dict): + def __init__(__self__, *, + enabled: bool): + """ + :param bool enabled: Enable the Secret Manager add-on for this cluster. + """ + pulumi.set(__self__, "enabled", enabled) + + @property + @pulumi.getter + def enabled(self) -> bool: + """ + Enable the Secret Manager add-on for this cluster. + """ + return pulumi.get(self, "enabled") + + @pulumi.output_type class ClusterSecurityPostureConfig(dict): @staticmethod @@ -12446,8 +12466,8 @@ def __init__(__self__, *, Structure is documented below :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: Whether nodes have internal IP addresses only. - :param 'NodePoolNetworkConfigNetworkPerformanceConfigArgs' network_performance_config: Network bandwidth tier configuration. - :param 'NodePoolNetworkConfigPodCidrOverprovisionConfigArgs' pod_cidr_overprovision_config: Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + :param 'NodePoolNetworkConfigNetworkPerformanceConfigArgs' network_performance_config: Network bandwidth tier configuration. Structure is documented below. + :param 'NodePoolNetworkConfigPodCidrOverprovisionConfigArgs' pod_cidr_overprovision_config: Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. :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. """ @@ -12506,7 +12526,7 @@ def enable_private_nodes(self) -> Optional[bool]: @pulumi.getter(name="networkPerformanceConfig") def network_performance_config(self) -> Optional['outputs.NodePoolNetworkConfigNetworkPerformanceConfig']: """ - Network bandwidth tier configuration. + Network bandwidth tier configuration. Structure is documented below. """ return pulumi.get(self, "network_performance_config") @@ -12514,7 +12534,7 @@ def network_performance_config(self) -> Optional['outputs.NodePoolNetworkConfigN @pulumi.getter(name="podCidrOverprovisionConfig") def pod_cidr_overprovision_config(self) -> Optional['outputs.NodePoolNetworkConfigPodCidrOverprovisionConfig']: """ - Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited + Configuration for node-pool level pod cidr overprovision. If not set, the cluster level setting will be inherited. Structure is documented below. """ return pulumi.get(self, "pod_cidr_overprovision_config") @@ -12667,11 +12687,17 @@ def total_egress_bandwidth_tier(self) -> str: class NodePoolNetworkConfigPodCidrOverprovisionConfig(dict): def __init__(__self__, *, disabled: bool): + """ + :param bool disabled: Whether pod cidr overprovision is disabled. + """ pulumi.set(__self__, "disabled", disabled) @property @pulumi.getter def disabled(self) -> bool: + """ + Whether pod cidr overprovision is disabled. + """ return pulumi.get(self, "disabled") @@ -19797,6 +19823,24 @@ def dataset_id(self) -> str: return pulumi.get(self, "dataset_id") +@pulumi.output_type +class GetClusterSecretManagerConfigResult(dict): + def __init__(__self__, *, + enabled: bool): + """ + :param bool enabled: Enable the Secret manager csi component. + """ + pulumi.set(__self__, "enabled", enabled) + + @property + @pulumi.getter + def enabled(self) -> bool: + """ + Enable the Secret manager csi component. + """ + return pulumi.get(self, "enabled") + + @pulumi.output_type class GetClusterSecurityPostureConfigResult(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/dataloss/_inputs.py b/sdk/python/pulumi_gcp/dataloss/_inputs.py index 6385637c95..b8ba2e9ba9 100644 --- a/sdk/python/pulumi_gcp/dataloss/_inputs.py +++ b/sdk/python/pulumi_gcp/dataloss/_inputs.py @@ -230,6 +230,7 @@ 'PreventionDiscoveryConfigTargetBigQueryTargetDisabledArgs', 'PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs', 'PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesArgs', + 'PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs', 'PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesArgs', 'PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesIncludeRegexesArgs', 'PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesIncludeRegexesPatternArgs', @@ -240,9 +241,11 @@ 'PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionArgs', 'PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexesArgs', 'PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexesPatternArgs', + 'PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs', 'PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersArgs', 'PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceArgs', 'PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceSchemaModifiedCadenceArgs', + 'PreventionDiscoveryConfigTargetSecretsTargetArgs', 'PreventionInspectTemplateInspectConfigArgs', 'PreventionInspectTemplateInspectConfigCustomInfoTypeArgs', 'PreventionInspectTemplateInspectConfigCustomInfoTypeDictionaryArgs', @@ -11789,17 +11792,21 @@ def organization_id(self, value: Optional[pulumi.Input[str]]): class PreventionDiscoveryConfigTargetArgs: def __init__(__self__, *, big_query_target: Optional[pulumi.Input['PreventionDiscoveryConfigTargetBigQueryTargetArgs']] = None, - cloud_sql_target: Optional[pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetArgs']] = None): + cloud_sql_target: Optional[pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetArgs']] = None, + secrets_target: Optional[pulumi.Input['PreventionDiscoveryConfigTargetSecretsTargetArgs']] = None): """ :param pulumi.Input['PreventionDiscoveryConfigTargetBigQueryTargetArgs'] big_query_target: BigQuery target for Discovery. The first target to match a table will be the one applied. Structure is documented below. :param pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetArgs'] cloud_sql_target: Cloud SQL target for Discovery. The first target to match a table will be the one applied. Structure is documented below. + :param pulumi.Input['PreventionDiscoveryConfigTargetSecretsTargetArgs'] secrets_target: Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. """ if big_query_target is not None: pulumi.set(__self__, "big_query_target", big_query_target) if cloud_sql_target is not None: pulumi.set(__self__, "cloud_sql_target", cloud_sql_target) + if secrets_target is not None: + pulumi.set(__self__, "secrets_target", secrets_target) @property @pulumi.getter(name="bigQueryTarget") @@ -11827,6 +11834,18 @@ def cloud_sql_target(self) -> Optional[pulumi.Input['PreventionDiscoveryConfigTa def cloud_sql_target(self, value: Optional[pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetArgs']]): pulumi.set(self, "cloud_sql_target", value) + @property + @pulumi.getter(name="secretsTarget") + def secrets_target(self) -> Optional[pulumi.Input['PreventionDiscoveryConfigTargetSecretsTargetArgs']]: + """ + Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + """ + return pulumi.get(self, "secrets_target") + + @secrets_target.setter + def secrets_target(self, value: Optional[pulumi.Input['PreventionDiscoveryConfigTargetSecretsTargetArgs']]): + pulumi.set(self, "secrets_target", value) + @pulumi.input_type class PreventionDiscoveryConfigTargetBigQueryTargetArgs: @@ -12185,14 +12204,19 @@ def __init__(__self__): class PreventionDiscoveryConfigTargetBigQueryTargetFilterArgs: def __init__(__self__, *, other_tables: Optional[pulumi.Input['PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesArgs']] = None, + table_reference: Optional[pulumi.Input['PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs']] = None, tables: Optional[pulumi.Input['PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesArgs']] = None): """ :param pulumi.Input['PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesArgs'] other_tables: Catch-all. This should always be the last filter in the list because anything above it will apply first. + :param pulumi.Input['PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs'] table_reference: The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + Structure is documented below. :param pulumi.Input['PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesArgs'] tables: A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. Structure is documented below. """ if other_tables is not None: pulumi.set(__self__, "other_tables", other_tables) + if table_reference is not None: + pulumi.set(__self__, "table_reference", table_reference) if tables is not None: pulumi.set(__self__, "tables", tables) @@ -12208,6 +12232,19 @@ def other_tables(self) -> Optional[pulumi.Input['PreventionDiscoveryConfigTarget def other_tables(self, value: Optional[pulumi.Input['PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesArgs']]): pulumi.set(self, "other_tables", value) + @property + @pulumi.getter(name="tableReference") + def table_reference(self) -> Optional[pulumi.Input['PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs']]: + """ + The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + Structure is documented below. + """ + return pulumi.get(self, "table_reference") + + @table_reference.setter + def table_reference(self, value: Optional[pulumi.Input['PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs']]): + pulumi.set(self, "table_reference", value) + @property @pulumi.getter def tables(self) -> Optional[pulumi.Input['PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesArgs']]: @@ -12228,6 +12265,43 @@ def __init__(__self__): pass +@pulumi.input_type +class PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs: + def __init__(__self__, *, + dataset_id: pulumi.Input[str], + table_id: pulumi.Input[str]): + """ + :param pulumi.Input[str] dataset_id: Dataset ID of the table. + :param pulumi.Input[str] table_id: Name of the table. + """ + pulumi.set(__self__, "dataset_id", dataset_id) + pulumi.set(__self__, "table_id", table_id) + + @property + @pulumi.getter(name="datasetId") + def dataset_id(self) -> pulumi.Input[str]: + """ + Dataset ID of the table. + """ + return pulumi.get(self, "dataset_id") + + @dataset_id.setter + def dataset_id(self, value: pulumi.Input[str]): + pulumi.set(self, "dataset_id", value) + + @property + @pulumi.getter(name="tableId") + def table_id(self) -> pulumi.Input[str]: + """ + Name of the table. + """ + return pulumi.get(self, "table_id") + + @table_id.setter + def table_id(self, value: pulumi.Input[str]): + pulumi.set(self, "table_id", value) + + @pulumi.input_type class PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesArgs: def __init__(__self__, *, @@ -12462,14 +12536,19 @@ def __init__(__self__): class PreventionDiscoveryConfigTargetCloudSqlTargetFilterArgs: def __init__(__self__, *, collection: Optional[pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionArgs']] = None, + database_resource_reference: Optional[pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs']] = None, others: Optional[pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersArgs']] = None): """ :param pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionArgs'] collection: A specific set of database resources for this filter to apply to. Structure is documented below. + :param pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs'] database_resource_reference: The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + Structure is documented below. :param pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersArgs'] others: Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. """ if collection is not None: pulumi.set(__self__, "collection", collection) + if database_resource_reference is not None: + pulumi.set(__self__, "database_resource_reference", database_resource_reference) if others is not None: pulumi.set(__self__, "others", others) @@ -12486,6 +12565,19 @@ def collection(self) -> Optional[pulumi.Input['PreventionDiscoveryConfigTargetCl def collection(self, value: Optional[pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionArgs']]): pulumi.set(self, "collection", value) + @property + @pulumi.getter(name="databaseResourceReference") + def database_resource_reference(self) -> Optional[pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs']]: + """ + The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + Structure is documented below. + """ + return pulumi.get(self, "database_resource_reference") + + @database_resource_reference.setter + def database_resource_reference(self, value: Optional[pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs']]): + pulumi.set(self, "database_resource_reference", value) + @property @pulumi.getter def others(self) -> Optional[pulumi.Input['PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersArgs']]: @@ -12620,6 +12712,73 @@ def project_id_regex(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "project_id_regex", value) +@pulumi.input_type +class PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs: + def __init__(__self__, *, + database: pulumi.Input[str], + database_resource: pulumi.Input[str], + instance: pulumi.Input[str], + project_id: pulumi.Input[str]): + """ + :param pulumi.Input[str] database: Required. Name of a database within the instance. + :param pulumi.Input[str] database_resource: Required. Name of a database resource, for example, a table within the database. + :param pulumi.Input[str] instance: Required. The instance where this resource is located. For example: Cloud SQL instance ID. + :param pulumi.Input[str] project_id: Required. If within a project-level config, then this must match the config's project ID. + """ + pulumi.set(__self__, "database", database) + pulumi.set(__self__, "database_resource", database_resource) + pulumi.set(__self__, "instance", instance) + pulumi.set(__self__, "project_id", project_id) + + @property + @pulumi.getter + def database(self) -> pulumi.Input[str]: + """ + Required. Name of a database within the instance. + """ + return pulumi.get(self, "database") + + @database.setter + def database(self, value: pulumi.Input[str]): + pulumi.set(self, "database", value) + + @property + @pulumi.getter(name="databaseResource") + def database_resource(self) -> pulumi.Input[str]: + """ + Required. Name of a database resource, for example, a table within the database. + """ + return pulumi.get(self, "database_resource") + + @database_resource.setter + def database_resource(self, value: pulumi.Input[str]): + pulumi.set(self, "database_resource", value) + + @property + @pulumi.getter + def instance(self) -> pulumi.Input[str]: + """ + Required. The instance where this resource is located. For example: Cloud SQL instance ID. + """ + return pulumi.get(self, "instance") + + @instance.setter + def instance(self, value: pulumi.Input[str]): + pulumi.set(self, "instance", value) + + @property + @pulumi.getter(name="projectId") + def project_id(self) -> pulumi.Input[str]: + """ + Required. If within a project-level config, then this must match the config's project ID. + """ + 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 PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersArgs: def __init__(__self__): @@ -12712,6 +12871,12 @@ def types(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): pulumi.set(self, "types", value) +@pulumi.input_type +class PreventionDiscoveryConfigTargetSecretsTargetArgs: + def __init__(__self__): + pass + + @pulumi.input_type class PreventionInspectTemplateInspectConfigArgs: def __init__(__self__, *, @@ -13432,21 +13597,34 @@ def max_findings_per_info_types(self, value: Optional[pulumi.Input[Sequence[pulu @pulumi.input_type class PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs: def __init__(__self__, *, - info_type: pulumi.Input['PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs'], - max_findings: pulumi.Input[int]): + max_findings: pulumi.Input[int], + info_type: Optional[pulumi.Input['PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs']] = None): """ + :param pulumi.Input[int] max_findings: Max findings limit for the given infoType. :param pulumi.Input['PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs'] info_type: Type of information the findings limit applies to. Only one limit per infoType should be provided. If InfoTypeLimit does not have an infoType, the DLP API applies the limit against all infoTypes that are found but not specified in another InfoTypeLimit. Structure is documented below. - :param pulumi.Input[int] max_findings: Max findings limit for the given infoType. """ - pulumi.set(__self__, "info_type", info_type) pulumi.set(__self__, "max_findings", max_findings) + if info_type is not None: + pulumi.set(__self__, "info_type", info_type) + + @property + @pulumi.getter(name="maxFindings") + def max_findings(self) -> pulumi.Input[int]: + """ + Max findings limit for the given infoType. + """ + return pulumi.get(self, "max_findings") + + @max_findings.setter + def max_findings(self, value: pulumi.Input[int]): + pulumi.set(self, "max_findings", value) @property @pulumi.getter(name="infoType") - def info_type(self) -> pulumi.Input['PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs']: + def info_type(self) -> Optional[pulumi.Input['PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs']]: """ Type of information the findings limit applies to. Only one limit per infoType should be provided. If InfoTypeLimit does not have an infoType, the DLP API applies the limit against all infoTypes that are found but not @@ -13456,21 +13634,9 @@ def info_type(self) -> pulumi.Input['PreventionInspectTemplateInspectConfigLimit return pulumi.get(self, "info_type") @info_type.setter - def info_type(self, value: pulumi.Input['PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs']): + def info_type(self, value: Optional[pulumi.Input['PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs']]): pulumi.set(self, "info_type", value) - @property - @pulumi.getter(name="maxFindings") - def max_findings(self) -> pulumi.Input[int]: - """ - Max findings limit for the given infoType. - """ - return pulumi.get(self, "max_findings") - - @max_findings.setter - def max_findings(self, value: pulumi.Input[int]): - pulumi.set(self, "max_findings", value) - @pulumi.input_type class PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs: diff --git a/sdk/python/pulumi_gcp/dataloss/outputs.py b/sdk/python/pulumi_gcp/dataloss/outputs.py index 08bcae6a2c..58d3a4d644 100644 --- a/sdk/python/pulumi_gcp/dataloss/outputs.py +++ b/sdk/python/pulumi_gcp/dataloss/outputs.py @@ -231,6 +231,7 @@ 'PreventionDiscoveryConfigTargetBigQueryTargetDisabled', 'PreventionDiscoveryConfigTargetBigQueryTargetFilter', 'PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables', + 'PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference', 'PreventionDiscoveryConfigTargetBigQueryTargetFilterTables', 'PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesIncludeRegexes', 'PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesIncludeRegexesPattern', @@ -241,9 +242,11 @@ 'PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollection', 'PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexes', 'PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionIncludeRegexesPattern', + 'PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference', 'PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers', 'PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadence', 'PreventionDiscoveryConfigTargetCloudSqlTargetGenerationCadenceSchemaModifiedCadence', + 'PreventionDiscoveryConfigTargetSecretsTarget', 'PreventionInspectTemplateInspectConfig', 'PreventionInspectTemplateInspectConfigCustomInfoType', 'PreventionInspectTemplateInspectConfigCustomInfoTypeDictionary', @@ -11747,6 +11750,8 @@ def __key_warning(key: str): suggest = "big_query_target" elif key == "cloudSqlTarget": suggest = "cloud_sql_target" + elif key == "secretsTarget": + suggest = "secrets_target" if suggest: pulumi.log.warn(f"Key '{key}' not found in PreventionDiscoveryConfigTarget. Access the value via the '{suggest}' property getter instead.") @@ -11761,17 +11766,21 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, big_query_target: Optional['outputs.PreventionDiscoveryConfigTargetBigQueryTarget'] = None, - cloud_sql_target: Optional['outputs.PreventionDiscoveryConfigTargetCloudSqlTarget'] = None): + cloud_sql_target: Optional['outputs.PreventionDiscoveryConfigTargetCloudSqlTarget'] = None, + secrets_target: Optional['outputs.PreventionDiscoveryConfigTargetSecretsTarget'] = None): """ :param 'PreventionDiscoveryConfigTargetBigQueryTargetArgs' big_query_target: BigQuery target for Discovery. The first target to match a table will be the one applied. Structure is documented below. :param 'PreventionDiscoveryConfigTargetCloudSqlTargetArgs' cloud_sql_target: Cloud SQL target for Discovery. The first target to match a table will be the one applied. Structure is documented below. + :param 'PreventionDiscoveryConfigTargetSecretsTargetArgs' secrets_target: Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. """ if big_query_target is not None: pulumi.set(__self__, "big_query_target", big_query_target) if cloud_sql_target is not None: pulumi.set(__self__, "cloud_sql_target", cloud_sql_target) + if secrets_target is not None: + pulumi.set(__self__, "secrets_target", secrets_target) @property @pulumi.getter(name="bigQueryTarget") @@ -11791,6 +11800,14 @@ def cloud_sql_target(self) -> Optional['outputs.PreventionDiscoveryConfigTargetC """ return pulumi.get(self, "cloud_sql_target") + @property + @pulumi.getter(name="secretsTarget") + def secrets_target(self) -> Optional['outputs.PreventionDiscoveryConfigTargetSecretsTarget']: + """ + Discovery target that looks for credentials and secrets stored in cloud resource metadata and reports them as vulnerabilities to Security Command Center. Only one target of this type is allowed. + """ + return pulumi.get(self, "secrets_target") + @pulumi.output_type class PreventionDiscoveryConfigTargetBigQueryTarget(dict): @@ -12143,6 +12160,8 @@ def __key_warning(key: str): suggest = None if key == "otherTables": suggest = "other_tables" + elif key == "tableReference": + suggest = "table_reference" if suggest: pulumi.log.warn(f"Key '{key}' not found in PreventionDiscoveryConfigTargetBigQueryTargetFilter. Access the value via the '{suggest}' property getter instead.") @@ -12157,14 +12176,19 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, other_tables: Optional['outputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTables'] = None, + table_reference: Optional['outputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference'] = None, tables: Optional['outputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterTables'] = None): """ :param 'PreventionDiscoveryConfigTargetBigQueryTargetFilterOtherTablesArgs' other_tables: Catch-all. This should always be the last filter in the list because anything above it will apply first. + :param 'PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReferenceArgs' table_reference: The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + Structure is documented below. :param 'PreventionDiscoveryConfigTargetBigQueryTargetFilterTablesArgs' tables: A specific set of tables for this filter to apply to. A table collection must be specified in only one filter per config. Structure is documented below. """ if other_tables is not None: pulumi.set(__self__, "other_tables", other_tables) + if table_reference is not None: + pulumi.set(__self__, "table_reference", table_reference) if tables is not None: pulumi.set(__self__, "tables", tables) @@ -12176,6 +12200,15 @@ def other_tables(self) -> Optional['outputs.PreventionDiscoveryConfigTargetBigQu """ return pulumi.get(self, "other_tables") + @property + @pulumi.getter(name="tableReference") + def table_reference(self) -> Optional['outputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference']: + """ + The table to scan. Discovery configurations including this can only include one DiscoveryTarget (the DiscoveryTarget with this TableReference). + Structure is documented below. + """ + return pulumi.get(self, "table_reference") + @property @pulumi.getter def tables(self) -> Optional['outputs.PreventionDiscoveryConfigTargetBigQueryTargetFilterTables']: @@ -12192,6 +12225,54 @@ def __init__(__self__): pass +@pulumi.output_type +class PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "datasetId": + suggest = "dataset_id" + elif key == "tableId": + suggest = "table_id" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + PreventionDiscoveryConfigTargetBigQueryTargetFilterTableReference.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + dataset_id: str, + table_id: str): + """ + :param str dataset_id: Dataset ID of the table. + :param str table_id: Name of the table. + """ + pulumi.set(__self__, "dataset_id", dataset_id) + pulumi.set(__self__, "table_id", table_id) + + @property + @pulumi.getter(name="datasetId") + def dataset_id(self) -> str: + """ + Dataset ID of the table. + """ + return pulumi.get(self, "dataset_id") + + @property + @pulumi.getter(name="tableId") + def table_id(self) -> str: + """ + Name of the table. + """ + return pulumi.get(self, "table_id") + + @pulumi.output_type class PreventionDiscoveryConfigTargetBigQueryTargetFilterTables(dict): @staticmethod @@ -12452,16 +12533,38 @@ def __init__(__self__): @pulumi.output_type class PreventionDiscoveryConfigTargetCloudSqlTargetFilter(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "databaseResourceReference": + suggest = "database_resource_reference" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in PreventionDiscoveryConfigTargetCloudSqlTargetFilter. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + PreventionDiscoveryConfigTargetCloudSqlTargetFilter.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + PreventionDiscoveryConfigTargetCloudSqlTargetFilter.__key_warning(key) + return super().get(key, default) + def __init__(__self__, *, collection: Optional['outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollection'] = None, + database_resource_reference: Optional['outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference'] = None, others: Optional['outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers'] = None): """ :param 'PreventionDiscoveryConfigTargetCloudSqlTargetFilterCollectionArgs' collection: A specific set of database resources for this filter to apply to. Structure is documented below. + :param 'PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReferenceArgs' database_resource_reference: The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + Structure is documented below. :param 'PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthersArgs' others: Catch-all. This should always be the last target in the list because anything above it will apply first. Should only appear once in a configuration. If none is specified, a default one will be added automatically. """ if collection is not None: pulumi.set(__self__, "collection", collection) + if database_resource_reference is not None: + pulumi.set(__self__, "database_resource_reference", database_resource_reference) if others is not None: pulumi.set(__self__, "others", others) @@ -12474,6 +12577,15 @@ def collection(self) -> Optional['outputs.PreventionDiscoveryConfigTargetCloudSq """ return pulumi.get(self, "collection") + @property + @pulumi.getter(name="databaseResourceReference") + def database_resource_reference(self) -> Optional['outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference']: + """ + The database resource to scan. Targets including this can only include one target (the target with this database resource reference). + Structure is documented below. + """ + return pulumi.get(self, "database_resource_reference") + @property @pulumi.getter def others(self) -> Optional['outputs.PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers']: @@ -12620,6 +12732,76 @@ def project_id_regex(self) -> Optional[str]: return pulumi.get(self, "project_id_regex") +@pulumi.output_type +class PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "databaseResource": + suggest = "database_resource" + elif key == "projectId": + suggest = "project_id" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + PreventionDiscoveryConfigTargetCloudSqlTargetFilterDatabaseResourceReference.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + database: str, + database_resource: str, + instance: str, + project_id: str): + """ + :param str database: Required. Name of a database within the instance. + :param str database_resource: Required. Name of a database resource, for example, a table within the database. + :param str instance: Required. The instance where this resource is located. For example: Cloud SQL instance ID. + :param str project_id: Required. If within a project-level config, then this must match the config's project ID. + """ + pulumi.set(__self__, "database", database) + pulumi.set(__self__, "database_resource", database_resource) + pulumi.set(__self__, "instance", instance) + pulumi.set(__self__, "project_id", project_id) + + @property + @pulumi.getter + def database(self) -> str: + """ + Required. Name of a database within the instance. + """ + return pulumi.get(self, "database") + + @property + @pulumi.getter(name="databaseResource") + def database_resource(self) -> str: + """ + Required. Name of a database resource, for example, a table within the database. + """ + return pulumi.get(self, "database_resource") + + @property + @pulumi.getter + def instance(self) -> str: + """ + Required. The instance where this resource is located. For example: Cloud SQL instance ID. + """ + return pulumi.get(self, "instance") + + @property + @pulumi.getter(name="projectId") + def project_id(self) -> str: + """ + Required. If within a project-level config, then this must match the config's project ID. + """ + return pulumi.get(self, "project_id") + + @pulumi.output_type class PreventionDiscoveryConfigTargetCloudSqlTargetFilterOthers(dict): def __init__(__self__): @@ -12715,6 +12897,12 @@ def types(self) -> Optional[Sequence[str]]: return pulumi.get(self, "types") +@pulumi.output_type +class PreventionDiscoveryConfigTargetSecretsTarget(dict): + def __init__(__self__): + pass + + @pulumi.output_type class PreventionInspectTemplateInspectConfig(dict): @staticmethod @@ -13442,10 +13630,10 @@ class PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType(dict): @staticmethod def __key_warning(key: str): suggest = None - if key == "infoType": - suggest = "info_type" - elif key == "maxFindings": + if key == "maxFindings": suggest = "max_findings" + elif key == "infoType": + suggest = "info_type" if suggest: pulumi.log.warn(f"Key '{key}' not found in PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoType. Access the value via the '{suggest}' property getter instead.") @@ -13459,21 +13647,30 @@ def get(self, key: str, default = None) -> Any: return super().get(key, default) def __init__(__self__, *, - info_type: 'outputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType', - max_findings: int): + max_findings: int, + info_type: Optional['outputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType'] = None): """ + :param int max_findings: Max findings limit for the given infoType. :param 'PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoTypeArgs' info_type: Type of information the findings limit applies to. Only one limit per infoType should be provided. If InfoTypeLimit does not have an infoType, the DLP API applies the limit against all infoTypes that are found but not specified in another InfoTypeLimit. Structure is documented below. - :param int max_findings: Max findings limit for the given infoType. """ - pulumi.set(__self__, "info_type", info_type) pulumi.set(__self__, "max_findings", max_findings) + if info_type is not None: + pulumi.set(__self__, "info_type", info_type) + + @property + @pulumi.getter(name="maxFindings") + def max_findings(self) -> int: + """ + Max findings limit for the given infoType. + """ + return pulumi.get(self, "max_findings") @property @pulumi.getter(name="infoType") - def info_type(self) -> 'outputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType': + def info_type(self) -> Optional['outputs.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType']: """ Type of information the findings limit applies to. Only one limit per infoType should be provided. If InfoTypeLimit does not have an infoType, the DLP API applies the limit against all infoTypes that are found but not @@ -13482,14 +13679,6 @@ def info_type(self) -> 'outputs.PreventionInspectTemplateInspectConfigLimitsMaxF """ return pulumi.get(self, "info_type") - @property - @pulumi.getter(name="maxFindings") - def max_findings(self) -> int: - """ - Max findings limit for the given infoType. - """ - return pulumi.get(self, "max_findings") - @pulumi.output_type class PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeInfoType(dict): diff --git a/sdk/python/pulumi_gcp/dataloss/prevention_inspect_template.py b/sdk/python/pulumi_gcp/dataloss/prevention_inspect_template.py index 3c2a7218bd..80831b9780 100644 --- a/sdk/python/pulumi_gcp/dataloss/prevention_inspect_template.py +++ b/sdk/python/pulumi_gcp/dataloss/prevention_inspect_template.py @@ -504,6 +504,33 @@ def __init__(__self__, ), )) ``` + ### Dlp Inspect Template Max Infotype Per Finding Default + + ```python + import pulumi + import pulumi_gcp as gcp + + max_infotype_per_finding_default = gcp.dataloss.PreventionInspectTemplate("max_infotype_per_finding_default", + parent="projects/my-project-name", + inspect_config=gcp.dataloss.PreventionInspectTemplateInspectConfigArgs( + info_types=[ + gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs( + name="EMAIL_ADDRESS", + ), + gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs( + name="PERSON_NAME", + ), + ], + min_likelihood="UNLIKELY", + limits=gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsArgs( + max_findings_per_request=333, + max_findings_per_item=222, + max_findings_per_info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs( + max_findings=111, + )], + ), + )) + ``` ## Import @@ -796,6 +823,33 @@ def __init__(__self__, ), )) ``` + ### Dlp Inspect Template Max Infotype Per Finding Default + + ```python + import pulumi + import pulumi_gcp as gcp + + max_infotype_per_finding_default = gcp.dataloss.PreventionInspectTemplate("max_infotype_per_finding_default", + parent="projects/my-project-name", + inspect_config=gcp.dataloss.PreventionInspectTemplateInspectConfigArgs( + info_types=[ + gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs( + name="EMAIL_ADDRESS", + ), + gcp.dataloss.PreventionInspectTemplateInspectConfigInfoTypeArgs( + name="PERSON_NAME", + ), + ], + min_likelihood="UNLIKELY", + limits=gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsArgs( + max_findings_per_request=333, + max_findings_per_item=222, + max_findings_per_info_types=[gcp.dataloss.PreventionInspectTemplateInspectConfigLimitsMaxFindingsPerInfoTypeArgs( + max_findings=111, + )], + ), + )) + ``` ## Import diff --git a/sdk/python/pulumi_gcp/gkebackup/_inputs.py b/sdk/python/pulumi_gcp/gkebackup/_inputs.py index 5e41fed99a..4040f83346 100644 --- a/sdk/python/pulumi_gcp/gkebackup/_inputs.py +++ b/sdk/python/pulumi_gcp/gkebackup/_inputs.py @@ -31,6 +31,10 @@ 'RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs', 'RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs', 'RestorePlanRestoreConfigExcludedNamespacesArgs', + 'RestorePlanRestoreConfigRestoreOrderArgs', + 'RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs', + 'RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs', + 'RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs', 'RestorePlanRestoreConfigSelectedApplicationsArgs', 'RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs', 'RestorePlanRestoreConfigSelectedNamespacesArgs', @@ -38,6 +42,7 @@ 'RestorePlanRestoreConfigTransformationRuleFieldActionArgs', 'RestorePlanRestoreConfigTransformationRuleResourceFilterArgs', 'RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs', + 'RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs', ] @pulumi.input_type @@ -47,6 +52,7 @@ def __init__(__self__, *, encryption_key: Optional[pulumi.Input['BackupPlanBackupConfigEncryptionKeyArgs']] = None, include_secrets: Optional[pulumi.Input[bool]] = None, include_volume_data: Optional[pulumi.Input[bool]] = None, + permissive_mode: Optional[pulumi.Input[bool]] = None, selected_applications: Optional[pulumi.Input['BackupPlanBackupConfigSelectedApplicationsArgs']] = None, selected_namespaces: Optional[pulumi.Input['BackupPlanBackupConfigSelectedNamespacesArgs']] = None): """ @@ -58,6 +64,9 @@ def __init__(__self__, *, when they fall into the scope of Backups. :param pulumi.Input[bool] include_volume_data: This flag specifies whether volume data should be backed up when PVCs are included in the scope of a Backup. + :param pulumi.Input[bool] permissive_mode: This flag specifies whether Backups will not fail when + Backup for GKE detects Kubernetes configuration that is + non-standard or requires additional setup to restore. :param pulumi.Input['BackupPlanBackupConfigSelectedApplicationsArgs'] selected_applications: A list of namespaced Kubernetes Resources. Structure is documented below. :param pulumi.Input['BackupPlanBackupConfigSelectedNamespacesArgs'] selected_namespaces: If set, include just the resources in the listed namespaces. @@ -71,6 +80,8 @@ def __init__(__self__, *, pulumi.set(__self__, "include_secrets", include_secrets) if include_volume_data is not None: pulumi.set(__self__, "include_volume_data", include_volume_data) + if permissive_mode is not None: + pulumi.set(__self__, "permissive_mode", permissive_mode) if selected_applications is not None: pulumi.set(__self__, "selected_applications", selected_applications) if selected_namespaces is not None: @@ -128,6 +139,20 @@ def include_volume_data(self) -> Optional[pulumi.Input[bool]]: def include_volume_data(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "include_volume_data", value) + @property + @pulumi.getter(name="permissiveMode") + def permissive_mode(self) -> Optional[pulumi.Input[bool]]: + """ + This flag specifies whether Backups will not fail when + Backup for GKE detects Kubernetes configuration that is + non-standard or requires additional setup to restore. + """ + return pulumi.get(self, "permissive_mode") + + @permissive_mode.setter + def permissive_mode(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "permissive_mode", value) + @property @pulumi.getter(name="selectedApplications") def selected_applications(self) -> Optional[pulumi.Input['BackupPlanBackupConfigSelectedApplicationsArgs']]: @@ -905,10 +930,12 @@ def __init__(__self__, *, excluded_namespaces: Optional[pulumi.Input['RestorePlanRestoreConfigExcludedNamespacesArgs']] = None, namespaced_resource_restore_mode: Optional[pulumi.Input[str]] = None, no_namespaces: Optional[pulumi.Input[bool]] = None, + restore_order: Optional[pulumi.Input['RestorePlanRestoreConfigRestoreOrderArgs']] = None, selected_applications: Optional[pulumi.Input['RestorePlanRestoreConfigSelectedApplicationsArgs']] = None, selected_namespaces: Optional[pulumi.Input['RestorePlanRestoreConfigSelectedNamespacesArgs']] = None, transformation_rules: Optional[pulumi.Input[Sequence[pulumi.Input['RestorePlanRestoreConfigTransformationRuleArgs']]]] = None, - volume_data_restore_policy: Optional[pulumi.Input[str]] = None): + volume_data_restore_policy: Optional[pulumi.Input[str]] = None, + volume_data_restore_policy_bindings: Optional[pulumi.Input[Sequence[pulumi.Input['RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs']]]] = None): """ :param pulumi.Input[bool] all_namespaces: If True, restore all namespaced resources in the Backup. Setting this field to False will result in an error. @@ -930,9 +957,11 @@ def __init__(__self__, *, if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode for more information on each mode. - Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. :param pulumi.Input[bool] no_namespaces: Do not restore any namespaced resources if set to "True". Specifying this field to "False" is not allowed. + :param pulumi.Input['RestorePlanRestoreConfigRestoreOrderArgs'] restore_order: It contains custom ordering to use on a Restore. + Structure is documented below. :param pulumi.Input['RestorePlanRestoreConfigSelectedApplicationsArgs'] selected_applications: A list of selected ProtectedApplications to restore. The listed ProtectedApplications and all the resources to which they refer will be restored. @@ -953,6 +982,10 @@ def __init__(__self__, *, See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy for more information on each policy option. Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + :param pulumi.Input[Sequence[pulumi.Input['RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs']]] volume_data_restore_policy_bindings: A table that binds volumes by their scope to a restore policy. Bindings + must have a unique scope. Any volumes not scoped in the bindings are + subject to the policy defined in volume_data_restore_policy. + Structure is documented below. """ if all_namespaces is not None: pulumi.set(__self__, "all_namespaces", all_namespaces) @@ -966,6 +999,8 @@ def __init__(__self__, *, pulumi.set(__self__, "namespaced_resource_restore_mode", namespaced_resource_restore_mode) if no_namespaces is not None: pulumi.set(__self__, "no_namespaces", no_namespaces) + if restore_order is not None: + pulumi.set(__self__, "restore_order", restore_order) if selected_applications is not None: pulumi.set(__self__, "selected_applications", selected_applications) if selected_namespaces is not None: @@ -974,6 +1009,8 @@ def __init__(__self__, *, pulumi.set(__self__, "transformation_rules", transformation_rules) if volume_data_restore_policy is not None: pulumi.set(__self__, "volume_data_restore_policy", volume_data_restore_policy) + if volume_data_restore_policy_bindings is not None: + pulumi.set(__self__, "volume_data_restore_policy_bindings", volume_data_restore_policy_bindings) @property @pulumi.getter(name="allNamespaces") @@ -1043,7 +1080,7 @@ def namespaced_resource_restore_mode(self) -> Optional[pulumi.Input[str]]: if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode for more information on each mode. - Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. """ return pulumi.get(self, "namespaced_resource_restore_mode") @@ -1064,6 +1101,19 @@ def no_namespaces(self) -> Optional[pulumi.Input[bool]]: def no_namespaces(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "no_namespaces", value) + @property + @pulumi.getter(name="restoreOrder") + def restore_order(self) -> Optional[pulumi.Input['RestorePlanRestoreConfigRestoreOrderArgs']]: + """ + It contains custom ordering to use on a Restore. + Structure is documented below. + """ + return pulumi.get(self, "restore_order") + + @restore_order.setter + def restore_order(self, value: Optional[pulumi.Input['RestorePlanRestoreConfigRestoreOrderArgs']]): + pulumi.set(self, "restore_order", value) + @property @pulumi.getter(name="selectedApplications") def selected_applications(self) -> Optional[pulumi.Input['RestorePlanRestoreConfigSelectedApplicationsArgs']]: @@ -1128,6 +1178,21 @@ def volume_data_restore_policy(self) -> Optional[pulumi.Input[str]]: def volume_data_restore_policy(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "volume_data_restore_policy", value) + @property + @pulumi.getter(name="volumeDataRestorePolicyBindings") + def volume_data_restore_policy_bindings(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs']]]]: + """ + A table that binds volumes by their scope to a restore policy. Bindings + must have a unique scope. Any volumes not scoped in the bindings are + subject to the policy defined in volume_data_restore_policy. + Structure is documented below. + """ + return pulumi.get(self, "volume_data_restore_policy_bindings") + + @volume_data_restore_policy_bindings.setter + def volume_data_restore_policy_bindings(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs']]]]): + pulumi.set(self, "volume_data_restore_policy_bindings", value) + @pulumi.input_type class RestorePlanRestoreConfigClusterResourceRestoreScopeArgs: @@ -1330,6 +1395,173 @@ def namespaces(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]): pulumi.set(self, "namespaces", value) +@pulumi.input_type +class RestorePlanRestoreConfigRestoreOrderArgs: + def __init__(__self__, *, + group_kind_dependencies: pulumi.Input[Sequence[pulumi.Input['RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs']]]): + """ + :param pulumi.Input[Sequence[pulumi.Input['RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs']]] group_kind_dependencies: A list of group kind dependency pairs + that is used by Backup for GKE to + generate a group kind restore order. + Structure is documented below. + """ + pulumi.set(__self__, "group_kind_dependencies", group_kind_dependencies) + + @property + @pulumi.getter(name="groupKindDependencies") + def group_kind_dependencies(self) -> pulumi.Input[Sequence[pulumi.Input['RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs']]]: + """ + A list of group kind dependency pairs + that is used by Backup for GKE to + generate a group kind restore order. + Structure is documented below. + """ + return pulumi.get(self, "group_kind_dependencies") + + @group_kind_dependencies.setter + def group_kind_dependencies(self, value: pulumi.Input[Sequence[pulumi.Input['RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs']]]): + pulumi.set(self, "group_kind_dependencies", value) + + +@pulumi.input_type +class RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs: + def __init__(__self__, *, + requiring: pulumi.Input['RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs'], + satisfying: pulumi.Input['RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs']): + """ + :param pulumi.Input['RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs'] requiring: The requiring group kind requires that the satisfying + group kind be restored first. + Structure is documented below. + :param pulumi.Input['RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs'] satisfying: The satisfying group kind must be restored first + in order to satisfy the dependency. + Structure is documented below. + """ + pulumi.set(__self__, "requiring", requiring) + pulumi.set(__self__, "satisfying", satisfying) + + @property + @pulumi.getter + def requiring(self) -> pulumi.Input['RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs']: + """ + The requiring group kind requires that the satisfying + group kind be restored first. + Structure is documented below. + """ + return pulumi.get(self, "requiring") + + @requiring.setter + def requiring(self, value: pulumi.Input['RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs']): + pulumi.set(self, "requiring", value) + + @property + @pulumi.getter + def satisfying(self) -> pulumi.Input['RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs']: + """ + The satisfying group kind must be restored first + in order to satisfy the dependency. + Structure is documented below. + """ + return pulumi.get(self, "satisfying") + + @satisfying.setter + def satisfying(self, value: pulumi.Input['RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs']): + pulumi.set(self, "satisfying", value) + + +@pulumi.input_type +class RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs: + def __init__(__self__, *, + resource_group: Optional[pulumi.Input[str]] = None, + resource_kind: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] resource_group: API Group of a Kubernetes resource, e.g. + "apiextensions.k8s.io", "storage.k8s.io", etc. + Use empty string for core group. + :param pulumi.Input[str] resource_kind: Kind of a Kubernetes resource, e.g. + "CustomResourceDefinition", "StorageClass", etc. + + - - - + """ + if resource_group is not None: + pulumi.set(__self__, "resource_group", resource_group) + if resource_kind is not None: + pulumi.set(__self__, "resource_kind", resource_kind) + + @property + @pulumi.getter(name="resourceGroup") + def resource_group(self) -> Optional[pulumi.Input[str]]: + """ + API Group of a Kubernetes resource, e.g. + "apiextensions.k8s.io", "storage.k8s.io", etc. + Use empty string for core group. + """ + return pulumi.get(self, "resource_group") + + @resource_group.setter + def resource_group(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "resource_group", value) + + @property + @pulumi.getter(name="resourceKind") + def resource_kind(self) -> Optional[pulumi.Input[str]]: + """ + Kind of a Kubernetes resource, e.g. + "CustomResourceDefinition", "StorageClass", etc. + + - - - + """ + return pulumi.get(self, "resource_kind") + + @resource_kind.setter + def resource_kind(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "resource_kind", value) + + +@pulumi.input_type +class RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs: + def __init__(__self__, *, + resource_group: Optional[pulumi.Input[str]] = None, + resource_kind: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] resource_group: API Group of a Kubernetes resource, e.g. + "apiextensions.k8s.io", "storage.k8s.io", etc. + Use empty string for core group. + :param pulumi.Input[str] resource_kind: Kind of a Kubernetes resource, e.g. + "CustomResourceDefinition", "StorageClass", etc. + """ + if resource_group is not None: + pulumi.set(__self__, "resource_group", resource_group) + if resource_kind is not None: + pulumi.set(__self__, "resource_kind", resource_kind) + + @property + @pulumi.getter(name="resourceGroup") + def resource_group(self) -> Optional[pulumi.Input[str]]: + """ + API Group of a Kubernetes resource, e.g. + "apiextensions.k8s.io", "storage.k8s.io", etc. + Use empty string for core group. + """ + return pulumi.get(self, "resource_group") + + @resource_group.setter + def resource_group(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "resource_group", value) + + @property + @pulumi.getter(name="resourceKind") + def resource_kind(self) -> Optional[pulumi.Input[str]]: + """ + Kind of a Kubernetes resource, e.g. + "CustomResourceDefinition", "StorageClass", etc. + """ + return pulumi.get(self, "resource_kind") + + @resource_kind.setter + def resource_kind(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "resource_kind", value) + + @pulumi.input_type class RestorePlanRestoreConfigSelectedApplicationsArgs: def __init__(__self__, *, @@ -1501,8 +1733,6 @@ def __init__(__self__, *, location within the target document where the operation is performed. :param pulumi.Input[str] value: A string that specifies the desired value in string format to use for transformation. - - - - - """ pulumi.set(__self__, "op", op) if from_path is not None: @@ -1557,8 +1787,6 @@ def value(self) -> Optional[pulumi.Input[str]]: """ A string that specifies the desired value in string format to use for transformation. - - - - - """ return pulumi.get(self, "value") @@ -1695,3 +1923,50 @@ def resource_kind(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "resource_kind", value) +@pulumi.input_type +class RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs: + def __init__(__self__, *, + policy: pulumi.Input[str], + volume_type: pulumi.Input[str]): + """ + :param pulumi.Input[str] policy: Specifies the mechanism to be used to restore this volume data. + See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + for more information on each policy option. + Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + :param pulumi.Input[str] volume_type: The volume type, as determined by the PVC's + bound PV, to apply the policy to. + Possible values are: `GCE_PERSISTENT_DISK`. + """ + pulumi.set(__self__, "policy", policy) + pulumi.set(__self__, "volume_type", volume_type) + + @property + @pulumi.getter + def policy(self) -> pulumi.Input[str]: + """ + Specifies the mechanism to be used to restore this volume data. + See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + for more information on each policy option. + Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + """ + return pulumi.get(self, "policy") + + @policy.setter + def policy(self, value: pulumi.Input[str]): + pulumi.set(self, "policy", value) + + @property + @pulumi.getter(name="volumeType") + def volume_type(self) -> pulumi.Input[str]: + """ + The volume type, as determined by the PVC's + bound PV, to apply the policy to. + Possible values are: `GCE_PERSISTENT_DISK`. + """ + return pulumi.get(self, "volume_type") + + @volume_type.setter + def volume_type(self, value: pulumi.Input[str]): + pulumi.set(self, "volume_type", value) + + diff --git a/sdk/python/pulumi_gcp/gkebackup/backup_plan.py b/sdk/python/pulumi_gcp/gkebackup/backup_plan.py index ec1a1fa2da..9443fe564a 100644 --- a/sdk/python/pulumi_gcp/gkebackup/backup_plan.py +++ b/sdk/python/pulumi_gcp/gkebackup/backup_plan.py @@ -715,6 +715,56 @@ def __init__(__self__, ), )) ``` + ### Gkebackup Backupplan Permissive + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="permissive-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection=True, + network="default", + subnetwork="default") + permissive = gcp.gkebackup.BackupPlan("permissive", + name="permissive-plan", + cluster=primary.id, + location="us-central1", + retention_policy=gcp.gkebackup.BackupPlanRetentionPolicyArgs( + backup_delete_lock_days=30, + backup_retain_days=180, + ), + backup_schedule=gcp.gkebackup.BackupPlanBackupScheduleArgs( + cron_schedule="0 9 * * 1", + ), + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + permissive_mode=True, + selected_applications=gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsArgs( + namespaced_names=[ + gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs( + name="app1", + namespace="ns1", + ), + gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs( + name="app2", + namespace="ns2", + ), + ], + ), + )) + ``` ### Gkebackup Backupplan Rpo Daily Window ```python @@ -1085,6 +1135,56 @@ def __init__(__self__, ), )) ``` + ### Gkebackup Backupplan Permissive + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="permissive-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection=True, + network="default", + subnetwork="default") + permissive = gcp.gkebackup.BackupPlan("permissive", + name="permissive-plan", + cluster=primary.id, + location="us-central1", + retention_policy=gcp.gkebackup.BackupPlanRetentionPolicyArgs( + backup_delete_lock_days=30, + backup_retain_days=180, + ), + backup_schedule=gcp.gkebackup.BackupPlanBackupScheduleArgs( + cron_schedule="0 9 * * 1", + ), + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + permissive_mode=True, + selected_applications=gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsArgs( + namespaced_names=[ + gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs( + name="app1", + namespace="ns1", + ), + gcp.gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs( + name="app2", + namespace="ns2", + ), + ], + ), + )) + ``` ### Gkebackup Backupplan Rpo Daily Window ```python diff --git a/sdk/python/pulumi_gcp/gkebackup/outputs.py b/sdk/python/pulumi_gcp/gkebackup/outputs.py index a9a9f07947..f08920ce79 100644 --- a/sdk/python/pulumi_gcp/gkebackup/outputs.py +++ b/sdk/python/pulumi_gcp/gkebackup/outputs.py @@ -32,6 +32,10 @@ 'RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKind', 'RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKind', 'RestorePlanRestoreConfigExcludedNamespaces', + 'RestorePlanRestoreConfigRestoreOrder', + 'RestorePlanRestoreConfigRestoreOrderGroupKindDependency', + 'RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring', + 'RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying', 'RestorePlanRestoreConfigSelectedApplications', 'RestorePlanRestoreConfigSelectedApplicationsNamespacedName', 'RestorePlanRestoreConfigSelectedNamespaces', @@ -39,6 +43,7 @@ 'RestorePlanRestoreConfigTransformationRuleFieldAction', 'RestorePlanRestoreConfigTransformationRuleResourceFilter', 'RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKind', + 'RestorePlanRestoreConfigVolumeDataRestorePolicyBinding', ] @pulumi.output_type @@ -54,6 +59,8 @@ def __key_warning(key: str): suggest = "include_secrets" elif key == "includeVolumeData": suggest = "include_volume_data" + elif key == "permissiveMode": + suggest = "permissive_mode" elif key == "selectedApplications": suggest = "selected_applications" elif key == "selectedNamespaces": @@ -75,6 +82,7 @@ def __init__(__self__, *, encryption_key: Optional['outputs.BackupPlanBackupConfigEncryptionKey'] = None, include_secrets: Optional[bool] = None, include_volume_data: Optional[bool] = None, + permissive_mode: Optional[bool] = None, selected_applications: Optional['outputs.BackupPlanBackupConfigSelectedApplications'] = None, selected_namespaces: Optional['outputs.BackupPlanBackupConfigSelectedNamespaces'] = None): """ @@ -86,6 +94,9 @@ def __init__(__self__, *, when they fall into the scope of Backups. :param bool include_volume_data: This flag specifies whether volume data should be backed up when PVCs are included in the scope of a Backup. + :param bool permissive_mode: This flag specifies whether Backups will not fail when + Backup for GKE detects Kubernetes configuration that is + non-standard or requires additional setup to restore. :param 'BackupPlanBackupConfigSelectedApplicationsArgs' selected_applications: A list of namespaced Kubernetes Resources. Structure is documented below. :param 'BackupPlanBackupConfigSelectedNamespacesArgs' selected_namespaces: If set, include just the resources in the listed namespaces. @@ -99,6 +110,8 @@ def __init__(__self__, *, pulumi.set(__self__, "include_secrets", include_secrets) if include_volume_data is not None: pulumi.set(__self__, "include_volume_data", include_volume_data) + if permissive_mode is not None: + pulumi.set(__self__, "permissive_mode", permissive_mode) if selected_applications is not None: pulumi.set(__self__, "selected_applications", selected_applications) if selected_namespaces is not None: @@ -140,6 +153,16 @@ def include_volume_data(self) -> Optional[bool]: """ return pulumi.get(self, "include_volume_data") + @property + @pulumi.getter(name="permissiveMode") + def permissive_mode(self) -> Optional[bool]: + """ + This flag specifies whether Backups will not fail when + Backup for GKE detects Kubernetes configuration that is + non-standard or requires additional setup to restore. + """ + return pulumi.get(self, "permissive_mode") + @property @pulumi.getter(name="selectedApplications") def selected_applications(self) -> Optional['outputs.BackupPlanBackupConfigSelectedApplications']: @@ -894,6 +917,8 @@ def __key_warning(key: str): suggest = "namespaced_resource_restore_mode" elif key == "noNamespaces": suggest = "no_namespaces" + elif key == "restoreOrder": + suggest = "restore_order" elif key == "selectedApplications": suggest = "selected_applications" elif key == "selectedNamespaces": @@ -902,6 +927,8 @@ def __key_warning(key: str): suggest = "transformation_rules" elif key == "volumeDataRestorePolicy": suggest = "volume_data_restore_policy" + elif key == "volumeDataRestorePolicyBindings": + suggest = "volume_data_restore_policy_bindings" if suggest: pulumi.log.warn(f"Key '{key}' not found in RestorePlanRestoreConfig. Access the value via the '{suggest}' property getter instead.") @@ -921,10 +948,12 @@ def __init__(__self__, *, excluded_namespaces: Optional['outputs.RestorePlanRestoreConfigExcludedNamespaces'] = None, namespaced_resource_restore_mode: Optional[str] = None, no_namespaces: Optional[bool] = None, + restore_order: Optional['outputs.RestorePlanRestoreConfigRestoreOrder'] = None, selected_applications: Optional['outputs.RestorePlanRestoreConfigSelectedApplications'] = None, selected_namespaces: Optional['outputs.RestorePlanRestoreConfigSelectedNamespaces'] = None, transformation_rules: Optional[Sequence['outputs.RestorePlanRestoreConfigTransformationRule']] = None, - volume_data_restore_policy: Optional[str] = None): + volume_data_restore_policy: Optional[str] = None, + volume_data_restore_policy_bindings: Optional[Sequence['outputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBinding']] = None): """ :param bool all_namespaces: If True, restore all namespaced resources in the Backup. Setting this field to False will result in an error. @@ -946,9 +975,11 @@ def __init__(__self__, *, if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode for more information on each mode. - Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. :param bool no_namespaces: Do not restore any namespaced resources if set to "True". Specifying this field to "False" is not allowed. + :param 'RestorePlanRestoreConfigRestoreOrderArgs' restore_order: It contains custom ordering to use on a Restore. + Structure is documented below. :param 'RestorePlanRestoreConfigSelectedApplicationsArgs' selected_applications: A list of selected ProtectedApplications to restore. The listed ProtectedApplications and all the resources to which they refer will be restored. @@ -969,6 +1000,10 @@ def __init__(__self__, *, See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy for more information on each policy option. Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + :param Sequence['RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs'] volume_data_restore_policy_bindings: A table that binds volumes by their scope to a restore policy. Bindings + must have a unique scope. Any volumes not scoped in the bindings are + subject to the policy defined in volume_data_restore_policy. + Structure is documented below. """ if all_namespaces is not None: pulumi.set(__self__, "all_namespaces", all_namespaces) @@ -982,6 +1017,8 @@ def __init__(__self__, *, pulumi.set(__self__, "namespaced_resource_restore_mode", namespaced_resource_restore_mode) if no_namespaces is not None: pulumi.set(__self__, "no_namespaces", no_namespaces) + if restore_order is not None: + pulumi.set(__self__, "restore_order", restore_order) if selected_applications is not None: pulumi.set(__self__, "selected_applications", selected_applications) if selected_namespaces is not None: @@ -990,6 +1027,8 @@ def __init__(__self__, *, pulumi.set(__self__, "transformation_rules", transformation_rules) if volume_data_restore_policy is not None: pulumi.set(__self__, "volume_data_restore_policy", volume_data_restore_policy) + if volume_data_restore_policy_bindings is not None: + pulumi.set(__self__, "volume_data_restore_policy_bindings", volume_data_restore_policy_bindings) @property @pulumi.getter(name="allNamespaces") @@ -1043,7 +1082,7 @@ def namespaced_resource_restore_mode(self) -> Optional[str]: if the `namespacedResourceRestoreScope` is anything other than `noNamespaces`. See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#namespacedresourcerestoremode for more information on each mode. - Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`. + Possible values are: `DELETE_AND_RESTORE`, `FAIL_ON_CONFLICT`, `MERGE_SKIP_ON_CONFLICT`, `MERGE_REPLACE_VOLUME_ON_CONFLICT`, `MERGE_REPLACE_ON_CONFLICT`. """ return pulumi.get(self, "namespaced_resource_restore_mode") @@ -1056,6 +1095,15 @@ def no_namespaces(self) -> Optional[bool]: """ return pulumi.get(self, "no_namespaces") + @property + @pulumi.getter(name="restoreOrder") + def restore_order(self) -> Optional['outputs.RestorePlanRestoreConfigRestoreOrder']: + """ + It contains custom ordering to use on a Restore. + Structure is documented below. + """ + return pulumi.get(self, "restore_order") + @property @pulumi.getter(name="selectedApplications") def selected_applications(self) -> Optional['outputs.RestorePlanRestoreConfigSelectedApplications']: @@ -1104,6 +1152,17 @@ def volume_data_restore_policy(self) -> Optional[str]: """ return pulumi.get(self, "volume_data_restore_policy") + @property + @pulumi.getter(name="volumeDataRestorePolicyBindings") + def volume_data_restore_policy_bindings(self) -> Optional[Sequence['outputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBinding']]: + """ + A table that binds volumes by their scope to a restore policy. Bindings + must have a unique scope. Any volumes not scoped in the bindings are + subject to the policy defined in volume_data_restore_policy. + Structure is documented below. + """ + return pulumi.get(self, "volume_data_restore_policy_bindings") + @pulumi.output_type class RestorePlanRestoreConfigClusterResourceRestoreScope(dict): @@ -1331,6 +1390,200 @@ def namespaces(self) -> Sequence[str]: return pulumi.get(self, "namespaces") +@pulumi.output_type +class RestorePlanRestoreConfigRestoreOrder(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "groupKindDependencies": + suggest = "group_kind_dependencies" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RestorePlanRestoreConfigRestoreOrder. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RestorePlanRestoreConfigRestoreOrder.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RestorePlanRestoreConfigRestoreOrder.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + group_kind_dependencies: Sequence['outputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependency']): + """ + :param Sequence['RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs'] group_kind_dependencies: A list of group kind dependency pairs + that is used by Backup for GKE to + generate a group kind restore order. + Structure is documented below. + """ + pulumi.set(__self__, "group_kind_dependencies", group_kind_dependencies) + + @property + @pulumi.getter(name="groupKindDependencies") + def group_kind_dependencies(self) -> Sequence['outputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependency']: + """ + A list of group kind dependency pairs + that is used by Backup for GKE to + generate a group kind restore order. + Structure is documented below. + """ + return pulumi.get(self, "group_kind_dependencies") + + +@pulumi.output_type +class RestorePlanRestoreConfigRestoreOrderGroupKindDependency(dict): + def __init__(__self__, *, + requiring: 'outputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring', + satisfying: 'outputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying'): + """ + :param 'RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs' requiring: The requiring group kind requires that the satisfying + group kind be restored first. + Structure is documented below. + :param 'RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs' satisfying: The satisfying group kind must be restored first + in order to satisfy the dependency. + Structure is documented below. + """ + pulumi.set(__self__, "requiring", requiring) + pulumi.set(__self__, "satisfying", satisfying) + + @property + @pulumi.getter + def requiring(self) -> 'outputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring': + """ + The requiring group kind requires that the satisfying + group kind be restored first. + Structure is documented below. + """ + return pulumi.get(self, "requiring") + + @property + @pulumi.getter + def satisfying(self) -> 'outputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying': + """ + The satisfying group kind must be restored first + in order to satisfy the dependency. + Structure is documented below. + """ + return pulumi.get(self, "satisfying") + + +@pulumi.output_type +class RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "resourceGroup": + suggest = "resource_group" + elif key == "resourceKind": + suggest = "resource_kind" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiring.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + resource_group: Optional[str] = None, + resource_kind: Optional[str] = None): + """ + :param str resource_group: API Group of a Kubernetes resource, e.g. + "apiextensions.k8s.io", "storage.k8s.io", etc. + Use empty string for core group. + :param str resource_kind: Kind of a Kubernetes resource, e.g. + "CustomResourceDefinition", "StorageClass", etc. + + - - - + """ + if resource_group is not None: + pulumi.set(__self__, "resource_group", resource_group) + if resource_kind is not None: + pulumi.set(__self__, "resource_kind", resource_kind) + + @property + @pulumi.getter(name="resourceGroup") + def resource_group(self) -> Optional[str]: + """ + API Group of a Kubernetes resource, e.g. + "apiextensions.k8s.io", "storage.k8s.io", etc. + Use empty string for core group. + """ + return pulumi.get(self, "resource_group") + + @property + @pulumi.getter(name="resourceKind") + def resource_kind(self) -> Optional[str]: + """ + Kind of a Kubernetes resource, e.g. + "CustomResourceDefinition", "StorageClass", etc. + + - - - + """ + return pulumi.get(self, "resource_kind") + + +@pulumi.output_type +class RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "resourceGroup": + suggest = "resource_group" + elif key == "resourceKind": + suggest = "resource_kind" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfying.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + resource_group: Optional[str] = None, + resource_kind: Optional[str] = None): + """ + :param str resource_group: API Group of a Kubernetes resource, e.g. + "apiextensions.k8s.io", "storage.k8s.io", etc. + Use empty string for core group. + :param str resource_kind: Kind of a Kubernetes resource, e.g. + "CustomResourceDefinition", "StorageClass", etc. + """ + if resource_group is not None: + pulumi.set(__self__, "resource_group", resource_group) + if resource_kind is not None: + pulumi.set(__self__, "resource_kind", resource_kind) + + @property + @pulumi.getter(name="resourceGroup") + def resource_group(self) -> Optional[str]: + """ + API Group of a Kubernetes resource, e.g. + "apiextensions.k8s.io", "storage.k8s.io", etc. + Use empty string for core group. + """ + return pulumi.get(self, "resource_group") + + @property + @pulumi.getter(name="resourceKind") + def resource_kind(self) -> Optional[str]: + """ + Kind of a Kubernetes resource, e.g. + "CustomResourceDefinition", "StorageClass", etc. + """ + return pulumi.get(self, "resource_kind") + + @pulumi.output_type class RestorePlanRestoreConfigSelectedApplications(dict): @staticmethod @@ -1527,8 +1780,6 @@ def __init__(__self__, *, location within the target document where the operation is performed. :param str value: A string that specifies the desired value in string format to use for transformation. - - - - - """ pulumi.set(__self__, "op", op) if from_path is not None: @@ -1571,8 +1822,6 @@ def value(self) -> Optional[str]: """ A string that specifies the desired value in string format to use for transformation. - - - - - """ return pulumi.get(self, "value") @@ -1723,3 +1972,59 @@ def resource_kind(self) -> Optional[str]: return pulumi.get(self, "resource_kind") +@pulumi.output_type +class RestorePlanRestoreConfigVolumeDataRestorePolicyBinding(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "volumeType": + suggest = "volume_type" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RestorePlanRestoreConfigVolumeDataRestorePolicyBinding. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RestorePlanRestoreConfigVolumeDataRestorePolicyBinding.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RestorePlanRestoreConfigVolumeDataRestorePolicyBinding.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + policy: str, + volume_type: str): + """ + :param str policy: Specifies the mechanism to be used to restore this volume data. + See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + for more information on each policy option. + Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + :param str volume_type: The volume type, as determined by the PVC's + bound PV, to apply the policy to. + Possible values are: `GCE_PERSISTENT_DISK`. + """ + pulumi.set(__self__, "policy", policy) + pulumi.set(__self__, "volume_type", volume_type) + + @property + @pulumi.getter + def policy(self) -> str: + """ + Specifies the mechanism to be used to restore this volume data. + See https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/RestoreConfig#VolumeDataRestorePolicy + for more information on each policy option. + Possible values are: `RESTORE_VOLUME_DATA_FROM_BACKUP`, `REUSE_VOLUME_HANDLE_FROM_BACKUP`, `NO_VOLUME_DATA_RESTORATION`. + """ + return pulumi.get(self, "policy") + + @property + @pulumi.getter(name="volumeType") + def volume_type(self) -> str: + """ + The volume type, as determined by the PVC's + bound PV, to apply the policy to. + Possible values are: `GCE_PERSISTENT_DISK`. + """ + return pulumi.get(self, "volume_type") + + diff --git a/sdk/python/pulumi_gcp/gkebackup/restore_plan.py b/sdk/python/pulumi_gcp/gkebackup/restore_plan.py index 30cbb000e1..554c9e831f 100644 --- a/sdk/python/pulumi_gcp/gkebackup/restore_plan.py +++ b/sdk/python/pulumi_gcp/gkebackup/restore_plan.py @@ -732,6 +732,169 @@ def __init__(__self__, )], )) ``` + ### Gkebackup Restoreplan Gitops Mode + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="gitops-mode-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="gitops-mode", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + gitops_mode = gcp.gkebackup.RestorePlan("gitops_mode", + name="gitops-mode", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="MERGE_SKIP_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + )) + ``` + ### Gkebackup Restoreplan Restore Order + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="restore-order-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="restore-order", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + restore_order = gcp.gkebackup.RestorePlan("restore_order", + name="restore-order", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + restore_order=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderArgs( + group_kind_dependencies=[ + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindA", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + ), + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindC", + ), + ), + ], + ), + )) + ``` + ### Gkebackup Restoreplan Volume Res + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="volume-res-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="volume-res", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + volume_res = gcp.gkebackup.RestorePlan("volume_res", + name="volume-res", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="NO_VOLUME_DATA_RESTORATION", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + volume_data_restore_policy_bindings=[gcp.gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs( + policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + volume_type="GCE_PERSISTENT_DISK", + )], + )) + ``` ## Import @@ -1124,6 +1287,169 @@ def __init__(__self__, )], )) ``` + ### Gkebackup Restoreplan Gitops Mode + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="gitops-mode-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="gitops-mode", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + gitops_mode = gcp.gkebackup.RestorePlan("gitops_mode", + name="gitops-mode", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="MERGE_SKIP_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + )) + ``` + ### Gkebackup Restoreplan Restore Order + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="restore-order-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="restore-order", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + restore_order = gcp.gkebackup.RestorePlan("restore_order", + name="restore-order", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + restore_order=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderArgs( + group_kind_dependencies=[ + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindA", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + ), + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindC", + ), + ), + ], + ), + )) + ``` + ### Gkebackup Restoreplan Volume Res + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="volume-res-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="volume-res", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + volume_res = gcp.gkebackup.RestorePlan("volume_res", + name="volume-res", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="NO_VOLUME_DATA_RESTORATION", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + volume_data_restore_policy_bindings=[gcp.gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs( + policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + volume_type="GCE_PERSISTENT_DISK", + )], + )) + ``` ## Import diff --git a/sdk/python/pulumi_gcp/gkebackup/restore_plan_iam_binding.py b/sdk/python/pulumi_gcp/gkebackup/restore_plan_iam_binding.py index 70ef14dcaa..0ab1072170 100644 --- a/sdk/python/pulumi_gcp/gkebackup/restore_plan_iam_binding.py +++ b/sdk/python/pulumi_gcp/gkebackup/restore_plan_iam_binding.py @@ -558,6 +558,169 @@ def __init__(__self__, )], )) ``` + ### Gkebackup Restoreplan Gitops Mode + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="gitops-mode-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="gitops-mode", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + gitops_mode = gcp.gkebackup.RestorePlan("gitops_mode", + name="gitops-mode", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="MERGE_SKIP_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + )) + ``` + ### Gkebackup Restoreplan Restore Order + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="restore-order-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="restore-order", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + restore_order = gcp.gkebackup.RestorePlan("restore_order", + name="restore-order", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + restore_order=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderArgs( + group_kind_dependencies=[ + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindA", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + ), + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindC", + ), + ), + ], + ), + )) + ``` + ### Gkebackup Restoreplan Volume Res + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="volume-res-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="volume-res", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + volume_res = gcp.gkebackup.RestorePlan("volume_res", + name="volume-res", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="NO_VOLUME_DATA_RESTORATION", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + volume_data_restore_policy_bindings=[gcp.gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs( + policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + volume_type="GCE_PERSISTENT_DISK", + )], + )) + ``` ## Import @@ -941,6 +1104,169 @@ def __init__(__self__, )], )) ``` + ### Gkebackup Restoreplan Gitops Mode + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="gitops-mode-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="gitops-mode", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + gitops_mode = gcp.gkebackup.RestorePlan("gitops_mode", + name="gitops-mode", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="MERGE_SKIP_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + )) + ``` + ### Gkebackup Restoreplan Restore Order + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="restore-order-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="restore-order", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + restore_order = gcp.gkebackup.RestorePlan("restore_order", + name="restore-order", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + restore_order=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderArgs( + group_kind_dependencies=[ + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindA", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + ), + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindC", + ), + ), + ], + ), + )) + ``` + ### Gkebackup Restoreplan Volume Res + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="volume-res-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="volume-res", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + volume_res = gcp.gkebackup.RestorePlan("volume_res", + name="volume-res", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="NO_VOLUME_DATA_RESTORATION", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + volume_data_restore_policy_bindings=[gcp.gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs( + policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + volume_type="GCE_PERSISTENT_DISK", + )], + )) + ``` ## Import diff --git a/sdk/python/pulumi_gcp/gkebackup/restore_plan_iam_member.py b/sdk/python/pulumi_gcp/gkebackup/restore_plan_iam_member.py index 28840c146c..4790172bda 100644 --- a/sdk/python/pulumi_gcp/gkebackup/restore_plan_iam_member.py +++ b/sdk/python/pulumi_gcp/gkebackup/restore_plan_iam_member.py @@ -558,6 +558,169 @@ def __init__(__self__, )], )) ``` + ### Gkebackup Restoreplan Gitops Mode + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="gitops-mode-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="gitops-mode", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + gitops_mode = gcp.gkebackup.RestorePlan("gitops_mode", + name="gitops-mode", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="MERGE_SKIP_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + )) + ``` + ### Gkebackup Restoreplan Restore Order + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="restore-order-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="restore-order", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + restore_order = gcp.gkebackup.RestorePlan("restore_order", + name="restore-order", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + restore_order=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderArgs( + group_kind_dependencies=[ + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindA", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + ), + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindC", + ), + ), + ], + ), + )) + ``` + ### Gkebackup Restoreplan Volume Res + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="volume-res-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="volume-res", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + volume_res = gcp.gkebackup.RestorePlan("volume_res", + name="volume-res", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="NO_VOLUME_DATA_RESTORATION", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + volume_data_restore_policy_bindings=[gcp.gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs( + policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + volume_type="GCE_PERSISTENT_DISK", + )], + )) + ``` ## Import @@ -941,6 +1104,169 @@ def __init__(__self__, )], )) ``` + ### Gkebackup Restoreplan Gitops Mode + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="gitops-mode-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="gitops-mode", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + gitops_mode = gcp.gkebackup.RestorePlan("gitops_mode", + name="gitops-mode", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="MERGE_SKIP_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + )) + ``` + ### Gkebackup Restoreplan Restore Order + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="restore-order-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="restore-order", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + restore_order = gcp.gkebackup.RestorePlan("restore_order", + name="restore-order", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + restore_order=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderArgs( + group_kind_dependencies=[ + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindA", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + ), + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindC", + ), + ), + ], + ), + )) + ``` + ### Gkebackup Restoreplan Volume Res + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="volume-res-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="volume-res", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + volume_res = gcp.gkebackup.RestorePlan("volume_res", + name="volume-res", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="NO_VOLUME_DATA_RESTORATION", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + volume_data_restore_policy_bindings=[gcp.gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs( + policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + volume_type="GCE_PERSISTENT_DISK", + )], + )) + ``` ## Import diff --git a/sdk/python/pulumi_gcp/gkebackup/restore_plan_iam_policy.py b/sdk/python/pulumi_gcp/gkebackup/restore_plan_iam_policy.py index 76d8858717..d36e6c53d8 100644 --- a/sdk/python/pulumi_gcp/gkebackup/restore_plan_iam_policy.py +++ b/sdk/python/pulumi_gcp/gkebackup/restore_plan_iam_policy.py @@ -507,6 +507,169 @@ def __init__(__self__, )], )) ``` + ### Gkebackup Restoreplan Gitops Mode + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="gitops-mode-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="gitops-mode", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + gitops_mode = gcp.gkebackup.RestorePlan("gitops_mode", + name="gitops-mode", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="MERGE_SKIP_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + )) + ``` + ### Gkebackup Restoreplan Restore Order + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="restore-order-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="restore-order", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + restore_order = gcp.gkebackup.RestorePlan("restore_order", + name="restore-order", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + restore_order=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderArgs( + group_kind_dependencies=[ + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindA", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + ), + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindC", + ), + ), + ], + ), + )) + ``` + ### Gkebackup Restoreplan Volume Res + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="volume-res-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="volume-res", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + volume_res = gcp.gkebackup.RestorePlan("volume_res", + name="volume-res", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="NO_VOLUME_DATA_RESTORATION", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + volume_data_restore_policy_bindings=[gcp.gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs( + policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + volume_type="GCE_PERSISTENT_DISK", + )], + )) + ``` ## Import @@ -890,6 +1053,169 @@ def __init__(__self__, )], )) ``` + ### Gkebackup Restoreplan Gitops Mode + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="gitops-mode-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="gitops-mode", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + gitops_mode = gcp.gkebackup.RestorePlan("gitops_mode", + name="gitops-mode", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="MERGE_SKIP_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + )) + ``` + ### Gkebackup Restoreplan Restore Order + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="restore-order-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="restore-order", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + restore_order = gcp.gkebackup.RestorePlan("restore_order", + name="restore-order", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + restore_order=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderArgs( + group_kind_dependencies=[ + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindA", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + ), + gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs( + satisfying=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs( + resource_group="stable.example.com", + resource_kind="kindB", + ), + requiring=gcp.gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs( + resource_group="stable.example.com", + resource_kind="kindC", + ), + ), + ], + ), + )) + ``` + ### Gkebackup Restoreplan Volume Res + + ```python + import pulumi + import pulumi_gcp as gcp + + primary = gcp.container.Cluster("primary", + name="volume-res-cluster", + location="us-central1", + initial_node_count=1, + workload_identity_config=gcp.container.ClusterWorkloadIdentityConfigArgs( + workload_pool="my-project-name.svc.id.goog", + ), + addons_config=gcp.container.ClusterAddonsConfigArgs( + gke_backup_agent_config=gcp.container.ClusterAddonsConfigGkeBackupAgentConfigArgs( + enabled=True, + ), + ), + deletion_protection="", + network="default", + subnetwork="default") + basic = gcp.gkebackup.BackupPlan("basic", + name="volume-res", + cluster=primary.id, + location="us-central1", + backup_config=gcp.gkebackup.BackupPlanBackupConfigArgs( + include_volume_data=True, + include_secrets=True, + all_namespaces=True, + )) + volume_res = gcp.gkebackup.RestorePlan("volume_res", + name="volume-res", + location="us-central1", + backup_plan=basic.id, + cluster=primary.id, + restore_config=gcp.gkebackup.RestorePlanRestoreConfigArgs( + all_namespaces=True, + namespaced_resource_restore_mode="FAIL_ON_CONFLICT", + volume_data_restore_policy="NO_VOLUME_DATA_RESTORATION", + cluster_resource_restore_scope=gcp.gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs( + all_group_kinds=True, + ), + cluster_resource_conflict_policy="USE_EXISTING_VERSION", + volume_data_restore_policy_bindings=[gcp.gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs( + policy="RESTORE_VOLUME_DATA_FROM_BACKUP", + volume_type="GCE_PERSISTENT_DISK", + )], + )) + ``` ## Import diff --git a/sdk/python/pulumi_gcp/healthcare/_inputs.py b/sdk/python/pulumi_gcp/healthcare/_inputs.py index 1d79fc9250..6ea7c9757e 100644 --- a/sdk/python/pulumi_gcp/healthcare/_inputs.py +++ b/sdk/python/pulumi_gcp/healthcare/_inputs.py @@ -270,7 +270,8 @@ def description(self, value: Optional[pulumi.Input[str]]): @pulumi.input_type class DicomStoreNotificationConfigArgs: def __init__(__self__, *, - pubsub_topic: pulumi.Input[str]): + pubsub_topic: pulumi.Input[str], + send_for_bulk_import: Optional[pulumi.Input[bool]] = None): """ :param pulumi.Input[str] pubsub_topic: The Cloud Pub/Sub topic that notifications of changes are published on. Supplied by the client. PubsubMessage.Data will contain the resource name. PubsubMessage.MessageId is the ID of this message. @@ -278,8 +279,11 @@ def __init__(__self__, *, was published. Notifications are only sent if the topic is non-empty. Topic names must be scoped to a project. service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com must have publisher permissions on the given Cloud Pub/Sub topic. Not having adequate permissions will cause the calls that send notifications to fail. + :param pulumi.Input[bool] send_for_bulk_import: Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. """ pulumi.set(__self__, "pubsub_topic", pubsub_topic) + if send_for_bulk_import is not None: + pulumi.set(__self__, "send_for_bulk_import", send_for_bulk_import) @property @pulumi.getter(name="pubsubTopic") @@ -298,6 +302,18 @@ def pubsub_topic(self) -> pulumi.Input[str]: def pubsub_topic(self, value: pulumi.Input[str]): pulumi.set(self, "pubsub_topic", value) + @property + @pulumi.getter(name="sendForBulkImport") + def send_for_bulk_import(self) -> Optional[pulumi.Input[bool]]: + """ + Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + """ + return pulumi.get(self, "send_for_bulk_import") + + @send_for_bulk_import.setter + def send_for_bulk_import(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "send_for_bulk_import", value) + @pulumi.input_type class DicomStoreStreamConfigArgs: diff --git a/sdk/python/pulumi_gcp/healthcare/dicom_store.py b/sdk/python/pulumi_gcp/healthcare/dicom_store.py index c0dba4c768..8f2c2238f5 100644 --- a/sdk/python/pulumi_gcp/healthcare/dicom_store.py +++ b/sdk/python/pulumi_gcp/healthcare/dicom_store.py @@ -378,6 +378,7 @@ def __init__(__self__, dataset=dataset.id, notification_config=gcp.healthcare.DicomStoreNotificationConfigArgs( pubsub_topic=topic.id, + send_for_bulk_import=True, ), labels={ "label1": "labelvalue1", @@ -496,6 +497,7 @@ def __init__(__self__, dataset=dataset.id, notification_config=gcp.healthcare.DicomStoreNotificationConfigArgs( pubsub_topic=topic.id, + send_for_bulk_import=True, ), labels={ "label1": "labelvalue1", diff --git a/sdk/python/pulumi_gcp/healthcare/fhir_store.py b/sdk/python/pulumi_gcp/healthcare/fhir_store.py index fcbb820384..f3d85e83b7 100644 --- a/sdk/python/pulumi_gcp/healthcare/fhir_store.py +++ b/sdk/python/pulumi_gcp/healthcare/fhir_store.py @@ -81,8 +81,11 @@ def __init__(__self__, *, Please refer to the field `effective_labels` for all of the labels present on the resource. :param pulumi.Input[str] name: The resource name for the FhirStore. ** Changing this property may recreate the FHIR store (removing all data) ** - :param pulumi.Input['FhirStoreNotificationConfigArgs'] notification_config: A nested object resource + :param pulumi.Input['FhirStoreNotificationConfigArgs'] notification_config: (Optional, Deprecated) + A nested object resource Structure is documented below. + + > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. :param pulumi.Input[Sequence[pulumi.Input['FhirStoreNotificationConfigArgs']]] notification_configs: A list of notifcation configs that configure the notification for every resource mutation in this FHIR store. Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input['FhirStoreStreamConfigArgs']]] stream_configs: A list of streaming configs that configure the destinations of streaming export for every resource mutation in @@ -115,6 +118,9 @@ def __init__(__self__, *, pulumi.set(__self__, "labels", labels) if name is not None: pulumi.set(__self__, "name", name) + if notification_config is not None: + warnings.warn("""`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.""", DeprecationWarning) + pulumi.log.warn("""notification_config is deprecated: `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.""") if notification_config is not None: pulumi.set(__self__, "notification_config", notification_config) if notification_configs is not None: @@ -287,9 +293,15 @@ def name(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="notificationConfig") def notification_config(self) -> Optional[pulumi.Input['FhirStoreNotificationConfigArgs']]: """ + (Optional, Deprecated) A nested object resource Structure is documented below. + + > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. """ + warnings.warn("""`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.""", DeprecationWarning) + pulumi.log.warn("""notification_config is deprecated: `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.""") + return pulumi.get(self, "notification_config") @notification_config.setter @@ -414,8 +426,11 @@ def __init__(__self__, *, Please refer to the field `effective_labels` for all of the labels present on the resource. :param pulumi.Input[str] name: The resource name for the FhirStore. ** Changing this property may recreate the FHIR store (removing all data) ** - :param pulumi.Input['FhirStoreNotificationConfigArgs'] notification_config: A nested object resource + :param pulumi.Input['FhirStoreNotificationConfigArgs'] notification_config: (Optional, Deprecated) + A nested object resource Structure is documented below. + + > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. :param pulumi.Input[Sequence[pulumi.Input['FhirStoreNotificationConfigArgs']]] notification_configs: A list of notifcation configs that configure the notification for every resource mutation in this FHIR store. Structure is documented below. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource @@ -454,6 +469,9 @@ def __init__(__self__, *, pulumi.set(__self__, "labels", labels) if name is not None: pulumi.set(__self__, "name", name) + if notification_config is not None: + warnings.warn("""`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.""", DeprecationWarning) + pulumi.log.warn("""notification_config is deprecated: `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.""") if notification_config is not None: pulumi.set(__self__, "notification_config", notification_config) if notification_configs is not None: @@ -642,9 +660,15 @@ def name(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="notificationConfig") def notification_config(self) -> Optional[pulumi.Input['FhirStoreNotificationConfigArgs']]: """ + (Optional, Deprecated) A nested object resource Structure is documented below. + + > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. """ + warnings.warn("""`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.""", DeprecationWarning) + pulumi.log.warn("""notification_config is deprecated: `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.""") + return pulumi.get(self, "notification_config") @notification_config.setter @@ -774,9 +798,9 @@ def __init__(__self__, disable_resource_versioning=False, enable_history_import=False, default_search_handling_strict=False, - notification_config=gcp.healthcare.FhirStoreNotificationConfigArgs( + notification_configs=[gcp.healthcare.FhirStoreNotificationConfigArgs( pubsub_topic=topic.id, - ), + )], labels={ "label1": "labelvalue1", }) @@ -822,31 +846,6 @@ def __init__(__self__, )]) topic = gcp.pubsub.Topic("topic", name="fhir-notifications") ``` - ### Healthcare Fhir Store Notification Config - - ```python - import pulumi - import pulumi_gcp as gcp - - topic = gcp.pubsub.Topic("topic", name="fhir-notifications") - dataset = gcp.healthcare.Dataset("dataset", - name="example-dataset", - location="us-central1") - default = gcp.healthcare.FhirStore("default", - name="example-fhir-store", - dataset=dataset.id, - version="R4", - enable_update_create=False, - disable_referential_integrity=False, - disable_resource_versioning=False, - enable_history_import=False, - labels={ - "label1": "labelvalue1", - }, - notification_config=gcp.healthcare.FhirStoreNotificationConfigArgs( - pubsub_topic=topic.id, - )) - ``` ### Healthcare Fhir Store Notification Configs ```python @@ -865,7 +864,6 @@ def __init__(__self__, disable_referential_integrity=False, disable_resource_versioning=False, enable_history_import=False, - enable_history_modifications=False, labels={ "label1": "labelvalue1", }, @@ -945,8 +943,11 @@ def __init__(__self__, Please refer to the field `effective_labels` for all of the labels present on the resource. :param pulumi.Input[str] name: The resource name for the FhirStore. ** Changing this property may recreate the FHIR store (removing all data) ** - :param pulumi.Input[pulumi.InputType['FhirStoreNotificationConfigArgs']] notification_config: A nested object resource + :param pulumi.Input[pulumi.InputType['FhirStoreNotificationConfigArgs']] notification_config: (Optional, Deprecated) + A nested object resource Structure is documented below. + + > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['FhirStoreNotificationConfigArgs']]]] notification_configs: A list of notifcation configs that configure the notification for every resource mutation in this FHIR store. Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['FhirStoreStreamConfigArgs']]]] stream_configs: A list of streaming configs that configure the destinations of streaming export for every resource mutation in @@ -998,9 +999,9 @@ def __init__(__self__, disable_resource_versioning=False, enable_history_import=False, default_search_handling_strict=False, - notification_config=gcp.healthcare.FhirStoreNotificationConfigArgs( + notification_configs=[gcp.healthcare.FhirStoreNotificationConfigArgs( pubsub_topic=topic.id, - ), + )], labels={ "label1": "labelvalue1", }) @@ -1046,31 +1047,6 @@ def __init__(__self__, )]) topic = gcp.pubsub.Topic("topic", name="fhir-notifications") ``` - ### Healthcare Fhir Store Notification Config - - ```python - import pulumi - import pulumi_gcp as gcp - - topic = gcp.pubsub.Topic("topic", name="fhir-notifications") - dataset = gcp.healthcare.Dataset("dataset", - name="example-dataset", - location="us-central1") - default = gcp.healthcare.FhirStore("default", - name="example-fhir-store", - dataset=dataset.id, - version="R4", - enable_update_create=False, - disable_referential_integrity=False, - disable_resource_versioning=False, - enable_history_import=False, - labels={ - "label1": "labelvalue1", - }, - notification_config=gcp.healthcare.FhirStoreNotificationConfigArgs( - pubsub_topic=topic.id, - )) - ``` ### Healthcare Fhir Store Notification Configs ```python @@ -1089,7 +1065,6 @@ def __init__(__self__, disable_referential_integrity=False, disable_resource_versioning=False, enable_history_import=False, - enable_history_modifications=False, labels={ "label1": "labelvalue1", }, @@ -1261,8 +1236,11 @@ def get(resource_name: str, Please refer to the field `effective_labels` for all of the labels present on the resource. :param pulumi.Input[str] name: The resource name for the FhirStore. ** Changing this property may recreate the FHIR store (removing all data) ** - :param pulumi.Input[pulumi.InputType['FhirStoreNotificationConfigArgs']] notification_config: A nested object resource + :param pulumi.Input[pulumi.InputType['FhirStoreNotificationConfigArgs']] notification_config: (Optional, Deprecated) + A nested object resource Structure is documented below. + + > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['FhirStoreNotificationConfigArgs']]]] notification_configs: A list of notifcation configs that configure the notification for every resource mutation in this FHIR store. Structure is documented below. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource @@ -1433,9 +1411,15 @@ def name(self) -> pulumi.Output[str]: @pulumi.getter(name="notificationConfig") def notification_config(self) -> pulumi.Output[Optional['outputs.FhirStoreNotificationConfig']]: """ + (Optional, Deprecated) A nested object resource Structure is documented below. + + > **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead. """ + warnings.warn("""`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.""", DeprecationWarning) + pulumi.log.warn("""notification_config is deprecated: `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.""") + return pulumi.get(self, "notification_config") @property diff --git a/sdk/python/pulumi_gcp/healthcare/outputs.py b/sdk/python/pulumi_gcp/healthcare/outputs.py index 371c907b7d..064948300a 100644 --- a/sdk/python/pulumi_gcp/healthcare/outputs.py +++ b/sdk/python/pulumi_gcp/healthcare/outputs.py @@ -203,6 +203,8 @@ def __key_warning(key: str): suggest = None if key == "pubsubTopic": suggest = "pubsub_topic" + elif key == "sendForBulkImport": + suggest = "send_for_bulk_import" if suggest: pulumi.log.warn(f"Key '{key}' not found in DicomStoreNotificationConfig. Access the value via the '{suggest}' property getter instead.") @@ -216,7 +218,8 @@ def get(self, key: str, default = None) -> Any: return super().get(key, default) def __init__(__self__, *, - pubsub_topic: str): + pubsub_topic: str, + send_for_bulk_import: Optional[bool] = None): """ :param str pubsub_topic: The Cloud Pub/Sub topic that notifications of changes are published on. Supplied by the client. PubsubMessage.Data will contain the resource name. PubsubMessage.MessageId is the ID of this message. @@ -224,8 +227,11 @@ def __init__(__self__, *, was published. Notifications are only sent if the topic is non-empty. Topic names must be scoped to a project. service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com must have publisher permissions on the given Cloud Pub/Sub topic. Not having adequate permissions will cause the calls that send notifications to fail. + :param bool send_for_bulk_import: Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. """ pulumi.set(__self__, "pubsub_topic", pubsub_topic) + if send_for_bulk_import is not None: + pulumi.set(__self__, "send_for_bulk_import", send_for_bulk_import) @property @pulumi.getter(name="pubsubTopic") @@ -240,6 +246,14 @@ def pubsub_topic(self) -> str: """ return pulumi.get(self, "pubsub_topic") + @property + @pulumi.getter(name="sendForBulkImport") + def send_for_bulk_import(self) -> Optional[bool]: + """ + Indicates whether or not to send Pub/Sub notifications on bulk import. Only supported for DICOM imports. + """ + return pulumi.get(self, "send_for_bulk_import") + @pulumi.output_type class DicomStoreStreamConfig(dict): diff --git a/sdk/python/pulumi_gcp/integrationconnectors/endpoint_attachment.py b/sdk/python/pulumi_gcp/integrationconnectors/endpoint_attachment.py index 95f9848751..d063fd3dbc 100644 --- a/sdk/python/pulumi_gcp/integrationconnectors/endpoint_attachment.py +++ b/sdk/python/pulumi_gcp/integrationconnectors/endpoint_attachment.py @@ -17,6 +17,7 @@ def __init__(__self__, *, location: pulumi.Input[str], service_attachment: pulumi.Input[str], description: Optional[pulumi.Input[str]] = None, + endpoint_global_access: Optional[pulumi.Input[bool]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, name: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None): @@ -25,6 +26,7 @@ def __init__(__self__, *, :param pulumi.Input[str] location: Location in which Endpoint Attachment needs to be created. :param pulumi.Input[str] service_attachment: The path of the service attachment. :param pulumi.Input[str] description: Description of the resource. + :param pulumi.Input[bool] endpoint_global_access: Enable global access for endpoint attachment. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Resource labels to represent user provided metadata. **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. @@ -40,6 +42,8 @@ def __init__(__self__, *, pulumi.set(__self__, "service_attachment", service_attachment) if description is not None: pulumi.set(__self__, "description", description) + if endpoint_global_access is not None: + pulumi.set(__self__, "endpoint_global_access", endpoint_global_access) if labels is not None: pulumi.set(__self__, "labels", labels) if name is not None: @@ -83,6 +87,18 @@ def description(self) -> Optional[pulumi.Input[str]]: def description(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "description", value) + @property + @pulumi.getter(name="endpointGlobalAccess") + def endpoint_global_access(self) -> Optional[pulumi.Input[bool]]: + """ + Enable global access for endpoint attachment. + """ + return pulumi.get(self, "endpoint_global_access") + + @endpoint_global_access.setter + def endpoint_global_access(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "endpoint_global_access", value) + @property @pulumi.getter def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: @@ -133,6 +149,7 @@ def __init__(__self__, *, create_time: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + endpoint_global_access: Optional[pulumi.Input[bool]] = None, endpoint_ip: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, @@ -146,6 +163,7 @@ def __init__(__self__, *, :param pulumi.Input[str] create_time: Time the Namespace was created in UTC. :param pulumi.Input[str] description: Description of the resource. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[bool] endpoint_global_access: Enable global access for endpoint attachment. :param pulumi.Input[str] endpoint_ip: The Private Service Connect connection endpoint ip. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Resource labels to represent user provided metadata. @@ -169,6 +187,8 @@ def __init__(__self__, *, pulumi.set(__self__, "description", description) if effective_labels is not None: pulumi.set(__self__, "effective_labels", effective_labels) + if endpoint_global_access is not None: + pulumi.set(__self__, "endpoint_global_access", endpoint_global_access) if endpoint_ip is not None: pulumi.set(__self__, "endpoint_ip", endpoint_ip) if labels is not None: @@ -222,6 +242,18 @@ def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[st def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): pulumi.set(self, "effective_labels", value) + @property + @pulumi.getter(name="endpointGlobalAccess") + def endpoint_global_access(self) -> Optional[pulumi.Input[bool]]: + """ + Enable global access for endpoint attachment. + """ + return pulumi.get(self, "endpoint_global_access") + + @endpoint_global_access.setter + def endpoint_global_access(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "endpoint_global_access", value) + @property @pulumi.getter(name="endpointIp") def endpoint_ip(self) -> Optional[pulumi.Input[str]]: @@ -333,6 +365,7 @@ def __init__(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, description: Optional[pulumi.Input[str]] = None, + endpoint_global_access: Optional[pulumi.Input[bool]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, name: Optional[pulumi.Input[str]] = None, @@ -393,6 +426,7 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] description: Description of the resource. + :param pulumi.Input[bool] endpoint_global_access: Enable global access for endpoint attachment. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Resource labels to represent user provided metadata. **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. @@ -479,6 +513,7 @@ def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, description: Optional[pulumi.Input[str]] = None, + endpoint_global_access: Optional[pulumi.Input[bool]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, name: Optional[pulumi.Input[str]] = None, @@ -494,6 +529,7 @@ def _internal_init(__self__, __props__ = EndpointAttachmentArgs.__new__(EndpointAttachmentArgs) __props__.__dict__["description"] = description + __props__.__dict__["endpoint_global_access"] = endpoint_global_access __props__.__dict__["labels"] = labels if location is None and not opts.urn: raise TypeError("Missing required property 'location'") @@ -523,6 +559,7 @@ def get(resource_name: str, create_time: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + endpoint_global_access: Optional[pulumi.Input[bool]] = None, endpoint_ip: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, @@ -541,6 +578,7 @@ def get(resource_name: str, :param pulumi.Input[str] create_time: Time the Namespace was created in UTC. :param pulumi.Input[str] description: Description of the resource. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[bool] endpoint_global_access: Enable global access for endpoint attachment. :param pulumi.Input[str] endpoint_ip: The Private Service Connect connection endpoint ip. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Resource labels to represent user provided metadata. @@ -565,6 +603,7 @@ def get(resource_name: str, __props__.__dict__["create_time"] = create_time __props__.__dict__["description"] = description __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["endpoint_global_access"] = endpoint_global_access __props__.__dict__["endpoint_ip"] = endpoint_ip __props__.__dict__["labels"] = labels __props__.__dict__["location"] = location @@ -599,6 +638,14 @@ def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: """ return pulumi.get(self, "effective_labels") + @property + @pulumi.getter(name="endpointGlobalAccess") + def endpoint_global_access(self) -> pulumi.Output[Optional[bool]]: + """ + Enable global access for endpoint attachment. + """ + return pulumi.get(self, "endpoint_global_access") + @property @pulumi.getter(name="endpointIp") def endpoint_ip(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/kms/crypto_key.py b/sdk/python/pulumi_gcp/kms/crypto_key.py index a2c8f5b855..e5ac358bd7 100644 --- a/sdk/python/pulumi_gcp/kms/crypto_key.py +++ b/sdk/python/pulumi_gcp/kms/crypto_key.py @@ -52,7 +52,8 @@ def __init__(__self__, *, the format of a decimal number with up to 9 fractional digits, followed by the letter `s` (seconds). It must be greater than a day (ie, 86400). :param pulumi.Input[bool] skip_initial_version_creation: If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - You must use the `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + You must use the `kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + or `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. :param pulumi.Input['CryptoKeyVersionTemplateArgs'] version_template: A template describing settings for new crypto key versions. Structure is documented below. """ @@ -192,7 +193,8 @@ def rotation_period(self, value: Optional[pulumi.Input[str]]): def skip_initial_version_creation(self) -> Optional[pulumi.Input[bool]]: """ If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - You must use the `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + You must use the `kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + or `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. """ return pulumi.get(self, "skip_initial_version_creation") @@ -262,7 +264,8 @@ def __init__(__self__, *, the format of a decimal number with up to 9 fractional digits, followed by the letter `s` (seconds). It must be greater than a day (ie, 86400). :param pulumi.Input[bool] skip_initial_version_creation: If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - You must use the `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + You must use the `kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + or `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. :param pulumi.Input['CryptoKeyVersionTemplateArgs'] version_template: A template describing settings for new crypto key versions. Structure is documented below. """ @@ -448,7 +451,8 @@ def rotation_period(self, value: Optional[pulumi.Input[str]]): def skip_initial_version_creation(self) -> Optional[pulumi.Input[bool]]: """ If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - You must use the `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + You must use the `kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + or `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. """ return pulumi.get(self, "skip_initial_version_creation") @@ -582,7 +586,8 @@ def __init__(__self__, the format of a decimal number with up to 9 fractional digits, followed by the letter `s` (seconds). It must be greater than a day (ie, 86400). :param pulumi.Input[bool] skip_initial_version_creation: If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - You must use the `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + You must use the `kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + or `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. :param pulumi.Input[pulumi.InputType['CryptoKeyVersionTemplateArgs']] version_template: A template describing settings for new crypto key versions. Structure is documented below. """ @@ -773,7 +778,8 @@ def get(resource_name: str, the format of a decimal number with up to 9 fractional digits, followed by the letter `s` (seconds). It must be greater than a day (ie, 86400). :param pulumi.Input[bool] skip_initial_version_creation: If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - You must use the `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + You must use the `kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + or `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. :param pulumi.Input[pulumi.InputType['CryptoKeyVersionTemplateArgs']] version_template: A template describing settings for new crypto key versions. Structure is documented below. """ @@ -907,7 +913,8 @@ def rotation_period(self) -> pulumi.Output[Optional[str]]: def skip_initial_version_creation(self) -> pulumi.Output[Optional[bool]]: """ If set to true, the request will create a CryptoKey without any CryptoKeyVersions. - You must use the `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. + You must use the `kms.CryptoKeyVersion` resource to create a new CryptoKeyVersion + or `kms.KeyRingImportJob` resource to import the CryptoKeyVersion. """ return pulumi.get(self, "skip_initial_version_creation") diff --git a/sdk/python/pulumi_gcp/netapp/_inputs.py b/sdk/python/pulumi_gcp/netapp/_inputs.py index 278f476ff8..3d8eb54a08 100644 --- a/sdk/python/pulumi_gcp/netapp/_inputs.py +++ b/sdk/python/pulumi_gcp/netapp/_inputs.py @@ -10,6 +10,7 @@ from .. import _utilities __all__ = [ + 'VolumeBackupConfigArgs', 'VolumeExportPolicyArgs', 'VolumeExportPolicyRuleArgs', 'VolumeMountOptionArgs', @@ -23,6 +24,63 @@ 'VolumeSnapshotPolicyWeeklyScheduleArgs', ] +@pulumi.input_type +class VolumeBackupConfigArgs: + def __init__(__self__, *, + backup_policies: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + backup_vault: Optional[pulumi.Input[str]] = None, + scheduled_backup_enabled: Optional[pulumi.Input[bool]] = None): + """ + :param pulumi.Input[Sequence[pulumi.Input[str]]] backup_policies: Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + :param pulumi.Input[str] backup_vault: ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + :param pulumi.Input[bool] scheduled_backup_enabled: When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. + """ + if backup_policies is not None: + pulumi.set(__self__, "backup_policies", backup_policies) + if backup_vault is not None: + pulumi.set(__self__, "backup_vault", backup_vault) + if scheduled_backup_enabled is not None: + pulumi.set(__self__, "scheduled_backup_enabled", scheduled_backup_enabled) + + @property + @pulumi.getter(name="backupPolicies") + def backup_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + """ + return pulumi.get(self, "backup_policies") + + @backup_policies.setter + def backup_policies(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "backup_policies", value) + + @property + @pulumi.getter(name="backupVault") + def backup_vault(self) -> Optional[pulumi.Input[str]]: + """ + ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + """ + return pulumi.get(self, "backup_vault") + + @backup_vault.setter + def backup_vault(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "backup_vault", value) + + @property + @pulumi.getter(name="scheduledBackupEnabled") + def scheduled_backup_enabled(self) -> Optional[pulumi.Input[bool]]: + """ + When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. + """ + return pulumi.get(self, "scheduled_backup_enabled") + + @scheduled_backup_enabled.setter + def scheduled_backup_enabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "scheduled_backup_enabled", value) + + @pulumi.input_type class VolumeExportPolicyArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/netapp/outputs.py b/sdk/python/pulumi_gcp/netapp/outputs.py index ea58c31ee9..5755a4e96d 100644 --- a/sdk/python/pulumi_gcp/netapp/outputs.py +++ b/sdk/python/pulumi_gcp/netapp/outputs.py @@ -11,6 +11,7 @@ from . import outputs __all__ = [ + 'VolumeBackupConfig', 'VolumeExportPolicy', 'VolumeExportPolicyRule', 'VolumeMountOption', @@ -24,6 +25,72 @@ 'VolumeSnapshotPolicyWeeklySchedule', ] +@pulumi.output_type +class VolumeBackupConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "backupPolicies": + suggest = "backup_policies" + elif key == "backupVault": + suggest = "backup_vault" + elif key == "scheduledBackupEnabled": + suggest = "scheduled_backup_enabled" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in VolumeBackupConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + VolumeBackupConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + VolumeBackupConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + backup_policies: Optional[Sequence[str]] = None, + backup_vault: Optional[str] = None, + scheduled_backup_enabled: Optional[bool] = None): + """ + :param Sequence[str] backup_policies: Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + :param str backup_vault: ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + :param bool scheduled_backup_enabled: When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. + """ + if backup_policies is not None: + pulumi.set(__self__, "backup_policies", backup_policies) + if backup_vault is not None: + pulumi.set(__self__, "backup_vault", backup_vault) + if scheduled_backup_enabled is not None: + pulumi.set(__self__, "scheduled_backup_enabled", scheduled_backup_enabled) + + @property + @pulumi.getter(name="backupPolicies") + def backup_policies(self) -> Optional[Sequence[str]]: + """ + Specify a single backup policy ID for scheduled backups. Format: `projects/{{projectId}}/locations/{{location}}/backupPolicies/{{backupPolicyName}}` + """ + return pulumi.get(self, "backup_policies") + + @property + @pulumi.getter(name="backupVault") + def backup_vault(self) -> Optional[str]: + """ + ID of the backup vault to use. A backup vault is reqired to create manual or scheduled backups. + Format: `projects/{{projectId}}/locations/{{location}}/backupVaults/{{backupVaultName}}` + """ + return pulumi.get(self, "backup_vault") + + @property + @pulumi.getter(name="scheduledBackupEnabled") + def scheduled_backup_enabled(self) -> Optional[bool]: + """ + When set to true, scheduled backup is enabled on the volume. Omit if no backup_policy is specified. + """ + return pulumi.get(self, "scheduled_backup_enabled") + + @pulumi.output_type class VolumeExportPolicy(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/netapp/volume.py b/sdk/python/pulumi_gcp/netapp/volume.py index 85e2d7f1e1..8c816aab6c 100644 --- a/sdk/python/pulumi_gcp/netapp/volume.py +++ b/sdk/python/pulumi_gcp/netapp/volume.py @@ -21,6 +21,7 @@ def __init__(__self__, *, protocols: pulumi.Input[Sequence[pulumi.Input[str]]], share_name: pulumi.Input[str], storage_pool: pulumi.Input[str], + backup_config: Optional[pulumi.Input['VolumeBackupConfigArgs']] = None, deletion_policy: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, export_policy: Optional[pulumi.Input['VolumeExportPolicyArgs']] = None, @@ -43,6 +44,8 @@ def __init__(__self__, *, Each value may be one of: `NFSV3`, `NFSV4`, `SMB`. :param pulumi.Input[str] share_name: Share name (SMB) or export path (NFS) of the volume. Needs to be unique per location. :param pulumi.Input[str] storage_pool: Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + :param pulumi.Input['VolumeBackupConfigArgs'] backup_config: Backup configuration for the volume. + Structure is documented below. :param pulumi.Input[str] deletion_policy: Policy to determine if the volume should be deleted forcefully. Volumes may have nested snapshot resources. Deleting such a volume will fail. Setting this parameter to FORCE will delete volumes including nested snapshots. @@ -80,6 +83,8 @@ def __init__(__self__, *, pulumi.set(__self__, "protocols", protocols) pulumi.set(__self__, "share_name", share_name) pulumi.set(__self__, "storage_pool", storage_pool) + if backup_config is not None: + pulumi.set(__self__, "backup_config", backup_config) if deletion_policy is not None: pulumi.set(__self__, "deletion_policy", deletion_policy) if description is not None: @@ -170,6 +175,19 @@ def storage_pool(self) -> pulumi.Input[str]: def storage_pool(self, value: pulumi.Input[str]): pulumi.set(self, "storage_pool", value) + @property + @pulumi.getter(name="backupConfig") + def backup_config(self) -> Optional[pulumi.Input['VolumeBackupConfigArgs']]: + """ + Backup configuration for the volume. + Structure is documented below. + """ + return pulumi.get(self, "backup_config") + + @backup_config.setter + def backup_config(self, value: Optional[pulumi.Input['VolumeBackupConfigArgs']]): + pulumi.set(self, "backup_config", value) + @property @pulumi.getter(name="deletionPolicy") def deletion_policy(self) -> Optional[pulumi.Input[str]]: @@ -360,6 +378,7 @@ def unix_permissions(self, value: Optional[pulumi.Input[str]]): class _VolumeState: def __init__(__self__, *, active_directory: Optional[pulumi.Input[str]] = None, + backup_config: Optional[pulumi.Input['VolumeBackupConfigArgs']] = None, capacity_gib: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, deletion_policy: Optional[pulumi.Input[str]] = None, @@ -396,6 +415,8 @@ def __init__(__self__, *, """ Input properties used for looking up and filtering Volume resources. :param pulumi.Input[str] active_directory: Reports the resource name of the Active Directory policy being used. Inherited from storage pool. + :param pulumi.Input['VolumeBackupConfigArgs'] backup_config: Backup configuration for the volume. + Structure is documented below. :param pulumi.Input[str] capacity_gib: Capacity of the volume (in GiB). :param pulumi.Input[str] create_time: Create time of the volume. A timestamp in RFC3339 UTC "Zulu" format. Examples: "2023-06-22T09:13:01.617Z". :param pulumi.Input[str] deletion_policy: Policy to determine if the volume should be deleted forcefully. @@ -452,6 +473,8 @@ def __init__(__self__, *, """ if active_directory is not None: pulumi.set(__self__, "active_directory", active_directory) + if backup_config is not None: + pulumi.set(__self__, "backup_config", backup_config) if capacity_gib is not None: pulumi.set(__self__, "capacity_gib", capacity_gib) if create_time is not None: @@ -531,6 +554,19 @@ def active_directory(self) -> Optional[pulumi.Input[str]]: def active_directory(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "active_directory", value) + @property + @pulumi.getter(name="backupConfig") + def backup_config(self) -> Optional[pulumi.Input['VolumeBackupConfigArgs']]: + """ + Backup configuration for the volume. + Structure is documented below. + """ + return pulumi.get(self, "backup_config") + + @backup_config.setter + def backup_config(self, value: Optional[pulumi.Input['VolumeBackupConfigArgs']]): + pulumi.set(self, "backup_config", value) + @property @pulumi.getter(name="capacityGib") def capacity_gib(self) -> Optional[pulumi.Input[str]]: @@ -953,6 +989,7 @@ class Volume(pulumi.CustomResource): def __init__(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, + backup_config: Optional[pulumi.Input[pulumi.InputType['VolumeBackupConfigArgs']]] = None, capacity_gib: Optional[pulumi.Input[str]] = None, deletion_policy: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, @@ -1038,6 +1075,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['VolumeBackupConfigArgs']] backup_config: Backup configuration for the volume. + Structure is documented below. :param pulumi.Input[str] capacity_gib: Capacity of the volume (in GiB). :param pulumi.Input[str] deletion_policy: Policy to determine if the volume should be deleted forcefully. Volumes may have nested snapshot resources. Deleting such a volume will fail. @@ -1160,6 +1199,7 @@ def __init__(__self__, resource_name: str, *args, **kwargs): def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, + backup_config: Optional[pulumi.Input[pulumi.InputType['VolumeBackupConfigArgs']]] = None, capacity_gib: Optional[pulumi.Input[str]] = None, deletion_policy: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, @@ -1188,6 +1228,7 @@ def _internal_init(__self__, raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') __props__ = VolumeArgs.__new__(VolumeArgs) + __props__.__dict__["backup_config"] = backup_config if capacity_gib is None and not opts.urn: raise TypeError("Missing required property 'capacity_gib'") __props__.__dict__["capacity_gib"] = capacity_gib @@ -1245,6 +1286,7 @@ def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, active_directory: Optional[pulumi.Input[str]] = None, + backup_config: Optional[pulumi.Input[pulumi.InputType['VolumeBackupConfigArgs']]] = None, capacity_gib: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, deletion_policy: Optional[pulumi.Input[str]] = None, @@ -1286,6 +1328,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[str] active_directory: Reports the resource name of the Active Directory policy being used. Inherited from storage pool. + :param pulumi.Input[pulumi.InputType['VolumeBackupConfigArgs']] backup_config: Backup configuration for the volume. + Structure is documented below. :param pulumi.Input[str] capacity_gib: Capacity of the volume (in GiB). :param pulumi.Input[str] create_time: Create time of the volume. A timestamp in RFC3339 UTC "Zulu" format. Examples: "2023-06-22T09:13:01.617Z". :param pulumi.Input[str] deletion_policy: Policy to determine if the volume should be deleted forcefully. @@ -1345,6 +1389,7 @@ def get(resource_name: str, __props__ = _VolumeState.__new__(_VolumeState) __props__.__dict__["active_directory"] = active_directory + __props__.__dict__["backup_config"] = backup_config __props__.__dict__["capacity_gib"] = capacity_gib __props__.__dict__["create_time"] = create_time __props__.__dict__["deletion_policy"] = deletion_policy @@ -1388,6 +1433,15 @@ def active_directory(self) -> pulumi.Output[str]: """ return pulumi.get(self, "active_directory") + @property + @pulumi.getter(name="backupConfig") + def backup_config(self) -> pulumi.Output[Optional['outputs.VolumeBackupConfig']]: + """ + Backup configuration for the volume. + Structure is documented below. + """ + return pulumi.get(self, "backup_config") + @property @pulumi.getter(name="capacityGib") def capacity_gib(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/networkservices/__init__.py b/sdk/python/pulumi_gcp/networkservices/__init__.py index 3c625352bd..8de4daaca5 100644 --- a/sdk/python/pulumi_gcp/networkservices/__init__.py +++ b/sdk/python/pulumi_gcp/networkservices/__init__.py @@ -16,6 +16,7 @@ from .lb_traffic_extension import * from .mesh import * from .service_binding import * +from .service_lb_policies import * from .tcp_route import * from .tls_route import * from ._inputs import * diff --git a/sdk/python/pulumi_gcp/networkservices/_inputs.py b/sdk/python/pulumi_gcp/networkservices/_inputs.py index b7ccae88c5..3296459ffa 100644 --- a/sdk/python/pulumi_gcp/networkservices/_inputs.py +++ b/sdk/python/pulumi_gcp/networkservices/_inputs.py @@ -78,6 +78,8 @@ 'LbTrafficExtensionExtensionChainArgs', 'LbTrafficExtensionExtensionChainExtensionArgs', 'LbTrafficExtensionExtensionChainMatchConditionArgs', + 'ServiceLbPoliciesAutoCapacityDrainArgs', + 'ServiceLbPoliciesFailoverConfigArgs', 'TcpRouteRuleArgs', 'TcpRouteRuleActionArgs', 'TcpRouteRuleActionDestinationArgs', @@ -4726,6 +4728,51 @@ def cel_expression(self, value: pulumi.Input[str]): pulumi.set(self, "cel_expression", value) +@pulumi.input_type +class ServiceLbPoliciesAutoCapacityDrainArgs: + def __init__(__self__, *, + enable: Optional[pulumi.Input[bool]] = None): + """ + :param pulumi.Input[bool] enable: Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + """ + if enable is not None: + pulumi.set(__self__, "enable", enable) + + @property + @pulumi.getter + def enable(self) -> Optional[pulumi.Input[bool]]: + """ + Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + """ + return pulumi.get(self, "enable") + + @enable.setter + def enable(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enable", value) + + +@pulumi.input_type +class ServiceLbPoliciesFailoverConfigArgs: + def __init__(__self__, *, + failover_health_threshold: pulumi.Input[int]): + """ + :param pulumi.Input[int] failover_health_threshold: Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + """ + pulumi.set(__self__, "failover_health_threshold", failover_health_threshold) + + @property + @pulumi.getter(name="failoverHealthThreshold") + def failover_health_threshold(self) -> pulumi.Input[int]: + """ + Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + """ + return pulumi.get(self, "failover_health_threshold") + + @failover_health_threshold.setter + def failover_health_threshold(self, value: pulumi.Input[int]): + pulumi.set(self, "failover_health_threshold", value) + + @pulumi.input_type class TcpRouteRuleArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/networkservices/outputs.py b/sdk/python/pulumi_gcp/networkservices/outputs.py index 02c96fe04c..209da18858 100644 --- a/sdk/python/pulumi_gcp/networkservices/outputs.py +++ b/sdk/python/pulumi_gcp/networkservices/outputs.py @@ -79,6 +79,8 @@ 'LbTrafficExtensionExtensionChain', 'LbTrafficExtensionExtensionChainExtension', 'LbTrafficExtensionExtensionChainMatchCondition', + 'ServiceLbPoliciesAutoCapacityDrain', + 'ServiceLbPoliciesFailoverConfig', 'TcpRouteRule', 'TcpRouteRuleAction', 'TcpRouteRuleActionDestination', @@ -4975,6 +4977,60 @@ def cel_expression(self) -> str: return pulumi.get(self, "cel_expression") +@pulumi.output_type +class ServiceLbPoliciesAutoCapacityDrain(dict): + def __init__(__self__, *, + enable: Optional[bool] = None): + """ + :param bool enable: Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + """ + if enable is not None: + pulumi.set(__self__, "enable", enable) + + @property + @pulumi.getter + def enable(self) -> Optional[bool]: + """ + Optional. If set to 'True', an unhealthy MIG/NEG will be set as drained. - An MIG/NEG is considered unhealthy if less than 25% of the instances/endpoints in the MIG/NEG are healthy. - This option will never result in draining more than 50% of the configured IGs/NEGs for the Backend Service. + """ + return pulumi.get(self, "enable") + + +@pulumi.output_type +class ServiceLbPoliciesFailoverConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "failoverHealthThreshold": + suggest = "failover_health_threshold" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ServiceLbPoliciesFailoverConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ServiceLbPoliciesFailoverConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ServiceLbPoliciesFailoverConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + failover_health_threshold: int): + """ + :param int failover_health_threshold: Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + """ + pulumi.set(__self__, "failover_health_threshold", failover_health_threshold) + + @property + @pulumi.getter(name="failoverHealthThreshold") + def failover_health_threshold(self) -> int: + """ + Optional. The percentage threshold that a load balancer will begin to send traffic to failover backends. If the percentage of endpoints in a MIG/NEG is smaller than this value, traffic would be sent to failover backends if possible. This field should be set to a value between 1 and 99. The default value is 50 for Global external HTTP(S) load balancer (classic) and Proxyless service mesh, and 70 for others. + """ + return pulumi.get(self, "failover_health_threshold") + + @pulumi.output_type class TcpRouteRule(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/networkservices/service_lb_policies.py b/sdk/python/pulumi_gcp/networkservices/service_lb_policies.py new file mode 100644 index 0000000000..cebe0abcbd --- /dev/null +++ b/sdk/python/pulumi_gcp/networkservices/service_lb_policies.py @@ -0,0 +1,782 @@ +# 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__ = ['ServiceLbPoliciesArgs', 'ServiceLbPolicies'] + +@pulumi.input_type +class ServiceLbPoliciesArgs: + def __init__(__self__, *, + location: pulumi.Input[str], + auto_capacity_drain: Optional[pulumi.Input['ServiceLbPoliciesAutoCapacityDrainArgs']] = None, + description: Optional[pulumi.Input[str]] = None, + failover_config: Optional[pulumi.Input['ServiceLbPoliciesFailoverConfigArgs']] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + load_balancing_algorithm: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a ServiceLbPolicies resource. + :param pulumi.Input[str] location: The location of the service lb policy. + + + - - - + :param pulumi.Input['ServiceLbPoliciesAutoCapacityDrainArgs'] auto_capacity_drain: Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + Structure is documented below. + :param pulumi.Input[str] description: A free-text description of the resource. Max length 1024 characters. + :param pulumi.Input['ServiceLbPoliciesFailoverConfigArgs'] failover_config: Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + Structure is documented below. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Set of label tags associated with the ServiceLbPolicy resource. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] load_balancing_algorithm: The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + :param pulumi.Input[str] name: Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + pulumi.set(__self__, "location", location) + if auto_capacity_drain is not None: + pulumi.set(__self__, "auto_capacity_drain", auto_capacity_drain) + if description is not None: + pulumi.set(__self__, "description", description) + if failover_config is not None: + pulumi.set(__self__, "failover_config", failover_config) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if load_balancing_algorithm is not None: + pulumi.set(__self__, "load_balancing_algorithm", load_balancing_algorithm) + 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 of the service lb policy. + + + - - - + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="autoCapacityDrain") + def auto_capacity_drain(self) -> Optional[pulumi.Input['ServiceLbPoliciesAutoCapacityDrainArgs']]: + """ + Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + Structure is documented below. + """ + return pulumi.get(self, "auto_capacity_drain") + + @auto_capacity_drain.setter + def auto_capacity_drain(self, value: Optional[pulumi.Input['ServiceLbPoliciesAutoCapacityDrainArgs']]): + pulumi.set(self, "auto_capacity_drain", value) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + """ + A free-text description of the resource. Max length 1024 characters. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + @property + @pulumi.getter(name="failoverConfig") + def failover_config(self) -> Optional[pulumi.Input['ServiceLbPoliciesFailoverConfigArgs']]: + """ + Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + Structure is documented below. + """ + return pulumi.get(self, "failover_config") + + @failover_config.setter + def failover_config(self, value: Optional[pulumi.Input['ServiceLbPoliciesFailoverConfigArgs']]): + pulumi.set(self, "failover_config", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Set of label tags associated with the ServiceLbPolicy resource. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter(name="loadBalancingAlgorithm") + def load_balancing_algorithm(self) -> Optional[pulumi.Input[str]]: + """ + The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + """ + return pulumi.get(self, "load_balancing_algorithm") + + @load_balancing_algorithm.setter + def load_balancing_algorithm(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "load_balancing_algorithm", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_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 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 _ServiceLbPoliciesState: + def __init__(__self__, *, + auto_capacity_drain: Optional[pulumi.Input['ServiceLbPoliciesAutoCapacityDrainArgs']] = None, + create_time: Optional[pulumi.Input[str]] = None, + description: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + failover_config: Optional[pulumi.Input['ServiceLbPoliciesFailoverConfigArgs']] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + load_balancing_algorithm: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering ServiceLbPolicies resources. + :param pulumi.Input['ServiceLbPoliciesAutoCapacityDrainArgs'] auto_capacity_drain: Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + Structure is documented below. + :param pulumi.Input[str] create_time: Time the ServiceLbPolicy was created in UTC. + :param pulumi.Input[str] description: A free-text description of the resource. Max length 1024 characters. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input['ServiceLbPoliciesFailoverConfigArgs'] failover_config: Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + Structure is documented below. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Set of label tags associated with the ServiceLbPolicy resource. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] load_balancing_algorithm: The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + :param pulumi.Input[str] location: The location of the service lb policy. + + + - - - + :param pulumi.Input[str] name: Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[str] update_time: Time the ServiceLbPolicy was updated in UTC. + """ + if auto_capacity_drain is not None: + pulumi.set(__self__, "auto_capacity_drain", auto_capacity_drain) + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if description is not None: + pulumi.set(__self__, "description", description) + if effective_labels is not None: + pulumi.set(__self__, "effective_labels", effective_labels) + if failover_config is not None: + pulumi.set(__self__, "failover_config", failover_config) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if load_balancing_algorithm is not None: + pulumi.set(__self__, "load_balancing_algorithm", load_balancing_algorithm) + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + if project is not None: + pulumi.set(__self__, "project", project) + if pulumi_labels is not None: + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="autoCapacityDrain") + def auto_capacity_drain(self) -> Optional[pulumi.Input['ServiceLbPoliciesAutoCapacityDrainArgs']]: + """ + Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + Structure is documented below. + """ + return pulumi.get(self, "auto_capacity_drain") + + @auto_capacity_drain.setter + def auto_capacity_drain(self, value: Optional[pulumi.Input['ServiceLbPoliciesAutoCapacityDrainArgs']]): + pulumi.set(self, "auto_capacity_drain", value) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + Time the ServiceLbPolicy 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 description(self) -> Optional[pulumi.Input[str]]: + """ + A free-text description of the resource. Max length 1024 characters. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @effective_labels.setter + def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "effective_labels", value) + + @property + @pulumi.getter(name="failoverConfig") + def failover_config(self) -> Optional[pulumi.Input['ServiceLbPoliciesFailoverConfigArgs']]: + """ + Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + Structure is documented below. + """ + return pulumi.get(self, "failover_config") + + @failover_config.setter + def failover_config(self, value: Optional[pulumi.Input['ServiceLbPoliciesFailoverConfigArgs']]): + pulumi.set(self, "failover_config", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Set of label tags associated with the ServiceLbPolicy resource. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter(name="loadBalancingAlgorithm") + def load_balancing_algorithm(self) -> Optional[pulumi.Input[str]]: + """ + The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + """ + return pulumi.get(self, "load_balancing_algorithm") + + @load_balancing_algorithm.setter + def load_balancing_algorithm(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "load_balancing_algorithm", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location of the service lb policy. + + + - - - + """ + 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 ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_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 project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @pulumi_labels.setter + def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "pulumi_labels", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + Time the ServiceLbPolicy was updated in UTC. + """ + 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 ServiceLbPolicies(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + auto_capacity_drain: Optional[pulumi.Input[pulumi.InputType['ServiceLbPoliciesAutoCapacityDrainArgs']]] = None, + description: Optional[pulumi.Input[str]] = None, + failover_config: Optional[pulumi.Input[pulumi.InputType['ServiceLbPoliciesFailoverConfigArgs']]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + load_balancing_algorithm: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + + ### Network Services Service Lb Policies Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + default = gcp.networkservices.ServiceLbPolicies("default", + name="my-lb-policy", + location="global") + ``` + ### Network Services Service Lb Policies Advanced + + ```python + import pulumi + import pulumi_gcp as gcp + + default = gcp.networkservices.ServiceLbPolicies("default", + name="my-lb-policy", + location="global", + description="my description", + load_balancing_algorithm="SPRAY_TO_REGION", + auto_capacity_drain=gcp.networkservices.ServiceLbPoliciesAutoCapacityDrainArgs( + enable=True, + ), + failover_config=gcp.networkservices.ServiceLbPoliciesFailoverConfigArgs( + failover_health_threshold=70, + ), + labels={ + "foo": "bar", + }) + default_backend_service = gcp.compute.BackendService("default", + name="my-lb-backend", + description="my description", + load_balancing_scheme="INTERNAL_SELF_MANAGED", + protocol="HTTP", + service_lb_policy=default.id.apply(lambda id: f"//networkservices.googleapis.com/{id}")) + ``` + + ## Import + + ServiceLbPolicies can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}}` + + * `{{project}}/{{location}}/{{name}}` + + * `{{location}}/{{name}}` + + When using the `pulumi import` command, ServiceLbPolicies can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}} + ``` + + ```sh + $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{project}}/{{location}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{location}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[pulumi.InputType['ServiceLbPoliciesAutoCapacityDrainArgs']] auto_capacity_drain: Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + Structure is documented below. + :param pulumi.Input[str] description: A free-text description of the resource. Max length 1024 characters. + :param pulumi.Input[pulumi.InputType['ServiceLbPoliciesFailoverConfigArgs']] failover_config: Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + Structure is documented below. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Set of label tags associated with the ServiceLbPolicy resource. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] load_balancing_algorithm: The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + :param pulumi.Input[str] location: The location of the service lb policy. + + + - - - + :param pulumi.Input[str] name: Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ServiceLbPoliciesArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ### Network Services Service Lb Policies Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + default = gcp.networkservices.ServiceLbPolicies("default", + name="my-lb-policy", + location="global") + ``` + ### Network Services Service Lb Policies Advanced + + ```python + import pulumi + import pulumi_gcp as gcp + + default = gcp.networkservices.ServiceLbPolicies("default", + name="my-lb-policy", + location="global", + description="my description", + load_balancing_algorithm="SPRAY_TO_REGION", + auto_capacity_drain=gcp.networkservices.ServiceLbPoliciesAutoCapacityDrainArgs( + enable=True, + ), + failover_config=gcp.networkservices.ServiceLbPoliciesFailoverConfigArgs( + failover_health_threshold=70, + ), + labels={ + "foo": "bar", + }) + default_backend_service = gcp.compute.BackendService("default", + name="my-lb-backend", + description="my description", + load_balancing_scheme="INTERNAL_SELF_MANAGED", + protocol="HTTP", + service_lb_policy=default.id.apply(lambda id: f"//networkservices.googleapis.com/{id}")) + ``` + + ## Import + + ServiceLbPolicies can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}}` + + * `{{project}}/{{location}}/{{name}}` + + * `{{location}}/{{name}}` + + When using the `pulumi import` command, ServiceLbPolicies can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default projects/{{project}}/locations/{{location}}/serviceLbPolicies/{{name}} + ``` + + ```sh + $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{project}}/{{location}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:networkservices/serviceLbPolicies:ServiceLbPolicies default {{location}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param ServiceLbPoliciesArgs 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(ServiceLbPoliciesArgs, 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, + auto_capacity_drain: Optional[pulumi.Input[pulumi.InputType['ServiceLbPoliciesAutoCapacityDrainArgs']]] = None, + description: Optional[pulumi.Input[str]] = None, + failover_config: Optional[pulumi.Input[pulumi.InputType['ServiceLbPoliciesFailoverConfigArgs']]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + load_balancing_algorithm: Optional[pulumi.Input[str]] = 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__ = ServiceLbPoliciesArgs.__new__(ServiceLbPoliciesArgs) + + __props__.__dict__["auto_capacity_drain"] = auto_capacity_drain + __props__.__dict__["description"] = description + __props__.__dict__["failover_config"] = failover_config + __props__.__dict__["labels"] = labels + __props__.__dict__["load_balancing_algorithm"] = load_balancing_algorithm + 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__["effective_labels"] = None + __props__.__dict__["pulumi_labels"] = None + __props__.__dict__["update_time"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["effectiveLabels", "pulumiLabels"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(ServiceLbPolicies, __self__).__init__( + 'gcp:networkservices/serviceLbPolicies:ServiceLbPolicies', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + auto_capacity_drain: Optional[pulumi.Input[pulumi.InputType['ServiceLbPoliciesAutoCapacityDrainArgs']]] = None, + create_time: Optional[pulumi.Input[str]] = None, + description: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + failover_config: Optional[pulumi.Input[pulumi.InputType['ServiceLbPoliciesFailoverConfigArgs']]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + load_balancing_algorithm: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'ServiceLbPolicies': + """ + Get an existing ServiceLbPolicies 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[pulumi.InputType['ServiceLbPoliciesAutoCapacityDrainArgs']] auto_capacity_drain: Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + Structure is documented below. + :param pulumi.Input[str] create_time: Time the ServiceLbPolicy was created in UTC. + :param pulumi.Input[str] description: A free-text description of the resource. Max length 1024 characters. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[pulumi.InputType['ServiceLbPoliciesFailoverConfigArgs']] failover_config: Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + Structure is documented below. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Set of label tags associated with the ServiceLbPolicy resource. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] load_balancing_algorithm: The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + :param pulumi.Input[str] location: The location of the service lb policy. + + + - - - + :param pulumi.Input[str] name: Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[str] update_time: Time the ServiceLbPolicy was updated in UTC. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ServiceLbPoliciesState.__new__(_ServiceLbPoliciesState) + + __props__.__dict__["auto_capacity_drain"] = auto_capacity_drain + __props__.__dict__["create_time"] = create_time + __props__.__dict__["description"] = description + __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["failover_config"] = failover_config + __props__.__dict__["labels"] = labels + __props__.__dict__["load_balancing_algorithm"] = load_balancing_algorithm + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["project"] = project + __props__.__dict__["pulumi_labels"] = pulumi_labels + __props__.__dict__["update_time"] = update_time + return ServiceLbPolicies(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="autoCapacityDrain") + def auto_capacity_drain(self) -> pulumi.Output[Optional['outputs.ServiceLbPoliciesAutoCapacityDrain']]: + """ + Option to specify if an unhealthy MIG/NEG should be considered for global load balancing and traffic routing. + Structure is documented below. + """ + return pulumi.get(self, "auto_capacity_drain") + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + Time the ServiceLbPolicy was created in UTC. + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[str]]: + """ + A free-text description of the resource. Max length 1024 characters. + """ + return pulumi.get(self, "description") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter(name="failoverConfig") + def failover_config(self) -> pulumi.Output[Optional['outputs.ServiceLbPoliciesFailoverConfig']]: + """ + Option to specify health based failover behavior. This is not related to Network load balancer FailoverPolicy. + Structure is documented below. + """ + return pulumi.get(self, "failover_config") + + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + Set of label tags associated with the ServiceLbPolicy resource. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter(name="loadBalancingAlgorithm") + def load_balancing_algorithm(self) -> pulumi.Output[Optional[str]]: + """ + The type of load balancing algorithm to be used. The default behavior is WATERFALL_BY_REGION. + Possible values are: `SPRAY_TO_REGION`, `SPRAY_TO_WORLD`, `WATERFALL_BY_REGION`, `WATERFALL_BY_ZONE`. + """ + return pulumi.get(self, "load_balancing_algorithm") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The location of the service lb policy. + + + - - - + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + Name of the ServiceLbPolicy resource. It matches pattern `projects/{project}/locations/{location}/serviceLbPolicies/{service_lb_policy_name}`. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + Time the ServiceLbPolicy was updated in UTC. + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/provider.py b/sdk/python/pulumi_gcp/provider.py index 5c1a4a7f3b..6d45b46e73 100644 --- a/sdk/python/pulumi_gcp/provider.py +++ b/sdk/python/pulumi_gcp/provider.py @@ -158,6 +158,7 @@ def __init__(__self__, *, secret_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, secure_source_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, security_center_custom_endpoint: Optional[pulumi.Input[str]] = None, + security_center_management_custom_endpoint: Optional[pulumi.Input[str]] = None, security_scanner_custom_endpoint: Optional[pulumi.Input[str]] = None, securityposture_custom_endpoint: Optional[pulumi.Input[str]] = None, service_directory_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -477,6 +478,8 @@ def __init__(__self__, *, pulumi.set(__self__, "secure_source_manager_custom_endpoint", secure_source_manager_custom_endpoint) if security_center_custom_endpoint is not None: pulumi.set(__self__, "security_center_custom_endpoint", security_center_custom_endpoint) + if security_center_management_custom_endpoint is not None: + pulumi.set(__self__, "security_center_management_custom_endpoint", security_center_management_custom_endpoint) if security_scanner_custom_endpoint is not None: pulumi.set(__self__, "security_scanner_custom_endpoint", security_scanner_custom_endpoint) if securityposture_custom_endpoint is not None: @@ -1819,6 +1822,15 @@ def security_center_custom_endpoint(self) -> Optional[pulumi.Input[str]]: def security_center_custom_endpoint(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "security_center_custom_endpoint", value) + @property + @pulumi.getter(name="securityCenterManagementCustomEndpoint") + def security_center_management_custom_endpoint(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "security_center_management_custom_endpoint") + + @security_center_management_custom_endpoint.setter + def security_center_management_custom_endpoint(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "security_center_management_custom_endpoint", value) + @property @pulumi.getter(name="securityScannerCustomEndpoint") def security_scanner_custom_endpoint(self) -> Optional[pulumi.Input[str]]: @@ -2202,6 +2214,7 @@ def __init__(__self__, secret_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, secure_source_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, security_center_custom_endpoint: Optional[pulumi.Input[str]] = None, + security_center_management_custom_endpoint: Optional[pulumi.Input[str]] = None, security_scanner_custom_endpoint: Optional[pulumi.Input[str]] = None, securityposture_custom_endpoint: Optional[pulumi.Input[str]] = None, service_directory_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -2408,6 +2421,7 @@ def _internal_init(__self__, secret_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, secure_source_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, security_center_custom_endpoint: Optional[pulumi.Input[str]] = None, + security_center_management_custom_endpoint: Optional[pulumi.Input[str]] = None, security_scanner_custom_endpoint: Optional[pulumi.Input[str]] = None, securityposture_custom_endpoint: Optional[pulumi.Input[str]] = None, service_directory_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -2590,6 +2604,7 @@ def _internal_init(__self__, __props__.__dict__["secret_manager_custom_endpoint"] = secret_manager_custom_endpoint __props__.__dict__["secure_source_manager_custom_endpoint"] = secure_source_manager_custom_endpoint __props__.__dict__["security_center_custom_endpoint"] = security_center_custom_endpoint + __props__.__dict__["security_center_management_custom_endpoint"] = security_center_management_custom_endpoint __props__.__dict__["security_scanner_custom_endpoint"] = security_scanner_custom_endpoint __props__.__dict__["securityposture_custom_endpoint"] = securityposture_custom_endpoint __props__.__dict__["service_directory_custom_endpoint"] = service_directory_custom_endpoint @@ -3311,6 +3326,11 @@ def secure_source_manager_custom_endpoint(self) -> pulumi.Output[Optional[str]]: def security_center_custom_endpoint(self) -> pulumi.Output[Optional[str]]: return pulumi.get(self, "security_center_custom_endpoint") + @property + @pulumi.getter(name="securityCenterManagementCustomEndpoint") + def security_center_management_custom_endpoint(self) -> pulumi.Output[Optional[str]]: + return pulumi.get(self, "security_center_management_custom_endpoint") + @property @pulumi.getter(name="securityScannerCustomEndpoint") def security_scanner_custom_endpoint(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/redis/_inputs.py b/sdk/python/pulumi_gcp/redis/_inputs.py index 59b36cf56c..6747264b80 100644 --- a/sdk/python/pulumi_gcp/redis/_inputs.py +++ b/sdk/python/pulumi_gcp/redis/_inputs.py @@ -16,6 +16,7 @@ 'ClusterPscConnectionArgs', 'ClusterStateInfoArgs', 'ClusterStateInfoUpdateInfoArgs', + 'ClusterZoneDistributionConfigArgs', 'InstanceMaintenancePolicyArgs', 'InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs', 'InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs', @@ -288,6 +289,49 @@ def target_shard_count(self, value: Optional[pulumi.Input[int]]): pulumi.set(self, "target_shard_count", value) +@pulumi.input_type +class ClusterZoneDistributionConfigArgs: + def __init__(__self__, *, + mode: Optional[pulumi.Input[str]] = None, + zone: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] mode: Immutable. The mode for zone distribution for Memorystore Redis cluster. + If not provided, MULTI_ZONE will be used as default + Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`. + :param pulumi.Input[str] zone: Immutable. The zone for single zone Memorystore Redis cluster. + """ + if mode is not None: + pulumi.set(__self__, "mode", mode) + if zone is not None: + pulumi.set(__self__, "zone", zone) + + @property + @pulumi.getter + def mode(self) -> Optional[pulumi.Input[str]]: + """ + Immutable. The mode for zone distribution for Memorystore Redis cluster. + If not provided, MULTI_ZONE will be used as default + Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`. + """ + return pulumi.get(self, "mode") + + @mode.setter + def mode(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mode", value) + + @property + @pulumi.getter + def zone(self) -> Optional[pulumi.Input[str]]: + """ + Immutable. The zone for single zone Memorystore Redis cluster. + """ + return pulumi.get(self, "zone") + + @zone.setter + def zone(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "zone", value) + + @pulumi.input_type class InstanceMaintenancePolicyArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/redis/cluster.py b/sdk/python/pulumi_gcp/redis/cluster.py index 54d64fc6f5..557a4e2077 100644 --- a/sdk/python/pulumi_gcp/redis/cluster.py +++ b/sdk/python/pulumi_gcp/redis/cluster.py @@ -25,7 +25,8 @@ def __init__(__self__, *, redis_configs: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, region: Optional[pulumi.Input[str]] = None, replica_count: Optional[pulumi.Input[int]] = None, - transit_encryption_mode: Optional[pulumi.Input[str]] = None): + transit_encryption_mode: Optional[pulumi.Input[str]] = None, + zone_distribution_config: Optional[pulumi.Input['ClusterZoneDistributionConfigArgs']] = None): """ The set of arguments for constructing a Cluster resource. :param pulumi.Input[Sequence[pulumi.Input['ClusterPscConfigArgs']]] psc_configs: Required. Each PscConfig configures the consumer network where two @@ -48,6 +49,7 @@ def __init__(__self__, *, :param pulumi.Input[str] transit_encryption_mode: Optional. The in-transit encryption for the Redis cluster. If not provided, encryption is disabled for the cluster. Default value: "TRANSIT_ENCRYPTION_MODE_DISABLED" Possible values: ["TRANSIT_ENCRYPTION_MODE_UNSPECIFIED", "TRANSIT_ENCRYPTION_MODE_DISABLED", "TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION"] + :param pulumi.Input['ClusterZoneDistributionConfigArgs'] zone_distribution_config: Immutable. Zone distribution config for Memorystore Redis cluster. """ pulumi.set(__self__, "psc_configs", psc_configs) pulumi.set(__self__, "shard_count", shard_count) @@ -67,6 +69,8 @@ def __init__(__self__, *, pulumi.set(__self__, "replica_count", replica_count) if transit_encryption_mode is not None: pulumi.set(__self__, "transit_encryption_mode", transit_encryption_mode) + if zone_distribution_config is not None: + pulumi.set(__self__, "zone_distribution_config", zone_distribution_config) @property @pulumi.getter(name="pscConfigs") @@ -196,6 +200,18 @@ def transit_encryption_mode(self) -> Optional[pulumi.Input[str]]: def transit_encryption_mode(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "transit_encryption_mode", value) + @property + @pulumi.getter(name="zoneDistributionConfig") + def zone_distribution_config(self) -> Optional[pulumi.Input['ClusterZoneDistributionConfigArgs']]: + """ + Immutable. Zone distribution config for Memorystore Redis cluster. + """ + return pulumi.get(self, "zone_distribution_config") + + @zone_distribution_config.setter + def zone_distribution_config(self, value: Optional[pulumi.Input['ClusterZoneDistributionConfigArgs']]): + pulumi.set(self, "zone_distribution_config", value) + @pulumi.input_type class _ClusterState: @@ -217,7 +233,8 @@ def __init__(__self__, *, state: Optional[pulumi.Input[str]] = None, state_infos: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterStateInfoArgs']]]] = None, transit_encryption_mode: Optional[pulumi.Input[str]] = None, - uid: Optional[pulumi.Input[str]] = None): + uid: Optional[pulumi.Input[str]] = None, + zone_distribution_config: Optional[pulumi.Input['ClusterZoneDistributionConfigArgs']] = None): """ Input properties used for looking up and filtering Cluster resources. :param pulumi.Input[str] authorization_mode: Optional. The authorization mode of the Redis cluster. If not provided, auth feature is disabled for the cluster. @@ -255,6 +272,7 @@ def __init__(__self__, *, Default value: "TRANSIT_ENCRYPTION_MODE_DISABLED" Possible values: ["TRANSIT_ENCRYPTION_MODE_UNSPECIFIED", "TRANSIT_ENCRYPTION_MODE_DISABLED", "TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION"] :param pulumi.Input[str] uid: System assigned, unique identifier for the cluster. + :param pulumi.Input['ClusterZoneDistributionConfigArgs'] zone_distribution_config: Immutable. Zone distribution config for Memorystore Redis cluster. """ if authorization_mode is not None: pulumi.set(__self__, "authorization_mode", authorization_mode) @@ -292,6 +310,8 @@ def __init__(__self__, *, pulumi.set(__self__, "transit_encryption_mode", transit_encryption_mode) if uid is not None: pulumi.set(__self__, "uid", uid) + if zone_distribution_config is not None: + pulumi.set(__self__, "zone_distribution_config", zone_distribution_config) @property @pulumi.getter(name="authorizationMode") @@ -524,6 +544,18 @@ def uid(self) -> Optional[pulumi.Input[str]]: def uid(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "uid", value) + @property + @pulumi.getter(name="zoneDistributionConfig") + def zone_distribution_config(self) -> Optional[pulumi.Input['ClusterZoneDistributionConfigArgs']]: + """ + Immutable. Zone distribution config for Memorystore Redis cluster. + """ + return pulumi.get(self, "zone_distribution_config") + + @zone_distribution_config.setter + def zone_distribution_config(self, value: Optional[pulumi.Input['ClusterZoneDistributionConfigArgs']]): + pulumi.set(self, "zone_distribution_config", value) + class Cluster(pulumi.CustomResource): @overload @@ -540,6 +572,7 @@ def __init__(__self__, replica_count: Optional[pulumi.Input[int]] = None, shard_count: Optional[pulumi.Input[int]] = None, transit_encryption_mode: Optional[pulumi.Input[str]] = None, + zone_distribution_config: Optional[pulumi.Input[pulumi.InputType['ClusterZoneDistributionConfigArgs']]] = None, __props__=None): """ A Google Cloud Redis Cluster instance. @@ -589,6 +622,45 @@ def __init__(__self__, redis_configs={ "maxmemory-policy": "volatile-ttl", }, + zone_distribution_config=gcp.redis.ClusterZoneDistributionConfigArgs( + mode="MULTI_ZONE", + ), + opts=pulumi.ResourceOptions(depends_on=[default])) + ``` + ### Redis Cluster Ha Single Zone + + ```python + import pulumi + import pulumi_gcp as gcp + + producer_net = gcp.compute.Network("producer_net", + name="mynetwork", + auto_create_subnetworks=False) + producer_subnet = gcp.compute.Subnetwork("producer_subnet", + name="mysubnet", + ip_cidr_range="10.0.0.248/29", + region="us-central1", + network=producer_net.id) + default = gcp.networkconnectivity.ServiceConnectionPolicy("default", + name="mypolicy", + location="us-central1", + service_class="gcp-memorystore-redis", + description="my basic service connection policy", + network=producer_net.id, + psc_config=gcp.networkconnectivity.ServiceConnectionPolicyPscConfigArgs( + subnetworks=[producer_subnet.id], + )) + cluster_ha_single_zone = gcp.redis.Cluster("cluster-ha-single-zone", + name="ha-cluster-single-zone", + shard_count=3, + psc_configs=[gcp.redis.ClusterPscConfigArgs( + network=producer_net.id, + )], + region="us-central1", + zone_distribution_config=gcp.redis.ClusterZoneDistributionConfigArgs( + mode="SINGLE_ZONE", + zone="us-central1-f", + ), opts=pulumi.ResourceOptions(depends_on=[default])) ``` @@ -644,6 +716,7 @@ def __init__(__self__, :param pulumi.Input[str] transit_encryption_mode: Optional. The in-transit encryption for the Redis cluster. If not provided, encryption is disabled for the cluster. Default value: "TRANSIT_ENCRYPTION_MODE_DISABLED" Possible values: ["TRANSIT_ENCRYPTION_MODE_UNSPECIFIED", "TRANSIT_ENCRYPTION_MODE_DISABLED", "TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION"] + :param pulumi.Input[pulumi.InputType['ClusterZoneDistributionConfigArgs']] zone_distribution_config: Immutable. Zone distribution config for Memorystore Redis cluster. """ ... @overload @@ -699,6 +772,45 @@ def __init__(__self__, redis_configs={ "maxmemory-policy": "volatile-ttl", }, + zone_distribution_config=gcp.redis.ClusterZoneDistributionConfigArgs( + mode="MULTI_ZONE", + ), + opts=pulumi.ResourceOptions(depends_on=[default])) + ``` + ### Redis Cluster Ha Single Zone + + ```python + import pulumi + import pulumi_gcp as gcp + + producer_net = gcp.compute.Network("producer_net", + name="mynetwork", + auto_create_subnetworks=False) + producer_subnet = gcp.compute.Subnetwork("producer_subnet", + name="mysubnet", + ip_cidr_range="10.0.0.248/29", + region="us-central1", + network=producer_net.id) + default = gcp.networkconnectivity.ServiceConnectionPolicy("default", + name="mypolicy", + location="us-central1", + service_class="gcp-memorystore-redis", + description="my basic service connection policy", + network=producer_net.id, + psc_config=gcp.networkconnectivity.ServiceConnectionPolicyPscConfigArgs( + subnetworks=[producer_subnet.id], + )) + cluster_ha_single_zone = gcp.redis.Cluster("cluster-ha-single-zone", + name="ha-cluster-single-zone", + shard_count=3, + psc_configs=[gcp.redis.ClusterPscConfigArgs( + network=producer_net.id, + )], + region="us-central1", + zone_distribution_config=gcp.redis.ClusterZoneDistributionConfigArgs( + mode="SINGLE_ZONE", + zone="us-central1-f", + ), opts=pulumi.ResourceOptions(depends_on=[default])) ``` @@ -757,6 +869,7 @@ def _internal_init(__self__, replica_count: Optional[pulumi.Input[int]] = None, shard_count: Optional[pulumi.Input[int]] = None, transit_encryption_mode: Optional[pulumi.Input[str]] = None, + zone_distribution_config: Optional[pulumi.Input[pulumi.InputType['ClusterZoneDistributionConfigArgs']]] = None, __props__=None): opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) if not isinstance(opts, pulumi.ResourceOptions): @@ -780,6 +893,7 @@ def _internal_init(__self__, raise TypeError("Missing required property 'shard_count'") __props__.__dict__["shard_count"] = shard_count __props__.__dict__["transit_encryption_mode"] = transit_encryption_mode + __props__.__dict__["zone_distribution_config"] = zone_distribution_config __props__.__dict__["create_time"] = None __props__.__dict__["discovery_endpoints"] = None __props__.__dict__["precise_size_gb"] = None @@ -815,7 +929,8 @@ def get(resource_name: str, state: Optional[pulumi.Input[str]] = None, state_infos: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ClusterStateInfoArgs']]]]] = None, transit_encryption_mode: Optional[pulumi.Input[str]] = None, - uid: Optional[pulumi.Input[str]] = None) -> 'Cluster': + uid: Optional[pulumi.Input[str]] = None, + zone_distribution_config: Optional[pulumi.Input[pulumi.InputType['ClusterZoneDistributionConfigArgs']]] = None) -> 'Cluster': """ Get an existing Cluster resource's state with the given name, id, and optional extra properties used to qualify the lookup. @@ -858,6 +973,7 @@ def get(resource_name: str, Default value: "TRANSIT_ENCRYPTION_MODE_DISABLED" Possible values: ["TRANSIT_ENCRYPTION_MODE_UNSPECIFIED", "TRANSIT_ENCRYPTION_MODE_DISABLED", "TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION"] :param pulumi.Input[str] uid: System assigned, unique identifier for the cluster. + :param pulumi.Input[pulumi.InputType['ClusterZoneDistributionConfigArgs']] zone_distribution_config: Immutable. Zone distribution config for Memorystore Redis cluster. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -881,6 +997,7 @@ def get(resource_name: str, __props__.__dict__["state_infos"] = state_infos __props__.__dict__["transit_encryption_mode"] = transit_encryption_mode __props__.__dict__["uid"] = uid + __props__.__dict__["zone_distribution_config"] = zone_distribution_config return Cluster(resource_name, opts=opts, __props__=__props__) @property @@ -1042,3 +1159,11 @@ def uid(self) -> pulumi.Output[str]: """ return pulumi.get(self, "uid") + @property + @pulumi.getter(name="zoneDistributionConfig") + def zone_distribution_config(self) -> pulumi.Output[Optional['outputs.ClusterZoneDistributionConfig']]: + """ + Immutable. Zone distribution config for Memorystore Redis cluster. + """ + return pulumi.get(self, "zone_distribution_config") + diff --git a/sdk/python/pulumi_gcp/redis/outputs.py b/sdk/python/pulumi_gcp/redis/outputs.py index 8d3e154f06..7d6625b6d4 100644 --- a/sdk/python/pulumi_gcp/redis/outputs.py +++ b/sdk/python/pulumi_gcp/redis/outputs.py @@ -17,6 +17,7 @@ 'ClusterPscConnection', 'ClusterStateInfo', 'ClusterStateInfoUpdateInfo', + 'ClusterZoneDistributionConfig', 'InstanceMaintenancePolicy', 'InstanceMaintenancePolicyWeeklyMaintenanceWindow', 'InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTime', @@ -318,6 +319,41 @@ def target_shard_count(self) -> Optional[int]: return pulumi.get(self, "target_shard_count") +@pulumi.output_type +class ClusterZoneDistributionConfig(dict): + def __init__(__self__, *, + mode: Optional[str] = None, + zone: Optional[str] = None): + """ + :param str mode: Immutable. The mode for zone distribution for Memorystore Redis cluster. + If not provided, MULTI_ZONE will be used as default + Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`. + :param str zone: Immutable. The zone for single zone Memorystore Redis cluster. + """ + if mode is not None: + pulumi.set(__self__, "mode", mode) + if zone is not None: + pulumi.set(__self__, "zone", zone) + + @property + @pulumi.getter + def mode(self) -> Optional[str]: + """ + Immutable. The mode for zone distribution for Memorystore Redis cluster. + If not provided, MULTI_ZONE will be used as default + Possible values are: `MULTI_ZONE`, `SINGLE_ZONE`. + """ + return pulumi.get(self, "mode") + + @property + @pulumi.getter + def zone(self) -> Optional[str]: + """ + Immutable. The zone for single zone Memorystore Redis cluster. + """ + return pulumi.get(self, "zone") + + @pulumi.output_type class InstanceMaintenancePolicy(dict): @staticmethod diff --git a/sdk/python/pulumi_gcp/secretmanager/_inputs.py b/sdk/python/pulumi_gcp/secretmanager/_inputs.py index cee51da04f..36676db592 100644 --- a/sdk/python/pulumi_gcp/secretmanager/_inputs.py +++ b/sdk/python/pulumi_gcp/secretmanager/_inputs.py @@ -28,6 +28,10 @@ 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. + """ pulumi.set(__self__, "expression", expression) pulumi.set(__self__, "title", title) if description is not None: @@ -36,6 +40,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 @@ -45,6 +52,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 @@ -67,6 +77,10 @@ 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. + """ pulumi.set(__self__, "expression", expression) pulumi.set(__self__, "title", title) if description is not None: @@ -75,6 +89,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 @@ -84,6 +101,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 diff --git a/sdk/python/pulumi_gcp/secretmanager/outputs.py b/sdk/python/pulumi_gcp/secretmanager/outputs.py index c1a893a137..6dbf7c3c59 100644 --- a/sdk/python/pulumi_gcp/secretmanager/outputs.py +++ b/sdk/python/pulumi_gcp/secretmanager/outputs.py @@ -46,6 +46,10 @@ 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. + """ pulumi.set(__self__, "expression", expression) pulumi.set(__self__, "title", title) if description is not None: @@ -54,11 +58,17 @@ 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 @@ -73,6 +83,10 @@ 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. + """ pulumi.set(__self__, "expression", expression) pulumi.set(__self__, "title", title) if description is not None: @@ -81,11 +95,17 @@ 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 diff --git a/sdk/python/pulumi_gcp/secretmanager/secret_iam_binding.py b/sdk/python/pulumi_gcp/secretmanager/secret_iam_binding.py index 6962d49c24..b8a38c9a12 100644 --- a/sdk/python/pulumi_gcp/secretmanager/secret_iam_binding.py +++ b/sdk/python/pulumi_gcp/secretmanager/secret_iam_binding.py @@ -37,6 +37,8 @@ def __init__(__self__, *, :param pulumi.Input[str] role: The role that should be applied. Only one `secretmanager.SecretIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. + :param pulumi.Input['SecretIamBindingConditionArgs'] condition: An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + 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 project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used. """ @@ -96,6 +98,10 @@ def secret_id(self, value: pulumi.Input[str]): @property @pulumi.getter def condition(self) -> Optional[pulumi.Input['SecretIamBindingConditionArgs']]: + """ + 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 @@ -127,6 +133,8 @@ def __init__(__self__, *, secret_id: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering SecretIamBinding resources. + :param pulumi.Input['SecretIamBindingConditionArgs'] 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 IAM policy. :param pulumi.Input[Sequence[pulumi.Input[str]]] members: Identities that will be granted the privilege in `role`. Each entry can have one of the following values: @@ -161,6 +169,10 @@ def __init__(__self__, *, @property @pulumi.getter def condition(self) -> Optional[pulumi.Input['SecretIamBindingConditionArgs']]: + """ + 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 @@ -264,6 +276,8 @@ def __init__(__self__, > **Note:** `secretmanager.SecretIamBinding` resources **can be** used in conjunction with `secretmanager.SecretIamMember` 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. + ## secretmanager.SecretIamPolicy ```python @@ -280,6 +294,26 @@ def __init__(__self__, 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( + role="roles/secretmanager.secretAccessor", + 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.secretmanager.SecretIamPolicy("policy", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + policy_data=admin.policy_data) + ``` ## secretmanager.SecretIamBinding ```python @@ -293,6 +327,23 @@ def __init__(__self__, members=["user:jane@example.com"]) ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + binding = gcp.secretmanager.SecretIamBinding("binding", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + members=["user:jane@example.com"], + condition=gcp.secretmanager.SecretIamBindingConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` ## secretmanager.SecretIamMember ```python @@ -306,6 +357,24 @@ def __init__(__self__, member="user:jane@example.com") ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + member = gcp.secretmanager.SecretIamMember("member", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + member="user:jane@example.com", + condition=gcp.secretmanager.SecretIamMemberConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` + ## secretmanager.SecretIamPolicy ```python @@ -322,6 +391,26 @@ def __init__(__self__, 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( + role="roles/secretmanager.secretAccessor", + 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.secretmanager.SecretIamPolicy("policy", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + policy_data=admin.policy_data) + ``` ## secretmanager.SecretIamBinding ```python @@ -335,6 +424,23 @@ def __init__(__self__, members=["user:jane@example.com"]) ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + binding = gcp.secretmanager.SecretIamBinding("binding", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + members=["user:jane@example.com"], + condition=gcp.secretmanager.SecretIamBindingConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` ## secretmanager.SecretIamMember ```python @@ -348,6 +454,24 @@ def __init__(__self__, member="user:jane@example.com") ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + member = gcp.secretmanager.SecretIamMember("member", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + member="user:jane@example.com", + condition=gcp.secretmanager.SecretIamMemberConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` + ## Import For all import syntaxes, the "resource in question" can take any of the following forms: @@ -386,6 +510,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['SecretIamBindingConditionArgs']] condition: An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input[str]]] members: Identities that will be granted the privilege in `role`. Each entry can have one of the following values: * **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account. @@ -424,6 +550,8 @@ def __init__(__self__, > **Note:** `secretmanager.SecretIamBinding` resources **can be** used in conjunction with `secretmanager.SecretIamMember` 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. + ## secretmanager.SecretIamPolicy ```python @@ -440,6 +568,26 @@ def __init__(__self__, 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( + role="roles/secretmanager.secretAccessor", + 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.secretmanager.SecretIamPolicy("policy", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + policy_data=admin.policy_data) + ``` ## secretmanager.SecretIamBinding ```python @@ -453,6 +601,23 @@ def __init__(__self__, members=["user:jane@example.com"]) ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + binding = gcp.secretmanager.SecretIamBinding("binding", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + members=["user:jane@example.com"], + condition=gcp.secretmanager.SecretIamBindingConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` ## secretmanager.SecretIamMember ```python @@ -466,6 +631,24 @@ def __init__(__self__, member="user:jane@example.com") ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + member = gcp.secretmanager.SecretIamMember("member", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + member="user:jane@example.com", + condition=gcp.secretmanager.SecretIamMemberConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` + ## secretmanager.SecretIamPolicy ```python @@ -482,6 +665,26 @@ def __init__(__self__, 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( + role="roles/secretmanager.secretAccessor", + 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.secretmanager.SecretIamPolicy("policy", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + policy_data=admin.policy_data) + ``` ## secretmanager.SecretIamBinding ```python @@ -495,6 +698,23 @@ def __init__(__self__, members=["user:jane@example.com"]) ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + binding = gcp.secretmanager.SecretIamBinding("binding", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + members=["user:jane@example.com"], + condition=gcp.secretmanager.SecretIamBindingConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` ## secretmanager.SecretIamMember ```python @@ -508,6 +728,24 @@ def __init__(__self__, member="user:jane@example.com") ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + member = gcp.secretmanager.SecretIamMember("member", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + member="user:jane@example.com", + condition=gcp.secretmanager.SecretIamMemberConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` + ## Import For all import syntaxes, the "resource in question" can take any of the following forms: @@ -608,6 +846,8 @@ def get(resource_name: str, :param str resource_name: The unique name of the resulting resource. :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[pulumi.InputType['SecretIamBindingConditionArgs']] 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 IAM policy. :param pulumi.Input[Sequence[pulumi.Input[str]]] members: Identities that will be granted the privilege in `role`. Each entry can have one of the following values: @@ -641,6 +881,10 @@ def get(resource_name: str, @property @pulumi.getter def condition(self) -> pulumi.Output[Optional['outputs.SecretIamBindingCondition']]: + """ + 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 diff --git a/sdk/python/pulumi_gcp/secretmanager/secret_iam_member.py b/sdk/python/pulumi_gcp/secretmanager/secret_iam_member.py index 326869fadb..bd684c543c 100644 --- a/sdk/python/pulumi_gcp/secretmanager/secret_iam_member.py +++ b/sdk/python/pulumi_gcp/secretmanager/secret_iam_member.py @@ -37,6 +37,8 @@ def __init__(__self__, *, :param pulumi.Input[str] role: The role that should be applied. Only one `secretmanager.SecretIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. + :param pulumi.Input['SecretIamMemberConditionArgs'] condition: An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + 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 project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used. """ @@ -96,6 +98,10 @@ def secret_id(self, value: pulumi.Input[str]): @property @pulumi.getter def condition(self) -> Optional[pulumi.Input['SecretIamMemberConditionArgs']]: + """ + 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 @@ -127,6 +133,8 @@ def __init__(__self__, *, secret_id: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering SecretIamMember resources. + :param pulumi.Input['SecretIamMemberConditionArgs'] 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 IAM policy. :param pulumi.Input[str] member: Identities that will be granted the privilege in `role`. Each entry can have one of the following values: @@ -161,6 +169,10 @@ def __init__(__self__, *, @property @pulumi.getter def condition(self) -> Optional[pulumi.Input['SecretIamMemberConditionArgs']]: + """ + 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 @@ -264,6 +276,8 @@ def __init__(__self__, > **Note:** `secretmanager.SecretIamBinding` resources **can be** used in conjunction with `secretmanager.SecretIamMember` 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. + ## secretmanager.SecretIamPolicy ```python @@ -280,6 +294,26 @@ def __init__(__self__, 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( + role="roles/secretmanager.secretAccessor", + 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.secretmanager.SecretIamPolicy("policy", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + policy_data=admin.policy_data) + ``` ## secretmanager.SecretIamBinding ```python @@ -293,6 +327,23 @@ def __init__(__self__, members=["user:jane@example.com"]) ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + binding = gcp.secretmanager.SecretIamBinding("binding", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + members=["user:jane@example.com"], + condition=gcp.secretmanager.SecretIamBindingConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` ## secretmanager.SecretIamMember ```python @@ -306,6 +357,24 @@ def __init__(__self__, member="user:jane@example.com") ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + member = gcp.secretmanager.SecretIamMember("member", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + member="user:jane@example.com", + condition=gcp.secretmanager.SecretIamMemberConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` + ## secretmanager.SecretIamPolicy ```python @@ -322,6 +391,26 @@ def __init__(__self__, 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( + role="roles/secretmanager.secretAccessor", + 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.secretmanager.SecretIamPolicy("policy", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + policy_data=admin.policy_data) + ``` ## secretmanager.SecretIamBinding ```python @@ -335,6 +424,23 @@ def __init__(__self__, members=["user:jane@example.com"]) ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + binding = gcp.secretmanager.SecretIamBinding("binding", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + members=["user:jane@example.com"], + condition=gcp.secretmanager.SecretIamBindingConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` ## secretmanager.SecretIamMember ```python @@ -348,6 +454,24 @@ def __init__(__self__, member="user:jane@example.com") ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + member = gcp.secretmanager.SecretIamMember("member", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + member="user:jane@example.com", + condition=gcp.secretmanager.SecretIamMemberConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` + ## Import For all import syntaxes, the "resource in question" can take any of the following forms: @@ -386,6 +510,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['SecretIamMemberConditionArgs']] condition: An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. :param pulumi.Input[str] member: Identities that will be granted the privilege in `role`. Each entry can have one of the following values: * **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account. @@ -424,6 +550,8 @@ def __init__(__self__, > **Note:** `secretmanager.SecretIamBinding` resources **can be** used in conjunction with `secretmanager.SecretIamMember` 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. + ## secretmanager.SecretIamPolicy ```python @@ -440,6 +568,26 @@ def __init__(__self__, 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( + role="roles/secretmanager.secretAccessor", + 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.secretmanager.SecretIamPolicy("policy", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + policy_data=admin.policy_data) + ``` ## secretmanager.SecretIamBinding ```python @@ -453,6 +601,23 @@ def __init__(__self__, members=["user:jane@example.com"]) ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + binding = gcp.secretmanager.SecretIamBinding("binding", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + members=["user:jane@example.com"], + condition=gcp.secretmanager.SecretIamBindingConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` ## secretmanager.SecretIamMember ```python @@ -466,6 +631,24 @@ def __init__(__self__, member="user:jane@example.com") ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + member = gcp.secretmanager.SecretIamMember("member", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + member="user:jane@example.com", + condition=gcp.secretmanager.SecretIamMemberConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` + ## secretmanager.SecretIamPolicy ```python @@ -482,6 +665,26 @@ def __init__(__self__, 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( + role="roles/secretmanager.secretAccessor", + 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.secretmanager.SecretIamPolicy("policy", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + policy_data=admin.policy_data) + ``` ## secretmanager.SecretIamBinding ```python @@ -495,6 +698,23 @@ def __init__(__self__, members=["user:jane@example.com"]) ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + binding = gcp.secretmanager.SecretIamBinding("binding", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + members=["user:jane@example.com"], + condition=gcp.secretmanager.SecretIamBindingConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` ## secretmanager.SecretIamMember ```python @@ -508,6 +728,24 @@ def __init__(__self__, member="user:jane@example.com") ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + member = gcp.secretmanager.SecretIamMember("member", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + member="user:jane@example.com", + condition=gcp.secretmanager.SecretIamMemberConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` + ## Import For all import syntaxes, the "resource in question" can take any of the following forms: @@ -608,6 +846,8 @@ def get(resource_name: str, :param str resource_name: The unique name of the resulting resource. :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[pulumi.InputType['SecretIamMemberConditionArgs']] 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 IAM policy. :param pulumi.Input[str] member: Identities that will be granted the privilege in `role`. Each entry can have one of the following values: @@ -641,6 +881,10 @@ def get(resource_name: str, @property @pulumi.getter def condition(self) -> pulumi.Output[Optional['outputs.SecretIamMemberCondition']]: + """ + 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 diff --git a/sdk/python/pulumi_gcp/secretmanager/secret_iam_policy.py b/sdk/python/pulumi_gcp/secretmanager/secret_iam_policy.py index 85ad995438..3e577910b8 100644 --- a/sdk/python/pulumi_gcp/secretmanager/secret_iam_policy.py +++ b/sdk/python/pulumi_gcp/secretmanager/secret_iam_policy.py @@ -161,6 +161,8 @@ def __init__(__self__, > **Note:** `secretmanager.SecretIamBinding` resources **can be** used in conjunction with `secretmanager.SecretIamMember` 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. + ## secretmanager.SecretIamPolicy ```python @@ -177,6 +179,26 @@ def __init__(__self__, 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( + role="roles/secretmanager.secretAccessor", + 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.secretmanager.SecretIamPolicy("policy", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + policy_data=admin.policy_data) + ``` ## secretmanager.SecretIamBinding ```python @@ -190,6 +212,23 @@ def __init__(__self__, members=["user:jane@example.com"]) ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + binding = gcp.secretmanager.SecretIamBinding("binding", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + members=["user:jane@example.com"], + condition=gcp.secretmanager.SecretIamBindingConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` ## secretmanager.SecretIamMember ```python @@ -203,6 +242,24 @@ def __init__(__self__, member="user:jane@example.com") ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + member = gcp.secretmanager.SecretIamMember("member", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + member="user:jane@example.com", + condition=gcp.secretmanager.SecretIamMemberConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` + ## secretmanager.SecretIamPolicy ```python @@ -219,6 +276,26 @@ def __init__(__self__, 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( + role="roles/secretmanager.secretAccessor", + 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.secretmanager.SecretIamPolicy("policy", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + policy_data=admin.policy_data) + ``` ## secretmanager.SecretIamBinding ```python @@ -232,6 +309,23 @@ def __init__(__self__, members=["user:jane@example.com"]) ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + binding = gcp.secretmanager.SecretIamBinding("binding", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + members=["user:jane@example.com"], + condition=gcp.secretmanager.SecretIamBindingConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` ## secretmanager.SecretIamMember ```python @@ -245,6 +339,24 @@ def __init__(__self__, member="user:jane@example.com") ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + member = gcp.secretmanager.SecretIamMember("member", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + member="user:jane@example.com", + condition=gcp.secretmanager.SecretIamMemberConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` + ## Import For all import syntaxes, the "resource in question" can take any of the following forms: @@ -309,6 +421,8 @@ def __init__(__self__, > **Note:** `secretmanager.SecretIamBinding` resources **can be** used in conjunction with `secretmanager.SecretIamMember` 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. + ## secretmanager.SecretIamPolicy ```python @@ -325,6 +439,26 @@ def __init__(__self__, 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( + role="roles/secretmanager.secretAccessor", + 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.secretmanager.SecretIamPolicy("policy", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + policy_data=admin.policy_data) + ``` ## secretmanager.SecretIamBinding ```python @@ -338,6 +472,23 @@ def __init__(__self__, members=["user:jane@example.com"]) ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + binding = gcp.secretmanager.SecretIamBinding("binding", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + members=["user:jane@example.com"], + condition=gcp.secretmanager.SecretIamBindingConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` ## secretmanager.SecretIamMember ```python @@ -351,6 +502,24 @@ def __init__(__self__, member="user:jane@example.com") ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + member = gcp.secretmanager.SecretIamMember("member", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + member="user:jane@example.com", + condition=gcp.secretmanager.SecretIamMemberConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` + ## secretmanager.SecretIamPolicy ```python @@ -367,6 +536,26 @@ def __init__(__self__, 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( + role="roles/secretmanager.secretAccessor", + 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.secretmanager.SecretIamPolicy("policy", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + policy_data=admin.policy_data) + ``` ## secretmanager.SecretIamBinding ```python @@ -380,6 +569,23 @@ def __init__(__self__, members=["user:jane@example.com"]) ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + binding = gcp.secretmanager.SecretIamBinding("binding", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + members=["user:jane@example.com"], + condition=gcp.secretmanager.SecretIamBindingConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` ## secretmanager.SecretIamMember ```python @@ -393,6 +599,24 @@ def __init__(__self__, member="user:jane@example.com") ``` + With IAM Conditions: + + ```python + import pulumi + import pulumi_gcp as gcp + + member = gcp.secretmanager.SecretIamMember("member", + project=secret_basic["project"], + secret_id=secret_basic["secretId"], + role="roles/secretmanager.secretAccessor", + member="user:jane@example.com", + condition=gcp.secretmanager.SecretIamMemberConditionArgs( + title="expires_after_2019_12_31", + description="Expiring at midnight of 2019-12-31", + expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", + )) + ``` + ## Import For all import syntaxes, the "resource in question" can take any of the following forms: diff --git a/sdk/python/pulumi_gcp/securitycenter/__init__.py b/sdk/python/pulumi_gcp/securitycenter/__init__.py index 1ea6e67827..6be284484b 100644 --- a/sdk/python/pulumi_gcp/securitycenter/__init__.py +++ b/sdk/python/pulumi_gcp/securitycenter/__init__.py @@ -11,6 +11,7 @@ from .instance_iam_binding import * from .instance_iam_member import * from .instance_iam_policy import * +from .management_organization_event_threat_detection_custom_module import * from .mute_config import * from .notification_config import * from .organization_custom_module import * diff --git a/sdk/python/pulumi_gcp/securitycenter/management_organization_event_threat_detection_custom_module.py b/sdk/python/pulumi_gcp/securitycenter/management_organization_event_threat_detection_custom_module.py new file mode 100644 index 0000000000..6cc0999394 --- /dev/null +++ b/sdk/python/pulumi_gcp/securitycenter/management_organization_event_threat_detection_custom_module.py @@ -0,0 +1,568 @@ +# 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__ = ['ManagementOrganizationEventThreatDetectionCustomModuleArgs', 'ManagementOrganizationEventThreatDetectionCustomModule'] + +@pulumi.input_type +class ManagementOrganizationEventThreatDetectionCustomModuleArgs: + def __init__(__self__, *, + organization: pulumi.Input[str], + config: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + enablement_state: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a ManagementOrganizationEventThreatDetectionCustomModule resource. + :param pulumi.Input[str] organization: Numerical ID of the parent organization. + + + - - - + :param pulumi.Input[str] config: Config for the module. For the resident module, its config value is defined at this level. + For the inherited module, its config value is inherited from the ancestor module. + :param pulumi.Input[str] display_name: The human readable name to be displayed for the module. + :param pulumi.Input[str] enablement_state: The state of enablement for the module at the given level of the hierarchy. + Possible values are: `ENABLED`, `DISABLED`. + :param pulumi.Input[str] location: Location ID of the parent organization. Only global is supported at the moment. + :param pulumi.Input[str] type: Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + """ + pulumi.set(__self__, "organization", organization) + if config is not None: + pulumi.set(__self__, "config", config) + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + if enablement_state is not None: + pulumi.set(__self__, "enablement_state", enablement_state) + if location is not None: + pulumi.set(__self__, "location", location) + if type is not None: + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter + def organization(self) -> pulumi.Input[str]: + """ + Numerical ID of the parent organization. + + + - - - + """ + return pulumi.get(self, "organization") + + @organization.setter + def organization(self, value: pulumi.Input[str]): + pulumi.set(self, "organization", value) + + @property + @pulumi.getter + def config(self) -> Optional[pulumi.Input[str]]: + """ + Config for the module. For the resident module, its config value is defined at this level. + For the inherited module, its config value is inherited from the ancestor module. + """ + return pulumi.get(self, "config") + + @config.setter + def config(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "config", value) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[pulumi.Input[str]]: + """ + The human readable name to be displayed for the module. + """ + return pulumi.get(self, "display_name") + + @display_name.setter + def display_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "display_name", value) + + @property + @pulumi.getter(name="enablementState") + def enablement_state(self) -> Optional[pulumi.Input[str]]: + """ + The state of enablement for the module at the given level of the hierarchy. + Possible values are: `ENABLED`, `DISABLED`. + """ + return pulumi.get(self, "enablement_state") + + @enablement_state.setter + def enablement_state(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "enablement_state", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + Location ID of the parent organization. Only global is supported at the moment. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def type(self) -> Optional[pulumi.Input[str]]: + """ + Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + """ + return pulumi.get(self, "type") + + @type.setter + def type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "type", value) + + +@pulumi.input_type +class _ManagementOrganizationEventThreatDetectionCustomModuleState: + def __init__(__self__, *, + config: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + enablement_state: Optional[pulumi.Input[str]] = None, + last_editor: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + organization: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering ManagementOrganizationEventThreatDetectionCustomModule resources. + :param pulumi.Input[str] config: Config for the module. For the resident module, its config value is defined at this level. + For the inherited module, its config value is inherited from the ancestor module. + :param pulumi.Input[str] display_name: The human readable name to be displayed for the module. + :param pulumi.Input[str] enablement_state: The state of enablement for the module at the given level of the hierarchy. + Possible values are: `ENABLED`, `DISABLED`. + :param pulumi.Input[str] last_editor: The editor that last updated the custom module + :param pulumi.Input[str] location: Location ID of the parent organization. Only global is supported at the moment. + :param pulumi.Input[str] name: The resource name of the Event Threat Detection custom module. + Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + :param pulumi.Input[str] organization: Numerical ID of the parent organization. + + + - - - + :param pulumi.Input[str] type: Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + :param pulumi.Input[str] update_time: The time at which the custom module was last updated. + A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + """ + if config is not None: + pulumi.set(__self__, "config", config) + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + if enablement_state is not None: + pulumi.set(__self__, "enablement_state", enablement_state) + if last_editor is not None: + pulumi.set(__self__, "last_editor", last_editor) + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + if organization is not None: + pulumi.set(__self__, "organization", organization) + if type is not None: + pulumi.set(__self__, "type", type) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter + def config(self) -> Optional[pulumi.Input[str]]: + """ + Config for the module. For the resident module, its config value is defined at this level. + For the inherited module, its config value is inherited from the ancestor module. + """ + return pulumi.get(self, "config") + + @config.setter + def config(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "config", value) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[pulumi.Input[str]]: + """ + The human readable name to be displayed for the module. + """ + return pulumi.get(self, "display_name") + + @display_name.setter + def display_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "display_name", value) + + @property + @pulumi.getter(name="enablementState") + def enablement_state(self) -> Optional[pulumi.Input[str]]: + """ + The state of enablement for the module at the given level of the hierarchy. + Possible values are: `ENABLED`, `DISABLED`. + """ + return pulumi.get(self, "enablement_state") + + @enablement_state.setter + def enablement_state(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "enablement_state", value) + + @property + @pulumi.getter(name="lastEditor") + def last_editor(self) -> Optional[pulumi.Input[str]]: + """ + The editor that last updated the custom module + """ + return pulumi.get(self, "last_editor") + + @last_editor.setter + def last_editor(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "last_editor", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + Location ID of the parent organization. Only global is supported at the moment. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The resource name of the Event Threat Detection custom module. + Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def organization(self) -> Optional[pulumi.Input[str]]: + """ + Numerical ID of the parent organization. + + + - - - + """ + return pulumi.get(self, "organization") + + @organization.setter + def organization(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "organization", value) + + @property + @pulumi.getter + def type(self) -> Optional[pulumi.Input[str]]: + """ + Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + """ + return pulumi.get(self, "type") + + @type.setter + def type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "type", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + The time at which the custom module was last updated. + A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + """ + return pulumi.get(self, "update_time") + + @update_time.setter + def update_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "update_time", value) + + +class ManagementOrganizationEventThreatDetectionCustomModule(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + config: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + enablement_state: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + organization: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + Represents an instance of an Event Threat Detection custom module, including + its full module name, display name, enablement state, and last updated time. + You can create a custom module at the organization level only. + + To get more information about OrganizationEventThreatDetectionCustomModule, see: + + * [API documentation](https://cloud.google.com/security-command-center/docs/reference/security-center-management/rest/v1/organizations.locations.eventThreatDetectionCustomModules) + * How-to Guides + * [Overview of custom modules for Event Threat Detection](https://cloud.google.com/security-command-center/docs/custom-modules-etd-overview) + + ## Example Usage + + ## Import + + OrganizationEventThreatDetectionCustomModule can be imported using any of these accepted formats: + + * `organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}}` + + * `{{organization}}/{{location}}/{{name}}` + + When using the `pulumi import` command, OrganizationEventThreatDetectionCustomModule can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}} + ``` + + ```sh + $ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default {{organization}}/{{location}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] config: Config for the module. For the resident module, its config value is defined at this level. + For the inherited module, its config value is inherited from the ancestor module. + :param pulumi.Input[str] display_name: The human readable name to be displayed for the module. + :param pulumi.Input[str] enablement_state: The state of enablement for the module at the given level of the hierarchy. + Possible values are: `ENABLED`, `DISABLED`. + :param pulumi.Input[str] location: Location ID of the parent organization. Only global is supported at the moment. + :param pulumi.Input[str] organization: Numerical ID of the parent organization. + + + - - - + :param pulumi.Input[str] type: Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ManagementOrganizationEventThreatDetectionCustomModuleArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Represents an instance of an Event Threat Detection custom module, including + its full module name, display name, enablement state, and last updated time. + You can create a custom module at the organization level only. + + To get more information about OrganizationEventThreatDetectionCustomModule, see: + + * [API documentation](https://cloud.google.com/security-command-center/docs/reference/security-center-management/rest/v1/organizations.locations.eventThreatDetectionCustomModules) + * How-to Guides + * [Overview of custom modules for Event Threat Detection](https://cloud.google.com/security-command-center/docs/custom-modules-etd-overview) + + ## Example Usage + + ## Import + + OrganizationEventThreatDetectionCustomModule can be imported using any of these accepted formats: + + * `organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}}` + + * `{{organization}}/{{location}}/{{name}}` + + When using the `pulumi import` command, OrganizationEventThreatDetectionCustomModule can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default organizations/{{organization}}/locations/{{location}}/eventThreatDetectionCustomModules/{{name}} + ``` + + ```sh + $ pulumi import gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule default {{organization}}/{{location}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param ManagementOrganizationEventThreatDetectionCustomModuleArgs 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(ManagementOrganizationEventThreatDetectionCustomModuleArgs, 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, + config: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + enablement_state: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + organization: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = ManagementOrganizationEventThreatDetectionCustomModuleArgs.__new__(ManagementOrganizationEventThreatDetectionCustomModuleArgs) + + __props__.__dict__["config"] = config + __props__.__dict__["display_name"] = display_name + __props__.__dict__["enablement_state"] = enablement_state + __props__.__dict__["location"] = location + if organization is None and not opts.urn: + raise TypeError("Missing required property 'organization'") + __props__.__dict__["organization"] = organization + __props__.__dict__["type"] = type + __props__.__dict__["last_editor"] = None + __props__.__dict__["name"] = None + __props__.__dict__["update_time"] = None + super(ManagementOrganizationEventThreatDetectionCustomModule, __self__).__init__( + 'gcp:securitycenter/managementOrganizationEventThreatDetectionCustomModule:ManagementOrganizationEventThreatDetectionCustomModule', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + config: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + enablement_state: Optional[pulumi.Input[str]] = None, + last_editor: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + organization: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'ManagementOrganizationEventThreatDetectionCustomModule': + """ + Get an existing ManagementOrganizationEventThreatDetectionCustomModule 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] config: Config for the module. For the resident module, its config value is defined at this level. + For the inherited module, its config value is inherited from the ancestor module. + :param pulumi.Input[str] display_name: The human readable name to be displayed for the module. + :param pulumi.Input[str] enablement_state: The state of enablement for the module at the given level of the hierarchy. + Possible values are: `ENABLED`, `DISABLED`. + :param pulumi.Input[str] last_editor: The editor that last updated the custom module + :param pulumi.Input[str] location: Location ID of the parent organization. Only global is supported at the moment. + :param pulumi.Input[str] name: The resource name of the Event Threat Detection custom module. + Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + :param pulumi.Input[str] organization: Numerical ID of the parent organization. + + + - - - + :param pulumi.Input[str] type: Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + :param pulumi.Input[str] update_time: The time at which the custom module was last updated. + A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ManagementOrganizationEventThreatDetectionCustomModuleState.__new__(_ManagementOrganizationEventThreatDetectionCustomModuleState) + + __props__.__dict__["config"] = config + __props__.__dict__["display_name"] = display_name + __props__.__dict__["enablement_state"] = enablement_state + __props__.__dict__["last_editor"] = last_editor + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["organization"] = organization + __props__.__dict__["type"] = type + __props__.__dict__["update_time"] = update_time + return ManagementOrganizationEventThreatDetectionCustomModule(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def config(self) -> pulumi.Output[Optional[str]]: + """ + Config for the module. For the resident module, its config value is defined at this level. + For the inherited module, its config value is inherited from the ancestor module. + """ + return pulumi.get(self, "config") + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> pulumi.Output[Optional[str]]: + """ + The human readable name to be displayed for the module. + """ + return pulumi.get(self, "display_name") + + @property + @pulumi.getter(name="enablementState") + def enablement_state(self) -> pulumi.Output[Optional[str]]: + """ + The state of enablement for the module at the given level of the hierarchy. + Possible values are: `ENABLED`, `DISABLED`. + """ + return pulumi.get(self, "enablement_state") + + @property + @pulumi.getter(name="lastEditor") + def last_editor(self) -> pulumi.Output[str]: + """ + The editor that last updated the custom module + """ + return pulumi.get(self, "last_editor") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[Optional[str]]: + """ + Location ID of the parent organization. Only global is supported at the moment. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The resource name of the Event Threat Detection custom module. + Its format is "organizations/{organization}/locations/{location}/eventThreatDetectionCustomModules/{eventThreatDetectionCustomModule}". + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def organization(self) -> pulumi.Output[str]: + """ + Numerical ID of the parent organization. + + + - - - + """ + return pulumi.get(self, "organization") + + @property + @pulumi.getter + def type(self) -> pulumi.Output[Optional[str]]: + """ + Immutable. Type for the module. e.g. CONFIGURABLE_BAD_IP. + """ + return pulumi.get(self, "type") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + The time at which the custom module was last updated. + A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and + up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/spanner/__init__.py b/sdk/python/pulumi_gcp/spanner/__init__.py index 0c2878385c..54d276f362 100644 --- a/sdk/python/pulumi_gcp/spanner/__init__.py +++ b/sdk/python/pulumi_gcp/spanner/__init__.py @@ -13,6 +13,7 @@ from .get_instance import * from .get_instance_iam_policy import * from .instance import * +from .instance_config import * from .instance_iam_binding import * from .instance_iam_member import * from .instance_iam_policy import * diff --git a/sdk/python/pulumi_gcp/spanner/_inputs.py b/sdk/python/pulumi_gcp/spanner/_inputs.py index c7d7a4f0c8..e556d37fc7 100644 --- a/sdk/python/pulumi_gcp/spanner/_inputs.py +++ b/sdk/python/pulumi_gcp/spanner/_inputs.py @@ -16,6 +16,7 @@ 'InstanceAutoscalingConfigArgs', 'InstanceAutoscalingConfigAutoscalingLimitsArgs', 'InstanceAutoscalingConfigAutoscalingTargetsArgs', + 'InstanceConfigReplicaArgs', 'InstanceIAMBindingConditionArgs', 'InstanceIAMMemberConditionArgs', ] @@ -325,6 +326,73 @@ def storage_utilization_percent(self, value: Optional[pulumi.Input[int]]): pulumi.set(self, "storage_utilization_percent", value) +@pulumi.input_type +class InstanceConfigReplicaArgs: + def __init__(__self__, *, + default_leader_location: Optional[pulumi.Input[bool]] = None, + location: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[bool] default_leader_location: If true, this location is designated as the default leader location where + leader replicas are placed. + + - - - + :param pulumi.Input[str] location: The location of the serving resources, e.g. "us-central1". + :param pulumi.Input[str] type: Indicates the type of replica. See the [replica types + documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + for more details. + Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + """ + if default_leader_location is not None: + pulumi.set(__self__, "default_leader_location", default_leader_location) + if location is not None: + pulumi.set(__self__, "location", location) + if type is not None: + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter(name="defaultLeaderLocation") + def default_leader_location(self) -> Optional[pulumi.Input[bool]]: + """ + If true, this location is designated as the default leader location where + leader replicas are placed. + + - - - + """ + return pulumi.get(self, "default_leader_location") + + @default_leader_location.setter + def default_leader_location(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "default_leader_location", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location of the serving resources, e.g. "us-central1". + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def type(self) -> Optional[pulumi.Input[str]]: + """ + Indicates the type of replica. See the [replica types + documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + for more details. + Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + """ + return pulumi.get(self, "type") + + @type.setter + def type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "type", value) + + @pulumi.input_type class InstanceIAMBindingConditionArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/spanner/instance_config.py b/sdk/python/pulumi_gcp/spanner/instance_config.py new file mode 100644 index 0000000000..5d4b848a11 --- /dev/null +++ b/sdk/python/pulumi_gcp/spanner/instance_config.py @@ -0,0 +1,569 @@ +# 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__ = ['InstanceConfigArgs', 'InstanceConfig'] + +@pulumi.input_type +class InstanceConfigArgs: + def __init__(__self__, *, + display_name: pulumi.Input[str], + replicas: pulumi.Input[Sequence[pulumi.Input['InstanceConfigReplicaArgs']]], + base_config: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a InstanceConfig resource. + :param pulumi.Input[str] display_name: The name of this instance configuration as it appears in UIs. + :param pulumi.Input[Sequence[pulumi.Input['InstanceConfigReplicaArgs']]] replicas: The geographic placement of nodes in this instance configuration and their replication properties. + Structure is documented below. + :param pulumi.Input[str] base_config: Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + configuration. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + to the field 'effective_labels' for all of the labels present on the resource. + :param pulumi.Input[str] name: A unique identifier for the instance configuration. Values are of the + form projects//instanceConfigs/[a-z][-a-z0-9]* + """ + pulumi.set(__self__, "display_name", display_name) + pulumi.set(__self__, "replicas", replicas) + if base_config is not None: + pulumi.set(__self__, "base_config", base_config) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if name is not None: + pulumi.set(__self__, "name", name) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> pulumi.Input[str]: + """ + The name of this instance configuration as it appears in UIs. + """ + return pulumi.get(self, "display_name") + + @display_name.setter + def display_name(self, value: pulumi.Input[str]): + pulumi.set(self, "display_name", value) + + @property + @pulumi.getter + def replicas(self) -> pulumi.Input[Sequence[pulumi.Input['InstanceConfigReplicaArgs']]]: + """ + The geographic placement of nodes in this instance configuration and their replication properties. + Structure is documented below. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: pulumi.Input[Sequence[pulumi.Input['InstanceConfigReplicaArgs']]]): + pulumi.set(self, "replicas", value) + + @property + @pulumi.getter(name="baseConfig") + def base_config(self) -> Optional[pulumi.Input[str]]: + """ + Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + configuration. + """ + return pulumi.get(self, "base_config") + + @base_config.setter + def base_config(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "base_config", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + to the field 'effective_labels' for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + A unique identifier for the instance configuration. Values are of the + form projects//instanceConfigs/[a-z][-a-z0-9]* + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _InstanceConfigState: + def __init__(__self__, *, + base_config: Optional[pulumi.Input[str]] = None, + config_type: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + replicas: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceConfigReplicaArgs']]]] = None): + """ + Input properties used for looking up and filtering InstanceConfig resources. + :param pulumi.Input[str] base_config: Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + configuration. + :param pulumi.Input[str] config_type: Output only. Whether this instance config is a Google or User Managed Configuration. + :param pulumi.Input[str] display_name: The name of this instance configuration as it appears in UIs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + to the field 'effective_labels' for all of the labels present on the resource. + :param pulumi.Input[str] name: A unique identifier for the instance configuration. Values are of the + form projects//instanceConfigs/[a-z][-a-z0-9]* + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[Sequence[pulumi.Input['InstanceConfigReplicaArgs']]] replicas: The geographic placement of nodes in this instance configuration and their replication properties. + Structure is documented below. + """ + if base_config is not None: + pulumi.set(__self__, "base_config", base_config) + if config_type is not None: + pulumi.set(__self__, "config_type", config_type) + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + if effective_labels is not None: + pulumi.set(__self__, "effective_labels", effective_labels) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if name is not None: + pulumi.set(__self__, "name", name) + if project is not None: + pulumi.set(__self__, "project", project) + if pulumi_labels is not None: + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if replicas is not None: + pulumi.set(__self__, "replicas", replicas) + + @property + @pulumi.getter(name="baseConfig") + def base_config(self) -> Optional[pulumi.Input[str]]: + """ + Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + configuration. + """ + return pulumi.get(self, "base_config") + + @base_config.setter + def base_config(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "base_config", value) + + @property + @pulumi.getter(name="configType") + def config_type(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Whether this instance config is a Google or User Managed Configuration. + """ + return pulumi.get(self, "config_type") + + @config_type.setter + def config_type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "config_type", value) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[pulumi.Input[str]]: + """ + The name of this instance configuration as it appears in UIs. + """ + return pulumi.get(self, "display_name") + + @display_name.setter + def display_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "display_name", value) + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @effective_labels.setter + def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "effective_labels", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + to the field 'effective_labels' for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + A unique identifier for the instance configuration. Values are of the + form projects//instanceConfigs/[a-z][-a-z0-9]* + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @pulumi_labels.setter + def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "pulumi_labels", value) + + @property + @pulumi.getter + def replicas(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InstanceConfigReplicaArgs']]]]: + """ + The geographic placement of nodes in this instance configuration and their replication properties. + Structure is documented below. + """ + return pulumi.get(self, "replicas") + + @replicas.setter + def replicas(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceConfigReplicaArgs']]]]): + pulumi.set(self, "replicas", value) + + +class InstanceConfig(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + base_config: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + replicas: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceConfigReplicaArgs']]]]] = None, + __props__=None): + """ + A possible configuration for a Cloud Spanner instance. Configurations + define the geographic placement of nodes and their replication. + + To get more information about InstanceConfig, see: + + * [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instanceConfigs) + * How-to Guides + * [Official Documentation](https://cloud.google.com/spanner/) + + ## Example Usage + + ## Import + + InstanceConfig can be imported using any of these accepted formats: + + * `projects/{{project}}/instanceConfigs/{{name}}` + + * `{{project}}/{{name}}` + + * `{{name}}` + + When using the `pulumi import` command, InstanceConfig can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default projects/{{project}}/instanceConfigs/{{name}} + ``` + + ```sh + $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{project}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{name}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] base_config: Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + configuration. + :param pulumi.Input[str] display_name: The name of this instance configuration as it appears in UIs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + to the field 'effective_labels' for all of the labels present on the resource. + :param pulumi.Input[str] name: A unique identifier for the instance configuration. Values are of the + form projects//instanceConfigs/[a-z][-a-z0-9]* + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceConfigReplicaArgs']]]] replicas: The geographic placement of nodes in this instance configuration and their replication properties. + Structure is documented below. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: InstanceConfigArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + A possible configuration for a Cloud Spanner instance. Configurations + define the geographic placement of nodes and their replication. + + To get more information about InstanceConfig, see: + + * [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instanceConfigs) + * How-to Guides + * [Official Documentation](https://cloud.google.com/spanner/) + + ## Example Usage + + ## Import + + InstanceConfig can be imported using any of these accepted formats: + + * `projects/{{project}}/instanceConfigs/{{name}}` + + * `{{project}}/{{name}}` + + * `{{name}}` + + When using the `pulumi import` command, InstanceConfig can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default projects/{{project}}/instanceConfigs/{{name}} + ``` + + ```sh + $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{project}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:spanner/instanceConfig:InstanceConfig default {{name}} + ``` + + :param str resource_name: The name of the resource. + :param InstanceConfigArgs 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(InstanceConfigArgs, 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, + base_config: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + replicas: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceConfigReplicaArgs']]]]] = 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__ = InstanceConfigArgs.__new__(InstanceConfigArgs) + + __props__.__dict__["base_config"] = base_config + if display_name is None and not opts.urn: + raise TypeError("Missing required property 'display_name'") + __props__.__dict__["display_name"] = display_name + __props__.__dict__["labels"] = labels + __props__.__dict__["name"] = name + __props__.__dict__["project"] = project + if replicas is None and not opts.urn: + raise TypeError("Missing required property 'replicas'") + __props__.__dict__["replicas"] = replicas + __props__.__dict__["config_type"] = None + __props__.__dict__["effective_labels"] = None + __props__.__dict__["pulumi_labels"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["effectiveLabels", "pulumiLabels"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(InstanceConfig, __self__).__init__( + 'gcp:spanner/instanceConfig:InstanceConfig', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + base_config: Optional[pulumi.Input[str]] = None, + config_type: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + replicas: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceConfigReplicaArgs']]]]] = None) -> 'InstanceConfig': + """ + Get an existing InstanceConfig 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] base_config: Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + configuration. + :param pulumi.Input[str] config_type: Output only. Whether this instance config is a Google or User Managed Configuration. + :param pulumi.Input[str] display_name: The name of this instance configuration as it appears in UIs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + to the field 'effective_labels' for all of the labels present on the resource. + :param pulumi.Input[str] name: A unique identifier for the instance configuration. Values are of the + form projects//instanceConfigs/[a-z][-a-z0-9]* + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceConfigReplicaArgs']]]] replicas: The geographic placement of nodes in this instance configuration and their replication properties. + Structure is documented below. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _InstanceConfigState.__new__(_InstanceConfigState) + + __props__.__dict__["base_config"] = base_config + __props__.__dict__["config_type"] = config_type + __props__.__dict__["display_name"] = display_name + __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["labels"] = labels + __props__.__dict__["name"] = name + __props__.__dict__["project"] = project + __props__.__dict__["pulumi_labels"] = pulumi_labels + __props__.__dict__["replicas"] = replicas + return InstanceConfig(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="baseConfig") + def base_config(self) -> pulumi.Output[str]: + """ + Base configuration name, e.g. nam3, based on which this configuration is created. Only set for user managed + configurations. baseConfig must refer to a configuration of type GOOGLE_MANAGED in the same project as this + configuration. + """ + return pulumi.get(self, "base_config") + + @property + @pulumi.getter(name="configType") + def config_type(self) -> pulumi.Output[str]: + """ + Output only. Whether this instance config is a Google or User Managed Configuration. + """ + return pulumi.get(self, "config_type") + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> pulumi.Output[str]: + """ + The name of this instance configuration as it appears in UIs. + """ + return pulumi.get(self, "display_name") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer + to the field 'effective_labels' for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + A unique identifier for the instance configuration. Values are of the + form projects//instanceConfigs/[a-z][-a-z0-9]* + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter + def replicas(self) -> pulumi.Output[Sequence['outputs.InstanceConfigReplica']]: + """ + The geographic placement of nodes in this instance configuration and their replication properties. + Structure is documented below. + """ + return pulumi.get(self, "replicas") + diff --git a/sdk/python/pulumi_gcp/spanner/outputs.py b/sdk/python/pulumi_gcp/spanner/outputs.py index 43b5755f2d..da5ed6dcda 100644 --- a/sdk/python/pulumi_gcp/spanner/outputs.py +++ b/sdk/python/pulumi_gcp/spanner/outputs.py @@ -17,6 +17,7 @@ 'InstanceAutoscalingConfig', 'InstanceAutoscalingConfigAutoscalingLimits', 'InstanceAutoscalingConfigAutoscalingTargets', + 'InstanceConfigReplica', 'InstanceIAMBindingCondition', 'InstanceIAMMemberCondition', 'GetInstanceAutoscalingConfigResult', @@ -347,6 +348,78 @@ def storage_utilization_percent(self) -> Optional[int]: return pulumi.get(self, "storage_utilization_percent") +@pulumi.output_type +class InstanceConfigReplica(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "defaultLeaderLocation": + suggest = "default_leader_location" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in InstanceConfigReplica. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + InstanceConfigReplica.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + InstanceConfigReplica.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + default_leader_location: Optional[bool] = None, + location: Optional[str] = None, + type: Optional[str] = None): + """ + :param bool default_leader_location: If true, this location is designated as the default leader location where + leader replicas are placed. + + - - - + :param str location: The location of the serving resources, e.g. "us-central1". + :param str type: Indicates the type of replica. See the [replica types + documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + for more details. + Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + """ + if default_leader_location is not None: + pulumi.set(__self__, "default_leader_location", default_leader_location) + if location is not None: + pulumi.set(__self__, "location", location) + if type is not None: + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter(name="defaultLeaderLocation") + def default_leader_location(self) -> Optional[bool]: + """ + If true, this location is designated as the default leader location where + leader replicas are placed. + + - - - + """ + return pulumi.get(self, "default_leader_location") + + @property + @pulumi.getter + def location(self) -> Optional[str]: + """ + The location of the serving resources, e.g. "us-central1". + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def type(self) -> Optional[str]: + """ + Indicates the type of replica. See the [replica types + documentation](https://cloud.google.com/spanner/docs/replication#replica_types) + for more details. + Possible values are: `READ_WRITE`, `READ_ONLY`, `WITNESS`. + """ + return pulumi.get(self, "type") + + @pulumi.output_type class InstanceIAMBindingCondition(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/sql/_inputs.py b/sdk/python/pulumi_gcp/sql/_inputs.py index 31db52eae5..5632f8d5a8 100644 --- a/sdk/python/pulumi_gcp/sql/_inputs.py +++ b/sdk/python/pulumi_gcp/sql/_inputs.py @@ -1399,7 +1399,7 @@ def __init__(__self__, *, At least `ipv4_enabled` must be enabled or a `private_network` must be configured. This setting can be updated, but it cannot be removed after it is set. :param pulumi.Input[Sequence[pulumi.Input['DatabaseInstanceSettingsIpConfigurationPscConfigArgs']]] psc_configs: PSC settings for a Cloud SQL instance. - :param pulumi.Input[bool] require_ssl: Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. + :param pulumi.Input[bool] require_ssl: Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. It will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. :param pulumi.Input[str] ssl_mode: Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to `require_ssl`. To change this field, also set the correspoding value in `require_ssl`. * For PostgreSQL instances, the value pairs are listed in the [API reference doc](https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1beta4/instances#ipconfiguration) for `ssl_mode` field. * For MySQL instances, use the same value pairs as the PostgreSQL instances. @@ -1417,6 +1417,9 @@ def __init__(__self__, *, pulumi.set(__self__, "private_network", private_network) if psc_configs is not None: pulumi.set(__self__, "psc_configs", psc_configs) + if require_ssl is not None: + warnings.warn("""`require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead.""", DeprecationWarning) + pulumi.log.warn("""require_ssl is deprecated: `require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead.""") if require_ssl is not None: pulumi.set(__self__, "require_ssl", require_ssl) if ssl_mode is not None: @@ -1501,8 +1504,11 @@ def psc_configs(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['Databa @pulumi.getter(name="requireSsl") def require_ssl(self) -> Optional[pulumi.Input[bool]]: """ - Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. + Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. It will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. """ + warnings.warn("""`require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead.""", DeprecationWarning) + pulumi.log.warn("""require_ssl is deprecated: `require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead.""") + return pulumi.get(self, "require_ssl") @require_ssl.setter diff --git a/sdk/python/pulumi_gcp/sql/outputs.py b/sdk/python/pulumi_gcp/sql/outputs.py index 040b213949..fb524dbfb2 100644 --- a/sdk/python/pulumi_gcp/sql/outputs.py +++ b/sdk/python/pulumi_gcp/sql/outputs.py @@ -1473,7 +1473,7 @@ def __init__(__self__, *, At least `ipv4_enabled` must be enabled or a `private_network` must be configured. This setting can be updated, but it cannot be removed after it is set. :param Sequence['DatabaseInstanceSettingsIpConfigurationPscConfigArgs'] psc_configs: PSC settings for a Cloud SQL instance. - :param bool require_ssl: Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. + :param bool require_ssl: Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. It will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. :param str ssl_mode: Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to `require_ssl`. To change this field, also set the correspoding value in `require_ssl`. * For PostgreSQL instances, the value pairs are listed in the [API reference doc](https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1beta4/instances#ipconfiguration) for `ssl_mode` field. * For MySQL instances, use the same value pairs as the PostgreSQL instances. @@ -1551,8 +1551,11 @@ def psc_configs(self) -> Optional[Sequence['outputs.DatabaseInstanceSettingsIpCo @pulumi.getter(name="requireSsl") def require_ssl(self) -> Optional[bool]: """ - Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. + Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in `ssl_mode`. It will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead. """ + warnings.warn("""`require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead.""", DeprecationWarning) + pulumi.log.warn("""require_ssl is deprecated: `require_ssl` will be fully deprecated in a future major release. For now, please use `ssl_mode` with a compatible `require_ssl` value instead.""") + return pulumi.get(self, "require_ssl") @property @@ -3136,7 +3139,7 @@ def __init__(__self__, *, :param str private_network: The VPC network from which the Cloud SQL instance is accessible for private IP. For example, projects/myProject/global/networks/default. Specifying a network enables private IP. At least ipv4_enabled must be enabled or a private_network must be configured. This setting can be updated, but it cannot be removed after it is set. :param Sequence['GetDatabaseInstanceSettingIpConfigurationPscConfigArgs'] psc_configs: PSC settings for a Cloud SQL instance. :param bool require_ssl: Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in ssl_mode if it has been set too. - :param str ssl_mode: Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + :param str ssl_mode: Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl until next major release. """ pulumi.set(__self__, "allocated_ip_range", allocated_ip_range) pulumi.set(__self__, "authorized_networks", authorized_networks) @@ -3204,7 +3207,7 @@ def require_ssl(self) -> bool: @pulumi.getter(name="sslMode") def ssl_mode(self) -> str: """ - Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl until next major release. """ return pulumi.get(self, "ssl_mode") @@ -4628,7 +4631,7 @@ def __init__(__self__, *, :param str private_network: The VPC network from which the Cloud SQL instance is accessible for private IP. For example, projects/myProject/global/networks/default. Specifying a network enables private IP. At least ipv4_enabled must be enabled or a private_network must be configured. This setting can be updated, but it cannot be removed after it is set. :param Sequence['GetDatabaseInstancesInstanceSettingIpConfigurationPscConfigArgs'] psc_configs: PSC settings for a Cloud SQL instance. :param bool require_ssl: Whether SSL connections over IP are enforced or not. To change this field, also set the corresponding value in ssl_mode if it has been set too. - :param str ssl_mode: Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + :param str ssl_mode: Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl until next major release. """ pulumi.set(__self__, "allocated_ip_range", allocated_ip_range) pulumi.set(__self__, "authorized_networks", authorized_networks) @@ -4696,7 +4699,7 @@ def require_ssl(self) -> bool: @pulumi.getter(name="sslMode") def ssl_mode(self) -> str: """ - Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl. + Specify how SSL connection should be enforced in DB connections. This field provides more SSL enforcment options compared to require_ssl. To change this field, also set the correspoding value in require_ssl until next major release. """ return pulumi.get(self, "ssl_mode") diff --git a/sdk/python/pulumi_gcp/workstations/_inputs.py b/sdk/python/pulumi_gcp/workstations/_inputs.py index 4a30e6f3e2..f3fca2a377 100644 --- a/sdk/python/pulumi_gcp/workstations/_inputs.py +++ b/sdk/python/pulumi_gcp/workstations/_inputs.py @@ -818,18 +818,31 @@ class WorkstationConfigHostGceInstanceBoostConfigArgs: def __init__(__self__, *, id: pulumi.Input[str], accelerators: Optional[pulumi.Input[Sequence[pulumi.Input['WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs']]]] = None, - machine_type: Optional[pulumi.Input[str]] = None): + boot_disk_size_gb: Optional[pulumi.Input[int]] = None, + enable_nested_virtualization: Optional[pulumi.Input[bool]] = None, + machine_type: Optional[pulumi.Input[str]] = None, + pool_size: Optional[pulumi.Input[int]] = None): """ :param pulumi.Input[str] id: The id to be used for the boost config. :param pulumi.Input[Sequence[pulumi.Input['WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs']]] accelerators: An accelerator card attached to the boost instance. Structure is documented below. + :param pulumi.Input[int] boot_disk_size_gb: Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + :param pulumi.Input[bool] enable_nested_virtualization: Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization :param pulumi.Input[str] machine_type: The type of machine that boosted VM instances will use—for example, e2-standard-4. For more information about machine types that Cloud Workstations supports, see the list of available machine types https://cloud.google.com/workstations/docs/available-machine-types. Defaults to e2-standard-4. + :param pulumi.Input[int] pool_size: Number of instances to pool for faster workstation boosting. """ pulumi.set(__self__, "id", id) if accelerators is not None: pulumi.set(__self__, "accelerators", accelerators) + if boot_disk_size_gb is not None: + pulumi.set(__self__, "boot_disk_size_gb", boot_disk_size_gb) + if enable_nested_virtualization is not None: + pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) if machine_type is not None: pulumi.set(__self__, "machine_type", machine_type) + if pool_size is not None: + pulumi.set(__self__, "pool_size", pool_size) @property @pulumi.getter @@ -856,6 +869,31 @@ def accelerators(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['Workstati def accelerators(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs']]]]): pulumi.set(self, "accelerators", value) + @property + @pulumi.getter(name="bootDiskSizeGb") + def boot_disk_size_gb(self) -> Optional[pulumi.Input[int]]: + """ + Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + """ + return pulumi.get(self, "boot_disk_size_gb") + + @boot_disk_size_gb.setter + def boot_disk_size_gb(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "boot_disk_size_gb", value) + + @property + @pulumi.getter(name="enableNestedVirtualization") + def enable_nested_virtualization(self) -> Optional[pulumi.Input[bool]]: + """ + Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + """ + return pulumi.get(self, "enable_nested_virtualization") + + @enable_nested_virtualization.setter + def enable_nested_virtualization(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enable_nested_virtualization", value) + @property @pulumi.getter(name="machineType") def machine_type(self) -> Optional[pulumi.Input[str]]: @@ -868,6 +906,18 @@ def machine_type(self) -> Optional[pulumi.Input[str]]: def machine_type(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "machine_type", value) + @property + @pulumi.getter(name="poolSize") + def pool_size(self) -> Optional[pulumi.Input[int]]: + """ + Number of instances to pool for faster workstation boosting. + """ + return pulumi.get(self, "pool_size") + + @pool_size.setter + def pool_size(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "pool_size", value) + @pulumi.input_type class WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs: diff --git a/sdk/python/pulumi_gcp/workstations/outputs.py b/sdk/python/pulumi_gcp/workstations/outputs.py index f00b3d2113..462aadec3b 100644 --- a/sdk/python/pulumi_gcp/workstations/outputs.py +++ b/sdk/python/pulumi_gcp/workstations/outputs.py @@ -812,8 +812,14 @@ class WorkstationConfigHostGceInstanceBoostConfig(dict): @staticmethod def __key_warning(key: str): suggest = None - if key == "machineType": + if key == "bootDiskSizeGb": + suggest = "boot_disk_size_gb" + elif key == "enableNestedVirtualization": + suggest = "enable_nested_virtualization" + elif key == "machineType": suggest = "machine_type" + elif key == "poolSize": + suggest = "pool_size" if suggest: pulumi.log.warn(f"Key '{key}' not found in WorkstationConfigHostGceInstanceBoostConfig. Access the value via the '{suggest}' property getter instead.") @@ -829,18 +835,31 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, id: str, accelerators: Optional[Sequence['outputs.WorkstationConfigHostGceInstanceBoostConfigAccelerator']] = None, - machine_type: Optional[str] = None): + boot_disk_size_gb: Optional[int] = None, + enable_nested_virtualization: Optional[bool] = None, + machine_type: Optional[str] = None, + pool_size: Optional[int] = None): """ :param str id: The id to be used for the boost config. :param Sequence['WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs'] accelerators: An accelerator card attached to the boost instance. Structure is documented below. + :param int boot_disk_size_gb: Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + :param bool enable_nested_virtualization: Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization :param str machine_type: The type of machine that boosted VM instances will use—for example, e2-standard-4. For more information about machine types that Cloud Workstations supports, see the list of available machine types https://cloud.google.com/workstations/docs/available-machine-types. Defaults to e2-standard-4. + :param int pool_size: Number of instances to pool for faster workstation boosting. """ pulumi.set(__self__, "id", id) if accelerators is not None: pulumi.set(__self__, "accelerators", accelerators) + if boot_disk_size_gb is not None: + pulumi.set(__self__, "boot_disk_size_gb", boot_disk_size_gb) + if enable_nested_virtualization is not None: + pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) if machine_type is not None: pulumi.set(__self__, "machine_type", machine_type) + if pool_size is not None: + pulumi.set(__self__, "pool_size", pool_size) @property @pulumi.getter @@ -859,6 +878,23 @@ def accelerators(self) -> Optional[Sequence['outputs.WorkstationConfigHostGceIns """ return pulumi.get(self, "accelerators") + @property + @pulumi.getter(name="bootDiskSizeGb") + def boot_disk_size_gb(self) -> Optional[int]: + """ + Size of the boot disk in GB. The minimum boot disk size is `30` GB. Defaults to `50` GB. + """ + return pulumi.get(self, "boot_disk_size_gb") + + @property + @pulumi.getter(name="enableNestedVirtualization") + def enable_nested_virtualization(self) -> Optional[bool]: + """ + Whether to enable nested virtualization on the Compute Engine VMs backing boosted Workstations. + See https://cloud.google.com/workstations/docs/reference/rest/v1beta/projects.locations.workstationClusters.workstationConfigs#GceInstance.FIELDS.enable_nested_virtualization + """ + return pulumi.get(self, "enable_nested_virtualization") + @property @pulumi.getter(name="machineType") def machine_type(self) -> Optional[str]: @@ -867,6 +903,14 @@ def machine_type(self) -> Optional[str]: """ return pulumi.get(self, "machine_type") + @property + @pulumi.getter(name="poolSize") + def pool_size(self) -> Optional[int]: + """ + Number of instances to pool for faster workstation boosting. + """ + return pulumi.get(self, "pool_size") + @pulumi.output_type class WorkstationConfigHostGceInstanceBoostConfigAccelerator(dict): diff --git a/sdk/python/pulumi_gcp/workstations/workstation_config.py b/sdk/python/pulumi_gcp/workstations/workstation_config.py index b29a16415f..bae8c9658d 100644 --- a/sdk/python/pulumi_gcp/workstations/workstation_config.py +++ b/sdk/python/pulumi_gcp/workstations/workstation_config.py @@ -1166,8 +1166,11 @@ def __init__(__self__, )], ), gcp.workstations.WorkstationConfigHostGceInstanceBoostConfigArgs( - id="boost-1", - machine_type="e2-standard-2", + id="boost-2", + machine_type="n1-standard-2", + pool_size=2, + boot_disk_size_gb=30, + enable_nested_virtualization=True, ), ], ), @@ -1613,8 +1616,11 @@ def __init__(__self__, )], ), gcp.workstations.WorkstationConfigHostGceInstanceBoostConfigArgs( - id="boost-1", - machine_type="e2-standard-2", + id="boost-2", + machine_type="n1-standard-2", + pool_size=2, + boot_disk_size_gb=30, + enable_nested_virtualization=True, ), ], ), diff --git a/upstream b/upstream index 59c6fb6312..471ed75046 160000 --- a/upstream +++ b/upstream @@ -1 +1 @@ -Subproject commit 59c6fb6312b71f1514e2926587d7407ec05bc872 +Subproject commit 471ed7504638f4724e82ef949b5e382c8a70a26a