From 40fc87ecf64634073dc58ca724c32d4036e18abe Mon Sep 17 00:00:00 2001 From: VenelinMartinov Date: Mon, 13 May 2024 15:48:45 +0100 Subject: [PATCH] Upgrade terraform-provider-google-beta to v5.28.0 (#1987) This PR was generated via `$ upgrade-provider pulumi/pulumi-gcp --kind=provider`. --- - Upgrading terraform-provider-google-beta from 5.27.0 to 5.28.0. Fixes #1975 --- .../pulumi-resource-gcp/bridge-metadata.json | 136 ++ provider/cmd/pulumi-resource-gcp/schema.json | 770 +++++++- provider/provider_yaml_test.go | 1 + provider/resources.go | 8 + sdk/dotnet/Alloydb/Cluster.cs | 21 + .../ClusterMaintenanceUpdatePolicyArgs.cs | 33 + .../ClusterMaintenanceUpdatePolicyGetArgs.cs | 33 + ...enanceUpdatePolicyMaintenanceWindowArgs.cs | 34 + ...nceUpdatePolicyMaintenanceWindowGetArgs.cs | 34 + ...atePolicyMaintenanceWindowStartTimeArgs.cs | 44 + ...PolicyMaintenanceWindowStartTimeGetArgs.cs | 44 + .../Outputs/ClusterMaintenanceUpdatePolicy.cs | 28 + ...aintenanceUpdatePolicyMaintenanceWindow.cs | 37 + ...eUpdatePolicyMaintenanceWindowStartTime.cs | 49 + .../ApplicationIntegration/AuthConfig.cs | 1 - sdk/dotnet/ApplicationIntegration/Client.cs | 41 +- sdk/dotnet/BigQuery/Dataset.cs | 2 +- sdk/dotnet/BigQuery/Job.cs | 6 +- sdk/dotnet/CloudRunV2/Job.cs | 3 +- sdk/dotnet/CloudRunV2/Service.cs | 3 +- .../Compute/Inputs/RouterPeerBfdArgs.cs | 2 + .../Compute/Inputs/RouterPeerBfdGetArgs.cs | 2 + sdk/dotnet/Compute/Outputs/RouterPeerBfd.cs | 2 + sdk/dotnet/Compute/RouterPeer.cs | 41 +- sdk/dotnet/Config/Config.cs | 7 + .../Container/Inputs/ClusterNodeConfigArgs.cs | 12 + .../Inputs/ClusterNodeConfigGetArgs.cs | 12 + ...figGuestAcceleratorGpuSharingConfigArgs.cs | 1 + ...GuestAcceleratorGpuSharingConfigGetArgs.cs | 1 + .../ClusterNodeConfigSecondaryBootDiskArgs.cs | 32 + ...usterNodeConfigSecondaryBootDiskGetArgs.cs | 32 + .../Inputs/ClusterNodePoolNodeConfigArgs.cs | 12 + .../ClusterNodePoolNodeConfigGetArgs.cs | 12 + ...figGuestAcceleratorGpuSharingConfigArgs.cs | 1 + ...GuestAcceleratorGpuSharingConfigGetArgs.cs | 1 + ...NodePoolNodeConfigSecondaryBootDiskArgs.cs | 32 + ...ePoolNodeConfigSecondaryBootDiskGetArgs.cs | 32 + .../Inputs/NodePoolNodeConfigArgs.cs | 12 + .../Inputs/NodePoolNodeConfigGetArgs.cs | 12 + ...NodePoolNodeConfigSecondaryBootDiskArgs.cs | 32 + ...ePoolNodeConfigSecondaryBootDiskGetArgs.cs | 32 + .../Container/Outputs/ClusterNodeConfig.cs | 7 + ...eConfigGuestAcceleratorGpuSharingConfig.cs | 1 + .../ClusterNodeConfigSecondaryBootDisk.cs | 35 + .../Outputs/ClusterNodePoolNodeConfig.cs | 7 + ...eConfigGuestAcceleratorGpuSharingConfig.cs | 1 + ...sterNodePoolNodeConfigSecondaryBootDisk.cs | 35 + .../Outputs/GetClusterNodeConfigResult.cs | 7 + ...lusterNodeConfigSecondaryBootDiskResult.cs | 35 + .../GetClusterNodePoolNodeConfigResult.cs | 7 + ...dePoolNodeConfigSecondaryBootDiskResult.cs | 35 + .../Container/Outputs/NodePoolNodeConfig.cs | 7 + .../NodePoolNodeConfigSecondaryBootDisk.cs | 35 + sdk/dotnet/Dataflow/FlexTemplateJob.cs | 18 +- sdk/dotnet/Dataflow/Job.cs | 12 +- .../DocumentAiWarehouseDocumentSchema.cs | 422 ----- sdk/dotnet/Firebaserules/Release.cs | 2 +- .../PrivilegedAccessManager/Entitlement.cs | 440 +++++ ...lementAdditionalNotificationTargetsArgs.cs | 44 + ...entAdditionalNotificationTargetsGetArgs.cs | 44 + .../Inputs/EntitlementApprovalWorkflowArgs.cs | 33 + .../EntitlementApprovalWorkflowGetArgs.cs | 33 + ...mentApprovalWorkflowManualApprovalsArgs.cs | 39 + ...tApprovalWorkflowManualApprovalsGetArgs.cs | 39 + ...orkflowManualApprovalsStepApproversArgs.cs | 32 + ...flowManualApprovalsStepApproversGetArgs.cs | 32 + ...ApprovalWorkflowManualApprovalsStepArgs.cs | 48 + ...rovalWorkflowManualApprovalsStepGetArgs.cs | 48 + .../Inputs/EntitlementEligibleUserArgs.cs | 32 + .../Inputs/EntitlementEligibleUserGetArgs.cs | 32 + .../Inputs/EntitlementPrivilegedAccessArgs.cs | 27 + ...tlementPrivilegedAccessGcpIamAccessArgs.cs | 45 + ...mentPrivilegedAccessGcpIamAccessGetArgs.cs | 45 + ...ilegedAccessGcpIamAccessRoleBindingArgs.cs | 33 + ...gedAccessGcpIamAccessRoleBindingGetArgs.cs | 33 + .../EntitlementPrivilegedAccessGetArgs.cs | 27 + ...tlementRequesterJustificationConfigArgs.cs | 34 + ...mentRequesterJustificationConfigGetArgs.cs | 34 + ...sterJustificationConfigNotMandatoryArgs.cs | 20 + ...rJustificationConfigNotMandatoryGetArgs.cs | 20 + ...sterJustificationConfigUnstructuredArgs.cs | 20 + ...rJustificationConfigUnstructuredGetArgs.cs | 20 + ...ntitlementAdditionalNotificationTargets.cs | 35 + .../Outputs/EntitlementApprovalWorkflow.cs | 34 + ...itlementApprovalWorkflowManualApprovals.cs | 36 + ...mentApprovalWorkflowManualApprovalsStep.cs | 46 + ...valWorkflowManualApprovalsStepApprovers.cs | 27 + .../Outputs/EntitlementEligibleUser.cs | 27 + .../Outputs/EntitlementPrivilegedAccess.cs | 28 + ...EntitlementPrivilegedAccessGcpIamAccess.cs | 43 + ...PrivilegedAccessGcpIamAccessRoleBinding.cs | 36 + ...EntitlementRequesterJustificationConfig.cs | 37 + ...equesterJustificationConfigNotMandatory.cs | 21 + ...equesterJustificationConfigUnstructured.cs | 21 + sdk/dotnet/PrivilegedAccessManager/README.md | 1 + sdk/dotnet/Provider.cs | 6 + sdk/dotnet/Redis/Cluster.cs | 40 + sdk/dotnet/Storage/GetBuckets.cs | 143 ++ .../Storage/Outputs/GetBucketsBucketResult.cs | 56 + sdk/go/gcp/alloydb/cluster.go | 21 + sdk/go/gcp/alloydb/pulumiTypes.go | 346 ++++ .../gcp/applicationintegration/authConfig.go | 3 +- sdk/go/gcp/applicationintegration/client.go | 86 +- sdk/go/gcp/bigquery/dataset.go | 2 +- sdk/go/gcp/bigquery/job.go | 5 +- sdk/go/gcp/cloudrunv2/job.go | 3 +- sdk/go/gcp/cloudrunv2/service.go | 3 +- sdk/go/gcp/compute/pulumiTypes.go | 8 + sdk/go/gcp/compute/routerPeer.go | 60 +- sdk/go/gcp/config/config.go | 3 + sdk/go/gcp/container/pulumiTypes.go | 637 +++++++ sdk/go/gcp/dataflow/flexTemplateJob.go | 36 +- sdk/go/gcp/dataflow/job.go | 24 +- .../documentAiWarehouseDocumentSchema.go | 464 ----- sdk/go/gcp/firebaserules/release.go | 2 +- .../privilegedaccessmanager/entitlement.go | 565 ++++++ sdk/go/gcp/privilegedaccessmanager/init.go | 44 + .../privilegedaccessmanager/pulumiTypes.go | 1661 +++++++++++++++++ sdk/go/gcp/provider.go | 7 + sdk/go/gcp/redis/cluster.go | 30 + sdk/go/gcp/storage/getBuckets.go | 133 ++ sdk/go/gcp/storage/pulumiTypes.go | 137 ++ .../src/main/java/com/pulumi/gcp/Config.java | 3 + .../main/java/com/pulumi/gcp/Provider.java | 6 + .../java/com/pulumi/gcp/ProviderArgs.java | 17 + .../java/com/pulumi/gcp/alloydb/Cluster.java | 17 + .../com/pulumi/gcp/alloydb/ClusterArgs.java | 42 + .../ClusterMaintenanceUpdatePolicyArgs.java | 99 + ...anceUpdatePolicyMaintenanceWindowArgs.java | 134 ++ ...ePolicyMaintenanceWindowStartTimeArgs.java | 198 ++ .../gcp/alloydb/inputs/ClusterState.java | 42 + .../ClusterMaintenanceUpdatePolicy.java | 62 + ...ntenanceUpdatePolicyMaintenanceWindow.java | 86 + ...pdatePolicyMaintenanceWindowStartTime.java | 123 ++ .../applicationintegration/AuthConfig.java | 1 - .../gcp/applicationintegration/Client.java | 43 +- .../applicationintegration/ClientArgs.java | 105 +- .../inputs/ClientState.java | 105 +- .../java/com/pulumi/gcp/bigquery/Dataset.java | 2 +- .../java/com/pulumi/gcp/bigquery/Job.java | 6 +- .../java/com/pulumi/gcp/cloudrunv2/Job.java | 3 +- .../com/pulumi/gcp/cloudrunv2/Service.java | 3 +- .../com/pulumi/gcp/compute/RouterPeer.java | 54 +- .../pulumi/gcp/compute/RouterPeerArgs.java | 16 +- .../gcp/compute/inputs/RouterPeerBfdArgs.java | 8 + .../gcp/compute/inputs/RouterPeerState.java | 16 +- .../gcp/compute/outputs/RouterPeerBfd.java | 4 + .../inputs/ClusterNodeConfigArgs.java | 48 + ...gGuestAcceleratorGpuSharingConfigArgs.java | 4 + ...lusterNodeConfigSecondaryBootDiskArgs.java | 124 ++ .../inputs/ClusterNodePoolNodeConfigArgs.java | 48 + ...gGuestAcceleratorGpuSharingConfigArgs.java | 4 + ...dePoolNodeConfigSecondaryBootDiskArgs.java | 124 ++ .../inputs/NodePoolNodeConfigArgs.java | 48 + ...dePoolNodeConfigSecondaryBootDiskArgs.java | 124 ++ .../container/outputs/ClusterNodeConfig.java | 25 + ...onfigGuestAcceleratorGpuSharingConfig.java | 2 + .../ClusterNodeConfigSecondaryBootDisk.java | 81 + .../outputs/ClusterNodePoolNodeConfig.java | 25 + ...onfigGuestAcceleratorGpuSharingConfig.java | 2 + ...erNodePoolNodeConfigSecondaryBootDisk.java | 81 + .../outputs/GetClusterNodeConfig.java | 27 + ...GetClusterNodeConfigSecondaryBootDisk.java | 81 + .../outputs/GetClusterNodePoolNodeConfig.java | 27 + ...erNodePoolNodeConfigSecondaryBootDisk.java | 81 + .../container/outputs/NodePoolNodeConfig.java | 25 + .../NodePoolNodeConfigSecondaryBootDisk.java | 81 + .../pulumi/gcp/dataflow/FlexTemplateJob.java | 12 +- .../gcp/dataflow/FlexTemplateJobArgs.java | 24 +- .../java/com/pulumi/gcp/dataflow/Job.java | 8 +- .../java/com/pulumi/gcp/dataflow/JobArgs.java | 16 +- .../dataflow/inputs/FlexTemplateJobState.java | 24 +- .../pulumi/gcp/dataflow/inputs/JobState.java | 16 +- .../DocumentAiWarehouseDocumentSchema.java | 502 ----- .../com/pulumi/gcp/firebaserules/Release.java | 2 +- .../privilegedaccessmanager/Entitlement.java | 386 ++++ .../EntitlementArgs.java | 450 +++++ ...mentAdditionalNotificationTargetsArgs.java | 141 ++ .../EntitlementApprovalWorkflowArgs.java | 113 ++ ...ntApprovalWorkflowManualApprovalsArgs.java | 141 ++ ...kflowManualApprovalsStepApproversArgs.java | 96 + ...provalWorkflowManualApprovalsStepArgs.java | 190 ++ .../inputs/EntitlementEligibleUserArgs.java | 96 + .../EntitlementPrivilegedAccessArgs.java | 89 + ...ementPrivilegedAccessGcpIamAccessArgs.java | 182 ++ ...egedAccessGcpIamAccessRoleBindingArgs.java | 128 ++ ...ementRequesterJustificationConfigArgs.java | 129 ++ ...erJustificationConfigNotMandatoryArgs.java | 28 + ...erJustificationConfigUnstructuredArgs.java | 28 + .../inputs/EntitlementState.java | 625 +++++++ ...itlementAdditionalNotificationTargets.java | 84 + .../outputs/EntitlementApprovalWorkflow.java | 72 + ...lementApprovalWorkflowManualApprovals.java | 88 + ...ntApprovalWorkflowManualApprovalsStep.java | 116 ++ ...lWorkflowManualApprovalsStepApprovers.java | 62 + .../outputs/EntitlementEligibleUser.java | 62 + .../outputs/EntitlementPrivilegedAccess.java | 60 + ...titlementPrivilegedAccessGcpIamAccess.java | 111 ++ ...ivilegedAccessGcpIamAccessRoleBinding.java | 83 + ...titlementRequesterJustificationConfig.java | 83 + ...uesterJustificationConfigNotMandatory.java | 32 + ...uesterJustificationConfigUnstructured.java | 32 + .../java/com/pulumi/gcp/redis/Cluster.java | 20 + .../com/pulumi/gcp/redis/ClusterArgs.java | 46 + .../pulumi/gcp/redis/inputs/ClusterState.java | 46 + .../pulumi/gcp/storage/StorageFunctions.java | 279 +++ .../gcp/storage/inputs/GetBucketsArgs.java | 120 ++ .../storage/inputs/GetBucketsPlainArgs.java | 99 + .../gcp/storage/outputs/GetBucketsBucket.java | 151 ++ .../gcp/storage/outputs/GetBucketsResult.java | 114 ++ sdk/nodejs/alloydb/cluster.ts | 17 + .../applicationintegration/authConfig.ts | 5 +- sdk/nodejs/applicationintegration/client.ts | 53 +- sdk/nodejs/bigquery/dataset.ts | 2 +- sdk/nodejs/bigquery/job.ts | 21 +- sdk/nodejs/cloudrunv2/job.ts | 3 +- sdk/nodejs/cloudrunv2/service.ts | 3 +- sdk/nodejs/compute/routerPeer.ts | 33 +- sdk/nodejs/config/vars.ts | 8 + sdk/nodejs/dataflow/flexTemplateJob.ts | 18 +- sdk/nodejs/dataflow/job.ts | 12 +- .../documentAiWarehouseDocumentSchema.ts | 272 --- sdk/nodejs/firebaserules/release.ts | 2 +- sdk/nodejs/index.ts | 2 + .../privilegedaccessmanager/entitlement.ts | 357 ++++ sdk/nodejs/privilegedaccessmanager/index.ts | 25 + sdk/nodejs/provider.ts | 3 + sdk/nodejs/redis/cluster.ts | 23 + sdk/nodejs/storage/getBuckets.ts | 100 + sdk/nodejs/storage/index.ts | 5 + sdk/nodejs/tsconfig.json | 3 + sdk/nodejs/types/input.ts | 216 +++ sdk/nodejs/types/output.ts | 270 +++ sdk/python/pulumi_gcp/__init__.py | 11 + sdk/python/pulumi_gcp/alloydb/_inputs.py | 139 ++ sdk/python/pulumi_gcp/alloydb/cluster.py | 54 + sdk/python/pulumi_gcp/alloydb/outputs.py | 145 ++ .../applicationintegration/auth_config.py | 8 +- .../applicationintegration/client.py | 151 +- sdk/python/pulumi_gcp/bigquery/dataset.py | 4 +- sdk/python/pulumi_gcp/bigquery/job.py | 36 +- sdk/python/pulumi_gcp/cloudrunv2/job.py | 6 +- sdk/python/pulumi_gcp/cloudrunv2/service.py | 6 +- sdk/python/pulumi_gcp/compute/_inputs.py | 4 + sdk/python/pulumi_gcp/compute/outputs.py | 4 + sdk/python/pulumi_gcp/compute/router_peer.py | 68 +- sdk/python/pulumi_gcp/config/__init__.pyi | 2 + sdk/python/pulumi_gcp/config/vars.py | 4 + sdk/python/pulumi_gcp/container/_inputs.py | 169 ++ sdk/python/pulumi_gcp/container/outputs.py | 272 +++ .../pulumi_gcp/dataflow/flex_template_job.py | 42 +- sdk/python/pulumi_gcp/dataflow/job.py | 28 +- .../document_ai_warehouse_document_schema.py | 528 ------ .../pulumi_gcp/firebaserules/release.py | 4 +- .../privilegedaccessmanager/__init__.py | 10 + .../privilegedaccessmanager/_inputs.py | 420 +++++ .../privilegedaccessmanager/entitlement.py | 852 +++++++++ .../privilegedaccessmanager/outputs.py | 491 +++++ sdk/python/pulumi_gcp/provider.py | 20 + sdk/python/pulumi_gcp/redis/cluster.py | 71 +- sdk/python/pulumi_gcp/storage/__init__.py | 1 + sdk/python/pulumi_gcp/storage/get_buckets.py | 138 ++ sdk/python/pulumi_gcp/storage/outputs.py | 63 + upstream | 2 +- 264 files changed, 18606 insertions(+), 2530 deletions(-) create mode 100644 sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyArgs.cs create mode 100644 sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyGetArgs.cs create mode 100644 sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs.cs create mode 100644 sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowGetArgs.cs create mode 100644 sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs.cs create mode 100644 sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeGetArgs.cs create mode 100644 sdk/dotnet/Alloydb/Outputs/ClusterMaintenanceUpdatePolicy.cs create mode 100644 sdk/dotnet/Alloydb/Outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindow.cs create mode 100644 sdk/dotnet/Alloydb/Outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime.cs create mode 100644 sdk/dotnet/Container/Inputs/ClusterNodeConfigSecondaryBootDiskArgs.cs create mode 100644 sdk/dotnet/Container/Inputs/ClusterNodeConfigSecondaryBootDiskGetArgs.cs create mode 100644 sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigSecondaryBootDiskArgs.cs create mode 100644 sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigSecondaryBootDiskGetArgs.cs create mode 100644 sdk/dotnet/Container/Inputs/NodePoolNodeConfigSecondaryBootDiskArgs.cs create mode 100644 sdk/dotnet/Container/Inputs/NodePoolNodeConfigSecondaryBootDiskGetArgs.cs create mode 100644 sdk/dotnet/Container/Outputs/ClusterNodeConfigSecondaryBootDisk.cs create mode 100644 sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfigSecondaryBootDisk.cs create mode 100644 sdk/dotnet/Container/Outputs/GetClusterNodeConfigSecondaryBootDiskResult.cs create mode 100644 sdk/dotnet/Container/Outputs/GetClusterNodePoolNodeConfigSecondaryBootDiskResult.cs create mode 100644 sdk/dotnet/Container/Outputs/NodePoolNodeConfigSecondaryBootDisk.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Entitlement.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementAdditionalNotificationTargetsArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementAdditionalNotificationTargetsGetArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowGetArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsGetArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepApproversArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepApproversGetArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepGetArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementEligibleUserArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementEligibleUserGetArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessGetArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessRoleBindingGetArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGetArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigGetArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigNotMandatoryArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigNotMandatoryGetArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigUnstructuredArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigUnstructuredGetArgs.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementAdditionalNotificationTargets.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflow.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflowManualApprovals.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflowManualApprovalsStep.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflowManualApprovalsStepApprovers.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementEligibleUser.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementPrivilegedAccess.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementPrivilegedAccessGcpIamAccess.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementPrivilegedAccessGcpIamAccessRoleBinding.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementRequesterJustificationConfig.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementRequesterJustificationConfigNotMandatory.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementRequesterJustificationConfigUnstructured.cs create mode 100644 sdk/dotnet/PrivilegedAccessManager/README.md create mode 100644 sdk/dotnet/Storage/GetBuckets.cs create mode 100644 sdk/dotnet/Storage/Outputs/GetBucketsBucketResult.cs create mode 100644 sdk/go/gcp/privilegedaccessmanager/entitlement.go create mode 100644 sdk/go/gcp/privilegedaccessmanager/init.go create mode 100644 sdk/go/gcp/privilegedaccessmanager/pulumiTypes.go create mode 100644 sdk/go/gcp/storage/getBuckets.go create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterMaintenanceUpdatePolicyArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/alloydb/outputs/ClusterMaintenanceUpdatePolicy.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/alloydb/outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindow.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/alloydb/outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigSecondaryBootDiskArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigSecondaryBootDiskArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolNodeConfigSecondaryBootDiskArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfigSecondaryBootDisk.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfigSecondaryBootDisk.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodeConfigSecondaryBootDisk.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolNodeConfigSecondaryBootDisk.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNodeConfigSecondaryBootDisk.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/Entitlement.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/EntitlementArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementAdditionalNotificationTargetsArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowManualApprovalsArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowManualApprovalsStepApproversArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowManualApprovalsStepArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementEligibleUserArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementPrivilegedAccessArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementPrivilegedAccessGcpIamAccessArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementRequesterJustificationConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementRequesterJustificationConfigNotMandatoryArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementRequesterJustificationConfigUnstructuredArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementAdditionalNotificationTargets.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflow.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflowManualApprovals.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflowManualApprovalsStep.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflowManualApprovalsStepApprovers.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementEligibleUser.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementPrivilegedAccess.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementPrivilegedAccessGcpIamAccess.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementPrivilegedAccessGcpIamAccessRoleBinding.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementRequesterJustificationConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementRequesterJustificationConfigNotMandatory.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementRequesterJustificationConfigUnstructured.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketsArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketsPlainArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/storage/outputs/GetBucketsBucket.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/storage/outputs/GetBucketsResult.java create mode 100644 sdk/nodejs/privilegedaccessmanager/entitlement.ts create mode 100644 sdk/nodejs/privilegedaccessmanager/index.ts create mode 100644 sdk/nodejs/storage/getBuckets.ts create mode 100644 sdk/python/pulumi_gcp/privilegedaccessmanager/__init__.py create mode 100644 sdk/python/pulumi_gcp/privilegedaccessmanager/_inputs.py create mode 100644 sdk/python/pulumi_gcp/privilegedaccessmanager/entitlement.py create mode 100644 sdk/python/pulumi_gcp/privilegedaccessmanager/outputs.py create mode 100644 sdk/python/pulumi_gcp/storage/get_buckets.py diff --git a/provider/cmd/pulumi-resource-gcp/bridge-metadata.json b/provider/cmd/pulumi-resource-gcp/bridge-metadata.json index 0c21cdf7f5..cba186b930 100644 --- a/provider/cmd/pulumi-resource-gcp/bridge-metadata.json +++ b/provider/cmd/pulumi-resource-gcp/bridge-metadata.json @@ -942,6 +942,23 @@ "initial_user": { "maxItemsOne": true }, + "maintenance_update_policy": { + "maxItemsOne": true, + "elem": { + "fields": { + "maintenance_windows": { + "maxItemsOne": false, + "elem": { + "fields": { + "start_time": { + "maxItemsOne": true + } + } + } + } + } + } + }, "migration_source": { "maxItemsOne": false }, @@ -9361,6 +9378,9 @@ "sandbox_config": { "maxItemsOne": true }, + "secondary_boot_disks": { + "maxItemsOne": false + }, "shielded_instance_config": { "maxItemsOne": true }, @@ -9500,6 +9520,9 @@ "sandbox_config": { "maxItemsOne": true }, + "secondary_boot_disks": { + "maxItemsOne": false + }, "shielded_instance_config": { "maxItemsOne": true }, @@ -9779,6 +9802,9 @@ "sandbox_config": { "maxItemsOne": true }, + "secondary_boot_disks": { + "maxItemsOne": false + }, "shielded_instance_config": { "maxItemsOne": true }, @@ -22089,6 +22115,99 @@ "current": "gcp:certificateauthority/certificateTemplateIamPolicy:CertificateTemplateIamPolicy", "majorVersion": 7 }, + "google_privileged_access_manager_entitlement": { + "current": "gcp:privilegedaccessmanager/entitlement:entitlement", + "majorVersion": 7, + "fields": { + "additional_notification_targets": { + "maxItemsOne": true, + "elem": { + "fields": { + "admin_email_recipients": { + "maxItemsOne": false + }, + "requester_email_recipients": { + "maxItemsOne": false + } + } + } + }, + "approval_workflow": { + "maxItemsOne": true, + "elem": { + "fields": { + "manual_approvals": { + "maxItemsOne": true, + "elem": { + "fields": { + "steps": { + "maxItemsOne": false, + "elem": { + "fields": { + "approver_email_recipients": { + "maxItemsOne": false + }, + "approvers": { + "maxItemsOne": true, + "elem": { + "fields": { + "principals": { + "maxItemsOne": false + } + } + } + } + } + } + } + } + } + } + } + } + }, + "eligible_users": { + "maxItemsOne": false, + "elem": { + "fields": { + "principals": { + "maxItemsOne": false + } + } + } + }, + "privileged_access": { + "maxItemsOne": true, + "elem": { + "fields": { + "gcp_iam_access": { + "maxItemsOne": true, + "elem": { + "fields": { + "role_bindings": { + "maxItemsOne": false + } + } + } + } + } + } + }, + "requester_justification_config": { + "maxItemsOne": true, + "elem": { + "fields": { + "not_mandatory": { + "maxItemsOne": true + }, + "unstructured": { + "maxItemsOne": true + } + } + } + } + } + }, "google_project": { "current": "gcp:organizations/project:Project", "majorVersion": 7 @@ -27687,6 +27806,9 @@ "sandbox_config": { "maxItemsOne": false }, + "secondary_boot_disks": { + "maxItemsOne": false + }, "shielded_instance_config": { "maxItemsOne": false }, @@ -27826,6 +27948,9 @@ "sandbox_config": { "maxItemsOne": false }, + "secondary_boot_disks": { + "maxItemsOne": false + }, "shielded_instance_config": { "maxItemsOne": false }, @@ -29636,6 +29761,15 @@ } } }, + "google_storage_buckets": { + "current": "gcp:storage/getBuckets:getBuckets", + "majorVersion": 7, + "fields": { + "buckets": { + "maxItemsOne": false + } + } + }, "google_storage_object_signed_url": { "current": "gcp:storage/getObjectSignedUrl:getObjectSignedUrl", "majorVersion": 7 @@ -31499,6 +31633,7 @@ "gcp:osconfig/patchDeployment:PatchDeployment": 0, "gcp:oslogin/sshPublicKey:SshPublicKey": 0, "gcp:parallelstore/instance:Instance": 0, + "gcp:privilegedaccessmanager/entitlement:entitlement": 0, "gcp:projects/accessApprovalSettings:AccessApprovalSettings": 0, "gcp:projects/apiKey:ApiKey": 0, "gcp:projects/defaultServiceAccounts:DefaultServiceAccounts": 0, @@ -31933,6 +32068,7 @@ "gcp:storage/getBucketObject:getBucketObject": 0, "gcp:storage/getBucketObjectContent:getBucketObjectContent": 0, "gcp:storage/getBucketObjects:getBucketObjects": 0, + "gcp:storage/getBuckets:getBuckets": 0, "gcp:storage/getObjectSignedUrl:getObjectSignedUrl": 0, "gcp:storage/getProjectServiceAccount:getProjectServiceAccount": 0, "gcp:storage/getTransferProjectServiceAccount:getTransferProjectServiceAccount": 0, diff --git a/provider/cmd/pulumi-resource-gcp/schema.json b/provider/cmd/pulumi-resource-gcp/schema.json index 202ab47338..59eb08703d 100644 --- a/provider/cmd/pulumi-resource-gcp/schema.json +++ b/provider/cmd/pulumi-resource-gcp/schema.json @@ -110,6 +110,7 @@ "osconfig": "OsConfig", "oslogin": "OsLogin", "parallelstore": "ParallelStore", + "privilegedaccessmanager": "PrivilegedAccessManager", "projects": "Projects", "pubsub": "PubSub", "recaptcha": "Recaptcha", @@ -556,6 +557,9 @@ "privatecaCustomEndpoint": { "type": "string" }, + "privilegedAccessManagerCustomEndpoint": { + "type": "string" + }, "project": { "type": "string", "defaultInfo": { @@ -2889,6 +2893,59 @@ "password" ] }, + "gcp:alloydb/ClusterMaintenanceUpdatePolicy:ClusterMaintenanceUpdatePolicy": { + "properties": { + "maintenanceWindows": { + "type": "array", + "items": { + "$ref": "#/types/gcp:alloydb/ClusterMaintenanceUpdatePolicyMaintenanceWindow:ClusterMaintenanceUpdatePolicyMaintenanceWindow" + }, + "description": "Preferred windows to perform maintenance. Currently limited to 1.\nStructure is documented below.\n" + } + }, + "type": "object" + }, + "gcp:alloydb/ClusterMaintenanceUpdatePolicyMaintenanceWindow:ClusterMaintenanceUpdatePolicyMaintenanceWindow": { + "properties": { + "day": { + "type": "string", + "description": "Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc.\nPossible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`.\n" + }, + "startTime": { + "$ref": "#/types/gcp:alloydb/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime:ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime", + "description": "Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time.\nStructure is documented below.\n" + } + }, + "type": "object", + "required": [ + "day", + "startTime" + ] + }, + "gcp:alloydb/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime:ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime": { + "properties": { + "hours": { + "type": "integer", + "description": "Hours of day in 24 hour format. Should be from 0 to 23.\n" + }, + "minutes": { + "type": "integer", + "description": "Minutes of hour of day. Currently, only the value 0 is supported.\n" + }, + "nanos": { + "type": "integer", + "description": "Fractions of seconds in nanoseconds. Currently, only the value 0 is supported.\n" + }, + "seconds": { + "type": "integer", + "description": "Seconds of minutes of the time. Currently, only the value 0 is supported.\n" + } + }, + "type": "object", + "required": [ + "hours" + ] + }, "gcp:alloydb/ClusterMigrationSource:ClusterMigrationSource": { "properties": { "hostPort": { @@ -37934,7 +37991,7 @@ }, "multiplier": { "type": "integer", - "description": "The number of consecutive BFD packets that must be missed before\nBFD declares that a peer is unavailable. If set, the value must\nbe a value between 5 and 16.\n" + "description": "The number of consecutive BFD packets that must be missed before\nBFD declares that a peer is unavailable. If set, the value must\nbe a value between 5 and 16.\n\n\u003ca name=\"nested_md5_authentication_key\"\u003e\u003c/a\u003eThe `md5_authentication_key` block supports:\n" }, "sessionInitializationMode": { "type": "string", @@ -49023,6 +49080,14 @@ "description": "Sandbox configuration for this node.\n", "willReplaceOnChanges": true }, + "secondaryBootDisks": { + "type": "array", + "items": { + "$ref": "#/types/gcp:container/ClusterNodeConfigSecondaryBootDisk:ClusterNodeConfigSecondaryBootDisk" + }, + "description": "Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions.\n", + "willReplaceOnChanges": true + }, "serviceAccount": { "type": "string", "description": "The service account to be used by the Node VMs.\nIf not specified, the \"default\" service account is used.\n", @@ -49241,7 +49306,7 @@ "properties": { "gpuSharingStrategy": { "type": "string", - "description": "The type of GPU sharing strategy to enable on the GPU node.\nAccepted values are:\n* `\"TIME_SHARING\"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device.\n", + "description": "The type of GPU sharing strategy to enable on the GPU node.\nAccepted values are:\n* `\"TIME_SHARING\"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device.\n* `\"MPS\"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus)\n", "willReplaceOnChanges": true }, "maxSharedClientsPerGpu": { @@ -49380,6 +49445,24 @@ "sandboxType" ] }, + "gcp:container/ClusterNodeConfigSecondaryBootDisk:ClusterNodeConfigSecondaryBootDisk": { + "properties": { + "diskImage": { + "type": "string", + "description": "Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`.\n", + "willReplaceOnChanges": true + }, + "mode": { + "type": "string", + "description": "Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`.\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "required": [ + "diskImage" + ] + }, "gcp:container/ClusterNodeConfigShieldedInstanceConfig:ClusterNodeConfigShieldedInstanceConfig": { "properties": { "enableIntegrityMonitoring": { @@ -49981,6 +50064,14 @@ "description": "Sandbox configuration for this node.\n", "willReplaceOnChanges": true }, + "secondaryBootDisks": { + "type": "array", + "items": { + "$ref": "#/types/gcp:container/ClusterNodePoolNodeConfigSecondaryBootDisk:ClusterNodePoolNodeConfigSecondaryBootDisk" + }, + "description": "Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions.\n", + "willReplaceOnChanges": true + }, "serviceAccount": { "type": "string", "description": "The service account to be used by the Node VMs.\nIf not specified, the \"default\" service account is used.\n", @@ -50198,7 +50289,7 @@ "properties": { "gpuSharingStrategy": { "type": "string", - "description": "The type of GPU sharing strategy to enable on the GPU node.\nAccepted values are:\n* `\"TIME_SHARING\"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device.\n", + "description": "The type of GPU sharing strategy to enable on the GPU node.\nAccepted values are:\n* `\"TIME_SHARING\"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device.\n* `\"MPS\"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus)\n", "willReplaceOnChanges": true }, "maxSharedClientsPerGpu": { @@ -50337,6 +50428,24 @@ "sandboxType" ] }, + "gcp:container/ClusterNodePoolNodeConfigSecondaryBootDisk:ClusterNodePoolNodeConfigSecondaryBootDisk": { + "properties": { + "diskImage": { + "type": "string", + "description": "Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`.\n", + "willReplaceOnChanges": true + }, + "mode": { + "type": "string", + "description": "Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`.\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "required": [ + "diskImage" + ] + }, "gcp:container/ClusterNodePoolNodeConfigShieldedInstanceConfig:ClusterNodePoolNodeConfigShieldedInstanceConfig": { "properties": { "enableIntegrityMonitoring": { @@ -51174,6 +51283,14 @@ "description": "Sandbox configuration for this node.\n", "willReplaceOnChanges": true }, + "secondaryBootDisks": { + "type": "array", + "items": { + "$ref": "#/types/gcp:container/NodePoolNodeConfigSecondaryBootDisk:NodePoolNodeConfigSecondaryBootDisk" + }, + "description": "Secondary boot disks for preloading data or container images.\n", + "willReplaceOnChanges": true + }, "serviceAccount": { "type": "string", "description": "The Google Cloud Platform Service Account to be used by the node VMs.\n", @@ -51530,6 +51647,24 @@ "sandboxType" ] }, + "gcp:container/NodePoolNodeConfigSecondaryBootDisk:NodePoolNodeConfigSecondaryBootDisk": { + "properties": { + "diskImage": { + "type": "string", + "description": "Disk image to create the secondary boot disk from\n", + "willReplaceOnChanges": true + }, + "mode": { + "type": "string", + "description": "Mode for how the secondary boot disk is used.\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "required": [ + "diskImage" + ] + }, "gcp:container/NodePoolNodeConfigShieldedInstanceConfig:NodePoolNodeConfigShieldedInstanceConfig": { "properties": { "enableIntegrityMonitoring": { @@ -53260,6 +53395,13 @@ }, "description": "Sandbox configuration for this node.\n" }, + "secondaryBootDisks": { + "type": "array", + "items": { + "$ref": "#/types/gcp:container/getClusterNodeConfigSecondaryBootDisk:getClusterNodeConfigSecondaryBootDisk" + }, + "description": "Secondary boot disks for preloading data or container images.\n" + }, "serviceAccount": { "type": "string", "description": "The Google Cloud Platform Service Account to be used by the node VMs.\n" @@ -53337,6 +53479,7 @@ "resourceLabels", "resourceManagerTags", "sandboxConfigs", + "secondaryBootDisks", "serviceAccount", "shieldedInstanceConfigs", "soleTenantConfigs", @@ -53717,6 +53860,28 @@ } } }, + "gcp:container/getClusterNodeConfigSecondaryBootDisk:getClusterNodeConfigSecondaryBootDisk": { + "properties": { + "diskImage": { + "type": "string", + "description": "Disk image to create the secondary boot disk from\n" + }, + "mode": { + "type": "string", + "description": "Mode for how the secondary boot disk is used.\n" + } + }, + "type": "object", + "required": [ + "diskImage", + "mode" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:container/getClusterNodeConfigShieldedInstanceConfig:getClusterNodeConfigShieldedInstanceConfig": { "properties": { "enableIntegrityMonitoring": { @@ -54455,6 +54620,13 @@ }, "description": "Sandbox configuration for this node.\n" }, + "secondaryBootDisks": { + "type": "array", + "items": { + "$ref": "#/types/gcp:container/getClusterNodePoolNodeConfigSecondaryBootDisk:getClusterNodePoolNodeConfigSecondaryBootDisk" + }, + "description": "Secondary boot disks for preloading data or container images.\n" + }, "serviceAccount": { "type": "string", "description": "The Google Cloud Platform Service Account to be used by the node VMs.\n" @@ -54532,6 +54704,7 @@ "resourceLabels", "resourceManagerTags", "sandboxConfigs", + "secondaryBootDisks", "serviceAccount", "shieldedInstanceConfigs", "soleTenantConfigs", @@ -54912,6 +55085,28 @@ } } }, + "gcp:container/getClusterNodePoolNodeConfigSecondaryBootDisk:getClusterNodePoolNodeConfigSecondaryBootDisk": { + "properties": { + "diskImage": { + "type": "string", + "description": "Disk image to create the secondary boot disk from\n" + }, + "mode": { + "type": "string", + "description": "Mode for how the secondary boot disk is used.\n" + } + }, + "type": "object", + "required": [ + "diskImage", + "mode" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:container/getClusterNodePoolNodeConfigShieldedInstanceConfig:getClusterNodePoolNodeConfigShieldedInstanceConfig": { "properties": { "enableIntegrityMonitoring": { @@ -92644,6 +92839,181 @@ }, "type": "object" }, + "gcp:privilegedaccessmanager/entitlementAdditionalNotificationTargets:entitlementAdditionalNotificationTargets": { + "properties": { + "adminEmailRecipients": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Optional. Additional email addresses to be notified when a principal(requester) is granted access.\n" + }, + "requesterEmailRecipients": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Optional. Additional email address to be notified about an eligible entitlement.\n" + } + }, + "type": "object" + }, + "gcp:privilegedaccessmanager/entitlementApprovalWorkflow:entitlementApprovalWorkflow": { + "properties": { + "manualApprovals": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementApprovalWorkflowManualApprovals:entitlementApprovalWorkflowManualApprovals", + "description": "A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant.\nThe workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step.\nThis can be used to create approval workflows such as\n* Require an approval from any user in a group G.\n* Require an approval from any k number of users from a Group G.\n* Require an approval from any user in a group G and then from a user U. etc.\nA single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted.\nStructure is documented below.\n" + } + }, + "type": "object", + "required": [ + "manualApprovals" + ] + }, + "gcp:privilegedaccessmanager/entitlementApprovalWorkflowManualApprovals:entitlementApprovalWorkflowManualApprovals": { + "properties": { + "requireApproverJustification": { + "type": "boolean", + "description": "Optional. Do the approvers need to provide a justification for their actions?\n" + }, + "steps": { + "type": "array", + "items": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementApprovalWorkflowManualApprovalsStep:entitlementApprovalWorkflowManualApprovalsStep" + }, + "description": "List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now.\nStructure is documented below.\n" + } + }, + "type": "object", + "required": [ + "steps" + ] + }, + "gcp:privilegedaccessmanager/entitlementApprovalWorkflowManualApprovalsStep:entitlementApprovalWorkflowManualApprovalsStep": { + "properties": { + "approvalsNeeded": { + "type": "integer", + "description": "How many users from the above list need to approve.\nIf there are not enough distinct users in the list above then the workflow\nwill indefinitely block. Should always be greater than 0. Currently 1 is the only\nsupported value.\n" + }, + "approverEmailRecipients": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Optional. Additional email addresses to be notified when a grant is pending approval.\n" + }, + "approvers": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementApprovalWorkflowManualApprovalsStepApprovers:entitlementApprovalWorkflowManualApprovalsStepApprovers", + "description": "The potential set of approvers in this step. This list should contain at only one entry.\nStructure is documented below.\n" + } + }, + "type": "object", + "required": [ + "approvers" + ] + }, + "gcp:privilegedaccessmanager/entitlementApprovalWorkflowManualApprovalsStepApprovers:entitlementApprovalWorkflowManualApprovalsStepApprovers": { + "properties": { + "principals": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1\n" + } + }, + "type": "object", + "required": [ + "principals" + ] + }, + "gcp:privilegedaccessmanager/entitlementEligibleUser:entitlementEligibleUser": { + "properties": { + "principals": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at \"https://cloud.google.com/iam/docs/principal-identifiers#v1\"\n" + } + }, + "type": "object", + "required": [ + "principals" + ] + }, + "gcp:privilegedaccessmanager/entitlementPrivilegedAccess:entitlementPrivilegedAccess": { + "properties": { + "gcpIamAccess": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementPrivilegedAccessGcpIamAccess:entitlementPrivilegedAccessGcpIamAccess", + "description": "GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM.\nStructure is documented below.\n" + } + }, + "type": "object", + "required": [ + "gcpIamAccess" + ] + }, + "gcp:privilegedaccessmanager/entitlementPrivilegedAccessGcpIamAccess:entitlementPrivilegedAccessGcpIamAccess": { + "properties": { + "resource": { + "type": "string", + "description": "Name of the resource.\n" + }, + "resourceType": { + "type": "string", + "description": "The type of this resource.\n" + }, + "roleBindings": { + "type": "array", + "items": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementPrivilegedAccessGcpIamAccessRoleBinding:entitlementPrivilegedAccessGcpIamAccessRoleBinding" + }, + "description": "Role bindings to be created on successful grant.\nStructure is documented below.\n" + } + }, + "type": "object", + "required": [ + "resource", + "resourceType", + "roleBindings" + ] + }, + "gcp:privilegedaccessmanager/entitlementPrivilegedAccessGcpIamAccessRoleBinding:entitlementPrivilegedAccessGcpIamAccessRoleBinding": { + "properties": { + "conditionExpression": { + "type": "string", + "description": "The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request.\nhttps://cloud.google.com/iam/docs/conditions-overview#attributes.\n" + }, + "role": { + "type": "string", + "description": "IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview.\n" + } + }, + "type": "object", + "required": [ + "role" + ] + }, + "gcp:privilegedaccessmanager/entitlementRequesterJustificationConfig:entitlementRequesterJustificationConfig": { + "properties": { + "notMandatory": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementRequesterJustificationConfigNotMandatory:entitlementRequesterJustificationConfigNotMandatory", + "description": "The justification is not mandatory but can be provided in any of the supported formats.\n" + }, + "unstructured": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementRequesterJustificationConfigUnstructured:entitlementRequesterJustificationConfigUnstructured", + "description": "The requester has to provide a justification in the form of free flowing text.\n\n- - -\n" + } + }, + "type": "object" + }, + "gcp:privilegedaccessmanager/entitlementRequesterJustificationConfigNotMandatory:entitlementRequesterJustificationConfigNotMandatory": { + "type": "object" + }, + "gcp:privilegedaccessmanager/entitlementRequesterJustificationConfigUnstructured:entitlementRequesterJustificationConfigUnstructured": { + "type": "object" + }, "gcp:projects/AccessApprovalSettingsEnrolledService:AccessApprovalSettingsEnrolledService": { "properties": { "cloudProduct": { @@ -100690,6 +101060,46 @@ } } }, + "gcp:storage/getBucketsBucket:getBucketsBucket": { + "properties": { + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User-provided bucket labels, in key/value pairs.\n" + }, + "location": { + "type": "string", + "description": "The location of the bucket.\n" + }, + "name": { + "type": "string", + "description": "The name of the bucket.\n" + }, + "selfLink": { + "type": "string", + "description": "A url reference to the bucket.\n" + }, + "storageClass": { + "type": "string", + "description": "The [StorageClass](https://cloud.google.com/storage/docs/storage-classes) of the bucket.\n" + } + }, + "type": "object", + "required": [ + "labels", + "location", + "name", + "selfLink", + "storageClass" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:tags/TagKeyIamBindingCondition:TagKeyIamBindingCondition": { "properties": { "description": { @@ -104335,6 +104745,9 @@ "privatecaCustomEndpoint": { "type": "string" }, + "privilegedAccessManagerCustomEndpoint": { + "type": "string" + }, "project": { "type": "string" }, @@ -104851,6 +105264,9 @@ "privatecaCustomEndpoint": { "type": "string" }, + "privilegedAccessManagerCustomEndpoint": { + "type": "string" + }, "project": { "type": "string", "defaultInfo": { @@ -107353,6 +107769,10 @@ "type": "string", "description": "The location where the alloydb cluster should reside.\n\n\n- - -\n" }, + "maintenanceUpdatePolicy": { + "$ref": "#/types/gcp:alloydb/ClusterMaintenanceUpdatePolicy:ClusterMaintenanceUpdatePolicy", + "description": "MaintenanceUpdatePolicy defines the policy for system updates.\nStructure is documented below.\n" + }, "migrationSources": { "type": "array", "items": { @@ -107492,6 +107912,10 @@ "description": "The location where the alloydb cluster should reside.\n\n\n- - -\n", "willReplaceOnChanges": true }, + "maintenanceUpdatePolicy": { + "$ref": "#/types/gcp:alloydb/ClusterMaintenanceUpdatePolicy:ClusterMaintenanceUpdatePolicy", + "description": "MaintenanceUpdatePolicy defines the policy for system updates.\nStructure is documented below.\n" + }, "network": { "type": "string", "description": "(Optional, Deprecated)\nThe relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form:\n\"projects/{projectNumber}/global/networks/{network_id}\".\n\n\u003e **Warning:** `network` is deprecated and will be removed in a future major release. Instead, use `network_config` to define the network configuration.\n", @@ -107623,6 +108047,10 @@ "description": "The location where the alloydb cluster should reside.\n\n\n- - -\n", "willReplaceOnChanges": true }, + "maintenanceUpdatePolicy": { + "$ref": "#/types/gcp:alloydb/ClusterMaintenanceUpdatePolicy:ClusterMaintenanceUpdatePolicy", + "description": "MaintenanceUpdatePolicy defines the policy for system updates.\nStructure is documented below.\n" + }, "migrationSources": { "type": "array", "items": { @@ -113954,7 +114382,7 @@ } }, "gcp:applicationintegration/authConfig:AuthConfig": { - "description": "The AuthConfig resource use to hold channels and connection config data.\n\n\nTo get more information about AuthConfig, see:\n\n* [API documentation](https://cloud.google.com/application-integration/docs/reference/rest/v1/projects.locations.authConfigs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/application-integration/docs/overview)\n * [Manage authentication profiles](https://cloud.google.com/application-integration/docs/configure-authentication-profiles)\n\n## Example Usage\n\n### Integrations Auth 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 client = new gcp.applicationintegration.Client(\"client\", {\n location: \"us-west1\",\n provisionGmek: true,\n});\nconst basicExample = new gcp.applicationintegration.AuthConfig(\"basic_example\", {\n location: \"us-west1\",\n displayName: \"test-authconfig\",\n description: \"Test auth config created via terraform\",\n decryptedCredential: {\n credentialType: \"USERNAME_AND_PASSWORD\",\n usernameAndPassword: {\n username: \"test-username\",\n password: \"test-password\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nclient = gcp.applicationintegration.Client(\"client\",\n location=\"us-west1\",\n provision_gmek=True)\nbasic_example = gcp.applicationintegration.AuthConfig(\"basic_example\",\n location=\"us-west1\",\n display_name=\"test-authconfig\",\n description=\"Test auth config created via terraform\",\n decrypted_credential=gcp.applicationintegration.AuthConfigDecryptedCredentialArgs(\n credential_type=\"USERNAME_AND_PASSWORD\",\n username_and_password=gcp.applicationintegration.AuthConfigDecryptedCredentialUsernameAndPasswordArgs(\n username=\"test-username\",\n password=\"test-password\",\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 client = new Gcp.ApplicationIntegration.Client(\"client\", new()\n {\n Location = \"us-west1\",\n ProvisionGmek = true,\n });\n\n var basicExample = new Gcp.ApplicationIntegration.AuthConfig(\"basic_example\", new()\n {\n Location = \"us-west1\",\n DisplayName = \"test-authconfig\",\n Description = \"Test auth config created via terraform\",\n DecryptedCredential = new Gcp.ApplicationIntegration.Inputs.AuthConfigDecryptedCredentialArgs\n {\n CredentialType = \"USERNAME_AND_PASSWORD\",\n UsernameAndPassword = new Gcp.ApplicationIntegration.Inputs.AuthConfigDecryptedCredentialUsernameAndPasswordArgs\n {\n Username = \"test-username\",\n Password = \"test-password\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := applicationintegration.NewClient(ctx, \"client\", \u0026applicationintegration.ClientArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tProvisionGmek: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = applicationintegration.NewAuthConfig(ctx, \"basic_example\", \u0026applicationintegration.AuthConfigArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tDisplayName: pulumi.String(\"test-authconfig\"),\n\t\t\tDescription: pulumi.String(\"Test auth config created via terraform\"),\n\t\t\tDecryptedCredential: \u0026applicationintegration.AuthConfigDecryptedCredentialArgs{\n\t\t\t\tCredentialType: pulumi.String(\"USERNAME_AND_PASSWORD\"),\n\t\t\t\tUsernameAndPassword: \u0026applicationintegration.AuthConfigDecryptedCredentialUsernameAndPasswordArgs{\n\t\t\t\t\tUsername: pulumi.String(\"test-username\"),\n\t\t\t\t\tPassword: pulumi.String(\"test-password\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.applicationintegration.Client;\nimport com.pulumi.gcp.applicationintegration.ClientArgs;\nimport com.pulumi.gcp.applicationintegration.AuthConfig;\nimport com.pulumi.gcp.applicationintegration.AuthConfigArgs;\nimport com.pulumi.gcp.applicationintegration.inputs.AuthConfigDecryptedCredentialArgs;\nimport com.pulumi.gcp.applicationintegration.inputs.AuthConfigDecryptedCredentialUsernameAndPasswordArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var client = new Client(\"client\", ClientArgs.builder() \n .location(\"us-west1\")\n .provisionGmek(true)\n .build());\n\n var basicExample = new AuthConfig(\"basicExample\", AuthConfigArgs.builder() \n .location(\"us-west1\")\n .displayName(\"test-authconfig\")\n .description(\"Test auth config created via terraform\")\n .decryptedCredential(AuthConfigDecryptedCredentialArgs.builder()\n .credentialType(\"USERNAME_AND_PASSWORD\")\n .usernameAndPassword(AuthConfigDecryptedCredentialUsernameAndPasswordArgs.builder()\n .username(\"test-username\")\n .password(\"test-password\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n client:\n type: gcp:applicationintegration:Client\n properties:\n location: us-west1\n provisionGmek: true\n basicExample:\n type: gcp:applicationintegration:AuthConfig\n name: basic_example\n properties:\n location: us-west1\n displayName: test-authconfig\n description: Test auth config created via terraform\n decryptedCredential:\n credentialType: USERNAME_AND_PASSWORD\n usernameAndPassword:\n username: test-username\n password: test-password\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAuthConfig can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, AuthConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:applicationintegration/authConfig:AuthConfig default {{name}}\n```\n\n", + "description": "The AuthConfig resource use to hold channels and connection config data.\n\n\nTo get more information about AuthConfig, see:\n\n* [API documentation](https://cloud.google.com/application-integration/docs/reference/rest/v1/projects.locations.authConfigs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/application-integration/docs/overview)\n * [Manage authentication profiles](https://cloud.google.com/application-integration/docs/configure-authentication-profiles)\n\n## Example Usage\n\n### Integrations Auth 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 client = new gcp.applicationintegration.Client(\"client\", {location: \"us-west1\"});\nconst basicExample = new gcp.applicationintegration.AuthConfig(\"basic_example\", {\n location: \"us-west1\",\n displayName: \"test-authconfig\",\n description: \"Test auth config created via terraform\",\n decryptedCredential: {\n credentialType: \"USERNAME_AND_PASSWORD\",\n usernameAndPassword: {\n username: \"test-username\",\n password: \"test-password\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nclient = gcp.applicationintegration.Client(\"client\", location=\"us-west1\")\nbasic_example = gcp.applicationintegration.AuthConfig(\"basic_example\",\n location=\"us-west1\",\n display_name=\"test-authconfig\",\n description=\"Test auth config created via terraform\",\n decrypted_credential=gcp.applicationintegration.AuthConfigDecryptedCredentialArgs(\n credential_type=\"USERNAME_AND_PASSWORD\",\n username_and_password=gcp.applicationintegration.AuthConfigDecryptedCredentialUsernameAndPasswordArgs(\n username=\"test-username\",\n password=\"test-password\",\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 client = new Gcp.ApplicationIntegration.Client(\"client\", new()\n {\n Location = \"us-west1\",\n });\n\n var basicExample = new Gcp.ApplicationIntegration.AuthConfig(\"basic_example\", new()\n {\n Location = \"us-west1\",\n DisplayName = \"test-authconfig\",\n Description = \"Test auth config created via terraform\",\n DecryptedCredential = new Gcp.ApplicationIntegration.Inputs.AuthConfigDecryptedCredentialArgs\n {\n CredentialType = \"USERNAME_AND_PASSWORD\",\n UsernameAndPassword = new Gcp.ApplicationIntegration.Inputs.AuthConfigDecryptedCredentialUsernameAndPasswordArgs\n {\n Username = \"test-username\",\n Password = \"test-password\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := applicationintegration.NewClient(ctx, \"client\", \u0026applicationintegration.ClientArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = applicationintegration.NewAuthConfig(ctx, \"basic_example\", \u0026applicationintegration.AuthConfigArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tDisplayName: pulumi.String(\"test-authconfig\"),\n\t\t\tDescription: pulumi.String(\"Test auth config created via terraform\"),\n\t\t\tDecryptedCredential: \u0026applicationintegration.AuthConfigDecryptedCredentialArgs{\n\t\t\t\tCredentialType: pulumi.String(\"USERNAME_AND_PASSWORD\"),\n\t\t\t\tUsernameAndPassword: \u0026applicationintegration.AuthConfigDecryptedCredentialUsernameAndPasswordArgs{\n\t\t\t\t\tUsername: pulumi.String(\"test-username\"),\n\t\t\t\t\tPassword: pulumi.String(\"test-password\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.applicationintegration.Client;\nimport com.pulumi.gcp.applicationintegration.ClientArgs;\nimport com.pulumi.gcp.applicationintegration.AuthConfig;\nimport com.pulumi.gcp.applicationintegration.AuthConfigArgs;\nimport com.pulumi.gcp.applicationintegration.inputs.AuthConfigDecryptedCredentialArgs;\nimport com.pulumi.gcp.applicationintegration.inputs.AuthConfigDecryptedCredentialUsernameAndPasswordArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var client = new Client(\"client\", ClientArgs.builder() \n .location(\"us-west1\")\n .build());\n\n var basicExample = new AuthConfig(\"basicExample\", AuthConfigArgs.builder() \n .location(\"us-west1\")\n .displayName(\"test-authconfig\")\n .description(\"Test auth config created via terraform\")\n .decryptedCredential(AuthConfigDecryptedCredentialArgs.builder()\n .credentialType(\"USERNAME_AND_PASSWORD\")\n .usernameAndPassword(AuthConfigDecryptedCredentialUsernameAndPasswordArgs.builder()\n .username(\"test-username\")\n .password(\"test-password\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n client:\n type: gcp:applicationintegration:Client\n properties:\n location: us-west1\n basicExample:\n type: gcp:applicationintegration:AuthConfig\n name: basic_example\n properties:\n location: us-west1\n displayName: test-authconfig\n description: Test auth config created via terraform\n decryptedCredential:\n credentialType: USERNAME_AND_PASSWORD\n usernameAndPassword:\n username: test-username\n password: test-password\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAuthConfig can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, AuthConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:applicationintegration/authConfig:AuthConfig default {{name}}\n```\n\n", "properties": { "certificateId": { "type": "string", @@ -114196,15 +114624,20 @@ } }, "gcp:applicationintegration/client:Client": { - "description": "Application Integration Client.\n\n\nTo get more information about Client, see:\n\n* [API documentation](https://cloud.google.com/application-integration/docs/reference/rest/v1/projects.locations.clients)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/application-integration/docs/overview)\n * [Set up Application Integration](https://cloud.google.com/application-integration/docs/setup-application-integration)\n\n## Example Usage\n\n### Integrations Client Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.applicationintegration.Client(\"example\", {\n location: \"us-central1\",\n provisionGmek: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.applicationintegration.Client(\"example\",\n location=\"us-central1\",\n provision_gmek=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.ApplicationIntegration.Client(\"example\", new()\n {\n Location = \"us-central1\",\n ProvisionGmek = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := applicationintegration.NewClient(ctx, \"example\", \u0026applicationintegration.ClientArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tProvisionGmek: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.applicationintegration.Client;\nimport com.pulumi.gcp.applicationintegration.ClientArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Client(\"example\", ClientArgs.builder() \n .location(\"us-central1\")\n .provisionGmek(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:applicationintegration:Client\n properties:\n location: us-central1\n provisionGmek: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Integrations Client Advance\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst testProject = gcp.organizations.getProject({});\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {\n name: \"my-keyring\",\n location: \"us-east1\",\n});\nconst cryptokey = new gcp.kms.CryptoKey(\"cryptokey\", {\n name: \"crypto-key-example\",\n keyRing: keyring.id,\n rotationPeriod: \"7776000s\",\n});\nconst testKey = new gcp.kms.CryptoKeyVersion(\"test_key\", {cryptoKey: cryptokey.id});\nconst serviceAccount = new gcp.serviceaccount.Account(\"service_account\", {\n accountId: \"service-account-id\",\n displayName: \"Service Account\",\n});\nconst example = new gcp.applicationintegration.Client(\"example\", {\n location: \"us-east1\",\n createSampleWorkflows: true,\n runAsServiceAccount: serviceAccount.email,\n cloudKmsConfig: {\n kmsLocation: \"us-east1\",\n kmsRing: keyring.id,\n key: cryptokey.id,\n keyVersion: testKey.id,\n kmsProjectId: testProject.then(testProject =\u003e testProject.projectId),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest_project = gcp.organizations.get_project()\nkeyring = gcp.kms.KeyRing(\"keyring\",\n name=\"my-keyring\",\n location=\"us-east1\")\ncryptokey = gcp.kms.CryptoKey(\"cryptokey\",\n name=\"crypto-key-example\",\n key_ring=keyring.id,\n rotation_period=\"7776000s\")\ntest_key = gcp.kms.CryptoKeyVersion(\"test_key\", crypto_key=cryptokey.id)\nservice_account = gcp.serviceaccount.Account(\"service_account\",\n account_id=\"service-account-id\",\n display_name=\"Service Account\")\nexample = gcp.applicationintegration.Client(\"example\",\n location=\"us-east1\",\n create_sample_workflows=True,\n run_as_service_account=service_account.email,\n cloud_kms_config=gcp.applicationintegration.ClientCloudKmsConfigArgs(\n kms_location=\"us-east1\",\n kms_ring=keyring.id,\n key=cryptokey.id,\n key_version=test_key.id,\n kms_project_id=test_project.project_id,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Name = \"my-keyring\",\n Location = \"us-east1\",\n });\n\n var cryptokey = new Gcp.Kms.CryptoKey(\"cryptokey\", new()\n {\n Name = \"crypto-key-example\",\n KeyRing = keyring.Id,\n RotationPeriod = \"7776000s\",\n });\n\n var testKey = new Gcp.Kms.CryptoKeyVersion(\"test_key\", new()\n {\n CryptoKey = cryptokey.Id,\n });\n\n var serviceAccount = new Gcp.ServiceAccount.Account(\"service_account\", new()\n {\n AccountId = \"service-account-id\",\n DisplayName = \"Service Account\",\n });\n\n var example = new Gcp.ApplicationIntegration.Client(\"example\", new()\n {\n Location = \"us-east1\",\n CreateSampleWorkflows = true,\n RunAsServiceAccount = serviceAccount.Email,\n CloudKmsConfig = new Gcp.ApplicationIntegration.Inputs.ClientCloudKmsConfigArgs\n {\n KmsLocation = \"us-east1\",\n KmsRing = keyring.Id,\n Key = cryptokey.Id,\n KeyVersion = testKey.Id,\n KmsProjectId = testProject.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"my-keyring\"),\n\t\t\tLocation: pulumi.String(\"us-east1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptokey, err := kms.NewCryptoKey(ctx, \"cryptokey\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"crypto-key-example\"),\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tRotationPeriod: pulumi.String(\"7776000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestKey, err := kms.NewCryptoKeyVersion(ctx, \"test_key\", \u0026kms.CryptoKeyVersionArgs{\n\t\t\tCryptoKey: cryptokey.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tserviceAccount, err := serviceaccount.NewAccount(ctx, \"service_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"service-account-id\"),\n\t\t\tDisplayName: pulumi.String(\"Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = applicationintegration.NewClient(ctx, \"example\", \u0026applicationintegration.ClientArgs{\n\t\t\tLocation: pulumi.String(\"us-east1\"),\n\t\t\tCreateSampleWorkflows: pulumi.Bool(true),\n\t\t\tRunAsServiceAccount: serviceAccount.Email,\n\t\t\tCloudKmsConfig: \u0026applicationintegration.ClientCloudKmsConfigArgs{\n\t\t\t\tKmsLocation: pulumi.String(\"us-east1\"),\n\t\t\t\tKmsRing: keyring.ID(),\n\t\t\t\tKey: cryptokey.ID(),\n\t\t\t\tKeyVersion: testKey.ID(),\n\t\t\t\tKmsProjectId: pulumi.String(testProject.ProjectId),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.kms.CryptoKeyVersion;\nimport com.pulumi.gcp.kms.CryptoKeyVersionArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.applicationintegration.Client;\nimport com.pulumi.gcp.applicationintegration.ClientArgs;\nimport com.pulumi.gcp.applicationintegration.inputs.ClientCloudKmsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testProject = OrganizationsFunctions.getProject();\n\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .name(\"my-keyring\")\n .location(\"us-east1\")\n .build());\n\n var cryptokey = new CryptoKey(\"cryptokey\", CryptoKeyArgs.builder() \n .name(\"crypto-key-example\")\n .keyRing(keyring.id())\n .rotationPeriod(\"7776000s\")\n .build());\n\n var testKey = new CryptoKeyVersion(\"testKey\", CryptoKeyVersionArgs.builder() \n .cryptoKey(cryptokey.id())\n .build());\n\n var serviceAccount = new Account(\"serviceAccount\", AccountArgs.builder() \n .accountId(\"service-account-id\")\n .displayName(\"Service Account\")\n .build());\n\n var example = new Client(\"example\", ClientArgs.builder() \n .location(\"us-east1\")\n .createSampleWorkflows(true)\n .runAsServiceAccount(serviceAccount.email())\n .cloudKmsConfig(ClientCloudKmsConfigArgs.builder()\n .kmsLocation(\"us-east1\")\n .kmsRing(keyring.id())\n .key(cryptokey.id())\n .keyVersion(testKey.id())\n .kmsProjectId(testProject.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n name: my-keyring\n location: us-east1\n cryptokey:\n type: gcp:kms:CryptoKey\n properties:\n name: crypto-key-example\n keyRing: ${keyring.id}\n rotationPeriod: 7776000s\n testKey:\n type: gcp:kms:CryptoKeyVersion\n name: test_key\n properties:\n cryptoKey: ${cryptokey.id}\n serviceAccount:\n type: gcp:serviceaccount:Account\n name: service_account\n properties:\n accountId: service-account-id\n displayName: Service Account\n example:\n type: gcp:applicationintegration:Client\n properties:\n location: us-east1\n createSampleWorkflows: true\n runAsServiceAccount: ${serviceAccount.email}\n cloudKmsConfig:\n kmsLocation: us-east1\n kmsRing: ${keyring.id}\n key: ${cryptokey.id}\n keyVersion: ${testKey.id}\n kmsProjectId: ${testProject.projectId}\nvariables:\n testProject:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nClient can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/clients`\n\n* `{{project}}/{{location}}`\n\n* `{{location}}`\n\nWhen using the `pulumi import` command, Client can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:applicationintegration/client:Client default projects/{{project}}/locations/{{location}}/clients\n```\n\n```sh\n$ pulumi import gcp:applicationintegration/client:Client default {{project}}/{{location}}\n```\n\n```sh\n$ pulumi import gcp:applicationintegration/client:Client default {{location}}\n```\n\n", + "description": "Application Integration Client.\n\n\nTo get more information about Client, see:\n\n* [API documentation](https://cloud.google.com/application-integration/docs/reference/rest/v1/projects.locations.clients)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/application-integration/docs/overview)\n * [Set up Application Integration](https://cloud.google.com/application-integration/docs/setup-application-integration)\n\n## Example Usage\n\n### Integrations Client Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.applicationintegration.Client(\"example\", {location: \"us-central1\"});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.applicationintegration.Client(\"example\", location=\"us-central1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.ApplicationIntegration.Client(\"example\", new()\n {\n Location = \"us-central1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := applicationintegration.NewClient(ctx, \"example\", \u0026applicationintegration.ClientArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.applicationintegration.Client;\nimport com.pulumi.gcp.applicationintegration.ClientArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Client(\"example\", ClientArgs.builder() \n .location(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:applicationintegration:Client\n properties:\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Integrations Client Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst testProject = gcp.organizations.getProject({});\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {\n name: \"my-keyring\",\n location: \"us-east1\",\n});\nconst cryptokey = new gcp.kms.CryptoKey(\"cryptokey\", {\n name: \"crypto-key-example\",\n keyRing: keyring.id,\n rotationPeriod: \"7776000s\",\n});\nconst testKey = new gcp.kms.CryptoKeyVersion(\"test_key\", {cryptoKey: cryptokey.id});\nconst serviceAccount = new gcp.serviceaccount.Account(\"service_account\", {\n accountId: \"service-account-id\",\n displayName: \"Service Account\",\n});\nconst example = new gcp.applicationintegration.Client(\"example\", {\n location: \"us-east1\",\n createSampleIntegrations: true,\n runAsServiceAccount: serviceAccount.email,\n cloudKmsConfig: {\n kmsLocation: \"us-east1\",\n kmsRing: keyring.id,\n key: cryptokey.id,\n keyVersion: testKey.id,\n kmsProjectId: testProject.then(testProject =\u003e testProject.projectId),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest_project = gcp.organizations.get_project()\nkeyring = gcp.kms.KeyRing(\"keyring\",\n name=\"my-keyring\",\n location=\"us-east1\")\ncryptokey = gcp.kms.CryptoKey(\"cryptokey\",\n name=\"crypto-key-example\",\n key_ring=keyring.id,\n rotation_period=\"7776000s\")\ntest_key = gcp.kms.CryptoKeyVersion(\"test_key\", crypto_key=cryptokey.id)\nservice_account = gcp.serviceaccount.Account(\"service_account\",\n account_id=\"service-account-id\",\n display_name=\"Service Account\")\nexample = gcp.applicationintegration.Client(\"example\",\n location=\"us-east1\",\n create_sample_integrations=True,\n run_as_service_account=service_account.email,\n cloud_kms_config=gcp.applicationintegration.ClientCloudKmsConfigArgs(\n kms_location=\"us-east1\",\n kms_ring=keyring.id,\n key=cryptokey.id,\n key_version=test_key.id,\n kms_project_id=test_project.project_id,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Name = \"my-keyring\",\n Location = \"us-east1\",\n });\n\n var cryptokey = new Gcp.Kms.CryptoKey(\"cryptokey\", new()\n {\n Name = \"crypto-key-example\",\n KeyRing = keyring.Id,\n RotationPeriod = \"7776000s\",\n });\n\n var testKey = new Gcp.Kms.CryptoKeyVersion(\"test_key\", new()\n {\n CryptoKey = cryptokey.Id,\n });\n\n var serviceAccount = new Gcp.ServiceAccount.Account(\"service_account\", new()\n {\n AccountId = \"service-account-id\",\n DisplayName = \"Service Account\",\n });\n\n var example = new Gcp.ApplicationIntegration.Client(\"example\", new()\n {\n Location = \"us-east1\",\n CreateSampleIntegrations = true,\n RunAsServiceAccount = serviceAccount.Email,\n CloudKmsConfig = new Gcp.ApplicationIntegration.Inputs.ClientCloudKmsConfigArgs\n {\n KmsLocation = \"us-east1\",\n KmsRing = keyring.Id,\n Key = cryptokey.Id,\n KeyVersion = testKey.Id,\n KmsProjectId = testProject.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"my-keyring\"),\n\t\t\tLocation: pulumi.String(\"us-east1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptokey, err := kms.NewCryptoKey(ctx, \"cryptokey\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"crypto-key-example\"),\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tRotationPeriod: pulumi.String(\"7776000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestKey, err := kms.NewCryptoKeyVersion(ctx, \"test_key\", \u0026kms.CryptoKeyVersionArgs{\n\t\t\tCryptoKey: cryptokey.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tserviceAccount, err := serviceaccount.NewAccount(ctx, \"service_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"service-account-id\"),\n\t\t\tDisplayName: pulumi.String(\"Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = applicationintegration.NewClient(ctx, \"example\", \u0026applicationintegration.ClientArgs{\n\t\t\tLocation: pulumi.String(\"us-east1\"),\n\t\t\tCreateSampleIntegrations: pulumi.Bool(true),\n\t\t\tRunAsServiceAccount: serviceAccount.Email,\n\t\t\tCloudKmsConfig: \u0026applicationintegration.ClientCloudKmsConfigArgs{\n\t\t\t\tKmsLocation: pulumi.String(\"us-east1\"),\n\t\t\t\tKmsRing: keyring.ID(),\n\t\t\t\tKey: cryptokey.ID(),\n\t\t\t\tKeyVersion: testKey.ID(),\n\t\t\t\tKmsProjectId: pulumi.String(testProject.ProjectId),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.kms.CryptoKeyVersion;\nimport com.pulumi.gcp.kms.CryptoKeyVersionArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.applicationintegration.Client;\nimport com.pulumi.gcp.applicationintegration.ClientArgs;\nimport com.pulumi.gcp.applicationintegration.inputs.ClientCloudKmsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testProject = OrganizationsFunctions.getProject();\n\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .name(\"my-keyring\")\n .location(\"us-east1\")\n .build());\n\n var cryptokey = new CryptoKey(\"cryptokey\", CryptoKeyArgs.builder() \n .name(\"crypto-key-example\")\n .keyRing(keyring.id())\n .rotationPeriod(\"7776000s\")\n .build());\n\n var testKey = new CryptoKeyVersion(\"testKey\", CryptoKeyVersionArgs.builder() \n .cryptoKey(cryptokey.id())\n .build());\n\n var serviceAccount = new Account(\"serviceAccount\", AccountArgs.builder() \n .accountId(\"service-account-id\")\n .displayName(\"Service Account\")\n .build());\n\n var example = new Client(\"example\", ClientArgs.builder() \n .location(\"us-east1\")\n .createSampleIntegrations(true)\n .runAsServiceAccount(serviceAccount.email())\n .cloudKmsConfig(ClientCloudKmsConfigArgs.builder()\n .kmsLocation(\"us-east1\")\n .kmsRing(keyring.id())\n .key(cryptokey.id())\n .keyVersion(testKey.id())\n .kmsProjectId(testProject.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n name: my-keyring\n location: us-east1\n cryptokey:\n type: gcp:kms:CryptoKey\n properties:\n name: crypto-key-example\n keyRing: ${keyring.id}\n rotationPeriod: 7776000s\n testKey:\n type: gcp:kms:CryptoKeyVersion\n name: test_key\n properties:\n cryptoKey: ${cryptokey.id}\n serviceAccount:\n type: gcp:serviceaccount:Account\n name: service_account\n properties:\n accountId: service-account-id\n displayName: Service Account\n example:\n type: gcp:applicationintegration:Client\n properties:\n location: us-east1\n createSampleIntegrations: true\n runAsServiceAccount: ${serviceAccount.email}\n cloudKmsConfig:\n kmsLocation: us-east1\n kmsRing: ${keyring.id}\n key: ${cryptokey.id}\n keyVersion: ${testKey.id}\n kmsProjectId: ${testProject.projectId}\nvariables:\n testProject:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nClient can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/clients`\n\n* `{{project}}/{{location}}`\n\n* `{{location}}`\n\nWhen using the `pulumi import` command, Client can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:applicationintegration/client:Client default projects/{{project}}/locations/{{location}}/clients\n```\n\n```sh\n$ pulumi import gcp:applicationintegration/client:Client default {{project}}/{{location}}\n```\n\n```sh\n$ pulumi import gcp:applicationintegration/client:Client default {{location}}\n```\n\n", "properties": { "cloudKmsConfig": { "$ref": "#/types/gcp:applicationintegration/ClientCloudKmsConfig:ClientCloudKmsConfig", "description": "Cloud KMS config for AuthModule to encrypt/decrypt credentials.\nStructure is documented below.\n" }, + "createSampleIntegrations": { + "type": "boolean", + "description": "Indicates if sample integrations should be created along with provisioning.\n" + }, "createSampleWorkflows": { "type": "boolean", - "description": "Indicates if sample workflow should be created along with provisioning.\n" + "description": "(Optional, Deprecated)\nIndicates if sample workflow should be created along with provisioning.\n\n\u003e **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.\n", + "deprecationMessage": "`create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead." }, "location": { "type": "string", @@ -114216,7 +114649,8 @@ }, "provisionGmek": { "type": "boolean", - "description": "Indicates provision with GMEK or CMEK.\n" + "description": "(Optional, Deprecated)\nIndicates provision with GMEK or CMEK.\n\n\u003e **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.\n", + "deprecationMessage": "`provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given." }, "runAsServiceAccount": { "type": "string", @@ -114233,9 +114667,15 @@ "description": "Cloud KMS config for AuthModule to encrypt/decrypt credentials.\nStructure is documented below.\n", "willReplaceOnChanges": true }, + "createSampleIntegrations": { + "type": "boolean", + "description": "Indicates if sample integrations should be created along with provisioning.\n", + "willReplaceOnChanges": true + }, "createSampleWorkflows": { "type": "boolean", - "description": "Indicates if sample workflow should be created along with provisioning.\n", + "description": "(Optional, Deprecated)\nIndicates if sample workflow should be created along with provisioning.\n\n\u003e **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.\n", + "deprecationMessage": "`create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.", "willReplaceOnChanges": true }, "location": { @@ -114250,7 +114690,8 @@ }, "provisionGmek": { "type": "boolean", - "description": "Indicates provision with GMEK or CMEK.\n", + "description": "(Optional, Deprecated)\nIndicates provision with GMEK or CMEK.\n\n\u003e **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.\n", + "deprecationMessage": "`provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.", "willReplaceOnChanges": true }, "runAsServiceAccount": { @@ -114270,9 +114711,15 @@ "description": "Cloud KMS config for AuthModule to encrypt/decrypt credentials.\nStructure is documented below.\n", "willReplaceOnChanges": true }, + "createSampleIntegrations": { + "type": "boolean", + "description": "Indicates if sample integrations should be created along with provisioning.\n", + "willReplaceOnChanges": true + }, "createSampleWorkflows": { "type": "boolean", - "description": "Indicates if sample workflow should be created along with provisioning.\n", + "description": "(Optional, Deprecated)\nIndicates if sample workflow should be created along with provisioning.\n\n\u003e **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.\n", + "deprecationMessage": "`create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.", "willReplaceOnChanges": true }, "location": { @@ -114287,7 +114734,8 @@ }, "provisionGmek": { "type": "boolean", - "description": "Indicates provision with GMEK or CMEK.\n", + "description": "(Optional, Deprecated)\nIndicates provision with GMEK or CMEK.\n\n\u003e **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.\n", + "deprecationMessage": "`provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.", "willReplaceOnChanges": true }, "runAsServiceAccount": { @@ -117434,7 +117882,7 @@ } }, "gcp:bigquery/dataset:Dataset": { - "description": "## Example Usage\n\n### Bigquery Dataset Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bqowner = new gcp.serviceaccount.Account(\"bqowner\", {accountId: \"bqowner\"});\nconst dataset = new gcp.bigquery.Dataset(\"dataset\", {\n datasetId: \"example_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"EU\",\n defaultTableExpirationMs: 3600000,\n labels: {\n env: \"default\",\n },\n accesses: [\n {\n role: \"OWNER\",\n userByEmail: bqowner.email,\n },\n {\n role: \"READER\",\n domain: \"hashicorp.com\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbqowner = gcp.serviceaccount.Account(\"bqowner\", account_id=\"bqowner\")\ndataset = gcp.bigquery.Dataset(\"dataset\",\n dataset_id=\"example_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"EU\",\n default_table_expiration_ms=3600000,\n labels={\n \"env\": \"default\",\n },\n accesses=[\n gcp.bigquery.DatasetAccessArgs(\n role=\"OWNER\",\n user_by_email=bqowner.email,\n ),\n gcp.bigquery.DatasetAccessArgs(\n role=\"READER\",\n domain=\"hashicorp.com\",\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 bqowner = new Gcp.ServiceAccount.Account(\"bqowner\", new()\n {\n AccountId = \"bqowner\",\n });\n\n var dataset = new Gcp.BigQuery.Dataset(\"dataset\", new()\n {\n DatasetId = \"example_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"EU\",\n DefaultTableExpirationMs = 3600000,\n Labels = \n {\n { \"env\", \"default\" },\n },\n Accesses = new[]\n {\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"OWNER\",\n UserByEmail = bqowner.Email,\n },\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"READER\",\n Domain = \"hashicorp.com\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbqowner, err := serviceaccount.NewAccount(ctx, \"bqowner\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"bqowner\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"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(\"EU\"),\n\t\t\tDefaultTableExpirationMs: pulumi.Int(3600000),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"default\"),\n\t\t\t},\n\t\t\tAccesses: bigquery.DatasetAccessTypeArray{\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"OWNER\"),\n\t\t\t\t\tUserByEmail: bqowner.Email,\n\t\t\t\t},\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"READER\"),\n\t\t\t\t\tDomain: pulumi.String(\"hashicorp.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bqowner = new Account(\"bqowner\", AccountArgs.builder() \n .accountId(\"bqowner\")\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .datasetId(\"example_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"EU\")\n .defaultTableExpirationMs(3600000)\n .labels(Map.of(\"env\", \"default\"))\n .accesses( \n DatasetAccessArgs.builder()\n .role(\"OWNER\")\n .userByEmail(bqowner.email())\n .build(),\n DatasetAccessArgs.builder()\n .role(\"READER\")\n .domain(\"hashicorp.com\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n friendlyName: test\n description: This is a test description\n location: EU\n defaultTableExpirationMs: 3.6e+06\n labels:\n env: default\n accesses:\n - role: OWNER\n userByEmail: ${bqowner.email}\n - role: READER\n domain: hashicorp.com\n bqowner:\n type: gcp:serviceaccount:Account\n properties:\n accountId: bqowner\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Dataset Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRing(\"key_ring\", {\n name: \"example-keyring\",\n location: \"us\",\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"crypto_key\", {\n name: \"example-key\",\n keyRing: keyRing.id,\n});\nconst dataset = new gcp.bigquery.Dataset(\"dataset\", {\n datasetId: \"example_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n defaultTableExpirationMs: 3600000,\n defaultEncryptionConfiguration: {\n kmsKeyName: cryptoKey.id,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRing(\"key_ring\",\n name=\"example-keyring\",\n location=\"us\")\ncrypto_key = gcp.kms.CryptoKey(\"crypto_key\",\n name=\"example-key\",\n key_ring=key_ring.id)\ndataset = gcp.bigquery.Dataset(\"dataset\",\n dataset_id=\"example_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\",\n default_table_expiration_ms=3600000,\n default_encryption_configuration=gcp.bigquery.DatasetDefaultEncryptionConfigurationArgs(\n kms_key_name=crypto_key.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 keyRing = new Gcp.Kms.KeyRing(\"key_ring\", new()\n {\n Name = \"example-keyring\",\n Location = \"us\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"crypto_key\", new()\n {\n Name = \"example-key\",\n KeyRing = keyRing.Id,\n });\n\n var dataset = new Gcp.BigQuery.Dataset(\"dataset\", new()\n {\n DatasetId = \"example_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n DefaultTableExpirationMs = 3600000,\n DefaultEncryptionConfiguration = new Gcp.BigQuery.Inputs.DatasetDefaultEncryptionConfigurationArgs\n {\n KmsKeyName = cryptoKey.Id,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\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\tkeyRing, err := kms.NewKeyRing(ctx, \"key_ring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"example-keyring\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"crypto_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"example-key\"),\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"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\tDefaultTableExpirationMs: pulumi.Int(3600000),\n\t\t\tDefaultEncryptionConfiguration: \u0026bigquery.DatasetDefaultEncryptionConfigurationArgs{\n\t\t\t\tKmsKeyName: cryptoKey.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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetDefaultEncryptionConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .name(\"example-keyring\")\n .location(\"us\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .name(\"example-key\")\n .keyRing(keyRing.id())\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .datasetId(\"example_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .defaultTableExpirationMs(3600000)\n .defaultEncryptionConfiguration(DatasetDefaultEncryptionConfigurationArgs.builder()\n .kmsKeyName(cryptoKey.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n friendlyName: test\n description: This is a test description\n location: US\n defaultTableExpirationMs: 3.6e+06\n defaultEncryptionConfiguration:\n kmsKeyName: ${cryptoKey.id}\n cryptoKey:\n type: gcp:kms:CryptoKey\n name: crypto_key\n properties:\n name: example-key\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n name: key_ring\n properties:\n name: example-keyring\n location: us\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Dataset Authorized Dataset\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bqowner = new gcp.serviceaccount.Account(\"bqowner\", {accountId: \"bqowner\"});\nconst _public = new gcp.bigquery.Dataset(\"public\", {\n datasetId: \"public\",\n friendlyName: \"test\",\n description: \"This dataset is public\",\n location: \"EU\",\n defaultTableExpirationMs: 3600000,\n labels: {\n env: \"default\",\n },\n accesses: [\n {\n role: \"OWNER\",\n userByEmail: bqowner.email,\n },\n {\n role: \"READER\",\n domain: \"hashicorp.com\",\n },\n ],\n});\nconst dataset = new gcp.bigquery.Dataset(\"dataset\", {\n datasetId: \"private\",\n friendlyName: \"test\",\n description: \"This dataset is private\",\n location: \"EU\",\n defaultTableExpirationMs: 3600000,\n labels: {\n env: \"default\",\n },\n accesses: [\n {\n role: \"OWNER\",\n userByEmail: bqowner.email,\n },\n {\n role: \"READER\",\n domain: \"hashicorp.com\",\n },\n {\n dataset: {\n dataset: {\n projectId: _public.project,\n datasetId: _public.datasetId,\n },\n targetTypes: [\"VIEWS\"],\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbqowner = gcp.serviceaccount.Account(\"bqowner\", account_id=\"bqowner\")\npublic = gcp.bigquery.Dataset(\"public\",\n dataset_id=\"public\",\n friendly_name=\"test\",\n description=\"This dataset is public\",\n location=\"EU\",\n default_table_expiration_ms=3600000,\n labels={\n \"env\": \"default\",\n },\n accesses=[\n gcp.bigquery.DatasetAccessArgs(\n role=\"OWNER\",\n user_by_email=bqowner.email,\n ),\n gcp.bigquery.DatasetAccessArgs(\n role=\"READER\",\n domain=\"hashicorp.com\",\n ),\n ])\ndataset = gcp.bigquery.Dataset(\"dataset\",\n dataset_id=\"private\",\n friendly_name=\"test\",\n description=\"This dataset is private\",\n location=\"EU\",\n default_table_expiration_ms=3600000,\n labels={\n \"env\": \"default\",\n },\n accesses=[\n gcp.bigquery.DatasetAccessArgs(\n role=\"OWNER\",\n user_by_email=bqowner.email,\n ),\n gcp.bigquery.DatasetAccessArgs(\n role=\"READER\",\n domain=\"hashicorp.com\",\n ),\n gcp.bigquery.DatasetAccessArgs(\n dataset=gcp.bigquery.DatasetAccessDatasetArgs(\n dataset=gcp.bigquery.DatasetAccessDatasetDatasetArgs(\n project_id=public.project,\n dataset_id=public.dataset_id,\n ),\n target_types=[\"VIEWS\"],\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 bqowner = new Gcp.ServiceAccount.Account(\"bqowner\", new()\n {\n AccountId = \"bqowner\",\n });\n\n var @public = new Gcp.BigQuery.Dataset(\"public\", new()\n {\n DatasetId = \"public\",\n FriendlyName = \"test\",\n Description = \"This dataset is public\",\n Location = \"EU\",\n DefaultTableExpirationMs = 3600000,\n Labels = \n {\n { \"env\", \"default\" },\n },\n Accesses = new[]\n {\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"OWNER\",\n UserByEmail = bqowner.Email,\n },\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"READER\",\n Domain = \"hashicorp.com\",\n },\n },\n });\n\n var dataset = new Gcp.BigQuery.Dataset(\"dataset\", new()\n {\n DatasetId = \"private\",\n FriendlyName = \"test\",\n Description = \"This dataset is private\",\n Location = \"EU\",\n DefaultTableExpirationMs = 3600000,\n Labels = \n {\n { \"env\", \"default\" },\n },\n Accesses = new[]\n {\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"OWNER\",\n UserByEmail = bqowner.Email,\n },\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"READER\",\n Domain = \"hashicorp.com\",\n },\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Dataset = new Gcp.BigQuery.Inputs.DatasetAccessDatasetArgs\n {\n Dataset = new Gcp.BigQuery.Inputs.DatasetAccessDatasetDatasetArgs\n {\n ProjectId = @public.Project,\n DatasetId = @public.DatasetId,\n },\n TargetTypes = new[]\n {\n \"VIEWS\",\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/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbqowner, err := serviceaccount.NewAccount(ctx, \"bqowner\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"bqowner\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpublic, err := bigquery.NewDataset(ctx, \"public\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"public\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This dataset is public\"),\n\t\t\tLocation: pulumi.String(\"EU\"),\n\t\t\tDefaultTableExpirationMs: pulumi.Int(3600000),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"default\"),\n\t\t\t},\n\t\t\tAccesses: bigquery.DatasetAccessTypeArray{\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"OWNER\"),\n\t\t\t\t\tUserByEmail: bqowner.Email,\n\t\t\t\t},\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"READER\"),\n\t\t\t\t\tDomain: pulumi.String(\"hashicorp.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"private\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This dataset is private\"),\n\t\t\tLocation: pulumi.String(\"EU\"),\n\t\t\tDefaultTableExpirationMs: pulumi.Int(3600000),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"default\"),\n\t\t\t},\n\t\t\tAccesses: bigquery.DatasetAccessTypeArray{\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"OWNER\"),\n\t\t\t\t\tUserByEmail: bqowner.Email,\n\t\t\t\t},\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"READER\"),\n\t\t\t\t\tDomain: pulumi.String(\"hashicorp.com\"),\n\t\t\t\t},\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tDataset: \u0026bigquery.DatasetAccessDatasetArgs{\n\t\t\t\t\t\tDataset: \u0026bigquery.DatasetAccessDatasetDatasetArgs{\n\t\t\t\t\t\t\tProjectId: public.Project,\n\t\t\t\t\t\t\tDatasetId: public.DatasetId,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tTargetTypes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"VIEWS\"),\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.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetAccessArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetAccessDatasetArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetAccessDatasetDatasetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bqowner = new Account(\"bqowner\", AccountArgs.builder() \n .accountId(\"bqowner\")\n .build());\n\n var public_ = new Dataset(\"public\", DatasetArgs.builder() \n .datasetId(\"public\")\n .friendlyName(\"test\")\n .description(\"This dataset is public\")\n .location(\"EU\")\n .defaultTableExpirationMs(3600000)\n .labels(Map.of(\"env\", \"default\"))\n .accesses( \n DatasetAccessArgs.builder()\n .role(\"OWNER\")\n .userByEmail(bqowner.email())\n .build(),\n DatasetAccessArgs.builder()\n .role(\"READER\")\n .domain(\"hashicorp.com\")\n .build())\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .datasetId(\"private\")\n .friendlyName(\"test\")\n .description(\"This dataset is private\")\n .location(\"EU\")\n .defaultTableExpirationMs(3600000)\n .labels(Map.of(\"env\", \"default\"))\n .accesses( \n DatasetAccessArgs.builder()\n .role(\"OWNER\")\n .userByEmail(bqowner.email())\n .build(),\n DatasetAccessArgs.builder()\n .role(\"READER\")\n .domain(\"hashicorp.com\")\n .build(),\n DatasetAccessArgs.builder()\n .dataset(DatasetAccessDatasetArgs.builder()\n .dataset(DatasetAccessDatasetDatasetArgs.builder()\n .projectId(public_.project())\n .datasetId(public_.datasetId())\n .build())\n .targetTypes(\"VIEWS\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n public:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: public\n friendlyName: test\n description: This dataset is public\n location: EU\n defaultTableExpirationMs: 3.6e+06\n labels:\n env: default\n accesses:\n - role: OWNER\n userByEmail: ${bqowner.email}\n - role: READER\n domain: hashicorp.com\n dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: private\n friendlyName: test\n description: This dataset is private\n location: EU\n defaultTableExpirationMs: 3.6e+06\n labels:\n env: default\n accesses:\n - role: OWNER\n userByEmail: ${bqowner.email}\n - role: READER\n domain: hashicorp.com\n - dataset:\n dataset:\n projectId: ${public.project}\n datasetId: ${public.datasetId}\n targetTypes:\n - VIEWS\n bqowner:\n type: gcp:serviceaccount:Account\n properties:\n accountId: bqowner\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Dataset Authorized Routine\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _public = new gcp.bigquery.Dataset(\"public\", {\n datasetId: \"public_dataset\",\n description: \"This dataset is public\",\n});\nconst publicRoutine = new gcp.bigquery.Routine(\"public\", {\n datasetId: _public.datasetId,\n routineId: \"public_routine\",\n routineType: \"TABLE_VALUED_FUNCTION\",\n language: \"SQL\",\n definitionBody: \"SELECT 1 + value AS value\\n\",\n arguments: [{\n name: \"value\",\n argumentKind: \"FIXED_TYPE\",\n dataType: JSON.stringify({\n typeKind: \"INT64\",\n }),\n }],\n returnTableType: JSON.stringify({\n columns: [{\n name: \"value\",\n type: {\n typeKind: \"INT64\",\n },\n }],\n }),\n});\nconst _private = new gcp.bigquery.Dataset(\"private\", {\n datasetId: \"private_dataset\",\n description: \"This dataset is private\",\n accesses: [\n {\n role: \"OWNER\",\n userByEmail: \"my@service-account.com\",\n },\n {\n routine: {\n projectId: publicRoutine.project,\n datasetId: publicRoutine.datasetId,\n routineId: publicRoutine.routineId,\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\npublic = gcp.bigquery.Dataset(\"public\",\n dataset_id=\"public_dataset\",\n description=\"This dataset is public\")\npublic_routine = gcp.bigquery.Routine(\"public\",\n dataset_id=public.dataset_id,\n routine_id=\"public_routine\",\n routine_type=\"TABLE_VALUED_FUNCTION\",\n language=\"SQL\",\n definition_body=\"SELECT 1 + value AS value\\n\",\n arguments=[gcp.bigquery.RoutineArgumentArgs(\n name=\"value\",\n argument_kind=\"FIXED_TYPE\",\n data_type=json.dumps({\n \"typeKind\": \"INT64\",\n }),\n )],\n return_table_type=json.dumps({\n \"columns\": [{\n \"name\": \"value\",\n \"type\": {\n \"typeKind\": \"INT64\",\n },\n }],\n }))\nprivate = gcp.bigquery.Dataset(\"private\",\n dataset_id=\"private_dataset\",\n description=\"This dataset is private\",\n accesses=[\n gcp.bigquery.DatasetAccessArgs(\n role=\"OWNER\",\n user_by_email=\"my@service-account.com\",\n ),\n gcp.bigquery.DatasetAccessArgs(\n routine=gcp.bigquery.DatasetAccessRoutineArgs(\n project_id=public_routine.project,\n dataset_id=public_routine.dataset_id,\n routine_id=public_routine.routine_id,\n ),\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @public = new Gcp.BigQuery.Dataset(\"public\", new()\n {\n DatasetId = \"public_dataset\",\n Description = \"This dataset is public\",\n });\n\n var publicRoutine = new Gcp.BigQuery.Routine(\"public\", new()\n {\n DatasetId = @public.DatasetId,\n RoutineId = \"public_routine\",\n RoutineType = \"TABLE_VALUED_FUNCTION\",\n Language = \"SQL\",\n DefinitionBody = @\"SELECT 1 + value AS value\n\",\n Arguments = new[]\n {\n new Gcp.BigQuery.Inputs.RoutineArgumentArgs\n {\n Name = \"value\",\n ArgumentKind = \"FIXED_TYPE\",\n DataType = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"typeKind\"] = \"INT64\",\n }),\n },\n },\n ReturnTableType = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"columns\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"value\",\n [\"type\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"typeKind\"] = \"INT64\",\n },\n },\n },\n }),\n });\n\n var @private = new Gcp.BigQuery.Dataset(\"private\", new()\n {\n DatasetId = \"private_dataset\",\n Description = \"This dataset is private\",\n Accesses = new[]\n {\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"OWNER\",\n UserByEmail = \"my@service-account.com\",\n },\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Routine = new Gcp.BigQuery.Inputs.DatasetAccessRoutineArgs\n {\n ProjectId = publicRoutine.Project,\n DatasetId = publicRoutine.DatasetId,\n RoutineId = publicRoutine.RoutineId,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpublic, err := bigquery.NewDataset(ctx, \"public\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"public_dataset\"),\n\t\t\tDescription: pulumi.String(\"This dataset is public\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"typeKind\": \"INT64\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"columns\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"name\": \"value\",\n\t\t\t\t\t\"type\": map[string]interface{}{\n\t\t\t\t\t\t\"typeKind\": \"INT64\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson1 := string(tmpJSON1)\n\t\tpublicRoutine, err := bigquery.NewRoutine(ctx, \"public\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: public.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"public_routine\"),\n\t\t\tRoutineType: pulumi.String(\"TABLE_VALUED_FUNCTION\"),\n\t\t\tLanguage: pulumi.String(\"SQL\"),\n\t\t\tDefinitionBody: pulumi.String(\"SELECT 1 + value AS value\\n\"),\n\t\t\tArguments: bigquery.RoutineArgumentArray{\n\t\t\t\t\u0026bigquery.RoutineArgumentArgs{\n\t\t\t\t\tName: pulumi.String(\"value\"),\n\t\t\t\t\tArgumentKind: pulumi.String(\"FIXED_TYPE\"),\n\t\t\t\t\tDataType: pulumi.String(json0),\n\t\t\t\t},\n\t\t\t},\n\t\t\tReturnTableType: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"private\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"private_dataset\"),\n\t\t\tDescription: pulumi.String(\"This dataset is private\"),\n\t\t\tAccesses: bigquery.DatasetAccessTypeArray{\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"OWNER\"),\n\t\t\t\t\tUserByEmail: pulumi.String(\"my@service-account.com\"),\n\t\t\t\t},\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRoutine: \u0026bigquery.DatasetAccessRoutineArgs{\n\t\t\t\t\t\tProjectId: publicRoutine.Project,\n\t\t\t\t\t\tDatasetId: publicRoutine.DatasetId,\n\t\t\t\t\t\tRoutineId: publicRoutine.RoutineId,\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.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineArgumentArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetAccessArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetAccessRoutineArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var public_ = new Dataset(\"public\", DatasetArgs.builder() \n .datasetId(\"public_dataset\")\n .description(\"This dataset is public\")\n .build());\n\n var publicRoutine = new Routine(\"publicRoutine\", RoutineArgs.builder() \n .datasetId(public_.datasetId())\n .routineId(\"public_routine\")\n .routineType(\"TABLE_VALUED_FUNCTION\")\n .language(\"SQL\")\n .definitionBody(\"\"\"\nSELECT 1 + value AS value\n \"\"\")\n .arguments(RoutineArgumentArgs.builder()\n .name(\"value\")\n .argumentKind(\"FIXED_TYPE\")\n .dataType(serializeJson(\n jsonObject(\n jsonProperty(\"typeKind\", \"INT64\")\n )))\n .build())\n .returnTableType(serializeJson(\n jsonObject(\n jsonProperty(\"columns\", jsonArray(jsonObject(\n jsonProperty(\"name\", \"value\"),\n jsonProperty(\"type\", jsonObject(\n jsonProperty(\"typeKind\", \"INT64\")\n ))\n )))\n )))\n .build());\n\n var private_ = new Dataset(\"private\", DatasetArgs.builder() \n .datasetId(\"private_dataset\")\n .description(\"This dataset is private\")\n .accesses( \n DatasetAccessArgs.builder()\n .role(\"OWNER\")\n .userByEmail(\"my@service-account.com\")\n .build(),\n DatasetAccessArgs.builder()\n .routine(DatasetAccessRoutineArgs.builder()\n .projectId(publicRoutine.project())\n .datasetId(publicRoutine.datasetId())\n .routineId(publicRoutine.routineId())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n public:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: public_dataset\n description: This dataset is public\n publicRoutine:\n type: gcp:bigquery:Routine\n name: public\n properties:\n datasetId: ${public.datasetId}\n routineId: public_routine\n routineType: TABLE_VALUED_FUNCTION\n language: SQL\n definitionBody: |\n SELECT 1 + value AS value\n arguments:\n - name: value\n argumentKind: FIXED_TYPE\n dataType:\n fn::toJSON:\n typeKind: INT64\n returnTableType:\n fn::toJSON:\n columns:\n - name: value\n type:\n typeKind: INT64\n private:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: private_dataset\n description: This dataset is private\n accesses:\n - role: OWNER\n userByEmail: my@service-account.com\n - routine:\n projectId: ${publicRoutine.project}\n datasetId: ${publicRoutine.datasetId}\n routineId: ${publicRoutine.routineId}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Dataset External Reference Aws Docs\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.bigquery.Dataset(\"dataset\", {\n datasetId: \"example_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"aws-us-east-1\",\n externalDatasetReference: {\n externalSource: \"aws-glue://arn:aws:glue:us-east-1:999999999999:database/database\",\n connection: \"projects/project/locations/aws-us-east-1/connections/connection\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.bigquery.Dataset(\"dataset\",\n dataset_id=\"example_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"aws-us-east-1\",\n external_dataset_reference=gcp.bigquery.DatasetExternalDatasetReferenceArgs(\n external_source=\"aws-glue://arn:aws:glue:us-east-1:999999999999:database/database\",\n connection=\"projects/project/locations/aws-us-east-1/connections/connection\",\n ))\n```\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.BigQuery.Dataset(\"dataset\", new()\n {\n DatasetId = \"example_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"aws-us-east-1\",\n ExternalDatasetReference = new Gcp.BigQuery.Inputs.DatasetExternalDatasetReferenceArgs\n {\n ExternalSource = \"aws-glue://arn:aws:glue:us-east-1:999999999999:database/database\",\n Connection = \"projects/project/locations/aws-us-east-1/connections/connection\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewDataset(ctx, \"dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"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(\"aws-us-east-1\"),\n\t\t\tExternalDatasetReference: \u0026bigquery.DatasetExternalDatasetReferenceArgs{\n\t\t\t\tExternalSource: pulumi.String(\"aws-glue://arn:aws:glue:us-east-1:999999999999:database/database\"),\n\t\t\t\tConnection: pulumi.String(\"projects/project/locations/aws-us-east-1/connections/connection\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetExternalDatasetReferenceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .datasetId(\"example_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"aws-us-east-1\")\n .externalDatasetReference(DatasetExternalDatasetReferenceArgs.builder()\n .externalSource(\"aws-glue://arn:aws:glue:us-east-1:999999999999:database/database\")\n .connection(\"projects/project/locations/aws-us-east-1/connections/connection\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n friendlyName: test\n description: This is a test description\n location: aws-us-east-1\n externalDatasetReference:\n externalSource: aws-glue://arn:aws:glue:us-east-1:999999999999:database/database\n connection: projects/project/locations/aws-us-east-1/connections/connection\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDataset can be imported using any of these accepted formats:\n\n* `projects/{{project}}/datasets/{{dataset_id}}`\n\n* `{{project}}/{{dataset_id}}`\n\n* `{{dataset_id}}`\n\nWhen using the `pulumi import` command, Dataset can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:bigquery/dataset:Dataset default projects/{{project}}/datasets/{{dataset_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/dataset:Dataset default {{project}}/{{dataset_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/dataset:Dataset default {{dataset_id}}\n```\n\n", + "description": "## Example Usage\n\n### Bigquery Dataset Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bqowner = new gcp.serviceaccount.Account(\"bqowner\", {accountId: \"bqowner\"});\nconst dataset = new gcp.bigquery.Dataset(\"dataset\", {\n datasetId: \"example_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"EU\",\n defaultTableExpirationMs: 3600000,\n labels: {\n env: \"default\",\n },\n accesses: [\n {\n role: \"OWNER\",\n userByEmail: bqowner.email,\n },\n {\n role: \"READER\",\n domain: \"hashicorp.com\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbqowner = gcp.serviceaccount.Account(\"bqowner\", account_id=\"bqowner\")\ndataset = gcp.bigquery.Dataset(\"dataset\",\n dataset_id=\"example_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"EU\",\n default_table_expiration_ms=3600000,\n labels={\n \"env\": \"default\",\n },\n accesses=[\n gcp.bigquery.DatasetAccessArgs(\n role=\"OWNER\",\n user_by_email=bqowner.email,\n ),\n gcp.bigquery.DatasetAccessArgs(\n role=\"READER\",\n domain=\"hashicorp.com\",\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 bqowner = new Gcp.ServiceAccount.Account(\"bqowner\", new()\n {\n AccountId = \"bqowner\",\n });\n\n var dataset = new Gcp.BigQuery.Dataset(\"dataset\", new()\n {\n DatasetId = \"example_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"EU\",\n DefaultTableExpirationMs = 3600000,\n Labels = \n {\n { \"env\", \"default\" },\n },\n Accesses = new[]\n {\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"OWNER\",\n UserByEmail = bqowner.Email,\n },\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"READER\",\n Domain = \"hashicorp.com\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbqowner, err := serviceaccount.NewAccount(ctx, \"bqowner\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"bqowner\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"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(\"EU\"),\n\t\t\tDefaultTableExpirationMs: pulumi.Int(3600000),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"default\"),\n\t\t\t},\n\t\t\tAccesses: bigquery.DatasetAccessTypeArray{\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"OWNER\"),\n\t\t\t\t\tUserByEmail: bqowner.Email,\n\t\t\t\t},\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"READER\"),\n\t\t\t\t\tDomain: pulumi.String(\"hashicorp.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bqowner = new Account(\"bqowner\", AccountArgs.builder() \n .accountId(\"bqowner\")\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .datasetId(\"example_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"EU\")\n .defaultTableExpirationMs(3600000)\n .labels(Map.of(\"env\", \"default\"))\n .accesses( \n DatasetAccessArgs.builder()\n .role(\"OWNER\")\n .userByEmail(bqowner.email())\n .build(),\n DatasetAccessArgs.builder()\n .role(\"READER\")\n .domain(\"hashicorp.com\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n friendlyName: test\n description: This is a test description\n location: EU\n defaultTableExpirationMs: 3.6e+06\n labels:\n env: default\n accesses:\n - role: OWNER\n userByEmail: ${bqowner.email}\n - role: READER\n domain: hashicorp.com\n bqowner:\n type: gcp:serviceaccount:Account\n properties:\n accountId: bqowner\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Dataset Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRing(\"key_ring\", {\n name: \"example-keyring\",\n location: \"us\",\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"crypto_key\", {\n name: \"example-key\",\n keyRing: keyRing.id,\n});\nconst dataset = new gcp.bigquery.Dataset(\"dataset\", {\n datasetId: \"example_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n defaultTableExpirationMs: 3600000,\n defaultEncryptionConfiguration: {\n kmsKeyName: cryptoKey.id,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRing(\"key_ring\",\n name=\"example-keyring\",\n location=\"us\")\ncrypto_key = gcp.kms.CryptoKey(\"crypto_key\",\n name=\"example-key\",\n key_ring=key_ring.id)\ndataset = gcp.bigquery.Dataset(\"dataset\",\n dataset_id=\"example_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\",\n default_table_expiration_ms=3600000,\n default_encryption_configuration=gcp.bigquery.DatasetDefaultEncryptionConfigurationArgs(\n kms_key_name=crypto_key.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 keyRing = new Gcp.Kms.KeyRing(\"key_ring\", new()\n {\n Name = \"example-keyring\",\n Location = \"us\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"crypto_key\", new()\n {\n Name = \"example-key\",\n KeyRing = keyRing.Id,\n });\n\n var dataset = new Gcp.BigQuery.Dataset(\"dataset\", new()\n {\n DatasetId = \"example_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n DefaultTableExpirationMs = 3600000,\n DefaultEncryptionConfiguration = new Gcp.BigQuery.Inputs.DatasetDefaultEncryptionConfigurationArgs\n {\n KmsKeyName = cryptoKey.Id,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\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\tkeyRing, err := kms.NewKeyRing(ctx, \"key_ring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"example-keyring\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"crypto_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"example-key\"),\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"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\tDefaultTableExpirationMs: pulumi.Int(3600000),\n\t\t\tDefaultEncryptionConfiguration: \u0026bigquery.DatasetDefaultEncryptionConfigurationArgs{\n\t\t\t\tKmsKeyName: cryptoKey.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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetDefaultEncryptionConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .name(\"example-keyring\")\n .location(\"us\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .name(\"example-key\")\n .keyRing(keyRing.id())\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .datasetId(\"example_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .defaultTableExpirationMs(3600000)\n .defaultEncryptionConfiguration(DatasetDefaultEncryptionConfigurationArgs.builder()\n .kmsKeyName(cryptoKey.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n friendlyName: test\n description: This is a test description\n location: US\n defaultTableExpirationMs: 3.6e+06\n defaultEncryptionConfiguration:\n kmsKeyName: ${cryptoKey.id}\n cryptoKey:\n type: gcp:kms:CryptoKey\n name: crypto_key\n properties:\n name: example-key\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n name: key_ring\n properties:\n name: example-keyring\n location: us\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Dataset Authorized Dataset\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bqowner = new gcp.serviceaccount.Account(\"bqowner\", {accountId: \"bqowner\"});\nconst _public = new gcp.bigquery.Dataset(\"public\", {\n datasetId: \"public\",\n friendlyName: \"test\",\n description: \"This dataset is public\",\n location: \"EU\",\n defaultTableExpirationMs: 3600000,\n labels: {\n env: \"default\",\n },\n accesses: [\n {\n role: \"OWNER\",\n userByEmail: bqowner.email,\n },\n {\n role: \"READER\",\n domain: \"hashicorp.com\",\n },\n ],\n});\nconst dataset = new gcp.bigquery.Dataset(\"dataset\", {\n datasetId: \"private\",\n friendlyName: \"test\",\n description: \"This dataset is private\",\n location: \"EU\",\n defaultTableExpirationMs: 3600000,\n labels: {\n env: \"default\",\n },\n accesses: [\n {\n role: \"OWNER\",\n userByEmail: bqowner.email,\n },\n {\n role: \"READER\",\n domain: \"hashicorp.com\",\n },\n {\n dataset: {\n dataset: {\n projectId: _public.project,\n datasetId: _public.datasetId,\n },\n targetTypes: [\"VIEWS\"],\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbqowner = gcp.serviceaccount.Account(\"bqowner\", account_id=\"bqowner\")\npublic = gcp.bigquery.Dataset(\"public\",\n dataset_id=\"public\",\n friendly_name=\"test\",\n description=\"This dataset is public\",\n location=\"EU\",\n default_table_expiration_ms=3600000,\n labels={\n \"env\": \"default\",\n },\n accesses=[\n gcp.bigquery.DatasetAccessArgs(\n role=\"OWNER\",\n user_by_email=bqowner.email,\n ),\n gcp.bigquery.DatasetAccessArgs(\n role=\"READER\",\n domain=\"hashicorp.com\",\n ),\n ])\ndataset = gcp.bigquery.Dataset(\"dataset\",\n dataset_id=\"private\",\n friendly_name=\"test\",\n description=\"This dataset is private\",\n location=\"EU\",\n default_table_expiration_ms=3600000,\n labels={\n \"env\": \"default\",\n },\n accesses=[\n gcp.bigquery.DatasetAccessArgs(\n role=\"OWNER\",\n user_by_email=bqowner.email,\n ),\n gcp.bigquery.DatasetAccessArgs(\n role=\"READER\",\n domain=\"hashicorp.com\",\n ),\n gcp.bigquery.DatasetAccessArgs(\n dataset=gcp.bigquery.DatasetAccessDatasetArgs(\n dataset=gcp.bigquery.DatasetAccessDatasetDatasetArgs(\n project_id=public.project,\n dataset_id=public.dataset_id,\n ),\n target_types=[\"VIEWS\"],\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 bqowner = new Gcp.ServiceAccount.Account(\"bqowner\", new()\n {\n AccountId = \"bqowner\",\n });\n\n var @public = new Gcp.BigQuery.Dataset(\"public\", new()\n {\n DatasetId = \"public\",\n FriendlyName = \"test\",\n Description = \"This dataset is public\",\n Location = \"EU\",\n DefaultTableExpirationMs = 3600000,\n Labels = \n {\n { \"env\", \"default\" },\n },\n Accesses = new[]\n {\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"OWNER\",\n UserByEmail = bqowner.Email,\n },\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"READER\",\n Domain = \"hashicorp.com\",\n },\n },\n });\n\n var dataset = new Gcp.BigQuery.Dataset(\"dataset\", new()\n {\n DatasetId = \"private\",\n FriendlyName = \"test\",\n Description = \"This dataset is private\",\n Location = \"EU\",\n DefaultTableExpirationMs = 3600000,\n Labels = \n {\n { \"env\", \"default\" },\n },\n Accesses = new[]\n {\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"OWNER\",\n UserByEmail = bqowner.Email,\n },\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"READER\",\n Domain = \"hashicorp.com\",\n },\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Dataset = new Gcp.BigQuery.Inputs.DatasetAccessDatasetArgs\n {\n Dataset = new Gcp.BigQuery.Inputs.DatasetAccessDatasetDatasetArgs\n {\n ProjectId = @public.Project,\n DatasetId = @public.DatasetId,\n },\n TargetTypes = new[]\n {\n \"VIEWS\",\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/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbqowner, err := serviceaccount.NewAccount(ctx, \"bqowner\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"bqowner\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpublic, err := bigquery.NewDataset(ctx, \"public\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"public\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This dataset is public\"),\n\t\t\tLocation: pulumi.String(\"EU\"),\n\t\t\tDefaultTableExpirationMs: pulumi.Int(3600000),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"default\"),\n\t\t\t},\n\t\t\tAccesses: bigquery.DatasetAccessTypeArray{\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"OWNER\"),\n\t\t\t\t\tUserByEmail: bqowner.Email,\n\t\t\t\t},\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"READER\"),\n\t\t\t\t\tDomain: pulumi.String(\"hashicorp.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"private\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This dataset is private\"),\n\t\t\tLocation: pulumi.String(\"EU\"),\n\t\t\tDefaultTableExpirationMs: pulumi.Int(3600000),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"default\"),\n\t\t\t},\n\t\t\tAccesses: bigquery.DatasetAccessTypeArray{\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"OWNER\"),\n\t\t\t\t\tUserByEmail: bqowner.Email,\n\t\t\t\t},\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"READER\"),\n\t\t\t\t\tDomain: pulumi.String(\"hashicorp.com\"),\n\t\t\t\t},\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tDataset: \u0026bigquery.DatasetAccessDatasetArgs{\n\t\t\t\t\t\tDataset: \u0026bigquery.DatasetAccessDatasetDatasetArgs{\n\t\t\t\t\t\t\tProjectId: public.Project,\n\t\t\t\t\t\t\tDatasetId: public.DatasetId,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tTargetTypes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"VIEWS\"),\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.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetAccessArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetAccessDatasetArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetAccessDatasetDatasetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bqowner = new Account(\"bqowner\", AccountArgs.builder() \n .accountId(\"bqowner\")\n .build());\n\n var public_ = new Dataset(\"public\", DatasetArgs.builder() \n .datasetId(\"public\")\n .friendlyName(\"test\")\n .description(\"This dataset is public\")\n .location(\"EU\")\n .defaultTableExpirationMs(3600000)\n .labels(Map.of(\"env\", \"default\"))\n .accesses( \n DatasetAccessArgs.builder()\n .role(\"OWNER\")\n .userByEmail(bqowner.email())\n .build(),\n DatasetAccessArgs.builder()\n .role(\"READER\")\n .domain(\"hashicorp.com\")\n .build())\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .datasetId(\"private\")\n .friendlyName(\"test\")\n .description(\"This dataset is private\")\n .location(\"EU\")\n .defaultTableExpirationMs(3600000)\n .labels(Map.of(\"env\", \"default\"))\n .accesses( \n DatasetAccessArgs.builder()\n .role(\"OWNER\")\n .userByEmail(bqowner.email())\n .build(),\n DatasetAccessArgs.builder()\n .role(\"READER\")\n .domain(\"hashicorp.com\")\n .build(),\n DatasetAccessArgs.builder()\n .dataset(DatasetAccessDatasetArgs.builder()\n .dataset(DatasetAccessDatasetDatasetArgs.builder()\n .projectId(public_.project())\n .datasetId(public_.datasetId())\n .build())\n .targetTypes(\"VIEWS\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n public:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: public\n friendlyName: test\n description: This dataset is public\n location: EU\n defaultTableExpirationMs: 3.6e+06\n labels:\n env: default\n accesses:\n - role: OWNER\n userByEmail: ${bqowner.email}\n - role: READER\n domain: hashicorp.com\n dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: private\n friendlyName: test\n description: This dataset is private\n location: EU\n defaultTableExpirationMs: 3.6e+06\n labels:\n env: default\n accesses:\n - role: OWNER\n userByEmail: ${bqowner.email}\n - role: READER\n domain: hashicorp.com\n - dataset:\n dataset:\n projectId: ${public.project}\n datasetId: ${public.datasetId}\n targetTypes:\n - VIEWS\n bqowner:\n type: gcp:serviceaccount:Account\n properties:\n accountId: bqowner\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Dataset Authorized Routine\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _public = new gcp.bigquery.Dataset(\"public\", {\n datasetId: \"public_dataset\",\n description: \"This dataset is public\",\n});\nconst publicRoutine = new gcp.bigquery.Routine(\"public\", {\n datasetId: _public.datasetId,\n routineId: \"public_routine\",\n routineType: \"TABLE_VALUED_FUNCTION\",\n language: \"SQL\",\n definitionBody: \"SELECT 1 + value AS value\\n\",\n arguments: [{\n name: \"value\",\n argumentKind: \"FIXED_TYPE\",\n dataType: JSON.stringify({\n typeKind: \"INT64\",\n }),\n }],\n returnTableType: JSON.stringify({\n columns: [{\n name: \"value\",\n type: {\n typeKind: \"INT64\",\n },\n }],\n }),\n});\nconst _private = new gcp.bigquery.Dataset(\"private\", {\n datasetId: \"private_dataset\",\n description: \"This dataset is private\",\n accesses: [\n {\n role: \"OWNER\",\n userByEmail: \"my@service-account.com\",\n },\n {\n routine: {\n projectId: publicRoutine.project,\n datasetId: publicRoutine.datasetId,\n routineId: publicRoutine.routineId,\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\npublic = gcp.bigquery.Dataset(\"public\",\n dataset_id=\"public_dataset\",\n description=\"This dataset is public\")\npublic_routine = gcp.bigquery.Routine(\"public\",\n dataset_id=public.dataset_id,\n routine_id=\"public_routine\",\n routine_type=\"TABLE_VALUED_FUNCTION\",\n language=\"SQL\",\n definition_body=\"SELECT 1 + value AS value\\n\",\n arguments=[gcp.bigquery.RoutineArgumentArgs(\n name=\"value\",\n argument_kind=\"FIXED_TYPE\",\n data_type=json.dumps({\n \"typeKind\": \"INT64\",\n }),\n )],\n return_table_type=json.dumps({\n \"columns\": [{\n \"name\": \"value\",\n \"type\": {\n \"typeKind\": \"INT64\",\n },\n }],\n }))\nprivate = gcp.bigquery.Dataset(\"private\",\n dataset_id=\"private_dataset\",\n description=\"This dataset is private\",\n accesses=[\n gcp.bigquery.DatasetAccessArgs(\n role=\"OWNER\",\n user_by_email=\"my@service-account.com\",\n ),\n gcp.bigquery.DatasetAccessArgs(\n routine=gcp.bigquery.DatasetAccessRoutineArgs(\n project_id=public_routine.project,\n dataset_id=public_routine.dataset_id,\n routine_id=public_routine.routine_id,\n ),\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @public = new Gcp.BigQuery.Dataset(\"public\", new()\n {\n DatasetId = \"public_dataset\",\n Description = \"This dataset is public\",\n });\n\n var publicRoutine = new Gcp.BigQuery.Routine(\"public\", new()\n {\n DatasetId = @public.DatasetId,\n RoutineId = \"public_routine\",\n RoutineType = \"TABLE_VALUED_FUNCTION\",\n Language = \"SQL\",\n DefinitionBody = @\"SELECT 1 + value AS value\n\",\n Arguments = new[]\n {\n new Gcp.BigQuery.Inputs.RoutineArgumentArgs\n {\n Name = \"value\",\n ArgumentKind = \"FIXED_TYPE\",\n DataType = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"typeKind\"] = \"INT64\",\n }),\n },\n },\n ReturnTableType = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"columns\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"value\",\n [\"type\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"typeKind\"] = \"INT64\",\n },\n },\n },\n }),\n });\n\n var @private = new Gcp.BigQuery.Dataset(\"private\", new()\n {\n DatasetId = \"private_dataset\",\n Description = \"This dataset is private\",\n Accesses = new[]\n {\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Role = \"OWNER\",\n UserByEmail = \"my@service-account.com\",\n },\n new Gcp.BigQuery.Inputs.DatasetAccessArgs\n {\n Routine = new Gcp.BigQuery.Inputs.DatasetAccessRoutineArgs\n {\n ProjectId = publicRoutine.Project,\n DatasetId = publicRoutine.DatasetId,\n RoutineId = publicRoutine.RoutineId,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpublic, err := bigquery.NewDataset(ctx, \"public\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"public_dataset\"),\n\t\t\tDescription: pulumi.String(\"This dataset is public\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"typeKind\": \"INT64\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"columns\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"name\": \"value\",\n\t\t\t\t\t\"type\": map[string]interface{}{\n\t\t\t\t\t\t\"typeKind\": \"INT64\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson1 := string(tmpJSON1)\n\t\tpublicRoutine, err := bigquery.NewRoutine(ctx, \"public\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: public.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"public_routine\"),\n\t\t\tRoutineType: pulumi.String(\"TABLE_VALUED_FUNCTION\"),\n\t\t\tLanguage: pulumi.String(\"SQL\"),\n\t\t\tDefinitionBody: pulumi.String(\"SELECT 1 + value AS value\\n\"),\n\t\t\tArguments: bigquery.RoutineArgumentArray{\n\t\t\t\t\u0026bigquery.RoutineArgumentArgs{\n\t\t\t\t\tName: pulumi.String(\"value\"),\n\t\t\t\t\tArgumentKind: pulumi.String(\"FIXED_TYPE\"),\n\t\t\t\t\tDataType: pulumi.String(json0),\n\t\t\t\t},\n\t\t\t},\n\t\t\tReturnTableType: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"private\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"private_dataset\"),\n\t\t\tDescription: pulumi.String(\"This dataset is private\"),\n\t\t\tAccesses: bigquery.DatasetAccessTypeArray{\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRole: pulumi.String(\"OWNER\"),\n\t\t\t\t\tUserByEmail: pulumi.String(\"my@service-account.com\"),\n\t\t\t\t},\n\t\t\t\t\u0026bigquery.DatasetAccessTypeArgs{\n\t\t\t\t\tRoutine: \u0026bigquery.DatasetAccessRoutineArgs{\n\t\t\t\t\t\tProjectId: publicRoutine.Project,\n\t\t\t\t\t\tDatasetId: publicRoutine.DatasetId,\n\t\t\t\t\t\tRoutineId: publicRoutine.RoutineId,\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.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineArgumentArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetAccessArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetAccessRoutineArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var public_ = new Dataset(\"public\", DatasetArgs.builder() \n .datasetId(\"public_dataset\")\n .description(\"This dataset is public\")\n .build());\n\n var publicRoutine = new Routine(\"publicRoutine\", RoutineArgs.builder() \n .datasetId(public_.datasetId())\n .routineId(\"public_routine\")\n .routineType(\"TABLE_VALUED_FUNCTION\")\n .language(\"SQL\")\n .definitionBody(\"\"\"\nSELECT 1 + value AS value\n \"\"\")\n .arguments(RoutineArgumentArgs.builder()\n .name(\"value\")\n .argumentKind(\"FIXED_TYPE\")\n .dataType(serializeJson(\n jsonObject(\n jsonProperty(\"typeKind\", \"INT64\")\n )))\n .build())\n .returnTableType(serializeJson(\n jsonObject(\n jsonProperty(\"columns\", jsonArray(jsonObject(\n jsonProperty(\"name\", \"value\"),\n jsonProperty(\"type\", jsonObject(\n jsonProperty(\"typeKind\", \"INT64\")\n ))\n )))\n )))\n .build());\n\n var private_ = new Dataset(\"private\", DatasetArgs.builder() \n .datasetId(\"private_dataset\")\n .description(\"This dataset is private\")\n .accesses( \n DatasetAccessArgs.builder()\n .role(\"OWNER\")\n .userByEmail(\"my@service-account.com\")\n .build(),\n DatasetAccessArgs.builder()\n .routine(DatasetAccessRoutineArgs.builder()\n .projectId(publicRoutine.project())\n .datasetId(publicRoutine.datasetId())\n .routineId(publicRoutine.routineId())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n public:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: public_dataset\n description: This dataset is public\n publicRoutine:\n type: gcp:bigquery:Routine\n name: public\n properties:\n datasetId: ${public.datasetId}\n routineId: public_routine\n routineType: TABLE_VALUED_FUNCTION\n language: SQL\n definitionBody: |\n SELECT 1 + value AS value\n arguments:\n - name: value\n argumentKind: FIXED_TYPE\n dataType:\n fn::toJSON:\n typeKind: INT64\n returnTableType:\n fn::toJSON:\n columns:\n - name: value\n type:\n typeKind: INT64\n private:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: private_dataset\n description: This dataset is private\n accesses:\n - role: OWNER\n userByEmail: my@service-account.com\n - routine:\n projectId: ${publicRoutine.project}\n datasetId: ${publicRoutine.datasetId}\n routineId: ${publicRoutine.routineId}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Dataset External Reference Aws\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.bigquery.Dataset(\"dataset\", {\n datasetId: \"example_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"aws-us-east-1\",\n externalDatasetReference: {\n externalSource: \"aws-glue://arn:aws:glue:us-east-1:999999999999:database/database\",\n connection: \"projects/project/locations/aws-us-east-1/connections/connection\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.bigquery.Dataset(\"dataset\",\n dataset_id=\"example_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"aws-us-east-1\",\n external_dataset_reference=gcp.bigquery.DatasetExternalDatasetReferenceArgs(\n external_source=\"aws-glue://arn:aws:glue:us-east-1:999999999999:database/database\",\n connection=\"projects/project/locations/aws-us-east-1/connections/connection\",\n ))\n```\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.BigQuery.Dataset(\"dataset\", new()\n {\n DatasetId = \"example_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"aws-us-east-1\",\n ExternalDatasetReference = new Gcp.BigQuery.Inputs.DatasetExternalDatasetReferenceArgs\n {\n ExternalSource = \"aws-glue://arn:aws:glue:us-east-1:999999999999:database/database\",\n Connection = \"projects/project/locations/aws-us-east-1/connections/connection\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewDataset(ctx, \"dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"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(\"aws-us-east-1\"),\n\t\t\tExternalDatasetReference: \u0026bigquery.DatasetExternalDatasetReferenceArgs{\n\t\t\t\tExternalSource: pulumi.String(\"aws-glue://arn:aws:glue:us-east-1:999999999999:database/database\"),\n\t\t\t\tConnection: pulumi.String(\"projects/project/locations/aws-us-east-1/connections/connection\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.inputs.DatasetExternalDatasetReferenceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .datasetId(\"example_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"aws-us-east-1\")\n .externalDatasetReference(DatasetExternalDatasetReferenceArgs.builder()\n .externalSource(\"aws-glue://arn:aws:glue:us-east-1:999999999999:database/database\")\n .connection(\"projects/project/locations/aws-us-east-1/connections/connection\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n friendlyName: test\n description: This is a test description\n location: aws-us-east-1\n externalDatasetReference:\n externalSource: aws-glue://arn:aws:glue:us-east-1:999999999999:database/database\n connection: projects/project/locations/aws-us-east-1/connections/connection\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDataset can be imported using any of these accepted formats:\n\n* `projects/{{project}}/datasets/{{dataset_id}}`\n\n* `{{project}}/{{dataset_id}}`\n\n* `{{dataset_id}}`\n\nWhen using the `pulumi import` command, Dataset can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:bigquery/dataset:Dataset default projects/{{project}}/datasets/{{dataset_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/dataset:Dataset default {{project}}/{{dataset_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/dataset:Dataset default {{dataset_id}}\n```\n\n", "properties": { "accesses": { "type": "array", @@ -118522,7 +118970,7 @@ } }, "gcp:bigquery/job:Job": { - "description": "Jobs are actions that BigQuery runs on your behalf to load data, export data, query data, or copy data.\nOnce a BigQuery job is created, it cannot be changed or deleted.\n\n\nTo get more information about Job, see:\n\n* [API documentation](https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs)\n* How-to Guides\n * [BigQuery Jobs Intro](https://cloud.google.com/bigquery/docs/jobs-overview)\n\n## Example Usage\n\n### Bigquery Job Query\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bar = new gcp.bigquery.Dataset(\"bar\", {\n datasetId: \"job_query_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst foo = new gcp.bigquery.Table(\"foo\", {\n deletionProtection: false,\n datasetId: bar.datasetId,\n tableId: \"job_query_table\",\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_query\",\n labels: {\n \"example-label\": \"example-value\",\n },\n query: {\n query: \"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\",\n destinationTable: {\n projectId: foo.project,\n datasetId: foo.datasetId,\n tableId: foo.tableId,\n },\n allowLargeResults: true,\n flattenResults: true,\n scriptOptions: {\n keyResultStatement: \"LAST\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbar = gcp.bigquery.Dataset(\"bar\",\n dataset_id=\"job_query_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nfoo = gcp.bigquery.Table(\"foo\",\n deletion_protection=False,\n dataset_id=bar.dataset_id,\n table_id=\"job_query_table\")\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_query\",\n labels={\n \"example-label\": \"example-value\",\n },\n query=gcp.bigquery.JobQueryArgs(\n query=\"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\",\n destination_table=gcp.bigquery.JobQueryDestinationTableArgs(\n project_id=foo.project,\n dataset_id=foo.dataset_id,\n table_id=foo.table_id,\n ),\n allow_large_results=True,\n flatten_results=True,\n script_options=gcp.bigquery.JobQueryScriptOptionsArgs(\n key_result_statement=\"LAST\",\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 bar = new Gcp.BigQuery.Dataset(\"bar\", new()\n {\n DatasetId = \"job_query_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var foo = new Gcp.BigQuery.Table(\"foo\", new()\n {\n DeletionProtection = false,\n DatasetId = bar.DatasetId,\n TableId = \"job_query_table\",\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_query\",\n Labels = \n {\n { \"example-label\", \"example-value\" },\n },\n Query = new Gcp.BigQuery.Inputs.JobQueryArgs\n {\n Query = \"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\",\n DestinationTable = new Gcp.BigQuery.Inputs.JobQueryDestinationTableArgs\n {\n ProjectId = foo.Project,\n DatasetId = foo.DatasetId,\n TableId = foo.TableId,\n },\n AllowLargeResults = true,\n FlattenResults = true,\n ScriptOptions = new Gcp.BigQuery.Inputs.JobQueryScriptOptionsArgs\n {\n KeyResultStatement = \"LAST\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbar, err := bigquery.NewDataset(ctx, \"bar\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_query_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfoo, err := bigquery.NewTable(ctx, \"foo\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: bar.DatasetId,\n\t\t\tTableId: pulumi.String(\"job_query_table\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_query\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"example-label\": pulumi.String(\"example-value\"),\n\t\t\t},\n\t\t\tQuery: \u0026bigquery.JobQueryArgs{\n\t\t\t\tQuery: pulumi.String(\"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\"),\n\t\t\t\tDestinationTable: \u0026bigquery.JobQueryDestinationTableArgs{\n\t\t\t\t\tProjectId: foo.Project,\n\t\t\t\t\tDatasetId: foo.DatasetId,\n\t\t\t\t\tTableId: foo.TableId,\n\t\t\t\t},\n\t\t\t\tAllowLargeResults: pulumi.Bool(true),\n\t\t\t\tFlattenResults: pulumi.Bool(true),\n\t\t\t\tScriptOptions: \u0026bigquery.JobQueryScriptOptionsArgs{\n\t\t\t\t\tKeyResultStatement: pulumi.String(\"LAST\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryDestinationTableArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryScriptOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bar = new Dataset(\"bar\", DatasetArgs.builder() \n .datasetId(\"job_query_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var foo = new Table(\"foo\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(bar.datasetId())\n .tableId(\"job_query_table\")\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_query\")\n .labels(Map.of(\"example-label\", \"example-value\"))\n .query(JobQueryArgs.builder()\n .query(\"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\")\n .destinationTable(JobQueryDestinationTableArgs.builder()\n .projectId(foo.project())\n .datasetId(foo.datasetId())\n .tableId(foo.tableId())\n .build())\n .allowLargeResults(true)\n .flattenResults(true)\n .scriptOptions(JobQueryScriptOptionsArgs.builder()\n .keyResultStatement(\"LAST\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n foo:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${bar.datasetId}\n tableId: job_query_table\n bar:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: job_query_dataset\n friendlyName: test\n description: This is a test description\n location: US\n job:\n type: gcp:bigquery:Job\n properties:\n jobId: job_query\n labels:\n example-label: example-value\n query:\n query: SELECT state FROM [lookerdata:cdc.project_tycho_reports]\n destinationTable:\n projectId: ${foo.project}\n datasetId: ${foo.datasetId}\n tableId: ${foo.tableId}\n allowLargeResults: true\n flattenResults: true\n scriptOptions:\n keyResultStatement: LAST\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Job Query Table Reference\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bar = new gcp.bigquery.Dataset(\"bar\", {\n datasetId: \"job_query_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst foo = new gcp.bigquery.Table(\"foo\", {\n deletionProtection: false,\n datasetId: bar.datasetId,\n tableId: \"job_query_table\",\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_query\",\n labels: {\n \"example-label\": \"example-value\",\n },\n query: {\n query: \"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\",\n destinationTable: {\n tableId: foo.id,\n },\n defaultDataset: {\n datasetId: bar.id,\n },\n allowLargeResults: true,\n flattenResults: true,\n scriptOptions: {\n keyResultStatement: \"LAST\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbar = gcp.bigquery.Dataset(\"bar\",\n dataset_id=\"job_query_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nfoo = gcp.bigquery.Table(\"foo\",\n deletion_protection=False,\n dataset_id=bar.dataset_id,\n table_id=\"job_query_table\")\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_query\",\n labels={\n \"example-label\": \"example-value\",\n },\n query=gcp.bigquery.JobQueryArgs(\n query=\"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\",\n destination_table=gcp.bigquery.JobQueryDestinationTableArgs(\n table_id=foo.id,\n ),\n default_dataset=gcp.bigquery.JobQueryDefaultDatasetArgs(\n dataset_id=bar.id,\n ),\n allow_large_results=True,\n flatten_results=True,\n script_options=gcp.bigquery.JobQueryScriptOptionsArgs(\n key_result_statement=\"LAST\",\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 bar = new Gcp.BigQuery.Dataset(\"bar\", new()\n {\n DatasetId = \"job_query_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var foo = new Gcp.BigQuery.Table(\"foo\", new()\n {\n DeletionProtection = false,\n DatasetId = bar.DatasetId,\n TableId = \"job_query_table\",\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_query\",\n Labels = \n {\n { \"example-label\", \"example-value\" },\n },\n Query = new Gcp.BigQuery.Inputs.JobQueryArgs\n {\n Query = \"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\",\n DestinationTable = new Gcp.BigQuery.Inputs.JobQueryDestinationTableArgs\n {\n TableId = foo.Id,\n },\n DefaultDataset = new Gcp.BigQuery.Inputs.JobQueryDefaultDatasetArgs\n {\n DatasetId = bar.Id,\n },\n AllowLargeResults = true,\n FlattenResults = true,\n ScriptOptions = new Gcp.BigQuery.Inputs.JobQueryScriptOptionsArgs\n {\n KeyResultStatement = \"LAST\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbar, err := bigquery.NewDataset(ctx, \"bar\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_query_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfoo, err := bigquery.NewTable(ctx, \"foo\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: bar.DatasetId,\n\t\t\tTableId: pulumi.String(\"job_query_table\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_query\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"example-label\": pulumi.String(\"example-value\"),\n\t\t\t},\n\t\t\tQuery: \u0026bigquery.JobQueryArgs{\n\t\t\t\tQuery: pulumi.String(\"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\"),\n\t\t\t\tDestinationTable: \u0026bigquery.JobQueryDestinationTableArgs{\n\t\t\t\t\tTableId: foo.ID(),\n\t\t\t\t},\n\t\t\t\tDefaultDataset: \u0026bigquery.JobQueryDefaultDatasetArgs{\n\t\t\t\t\tDatasetId: bar.ID(),\n\t\t\t\t},\n\t\t\t\tAllowLargeResults: pulumi.Bool(true),\n\t\t\t\tFlattenResults: pulumi.Bool(true),\n\t\t\t\tScriptOptions: \u0026bigquery.JobQueryScriptOptionsArgs{\n\t\t\t\t\tKeyResultStatement: pulumi.String(\"LAST\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryDestinationTableArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryDefaultDatasetArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryScriptOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bar = new Dataset(\"bar\", DatasetArgs.builder() \n .datasetId(\"job_query_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var foo = new Table(\"foo\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(bar.datasetId())\n .tableId(\"job_query_table\")\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_query\")\n .labels(Map.of(\"example-label\", \"example-value\"))\n .query(JobQueryArgs.builder()\n .query(\"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\")\n .destinationTable(JobQueryDestinationTableArgs.builder()\n .tableId(foo.id())\n .build())\n .defaultDataset(JobQueryDefaultDatasetArgs.builder()\n .datasetId(bar.id())\n .build())\n .allowLargeResults(true)\n .flattenResults(true)\n .scriptOptions(JobQueryScriptOptionsArgs.builder()\n .keyResultStatement(\"LAST\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n foo:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${bar.datasetId}\n tableId: job_query_table\n bar:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: job_query_dataset\n friendlyName: test\n description: This is a test description\n location: US\n job:\n type: gcp:bigquery:Job\n properties:\n jobId: job_query\n labels:\n example-label: example-value\n query:\n query: SELECT state FROM [lookerdata:cdc.project_tycho_reports]\n destinationTable:\n tableId: ${foo.id}\n defaultDataset:\n datasetId: ${bar.id}\n allowLargeResults: true\n flattenResults: true\n scriptOptions:\n keyResultStatement: LAST\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Job Load\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bar = new gcp.bigquery.Dataset(\"bar\", {\n datasetId: \"job_load_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst foo = new gcp.bigquery.Table(\"foo\", {\n deletionProtection: false,\n datasetId: bar.datasetId,\n tableId: \"job_load_table\",\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_load\",\n labels: {\n my_job: \"load\",\n },\n load: {\n sourceUris: [\"gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv\"],\n destinationTable: {\n projectId: foo.project,\n datasetId: foo.datasetId,\n tableId: foo.tableId,\n },\n skipLeadingRows: 1,\n schemaUpdateOptions: [\n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\",\n ],\n writeDisposition: \"WRITE_APPEND\",\n autodetect: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbar = gcp.bigquery.Dataset(\"bar\",\n dataset_id=\"job_load_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nfoo = gcp.bigquery.Table(\"foo\",\n deletion_protection=False,\n dataset_id=bar.dataset_id,\n table_id=\"job_load_table\")\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_load\",\n labels={\n \"my_job\": \"load\",\n },\n load=gcp.bigquery.JobLoadArgs(\n source_uris=[\"gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv\"],\n destination_table=gcp.bigquery.JobLoadDestinationTableArgs(\n project_id=foo.project,\n dataset_id=foo.dataset_id,\n table_id=foo.table_id,\n ),\n skip_leading_rows=1,\n schema_update_options=[\n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\",\n ],\n write_disposition=\"WRITE_APPEND\",\n autodetect=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 bar = new Gcp.BigQuery.Dataset(\"bar\", new()\n {\n DatasetId = \"job_load_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var foo = new Gcp.BigQuery.Table(\"foo\", new()\n {\n DeletionProtection = false,\n DatasetId = bar.DatasetId,\n TableId = \"job_load_table\",\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_load\",\n Labels = \n {\n { \"my_job\", \"load\" },\n },\n Load = new Gcp.BigQuery.Inputs.JobLoadArgs\n {\n SourceUris = new[]\n {\n \"gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv\",\n },\n DestinationTable = new Gcp.BigQuery.Inputs.JobLoadDestinationTableArgs\n {\n ProjectId = foo.Project,\n DatasetId = foo.DatasetId,\n TableId = foo.TableId,\n },\n SkipLeadingRows = 1,\n SchemaUpdateOptions = new[]\n {\n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\",\n },\n WriteDisposition = \"WRITE_APPEND\",\n Autodetect = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbar, err := bigquery.NewDataset(ctx, \"bar\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_load_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfoo, err := bigquery.NewTable(ctx, \"foo\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: bar.DatasetId,\n\t\t\tTableId: pulumi.String(\"job_load_table\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_load\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_job\": pulumi.String(\"load\"),\n\t\t\t},\n\t\t\tLoad: \u0026bigquery.JobLoadArgs{\n\t\t\t\tSourceUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv\"),\n\t\t\t\t},\n\t\t\t\tDestinationTable: \u0026bigquery.JobLoadDestinationTableArgs{\n\t\t\t\t\tProjectId: foo.Project,\n\t\t\t\t\tDatasetId: foo.DatasetId,\n\t\t\t\t\tTableId: foo.TableId,\n\t\t\t\t},\n\t\t\t\tSkipLeadingRows: pulumi.Int(1),\n\t\t\t\tSchemaUpdateOptions: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALLOW_FIELD_RELAXATION\"),\n\t\t\t\t\tpulumi.String(\"ALLOW_FIELD_ADDITION\"),\n\t\t\t\t},\n\t\t\t\tWriteDisposition: pulumi.String(\"WRITE_APPEND\"),\n\t\t\t\tAutodetect: 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.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadDestinationTableArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bar = new Dataset(\"bar\", DatasetArgs.builder() \n .datasetId(\"job_load_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var foo = new Table(\"foo\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(bar.datasetId())\n .tableId(\"job_load_table\")\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_load\")\n .labels(Map.of(\"my_job\", \"load\"))\n .load(JobLoadArgs.builder()\n .sourceUris(\"gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv\")\n .destinationTable(JobLoadDestinationTableArgs.builder()\n .projectId(foo.project())\n .datasetId(foo.datasetId())\n .tableId(foo.tableId())\n .build())\n .skipLeadingRows(1)\n .schemaUpdateOptions( \n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\")\n .writeDisposition(\"WRITE_APPEND\")\n .autodetect(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n foo:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${bar.datasetId}\n tableId: job_load_table\n bar:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: job_load_dataset\n friendlyName: test\n description: This is a test description\n location: US\n job:\n type: gcp:bigquery:Job\n properties:\n jobId: job_load\n labels:\n my_job: load\n load:\n sourceUris:\n - gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv\n destinationTable:\n projectId: ${foo.project}\n datasetId: ${foo.datasetId}\n tableId: ${foo.tableId}\n skipLeadingRows: 1\n schemaUpdateOptions:\n - ALLOW_FIELD_RELAXATION\n - ALLOW_FIELD_ADDITION\n writeDisposition: WRITE_APPEND\n autodetect: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Job Load Geojson\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = \"my-project-name\";\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n name: `${project}-bq-geojson`,\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst object = new gcp.storage.BucketObject(\"object\", {\n name: \"geojson-data.jsonl\",\n bucket: bucket.name,\n content: `{\"type\":\"Feature\",\"properties\":{\"continent\":\"Europe\",\"region\":\"Scandinavia\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-30.94,53.33],[33.05,53.33],[33.05,71.86],[-30.94,71.86],[-30.94,53.33]]]}}\n{\"type\":\"Feature\",\"properties\":{\"continent\":\"Africa\",\"region\":\"West Africa\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-23.91,0],[11.95,0],[11.95,18.98],[-23.91,18.98],[-23.91,0]]]}}\n`,\n});\nconst bar = new gcp.bigquery.Dataset(\"bar\", {\n datasetId: \"job_load_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst foo = new gcp.bigquery.Table(\"foo\", {\n deletionProtection: false,\n datasetId: bar.datasetId,\n tableId: \"job_load_table\",\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_load\",\n labels: {\n my_job: \"load\",\n },\n load: {\n sourceUris: [pulumi.interpolate`gs://${object.bucket}/${object.name}`],\n destinationTable: {\n projectId: foo.project,\n datasetId: foo.datasetId,\n tableId: foo.tableId,\n },\n writeDisposition: \"WRITE_TRUNCATE\",\n autodetect: true,\n sourceFormat: \"NEWLINE_DELIMITED_JSON\",\n jsonExtension: \"GEOJSON\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = \"my-project-name\"\nbucket = gcp.storage.Bucket(\"bucket\",\n name=f\"{project}-bq-geojson\",\n location=\"US\",\n uniform_bucket_level_access=True)\nobject = gcp.storage.BucketObject(\"object\",\n name=\"geojson-data.jsonl\",\n bucket=bucket.name,\n content=\"\"\"{\"type\":\"Feature\",\"properties\":{\"continent\":\"Europe\",\"region\":\"Scandinavia\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-30.94,53.33],[33.05,53.33],[33.05,71.86],[-30.94,71.86],[-30.94,53.33]]]}}\n{\"type\":\"Feature\",\"properties\":{\"continent\":\"Africa\",\"region\":\"West Africa\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-23.91,0],[11.95,0],[11.95,18.98],[-23.91,18.98],[-23.91,0]]]}}\n\"\"\")\nbar = gcp.bigquery.Dataset(\"bar\",\n dataset_id=\"job_load_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nfoo = gcp.bigquery.Table(\"foo\",\n deletion_protection=False,\n dataset_id=bar.dataset_id,\n table_id=\"job_load_table\")\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_load\",\n labels={\n \"my_job\": \"load\",\n },\n load=gcp.bigquery.JobLoadArgs(\n source_uris=[pulumi.Output.all(object.bucket, object.name).apply(lambda bucket, name: f\"gs://{bucket}/{name}\")],\n destination_table=gcp.bigquery.JobLoadDestinationTableArgs(\n project_id=foo.project,\n dataset_id=foo.dataset_id,\n table_id=foo.table_id,\n ),\n write_disposition=\"WRITE_TRUNCATE\",\n autodetect=True,\n source_format=\"NEWLINE_DELIMITED_JSON\",\n json_extension=\"GEOJSON\",\n ))\n```\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 = \"my-project-name\";\n\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Name = $\"{project}-bq-geojson\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var @object = new Gcp.Storage.BucketObject(\"object\", new()\n {\n Name = \"geojson-data.jsonl\",\n Bucket = bucket.Name,\n Content = @\"{\"\"type\"\":\"\"Feature\"\",\"\"properties\"\":{\"\"continent\"\":\"\"Europe\"\",\"\"region\"\":\"\"Scandinavia\"\"},\"\"geometry\"\":{\"\"type\"\":\"\"Polygon\"\",\"\"coordinates\"\":[[[-30.94,53.33],[33.05,53.33],[33.05,71.86],[-30.94,71.86],[-30.94,53.33]]]}}\n{\"\"type\"\":\"\"Feature\"\",\"\"properties\"\":{\"\"continent\"\":\"\"Africa\"\",\"\"region\"\":\"\"West Africa\"\"},\"\"geometry\"\":{\"\"type\"\":\"\"Polygon\"\",\"\"coordinates\"\":[[[-23.91,0],[11.95,0],[11.95,18.98],[-23.91,18.98],[-23.91,0]]]}}\n\",\n });\n\n var bar = new Gcp.BigQuery.Dataset(\"bar\", new()\n {\n DatasetId = \"job_load_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var foo = new Gcp.BigQuery.Table(\"foo\", new()\n {\n DeletionProtection = false,\n DatasetId = bar.DatasetId,\n TableId = \"job_load_table\",\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_load\",\n Labels = \n {\n { \"my_job\", \"load\" },\n },\n Load = new Gcp.BigQuery.Inputs.JobLoadArgs\n {\n SourceUris = new[]\n {\n Output.Tuple(@object.Bucket, @object.Name).Apply(values =\u003e\n {\n var bucket = values.Item1;\n var name = values.Item2;\n return $\"gs://{bucket}/{name}\";\n }),\n },\n DestinationTable = new Gcp.BigQuery.Inputs.JobLoadDestinationTableArgs\n {\n ProjectId = foo.Project,\n DatasetId = foo.DatasetId,\n TableId = foo.TableId,\n },\n WriteDisposition = \"WRITE_TRUNCATE\",\n Autodetect = true,\n SourceFormat = \"NEWLINE_DELIMITED_JSON\",\n JsonExtension = \"GEOJSON\",\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/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject := \"my-project-name\"\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(fmt.Sprintf(\"%v-bq-geojson\", project)),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tobject, err := storage.NewBucketObject(ctx, \"object\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"geojson-data.jsonl\"),\n\t\t\tBucket: bucket.Name,\n\t\t\tContent: pulumi.String(\"{\\\"type\\\":\\\"Feature\\\",\\\"properties\\\":{\\\"continent\\\":\\\"Europe\\\",\\\"region\\\":\\\"Scandinavia\\\"},\\\"geometry\\\":{\\\"type\\\":\\\"Polygon\\\",\\\"coordinates\\\":[[[-30.94,53.33],[33.05,53.33],[33.05,71.86],[-30.94,71.86],[-30.94,53.33]]]}}\\n{\\\"type\\\":\\\"Feature\\\",\\\"properties\\\":{\\\"continent\\\":\\\"Africa\\\",\\\"region\\\":\\\"West Africa\\\"},\\\"geometry\\\":{\\\"type\\\":\\\"Polygon\\\",\\\"coordinates\\\":[[[-23.91,0],[11.95,0],[11.95,18.98],[-23.91,18.98],[-23.91,0]]]}}\\n\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbar, err := bigquery.NewDataset(ctx, \"bar\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_load_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfoo, err := bigquery.NewTable(ctx, \"foo\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: bar.DatasetId,\n\t\t\tTableId: pulumi.String(\"job_load_table\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_load\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_job\": pulumi.String(\"load\"),\n\t\t\t},\n\t\t\tLoad: \u0026bigquery.JobLoadArgs{\n\t\t\t\tSourceUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.All(object.Bucket, object.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tbucket := _args[0].(string)\n\t\t\t\t\t\tname := _args[1].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", bucket, name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tDestinationTable: \u0026bigquery.JobLoadDestinationTableArgs{\n\t\t\t\t\tProjectId: foo.Project,\n\t\t\t\t\tDatasetId: foo.DatasetId,\n\t\t\t\t\tTableId: foo.TableId,\n\t\t\t\t},\n\t\t\t\tWriteDisposition: pulumi.String(\"WRITE_TRUNCATE\"),\n\t\t\t\tAutodetect: pulumi.Bool(true),\n\t\t\t\tSourceFormat: pulumi.String(\"NEWLINE_DELIMITED_JSON\"),\n\t\t\t\tJsonExtension: pulumi.String(\"GEOJSON\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadDestinationTableArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = \"my-project-name\";\n\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .name(String.format(\"%s-bq-geojson\", project))\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var object = new BucketObject(\"object\", BucketObjectArgs.builder() \n .name(\"geojson-data.jsonl\")\n .bucket(bucket.name())\n .content(\"\"\"\n{\"type\":\"Feature\",\"properties\":{\"continent\":\"Europe\",\"region\":\"Scandinavia\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-30.94,53.33],[33.05,53.33],[33.05,71.86],[-30.94,71.86],[-30.94,53.33]]]}}\n{\"type\":\"Feature\",\"properties\":{\"continent\":\"Africa\",\"region\":\"West Africa\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-23.91,0],[11.95,0],[11.95,18.98],[-23.91,18.98],[-23.91,0]]]}}\n \"\"\")\n .build());\n\n var bar = new Dataset(\"bar\", DatasetArgs.builder() \n .datasetId(\"job_load_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var foo = new Table(\"foo\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(bar.datasetId())\n .tableId(\"job_load_table\")\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_load\")\n .labels(Map.of(\"my_job\", \"load\"))\n .load(JobLoadArgs.builder()\n .sourceUris(Output.tuple(object.bucket(), object.name()).applyValue(values -\u003e {\n var bucket = values.t1;\n var name = values.t2;\n return String.format(\"gs://%s/%s\", bucket,name);\n }))\n .destinationTable(JobLoadDestinationTableArgs.builder()\n .projectId(foo.project())\n .datasetId(foo.datasetId())\n .tableId(foo.tableId())\n .build())\n .writeDisposition(\"WRITE_TRUNCATE\")\n .autodetect(true)\n .sourceFormat(\"NEWLINE_DELIMITED_JSON\")\n .jsonExtension(\"GEOJSON\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n bucket:\n type: gcp:storage:Bucket\n properties:\n name: ${project}-bq-geojson\n location: US\n uniformBucketLevelAccess: true\n object:\n type: gcp:storage:BucketObject\n properties:\n name: geojson-data.jsonl\n bucket: ${bucket.name}\n content: |\n {\"type\":\"Feature\",\"properties\":{\"continent\":\"Europe\",\"region\":\"Scandinavia\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-30.94,53.33],[33.05,53.33],[33.05,71.86],[-30.94,71.86],[-30.94,53.33]]]}}\n {\"type\":\"Feature\",\"properties\":{\"continent\":\"Africa\",\"region\":\"West Africa\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-23.91,0],[11.95,0],[11.95,18.98],[-23.91,18.98],[-23.91,0]]]}}\n foo:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${bar.datasetId}\n tableId: job_load_table\n bar:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: job_load_dataset\n friendlyName: test\n description: This is a test description\n location: US\n job:\n type: gcp:bigquery:Job\n properties:\n jobId: job_load\n labels:\n my_job: load\n load:\n sourceUris:\n - gs://${object.bucket}/${object.name}\n destinationTable:\n projectId: ${foo.project}\n datasetId: ${foo.datasetId}\n tableId: ${foo.tableId}\n writeDisposition: WRITE_TRUNCATE\n autodetect: true\n sourceFormat: NEWLINE_DELIMITED_JSON\n jsonExtension: GEOJSON\nvariables:\n project: my-project-name\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Job Load Parquet\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.storage.Bucket(\"test\", {\n name: \"job_load_bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst testBucketObject = new gcp.storage.BucketObject(\"test\", {\n name: \"job_load_bucket_object\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/test.parquet.gzip\"),\n bucket: test.name,\n});\nconst testDataset = new gcp.bigquery.Dataset(\"test\", {\n datasetId: \"job_load_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n deletionProtection: false,\n tableId: \"job_load_table\",\n datasetId: testDataset.datasetId,\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_load\",\n labels: {\n my_job: \"load\",\n },\n load: {\n sourceUris: [pulumi.interpolate`gs://${testBucketObject.bucket}/${testBucketObject.name}`],\n destinationTable: {\n projectId: testTable.project,\n datasetId: testTable.datasetId,\n tableId: testTable.tableId,\n },\n schemaUpdateOptions: [\n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\",\n ],\n writeDisposition: \"WRITE_APPEND\",\n sourceFormat: \"PARQUET\",\n autodetect: true,\n parquetOptions: {\n enumAsString: true,\n enableListInference: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.storage.Bucket(\"test\",\n name=\"job_load_bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\ntest_bucket_object = gcp.storage.BucketObject(\"test\",\n name=\"job_load_bucket_object\",\n source=pulumi.FileAsset(\"./test-fixtures/test.parquet.gzip\"),\n bucket=test.name)\ntest_dataset = gcp.bigquery.Dataset(\"test\",\n dataset_id=\"job_load_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntest_table = gcp.bigquery.Table(\"test\",\n deletion_protection=False,\n table_id=\"job_load_table\",\n dataset_id=test_dataset.dataset_id)\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_load\",\n labels={\n \"my_job\": \"load\",\n },\n load=gcp.bigquery.JobLoadArgs(\n source_uris=[pulumi.Output.all(test_bucket_object.bucket, test_bucket_object.name).apply(lambda bucket, name: f\"gs://{bucket}/{name}\")],\n destination_table=gcp.bigquery.JobLoadDestinationTableArgs(\n project_id=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id,\n ),\n schema_update_options=[\n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\",\n ],\n write_disposition=\"WRITE_APPEND\",\n source_format=\"PARQUET\",\n autodetect=True,\n parquet_options=gcp.bigquery.JobLoadParquetOptionsArgs(\n enum_as_string=True,\n enable_list_inference=True,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.Storage.Bucket(\"test\", new()\n {\n Name = \"job_load_bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var testBucketObject = new Gcp.Storage.BucketObject(\"test\", new()\n {\n Name = \"job_load_bucket_object\",\n Source = new FileAsset(\"./test-fixtures/test.parquet.gzip\"),\n Bucket = test.Name,\n });\n\n var testDataset = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"job_load_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n DeletionProtection = false,\n TableId = \"job_load_table\",\n DatasetId = testDataset.DatasetId,\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_load\",\n Labels = \n {\n { \"my_job\", \"load\" },\n },\n Load = new Gcp.BigQuery.Inputs.JobLoadArgs\n {\n SourceUris = new[]\n {\n Output.Tuple(testBucketObject.Bucket, testBucketObject.Name).Apply(values =\u003e\n {\n var bucket = values.Item1;\n var name = values.Item2;\n return $\"gs://{bucket}/{name}\";\n }),\n },\n DestinationTable = new Gcp.BigQuery.Inputs.JobLoadDestinationTableArgs\n {\n ProjectId = testTable.Project,\n DatasetId = testTable.DatasetId,\n TableId = testTable.TableId,\n },\n SchemaUpdateOptions = new[]\n {\n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\",\n },\n WriteDisposition = \"WRITE_APPEND\",\n SourceFormat = \"PARQUET\",\n Autodetect = true,\n ParquetOptions = new Gcp.BigQuery.Inputs.JobLoadParquetOptionsArgs\n {\n EnumAsString = true,\n EnableListInference = true,\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/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := storage.NewBucket(ctx, \"test\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"job_load_bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestBucketObject, err := storage.NewBucketObject(ctx, \"test\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"job_load_bucket_object\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/test.parquet.gzip\"),\n\t\t\tBucket: test.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestDataset, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_load_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTableId: pulumi.String(\"job_load_table\"),\n\t\t\tDatasetId: testDataset.DatasetId,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_load\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_job\": pulumi.String(\"load\"),\n\t\t\t},\n\t\t\tLoad: \u0026bigquery.JobLoadArgs{\n\t\t\t\tSourceUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.All(testBucketObject.Bucket, testBucketObject.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tbucket := _args[0].(string)\n\t\t\t\t\t\tname := _args[1].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", bucket, name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tDestinationTable: \u0026bigquery.JobLoadDestinationTableArgs{\n\t\t\t\t\tProjectId: testTable.Project,\n\t\t\t\t\tDatasetId: testTable.DatasetId,\n\t\t\t\t\tTableId: testTable.TableId,\n\t\t\t\t},\n\t\t\t\tSchemaUpdateOptions: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALLOW_FIELD_RELAXATION\"),\n\t\t\t\t\tpulumi.String(\"ALLOW_FIELD_ADDITION\"),\n\t\t\t\t},\n\t\t\t\tWriteDisposition: pulumi.String(\"WRITE_APPEND\"),\n\t\t\t\tSourceFormat: pulumi.String(\"PARQUET\"),\n\t\t\t\tAutodetect: pulumi.Bool(true),\n\t\t\t\tParquetOptions: \u0026bigquery.JobLoadParquetOptionsArgs{\n\t\t\t\t\tEnumAsString: pulumi.Bool(true),\n\t\t\t\t\tEnableListInference: 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.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadDestinationTableArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadParquetOptionsArgs;\nimport com.pulumi.asset.FileAsset;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Bucket(\"test\", BucketArgs.builder() \n .name(\"job_load_bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var testBucketObject = new BucketObject(\"testBucketObject\", BucketObjectArgs.builder() \n .name(\"job_load_bucket_object\")\n .source(new FileAsset(\"./test-fixtures/test.parquet.gzip\"))\n .bucket(test.name())\n .build());\n\n var testDataset = new Dataset(\"testDataset\", DatasetArgs.builder() \n .datasetId(\"job_load_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder() \n .deletionProtection(false)\n .tableId(\"job_load_table\")\n .datasetId(testDataset.datasetId())\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_load\")\n .labels(Map.of(\"my_job\", \"load\"))\n .load(JobLoadArgs.builder()\n .sourceUris(Output.tuple(testBucketObject.bucket(), testBucketObject.name()).applyValue(values -\u003e {\n var bucket = values.t1;\n var name = values.t2;\n return String.format(\"gs://%s/%s\", bucket,name);\n }))\n .destinationTable(JobLoadDestinationTableArgs.builder()\n .projectId(testTable.project())\n .datasetId(testTable.datasetId())\n .tableId(testTable.tableId())\n .build())\n .schemaUpdateOptions( \n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\")\n .writeDisposition(\"WRITE_APPEND\")\n .sourceFormat(\"PARQUET\")\n .autodetect(true)\n .parquetOptions(JobLoadParquetOptionsArgs.builder()\n .enumAsString(true)\n .enableListInference(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:storage:Bucket\n properties:\n name: job_load_bucket\n location: US\n uniformBucketLevelAccess: true\n testBucketObject:\n type: gcp:storage:BucketObject\n name: test\n properties:\n name: job_load_bucket_object\n source:\n fn::FileAsset: ./test-fixtures/test.parquet.gzip\n bucket: ${test.name}\n testDataset:\n type: gcp:bigquery:Dataset\n name: test\n properties:\n datasetId: job_load_dataset\n friendlyName: test\n description: This is a test description\n location: US\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n deletionProtection: false\n tableId: job_load_table\n datasetId: ${testDataset.datasetId}\n job:\n type: gcp:bigquery:Job\n properties:\n jobId: job_load\n labels:\n my_job: load\n load:\n sourceUris:\n - gs://${testBucketObject.bucket}/${testBucketObject.name}\n destinationTable:\n projectId: ${testTable.project}\n datasetId: ${testTable.datasetId}\n tableId: ${testTable.tableId}\n schemaUpdateOptions:\n - ALLOW_FIELD_RELAXATION\n - ALLOW_FIELD_ADDITION\n writeDisposition: WRITE_APPEND\n sourceFormat: PARQUET\n autodetect: true\n parquetOptions:\n enumAsString: true\n enableListInference: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Job Copy\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sourceDataset: gcp.bigquery.Dataset[] = [];\nfor (const range = {value: 0}; range.value \u003c 2; range.value++) {\n sourceDataset.push(new gcp.bigquery.Dataset(`source-${range.value}`, {\n datasetId: `job_copy_${range.value}_dataset`,\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n }));\n}\nconst source: gcp.bigquery.Table[] = [];\nsourceDataset.length.apply(rangeBody =\u003e {\n for (const range = {value: 0}; range.value \u003c rangeBody; range.value++) {\n source.push(new gcp.bigquery.Table(`source-${range.value}`, {\n deletionProtection: false,\n datasetId: sourceDataset[range.value].datasetId,\n tableId: `job_copy_${range.value}_table`,\n schema: `[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n }));\n }\n});\nconst destDataset = new gcp.bigquery.Dataset(\"dest\", {\n datasetId: \"job_copy_dest_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst keyRing = new gcp.kms.KeyRing(\"key_ring\", {\n name: \"example-keyring\",\n location: \"global\",\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"crypto_key\", {\n name: \"example-key\",\n keyRing: keyRing.id,\n});\nconst dest = new gcp.bigquery.Table(\"dest\", {\n deletionProtection: false,\n datasetId: destDataset.datasetId,\n tableId: \"job_copy_dest_table\",\n schema: `[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n encryptionConfiguration: {\n kmsKeyName: cryptoKey.id,\n },\n});\nconst project = gcp.organizations.getProject({\n projectId: \"my-project-name\",\n});\nconst encryptRole = new gcp.projects.IAMMember(\"encrypt_role\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:bq-${project.number}@bigquery-encryption.iam.gserviceaccount.com`),\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_copy\",\n copy: {\n sourceTables: [\n {\n projectId: source[0].project,\n datasetId: source[0].datasetId,\n tableId: source[0].tableId,\n },\n {\n projectId: source[1].project,\n datasetId: source[1].datasetId,\n tableId: source[1].tableId,\n },\n ],\n destinationTable: {\n projectId: dest.project,\n datasetId: dest.datasetId,\n tableId: dest.tableId,\n },\n destinationEncryptionConfiguration: {\n kmsKeyName: cryptoKey.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsource_dataset = []\nfor range in [{\"value\": i} for i in range(0, 2)]:\n source_dataset.append(gcp.bigquery.Dataset(f\"source-{range['value']}\",\n dataset_id=f\"job_copy_{range['value']}_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\"))\nsource = []\ndef create_source(range_body):\n for range in [{\"value\": i} for i in range(0, range_body)]:\n source.append(gcp.bigquery.Table(f\"source-{range['value']}\",\n deletion_protection=False,\n dataset_id=source_dataset[range[\"value\"]].dataset_id,\n table_id=f\"job_copy_{range['value']}_table\",\n schema=\"\"\"[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\"))\n\n(len(source_dataset)).apply(create_source)\ndest_dataset = gcp.bigquery.Dataset(\"dest\",\n dataset_id=\"job_copy_dest_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nkey_ring = gcp.kms.KeyRing(\"key_ring\",\n name=\"example-keyring\",\n location=\"global\")\ncrypto_key = gcp.kms.CryptoKey(\"crypto_key\",\n name=\"example-key\",\n key_ring=key_ring.id)\ndest = gcp.bigquery.Table(\"dest\",\n deletion_protection=False,\n dataset_id=dest_dataset.dataset_id,\n table_id=\"job_copy_dest_table\",\n schema=\"\"\"[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\",\n encryption_configuration=gcp.bigquery.TableEncryptionConfigurationArgs(\n kms_key_name=crypto_key.id,\n ))\nproject = gcp.organizations.get_project(project_id=\"my-project-name\")\nencrypt_role = gcp.projects.IAMMember(\"encrypt_role\",\n project=project.project_id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:bq-{project.number}@bigquery-encryption.iam.gserviceaccount.com\")\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_copy\",\n copy=gcp.bigquery.JobCopyArgs(\n source_tables=[\n gcp.bigquery.JobCopySourceTableArgs(\n project_id=source[0].project,\n dataset_id=source[0].dataset_id,\n table_id=source[0].table_id,\n ),\n gcp.bigquery.JobCopySourceTableArgs(\n project_id=source[1].project,\n dataset_id=source[1].dataset_id,\n table_id=source[1].table_id,\n ),\n ],\n destination_table=gcp.bigquery.JobCopyDestinationTableArgs(\n project_id=dest.project,\n dataset_id=dest.dataset_id,\n table_id=dest.table_id,\n ),\n destination_encryption_configuration=gcp.bigquery.JobCopyDestinationEncryptionConfigurationArgs(\n kms_key_name=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 sourceDataset = new List\u003cGcp.BigQuery.Dataset\u003e();\n for (var rangeIndex = 0; rangeIndex \u003c 2; rangeIndex++)\n {\n var range = new { Value = rangeIndex };\n sourceDataset.Add(new Gcp.BigQuery.Dataset($\"source-{range.Value}\", new()\n {\n DatasetId = $\"job_copy_{range.Value}_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n }));\n }\n var source = new List\u003cGcp.BigQuery.Table\u003e();\n for (var rangeIndex = 0; rangeIndex \u003c sourceDataset.Length; rangeIndex++)\n {\n var range = new { Value = rangeIndex };\n source.Add(new Gcp.BigQuery.Table($\"source-{range.Value}\", new()\n {\n DeletionProtection = false,\n DatasetId = sourceDataset[range.Value].DatasetId,\n TableId = $\"job_copy_{range.Value}_table\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"name\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"post_abbr\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"date\"\",\n \"\"type\"\": \"\"DATE\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n }));\n }\n var destDataset = new Gcp.BigQuery.Dataset(\"dest\", new()\n {\n DatasetId = \"job_copy_dest_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var keyRing = new Gcp.Kms.KeyRing(\"key_ring\", new()\n {\n Name = \"example-keyring\",\n Location = \"global\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"crypto_key\", new()\n {\n Name = \"example-key\",\n KeyRing = keyRing.Id,\n });\n\n var dest = new Gcp.BigQuery.Table(\"dest\", new()\n {\n DeletionProtection = false,\n DatasetId = destDataset.DatasetId,\n TableId = \"job_copy_dest_table\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"name\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"post_abbr\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"date\"\",\n \"\"type\"\": \"\"DATE\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n EncryptionConfiguration = new Gcp.BigQuery.Inputs.TableEncryptionConfigurationArgs\n {\n KmsKeyName = cryptoKey.Id,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke(new()\n {\n ProjectId = \"my-project-name\",\n });\n\n var encryptRole = new Gcp.Projects.IAMMember(\"encrypt_role\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:bq-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@bigquery-encryption.iam.gserviceaccount.com\",\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_copy\",\n Copy = new Gcp.BigQuery.Inputs.JobCopyArgs\n {\n SourceTables = new[]\n {\n new Gcp.BigQuery.Inputs.JobCopySourceTableArgs\n {\n ProjectId = source[0].Project,\n DatasetId = source[0].DatasetId,\n TableId = source[0].TableId,\n },\n new Gcp.BigQuery.Inputs.JobCopySourceTableArgs\n {\n ProjectId = source[1].Project,\n DatasetId = source[1].DatasetId,\n TableId = source[1].TableId,\n },\n },\n DestinationTable = new Gcp.BigQuery.Inputs.JobCopyDestinationTableArgs\n {\n ProjectId = dest.Project,\n DatasetId = dest.DatasetId,\n TableId = dest.TableId,\n },\n DestinationEncryptionConfiguration = new Gcp.BigQuery.Inputs.JobCopyDestinationEncryptionConfigurationArgs\n {\n KmsKeyName = cryptoKey.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\tvar sourceDataset []*bigquery.Dataset\n\t\tfor index := 0; index \u003c 2; index++ {\n\t\t\tkey0 := index\n\t\t\tval0 := index\n\t\t\t__res, err := bigquery.NewDataset(ctx, fmt.Sprintf(\"source-%v\", key0), \u0026bigquery.DatasetArgs{\n\t\t\t\tDatasetId: pulumi.String(fmt.Sprintf(\"job_copy_%v_dataset\", val0)),\n\t\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tsourceDataset = append(sourceDataset, __res)\n\t\t}\n\t\tvar source []*bigquery.Table\n\t\tfor index := 0; index \u003c len(sourceDataset); index++ {\n\t\t\tkey0 := index\n\t\t\tval0 := index\n\t\t\t__res, err := bigquery.NewTable(ctx, fmt.Sprintf(\"source-%v\", key0), \u0026bigquery.TableArgs{\n\t\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\t\tDatasetId: sourceDataset[val0].DatasetId,\n\t\t\t\tTableId: pulumi.String(fmt.Sprintf(\"job_copy_%v_table\", val0)),\n\t\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tsource = append(source, __res)\n\t\t}\n\t\tdestDataset, err := bigquery.NewDataset(ctx, \"dest\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_copy_dest_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyRing, err := kms.NewKeyRing(ctx, \"key_ring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"example-keyring\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"crypto_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"example-key\"),\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdest, err := bigquery.NewTable(ctx, \"dest\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: destDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"job_copy_dest_table\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t\tEncryptionConfiguration: \u0026bigquery.TableEncryptionConfigurationArgs{\n\t\t\t\tKmsKeyName: cryptoKey.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{\n\t\t\tProjectId: pulumi.StringRef(\"my-project-name\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = projects.NewIAMMember(ctx, \"encrypt_role\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:bq-%v@bigquery-encryption.iam.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_copy\"),\n\t\t\tCopy: \u0026bigquery.JobCopyArgs{\n\t\t\t\tSourceTables: bigquery.JobCopySourceTableArray{\n\t\t\t\t\t\u0026bigquery.JobCopySourceTableArgs{\n\t\t\t\t\t\tProjectId: source[0].Project,\n\t\t\t\t\t\tDatasetId: source[0].DatasetId,\n\t\t\t\t\t\tTableId: source[0].TableId,\n\t\t\t\t\t},\n\t\t\t\t\t\u0026bigquery.JobCopySourceTableArgs{\n\t\t\t\t\t\tProjectId: source[1].Project,\n\t\t\t\t\t\tDatasetId: source[1].DatasetId,\n\t\t\t\t\t\tTableId: source[1].TableId,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tDestinationTable: \u0026bigquery.JobCopyDestinationTableArgs{\n\t\t\t\t\tProjectId: dest.Project,\n\t\t\t\t\tDatasetId: dest.DatasetId,\n\t\t\t\t\tTableId: dest.TableId,\n\t\t\t\t},\n\t\t\t\tDestinationEncryptionConfiguration: \u0026bigquery.JobCopyDestinationEncryptionConfigurationArgs{\n\t\t\t\t\tKmsKeyName: 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.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\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.bigquery.inputs.TableEncryptionConfigurationArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobCopyArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobCopyDestinationTableArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobCopyDestinationEncryptionConfigurationArgs;\nimport com.pulumi.codegen.internal.KeyedValue;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n for (var i = 0; i \u003c 2; i++) {\n new Dataset(\"sourceDataset-\" + i, DatasetArgs.builder() \n .datasetId(String.format(\"job_copy_%s_dataset\", range.value()))\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n \n}\n for (var i = 0; i \u003c sourceDataset.length(); i++) {\n new Table(\"source-\" + i, TableArgs.builder() \n .deletionProtection(false)\n .datasetId(sourceDataset[range.value()].datasetId())\n .tableId(String.format(\"job_copy_%s_table\", range.value()))\n .schema(\"\"\"\n[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n \n}\n var destDataset = new Dataset(\"destDataset\", DatasetArgs.builder() \n .datasetId(\"job_copy_dest_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .name(\"example-keyring\")\n .location(\"global\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .name(\"example-key\")\n .keyRing(keyRing.id())\n .build());\n\n var dest = new Table(\"dest\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(destDataset.datasetId())\n .tableId(\"job_copy_dest_table\")\n .schema(\"\"\"\n[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .encryptionConfiguration(TableEncryptionConfigurationArgs.builder()\n .kmsKeyName(cryptoKey.id())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject(GetProjectArgs.builder()\n .projectId(\"my-project-name\")\n .build());\n\n var encryptRole = new IAMMember(\"encryptRole\", IAMMemberArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:bq-%s@bigquery-encryption.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_copy\")\n .copy(JobCopyArgs.builder()\n .sourceTables( \n JobCopySourceTableArgs.builder()\n .projectId(source[0].project())\n .datasetId(source[0].datasetId())\n .tableId(source[0].tableId())\n .build(),\n JobCopySourceTableArgs.builder()\n .projectId(source[1].project())\n .datasetId(source[1].datasetId())\n .tableId(source[1].tableId())\n .build())\n .destinationTable(JobCopyDestinationTableArgs.builder()\n .projectId(dest.project())\n .datasetId(dest.datasetId())\n .tableId(dest.tableId())\n .build())\n .destinationEncryptionConfiguration(JobCopyDestinationEncryptionConfigurationArgs.builder()\n .kmsKeyName(cryptoKey.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Job Extract\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst source_oneDataset = new gcp.bigquery.Dataset(\"source-one\", {\n datasetId: \"job_extract_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst source_one = new gcp.bigquery.Table(\"source-one\", {\n deletionProtection: false,\n datasetId: source_oneDataset.datasetId,\n tableId: \"job_extract_table\",\n schema: `[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst dest = new gcp.storage.Bucket(\"dest\", {\n name: \"job_extract_bucket\",\n location: \"US\",\n forceDestroy: true,\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_extract\",\n extract: {\n destinationUris: [pulumi.interpolate`${dest.url}/extract`],\n sourceTable: {\n projectId: source_one.project,\n datasetId: source_one.datasetId,\n tableId: source_one.tableId,\n },\n destinationFormat: \"NEWLINE_DELIMITED_JSON\",\n compression: \"GZIP\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsource_one_dataset = gcp.bigquery.Dataset(\"source-one\",\n dataset_id=\"job_extract_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nsource_one = gcp.bigquery.Table(\"source-one\",\n deletion_protection=False,\n dataset_id=source_one_dataset.dataset_id,\n table_id=\"job_extract_table\",\n schema=\"\"\"[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\ndest = gcp.storage.Bucket(\"dest\",\n name=\"job_extract_bucket\",\n location=\"US\",\n force_destroy=True)\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_extract\",\n extract=gcp.bigquery.JobExtractArgs(\n destination_uris=[dest.url.apply(lambda url: f\"{url}/extract\")],\n source_table=gcp.bigquery.JobExtractSourceTableArgs(\n project_id=source_one.project,\n dataset_id=source_one.dataset_id,\n table_id=source_one.table_id,\n ),\n destination_format=\"NEWLINE_DELIMITED_JSON\",\n compression=\"GZIP\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var source_oneDataset = new Gcp.BigQuery.Dataset(\"source-one\", new()\n {\n DatasetId = \"job_extract_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var source_one = new Gcp.BigQuery.Table(\"source-one\", new()\n {\n DeletionProtection = false,\n DatasetId = source_oneDataset.DatasetId,\n TableId = \"job_extract_table\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"name\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"post_abbr\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"date\"\",\n \"\"type\"\": \"\"DATE\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var dest = new Gcp.Storage.Bucket(\"dest\", new()\n {\n Name = \"job_extract_bucket\",\n Location = \"US\",\n ForceDestroy = true,\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_extract\",\n Extract = new Gcp.BigQuery.Inputs.JobExtractArgs\n {\n DestinationUris = new[]\n {\n dest.Url.Apply(url =\u003e $\"{url}/extract\"),\n },\n SourceTable = new Gcp.BigQuery.Inputs.JobExtractSourceTableArgs\n {\n ProjectId = source_one.Project,\n DatasetId = source_one.DatasetId,\n TableId = source_one.TableId,\n },\n DestinationFormat = \"NEWLINE_DELIMITED_JSON\",\n Compression = \"GZIP\",\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/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewDataset(ctx, \"source-one\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_extract_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"source-one\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: source_oneDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"job_extract_table\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdest, err := storage.NewBucket(ctx, \"dest\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"job_extract_bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_extract\"),\n\t\t\tExtract: \u0026bigquery.JobExtractArgs{\n\t\t\t\tDestinationUris: pulumi.StringArray{\n\t\t\t\t\tdest.Url.ApplyT(func(url string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"%v/extract\", url), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tSourceTable: \u0026bigquery.JobExtractSourceTableArgs{\n\t\t\t\t\tProjectId: source_one.Project,\n\t\t\t\t\tDatasetId: source_one.DatasetId,\n\t\t\t\t\tTableId: source_one.TableId,\n\t\t\t\t},\n\t\t\t\tDestinationFormat: pulumi.String(\"NEWLINE_DELIMITED_JSON\"),\n\t\t\t\tCompression: pulumi.String(\"GZIP\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobExtractArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobExtractSourceTableArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var source_oneDataset = new Dataset(\"source-oneDataset\", DatasetArgs.builder() \n .datasetId(\"job_extract_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var source_one = new Table(\"source-one\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(source_oneDataset.datasetId())\n .tableId(\"job_extract_table\")\n .schema(\"\"\"\n[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var dest = new Bucket(\"dest\", BucketArgs.builder() \n .name(\"job_extract_bucket\")\n .location(\"US\")\n .forceDestroy(true)\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_extract\")\n .extract(JobExtractArgs.builder()\n .destinationUris(dest.url().applyValue(url -\u003e String.format(\"%s/extract\", url)))\n .sourceTable(JobExtractSourceTableArgs.builder()\n .projectId(source_one.project())\n .datasetId(source_one.datasetId())\n .tableId(source_one.tableId())\n .build())\n .destinationFormat(\"NEWLINE_DELIMITED_JSON\")\n .compression(\"GZIP\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n source-one:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"source-oneDataset\"].datasetId}\n tableId: job_extract_table\n schema: |\n [\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n ]\n source-oneDataset:\n type: gcp:bigquery:Dataset\n name: source-one\n properties:\n datasetId: job_extract_dataset\n friendlyName: test\n description: This is a test description\n location: US\n dest:\n type: gcp:storage:Bucket\n properties:\n name: job_extract_bucket\n location: US\n forceDestroy: true\n job:\n type: gcp:bigquery:Job\n properties:\n jobId: job_extract\n extract:\n destinationUris:\n - ${dest.url}/extract\n sourceTable:\n projectId: ${[\"source-one\"].project}\n datasetId: ${[\"source-one\"].datasetId}\n tableId: ${[\"source-one\"].tableId}\n destinationFormat: NEWLINE_DELIMITED_JSON\n compression: GZIP\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nJob can be imported using any of these accepted formats:\n\n* `projects/{{project}}/jobs/{{job_id}}/location/{{location}}`\n\n* `projects/{{project}}/jobs/{{job_id}}`\n\n* `{{project}}/{{job_id}}/{{location}}`\n\n* `{{job_id}}/{{location}}`\n\n* `{{project}}/{{job_id}}`\n\n* `{{job_id}}`\n\nWhen using the `pulumi import` command, Job can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:bigquery/job:Job default projects/{{project}}/jobs/{{job_id}}/location/{{location}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/job:Job default projects/{{project}}/jobs/{{job_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/job:Job default {{project}}/{{job_id}}/{{location}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/job:Job default {{job_id}}/{{location}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/job:Job default {{project}}/{{job_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/job:Job default {{job_id}}\n```\n\n", + "description": "Jobs are actions that BigQuery runs on your behalf to load data, export data, query data, or copy data.\nOnce a BigQuery job is created, it cannot be changed or deleted.\n\n\nTo get more information about Job, see:\n\n* [API documentation](https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs)\n* How-to Guides\n * [BigQuery Jobs Intro](https://cloud.google.com/bigquery/docs/jobs-overview)\n\n## Example Usage\n\n### Bigquery Job Query\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bar = new gcp.bigquery.Dataset(\"bar\", {\n datasetId: \"job_query_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst foo = new gcp.bigquery.Table(\"foo\", {\n deletionProtection: false,\n datasetId: bar.datasetId,\n tableId: \"job_query_table\",\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_query\",\n labels: {\n \"example-label\": \"example-value\",\n },\n query: {\n query: \"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\",\n destinationTable: {\n projectId: foo.project,\n datasetId: foo.datasetId,\n tableId: foo.tableId,\n },\n allowLargeResults: true,\n flattenResults: true,\n scriptOptions: {\n keyResultStatement: \"LAST\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbar = gcp.bigquery.Dataset(\"bar\",\n dataset_id=\"job_query_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nfoo = gcp.bigquery.Table(\"foo\",\n deletion_protection=False,\n dataset_id=bar.dataset_id,\n table_id=\"job_query_table\")\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_query\",\n labels={\n \"example-label\": \"example-value\",\n },\n query=gcp.bigquery.JobQueryArgs(\n query=\"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\",\n destination_table=gcp.bigquery.JobQueryDestinationTableArgs(\n project_id=foo.project,\n dataset_id=foo.dataset_id,\n table_id=foo.table_id,\n ),\n allow_large_results=True,\n flatten_results=True,\n script_options=gcp.bigquery.JobQueryScriptOptionsArgs(\n key_result_statement=\"LAST\",\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 bar = new Gcp.BigQuery.Dataset(\"bar\", new()\n {\n DatasetId = \"job_query_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var foo = new Gcp.BigQuery.Table(\"foo\", new()\n {\n DeletionProtection = false,\n DatasetId = bar.DatasetId,\n TableId = \"job_query_table\",\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_query\",\n Labels = \n {\n { \"example-label\", \"example-value\" },\n },\n Query = new Gcp.BigQuery.Inputs.JobQueryArgs\n {\n Query = \"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\",\n DestinationTable = new Gcp.BigQuery.Inputs.JobQueryDestinationTableArgs\n {\n ProjectId = foo.Project,\n DatasetId = foo.DatasetId,\n TableId = foo.TableId,\n },\n AllowLargeResults = true,\n FlattenResults = true,\n ScriptOptions = new Gcp.BigQuery.Inputs.JobQueryScriptOptionsArgs\n {\n KeyResultStatement = \"LAST\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbar, err := bigquery.NewDataset(ctx, \"bar\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_query_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfoo, err := bigquery.NewTable(ctx, \"foo\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: bar.DatasetId,\n\t\t\tTableId: pulumi.String(\"job_query_table\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_query\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"example-label\": pulumi.String(\"example-value\"),\n\t\t\t},\n\t\t\tQuery: \u0026bigquery.JobQueryArgs{\n\t\t\t\tQuery: pulumi.String(\"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\"),\n\t\t\t\tDestinationTable: \u0026bigquery.JobQueryDestinationTableArgs{\n\t\t\t\t\tProjectId: foo.Project,\n\t\t\t\t\tDatasetId: foo.DatasetId,\n\t\t\t\t\tTableId: foo.TableId,\n\t\t\t\t},\n\t\t\t\tAllowLargeResults: pulumi.Bool(true),\n\t\t\t\tFlattenResults: pulumi.Bool(true),\n\t\t\t\tScriptOptions: \u0026bigquery.JobQueryScriptOptionsArgs{\n\t\t\t\t\tKeyResultStatement: pulumi.String(\"LAST\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryDestinationTableArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryScriptOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bar = new Dataset(\"bar\", DatasetArgs.builder() \n .datasetId(\"job_query_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var foo = new Table(\"foo\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(bar.datasetId())\n .tableId(\"job_query_table\")\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_query\")\n .labels(Map.of(\"example-label\", \"example-value\"))\n .query(JobQueryArgs.builder()\n .query(\"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\")\n .destinationTable(JobQueryDestinationTableArgs.builder()\n .projectId(foo.project())\n .datasetId(foo.datasetId())\n .tableId(foo.tableId())\n .build())\n .allowLargeResults(true)\n .flattenResults(true)\n .scriptOptions(JobQueryScriptOptionsArgs.builder()\n .keyResultStatement(\"LAST\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n foo:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${bar.datasetId}\n tableId: job_query_table\n bar:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: job_query_dataset\n friendlyName: test\n description: This is a test description\n location: US\n job:\n type: gcp:bigquery:Job\n properties:\n jobId: job_query\n labels:\n example-label: example-value\n query:\n query: SELECT state FROM [lookerdata:cdc.project_tycho_reports]\n destinationTable:\n projectId: ${foo.project}\n datasetId: ${foo.datasetId}\n tableId: ${foo.tableId}\n allowLargeResults: true\n flattenResults: true\n scriptOptions:\n keyResultStatement: LAST\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Job Query Table Reference\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bar = new gcp.bigquery.Dataset(\"bar\", {\n datasetId: \"job_query_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst foo = new gcp.bigquery.Table(\"foo\", {\n deletionProtection: false,\n datasetId: bar.datasetId,\n tableId: \"job_query_table\",\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_query\",\n labels: {\n \"example-label\": \"example-value\",\n },\n query: {\n query: \"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\",\n destinationTable: {\n tableId: foo.id,\n },\n defaultDataset: {\n datasetId: bar.id,\n },\n allowLargeResults: true,\n flattenResults: true,\n scriptOptions: {\n keyResultStatement: \"LAST\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbar = gcp.bigquery.Dataset(\"bar\",\n dataset_id=\"job_query_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nfoo = gcp.bigquery.Table(\"foo\",\n deletion_protection=False,\n dataset_id=bar.dataset_id,\n table_id=\"job_query_table\")\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_query\",\n labels={\n \"example-label\": \"example-value\",\n },\n query=gcp.bigquery.JobQueryArgs(\n query=\"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\",\n destination_table=gcp.bigquery.JobQueryDestinationTableArgs(\n table_id=foo.id,\n ),\n default_dataset=gcp.bigquery.JobQueryDefaultDatasetArgs(\n dataset_id=bar.id,\n ),\n allow_large_results=True,\n flatten_results=True,\n script_options=gcp.bigquery.JobQueryScriptOptionsArgs(\n key_result_statement=\"LAST\",\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 bar = new Gcp.BigQuery.Dataset(\"bar\", new()\n {\n DatasetId = \"job_query_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var foo = new Gcp.BigQuery.Table(\"foo\", new()\n {\n DeletionProtection = false,\n DatasetId = bar.DatasetId,\n TableId = \"job_query_table\",\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_query\",\n Labels = \n {\n { \"example-label\", \"example-value\" },\n },\n Query = new Gcp.BigQuery.Inputs.JobQueryArgs\n {\n Query = \"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\",\n DestinationTable = new Gcp.BigQuery.Inputs.JobQueryDestinationTableArgs\n {\n TableId = foo.Id,\n },\n DefaultDataset = new Gcp.BigQuery.Inputs.JobQueryDefaultDatasetArgs\n {\n DatasetId = bar.Id,\n },\n AllowLargeResults = true,\n FlattenResults = true,\n ScriptOptions = new Gcp.BigQuery.Inputs.JobQueryScriptOptionsArgs\n {\n KeyResultStatement = \"LAST\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbar, err := bigquery.NewDataset(ctx, \"bar\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_query_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfoo, err := bigquery.NewTable(ctx, \"foo\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: bar.DatasetId,\n\t\t\tTableId: pulumi.String(\"job_query_table\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_query\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"example-label\": pulumi.String(\"example-value\"),\n\t\t\t},\n\t\t\tQuery: \u0026bigquery.JobQueryArgs{\n\t\t\t\tQuery: pulumi.String(\"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\"),\n\t\t\t\tDestinationTable: \u0026bigquery.JobQueryDestinationTableArgs{\n\t\t\t\t\tTableId: foo.ID(),\n\t\t\t\t},\n\t\t\t\tDefaultDataset: \u0026bigquery.JobQueryDefaultDatasetArgs{\n\t\t\t\t\tDatasetId: bar.ID(),\n\t\t\t\t},\n\t\t\t\tAllowLargeResults: pulumi.Bool(true),\n\t\t\t\tFlattenResults: pulumi.Bool(true),\n\t\t\t\tScriptOptions: \u0026bigquery.JobQueryScriptOptionsArgs{\n\t\t\t\t\tKeyResultStatement: pulumi.String(\"LAST\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryDestinationTableArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryDefaultDatasetArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobQueryScriptOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bar = new Dataset(\"bar\", DatasetArgs.builder() \n .datasetId(\"job_query_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var foo = new Table(\"foo\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(bar.datasetId())\n .tableId(\"job_query_table\")\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_query\")\n .labels(Map.of(\"example-label\", \"example-value\"))\n .query(JobQueryArgs.builder()\n .query(\"SELECT state FROM [lookerdata:cdc.project_tycho_reports]\")\n .destinationTable(JobQueryDestinationTableArgs.builder()\n .tableId(foo.id())\n .build())\n .defaultDataset(JobQueryDefaultDatasetArgs.builder()\n .datasetId(bar.id())\n .build())\n .allowLargeResults(true)\n .flattenResults(true)\n .scriptOptions(JobQueryScriptOptionsArgs.builder()\n .keyResultStatement(\"LAST\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n foo:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${bar.datasetId}\n tableId: job_query_table\n bar:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: job_query_dataset\n friendlyName: test\n description: This is a test description\n location: US\n job:\n type: gcp:bigquery:Job\n properties:\n jobId: job_query\n labels:\n example-label: example-value\n query:\n query: SELECT state FROM [lookerdata:cdc.project_tycho_reports]\n destinationTable:\n tableId: ${foo.id}\n defaultDataset:\n datasetId: ${bar.id}\n allowLargeResults: true\n flattenResults: true\n scriptOptions:\n keyResultStatement: LAST\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Job Load\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bar = new gcp.bigquery.Dataset(\"bar\", {\n datasetId: \"job_load_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst foo = new gcp.bigquery.Table(\"foo\", {\n deletionProtection: false,\n datasetId: bar.datasetId,\n tableId: \"job_load_table\",\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_load\",\n labels: {\n my_job: \"load\",\n },\n load: {\n sourceUris: [\"gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv\"],\n destinationTable: {\n projectId: foo.project,\n datasetId: foo.datasetId,\n tableId: foo.tableId,\n },\n skipLeadingRows: 1,\n schemaUpdateOptions: [\n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\",\n ],\n writeDisposition: \"WRITE_APPEND\",\n autodetect: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbar = gcp.bigquery.Dataset(\"bar\",\n dataset_id=\"job_load_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nfoo = gcp.bigquery.Table(\"foo\",\n deletion_protection=False,\n dataset_id=bar.dataset_id,\n table_id=\"job_load_table\")\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_load\",\n labels={\n \"my_job\": \"load\",\n },\n load=gcp.bigquery.JobLoadArgs(\n source_uris=[\"gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv\"],\n destination_table=gcp.bigquery.JobLoadDestinationTableArgs(\n project_id=foo.project,\n dataset_id=foo.dataset_id,\n table_id=foo.table_id,\n ),\n skip_leading_rows=1,\n schema_update_options=[\n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\",\n ],\n write_disposition=\"WRITE_APPEND\",\n autodetect=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 bar = new Gcp.BigQuery.Dataset(\"bar\", new()\n {\n DatasetId = \"job_load_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var foo = new Gcp.BigQuery.Table(\"foo\", new()\n {\n DeletionProtection = false,\n DatasetId = bar.DatasetId,\n TableId = \"job_load_table\",\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_load\",\n Labels = \n {\n { \"my_job\", \"load\" },\n },\n Load = new Gcp.BigQuery.Inputs.JobLoadArgs\n {\n SourceUris = new[]\n {\n \"gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv\",\n },\n DestinationTable = new Gcp.BigQuery.Inputs.JobLoadDestinationTableArgs\n {\n ProjectId = foo.Project,\n DatasetId = foo.DatasetId,\n TableId = foo.TableId,\n },\n SkipLeadingRows = 1,\n SchemaUpdateOptions = new[]\n {\n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\",\n },\n WriteDisposition = \"WRITE_APPEND\",\n Autodetect = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbar, err := bigquery.NewDataset(ctx, \"bar\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_load_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfoo, err := bigquery.NewTable(ctx, \"foo\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: bar.DatasetId,\n\t\t\tTableId: pulumi.String(\"job_load_table\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_load\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_job\": pulumi.String(\"load\"),\n\t\t\t},\n\t\t\tLoad: \u0026bigquery.JobLoadArgs{\n\t\t\t\tSourceUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv\"),\n\t\t\t\t},\n\t\t\t\tDestinationTable: \u0026bigquery.JobLoadDestinationTableArgs{\n\t\t\t\t\tProjectId: foo.Project,\n\t\t\t\t\tDatasetId: foo.DatasetId,\n\t\t\t\t\tTableId: foo.TableId,\n\t\t\t\t},\n\t\t\t\tSkipLeadingRows: pulumi.Int(1),\n\t\t\t\tSchemaUpdateOptions: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALLOW_FIELD_RELAXATION\"),\n\t\t\t\t\tpulumi.String(\"ALLOW_FIELD_ADDITION\"),\n\t\t\t\t},\n\t\t\t\tWriteDisposition: pulumi.String(\"WRITE_APPEND\"),\n\t\t\t\tAutodetect: 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.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadDestinationTableArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bar = new Dataset(\"bar\", DatasetArgs.builder() \n .datasetId(\"job_load_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var foo = new Table(\"foo\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(bar.datasetId())\n .tableId(\"job_load_table\")\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_load\")\n .labels(Map.of(\"my_job\", \"load\"))\n .load(JobLoadArgs.builder()\n .sourceUris(\"gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv\")\n .destinationTable(JobLoadDestinationTableArgs.builder()\n .projectId(foo.project())\n .datasetId(foo.datasetId())\n .tableId(foo.tableId())\n .build())\n .skipLeadingRows(1)\n .schemaUpdateOptions( \n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\")\n .writeDisposition(\"WRITE_APPEND\")\n .autodetect(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n foo:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${bar.datasetId}\n tableId: job_load_table\n bar:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: job_load_dataset\n friendlyName: test\n description: This is a test description\n location: US\n job:\n type: gcp:bigquery:Job\n properties:\n jobId: job_load\n labels:\n my_job: load\n load:\n sourceUris:\n - gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv\n destinationTable:\n projectId: ${foo.project}\n datasetId: ${foo.datasetId}\n tableId: ${foo.tableId}\n skipLeadingRows: 1\n schemaUpdateOptions:\n - ALLOW_FIELD_RELAXATION\n - ALLOW_FIELD_ADDITION\n writeDisposition: WRITE_APPEND\n autodetect: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Job Load Geojson\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = \"my-project-name\";\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n name: `${project}-bq-geojson`,\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst object = new gcp.storage.BucketObject(\"object\", {\n name: \"geojson-data.jsonl\",\n bucket: bucket.name,\n content: `{\"type\":\"Feature\",\"properties\":{\"continent\":\"Europe\",\"region\":\"Scandinavia\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-30.94,53.33],[33.05,53.33],[33.05,71.86],[-30.94,71.86],[-30.94,53.33]]]}}\n{\"type\":\"Feature\",\"properties\":{\"continent\":\"Africa\",\"region\":\"West Africa\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-23.91,0],[11.95,0],[11.95,18.98],[-23.91,18.98],[-23.91,0]]]}}\n`,\n});\nconst bar = new gcp.bigquery.Dataset(\"bar\", {\n datasetId: \"job_load_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst foo = new gcp.bigquery.Table(\"foo\", {\n deletionProtection: false,\n datasetId: bar.datasetId,\n tableId: \"job_load_table\",\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_load\",\n labels: {\n my_job: \"load\",\n },\n load: {\n sourceUris: [pulumi.interpolate`gs://${object.bucket}/${object.name}`],\n destinationTable: {\n projectId: foo.project,\n datasetId: foo.datasetId,\n tableId: foo.tableId,\n },\n writeDisposition: \"WRITE_TRUNCATE\",\n autodetect: true,\n sourceFormat: \"NEWLINE_DELIMITED_JSON\",\n jsonExtension: \"GEOJSON\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = \"my-project-name\"\nbucket = gcp.storage.Bucket(\"bucket\",\n name=f\"{project}-bq-geojson\",\n location=\"US\",\n uniform_bucket_level_access=True)\nobject = gcp.storage.BucketObject(\"object\",\n name=\"geojson-data.jsonl\",\n bucket=bucket.name,\n content=\"\"\"{\"type\":\"Feature\",\"properties\":{\"continent\":\"Europe\",\"region\":\"Scandinavia\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-30.94,53.33],[33.05,53.33],[33.05,71.86],[-30.94,71.86],[-30.94,53.33]]]}}\n{\"type\":\"Feature\",\"properties\":{\"continent\":\"Africa\",\"region\":\"West Africa\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-23.91,0],[11.95,0],[11.95,18.98],[-23.91,18.98],[-23.91,0]]]}}\n\"\"\")\nbar = gcp.bigquery.Dataset(\"bar\",\n dataset_id=\"job_load_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nfoo = gcp.bigquery.Table(\"foo\",\n deletion_protection=False,\n dataset_id=bar.dataset_id,\n table_id=\"job_load_table\")\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_load\",\n labels={\n \"my_job\": \"load\",\n },\n load=gcp.bigquery.JobLoadArgs(\n source_uris=[pulumi.Output.all(object.bucket, object.name).apply(lambda bucket, name: f\"gs://{bucket}/{name}\")],\n destination_table=gcp.bigquery.JobLoadDestinationTableArgs(\n project_id=foo.project,\n dataset_id=foo.dataset_id,\n table_id=foo.table_id,\n ),\n write_disposition=\"WRITE_TRUNCATE\",\n autodetect=True,\n source_format=\"NEWLINE_DELIMITED_JSON\",\n json_extension=\"GEOJSON\",\n ))\n```\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 = \"my-project-name\";\n\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Name = $\"{project}-bq-geojson\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var @object = new Gcp.Storage.BucketObject(\"object\", new()\n {\n Name = \"geojson-data.jsonl\",\n Bucket = bucket.Name,\n Content = @\"{\"\"type\"\":\"\"Feature\"\",\"\"properties\"\":{\"\"continent\"\":\"\"Europe\"\",\"\"region\"\":\"\"Scandinavia\"\"},\"\"geometry\"\":{\"\"type\"\":\"\"Polygon\"\",\"\"coordinates\"\":[[[-30.94,53.33],[33.05,53.33],[33.05,71.86],[-30.94,71.86],[-30.94,53.33]]]}}\n{\"\"type\"\":\"\"Feature\"\",\"\"properties\"\":{\"\"continent\"\":\"\"Africa\"\",\"\"region\"\":\"\"West Africa\"\"},\"\"geometry\"\":{\"\"type\"\":\"\"Polygon\"\",\"\"coordinates\"\":[[[-23.91,0],[11.95,0],[11.95,18.98],[-23.91,18.98],[-23.91,0]]]}}\n\",\n });\n\n var bar = new Gcp.BigQuery.Dataset(\"bar\", new()\n {\n DatasetId = \"job_load_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var foo = new Gcp.BigQuery.Table(\"foo\", new()\n {\n DeletionProtection = false,\n DatasetId = bar.DatasetId,\n TableId = \"job_load_table\",\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_load\",\n Labels = \n {\n { \"my_job\", \"load\" },\n },\n Load = new Gcp.BigQuery.Inputs.JobLoadArgs\n {\n SourceUris = new[]\n {\n Output.Tuple(@object.Bucket, @object.Name).Apply(values =\u003e\n {\n var bucket = values.Item1;\n var name = values.Item2;\n return $\"gs://{bucket}/{name}\";\n }),\n },\n DestinationTable = new Gcp.BigQuery.Inputs.JobLoadDestinationTableArgs\n {\n ProjectId = foo.Project,\n DatasetId = foo.DatasetId,\n TableId = foo.TableId,\n },\n WriteDisposition = \"WRITE_TRUNCATE\",\n Autodetect = true,\n SourceFormat = \"NEWLINE_DELIMITED_JSON\",\n JsonExtension = \"GEOJSON\",\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/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject := \"my-project-name\"\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(fmt.Sprintf(\"%v-bq-geojson\", project)),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tobject, err := storage.NewBucketObject(ctx, \"object\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"geojson-data.jsonl\"),\n\t\t\tBucket: bucket.Name,\n\t\t\tContent: pulumi.String(\"{\\\"type\\\":\\\"Feature\\\",\\\"properties\\\":{\\\"continent\\\":\\\"Europe\\\",\\\"region\\\":\\\"Scandinavia\\\"},\\\"geometry\\\":{\\\"type\\\":\\\"Polygon\\\",\\\"coordinates\\\":[[[-30.94,53.33],[33.05,53.33],[33.05,71.86],[-30.94,71.86],[-30.94,53.33]]]}}\\n{\\\"type\\\":\\\"Feature\\\",\\\"properties\\\":{\\\"continent\\\":\\\"Africa\\\",\\\"region\\\":\\\"West Africa\\\"},\\\"geometry\\\":{\\\"type\\\":\\\"Polygon\\\",\\\"coordinates\\\":[[[-23.91,0],[11.95,0],[11.95,18.98],[-23.91,18.98],[-23.91,0]]]}}\\n\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbar, err := bigquery.NewDataset(ctx, \"bar\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_load_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfoo, err := bigquery.NewTable(ctx, \"foo\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: bar.DatasetId,\n\t\t\tTableId: pulumi.String(\"job_load_table\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_load\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_job\": pulumi.String(\"load\"),\n\t\t\t},\n\t\t\tLoad: \u0026bigquery.JobLoadArgs{\n\t\t\t\tSourceUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.All(object.Bucket, object.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tbucket := _args[0].(string)\n\t\t\t\t\t\tname := _args[1].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", bucket, name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tDestinationTable: \u0026bigquery.JobLoadDestinationTableArgs{\n\t\t\t\t\tProjectId: foo.Project,\n\t\t\t\t\tDatasetId: foo.DatasetId,\n\t\t\t\t\tTableId: foo.TableId,\n\t\t\t\t},\n\t\t\t\tWriteDisposition: pulumi.String(\"WRITE_TRUNCATE\"),\n\t\t\t\tAutodetect: pulumi.Bool(true),\n\t\t\t\tSourceFormat: pulumi.String(\"NEWLINE_DELIMITED_JSON\"),\n\t\t\t\tJsonExtension: pulumi.String(\"GEOJSON\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadDestinationTableArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = \"my-project-name\";\n\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .name(String.format(\"%s-bq-geojson\", project))\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var object = new BucketObject(\"object\", BucketObjectArgs.builder() \n .name(\"geojson-data.jsonl\")\n .bucket(bucket.name())\n .content(\"\"\"\n{\"type\":\"Feature\",\"properties\":{\"continent\":\"Europe\",\"region\":\"Scandinavia\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-30.94,53.33],[33.05,53.33],[33.05,71.86],[-30.94,71.86],[-30.94,53.33]]]}}\n{\"type\":\"Feature\",\"properties\":{\"continent\":\"Africa\",\"region\":\"West Africa\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-23.91,0],[11.95,0],[11.95,18.98],[-23.91,18.98],[-23.91,0]]]}}\n \"\"\")\n .build());\n\n var bar = new Dataset(\"bar\", DatasetArgs.builder() \n .datasetId(\"job_load_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var foo = new Table(\"foo\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(bar.datasetId())\n .tableId(\"job_load_table\")\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_load\")\n .labels(Map.of(\"my_job\", \"load\"))\n .load(JobLoadArgs.builder()\n .sourceUris(Output.tuple(object.bucket(), object.name()).applyValue(values -\u003e {\n var bucket = values.t1;\n var name = values.t2;\n return String.format(\"gs://%s/%s\", bucket,name);\n }))\n .destinationTable(JobLoadDestinationTableArgs.builder()\n .projectId(foo.project())\n .datasetId(foo.datasetId())\n .tableId(foo.tableId())\n .build())\n .writeDisposition(\"WRITE_TRUNCATE\")\n .autodetect(true)\n .sourceFormat(\"NEWLINE_DELIMITED_JSON\")\n .jsonExtension(\"GEOJSON\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n bucket:\n type: gcp:storage:Bucket\n properties:\n name: ${project}-bq-geojson\n location: US\n uniformBucketLevelAccess: true\n object:\n type: gcp:storage:BucketObject\n properties:\n name: geojson-data.jsonl\n bucket: ${bucket.name}\n content: |\n {\"type\":\"Feature\",\"properties\":{\"continent\":\"Europe\",\"region\":\"Scandinavia\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-30.94,53.33],[33.05,53.33],[33.05,71.86],[-30.94,71.86],[-30.94,53.33]]]}}\n {\"type\":\"Feature\",\"properties\":{\"continent\":\"Africa\",\"region\":\"West Africa\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-23.91,0],[11.95,0],[11.95,18.98],[-23.91,18.98],[-23.91,0]]]}}\n foo:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${bar.datasetId}\n tableId: job_load_table\n bar:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: job_load_dataset\n friendlyName: test\n description: This is a test description\n location: US\n job:\n type: gcp:bigquery:Job\n properties:\n jobId: job_load\n labels:\n my_job: load\n load:\n sourceUris:\n - gs://${object.bucket}/${object.name}\n destinationTable:\n projectId: ${foo.project}\n datasetId: ${foo.datasetId}\n tableId: ${foo.tableId}\n writeDisposition: WRITE_TRUNCATE\n autodetect: true\n sourceFormat: NEWLINE_DELIMITED_JSON\n jsonExtension: GEOJSON\nvariables:\n project: my-project-name\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Job Load Parquet\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.storage.Bucket(\"test\", {\n name: \"job_load_bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst testBucketObject = new gcp.storage.BucketObject(\"test\", {\n name: \"job_load_bucket_object\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/test.parquet.gzip\"),\n bucket: test.name,\n});\nconst testDataset = new gcp.bigquery.Dataset(\"test\", {\n datasetId: \"job_load_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n deletionProtection: false,\n tableId: \"job_load_table\",\n datasetId: testDataset.datasetId,\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_load\",\n labels: {\n my_job: \"load\",\n },\n load: {\n sourceUris: [pulumi.interpolate`gs://${testBucketObject.bucket}/${testBucketObject.name}`],\n destinationTable: {\n projectId: testTable.project,\n datasetId: testTable.datasetId,\n tableId: testTable.tableId,\n },\n schemaUpdateOptions: [\n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\",\n ],\n writeDisposition: \"WRITE_APPEND\",\n sourceFormat: \"PARQUET\",\n autodetect: true,\n parquetOptions: {\n enumAsString: true,\n enableListInference: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.storage.Bucket(\"test\",\n name=\"job_load_bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\ntest_bucket_object = gcp.storage.BucketObject(\"test\",\n name=\"job_load_bucket_object\",\n source=pulumi.FileAsset(\"./test-fixtures/test.parquet.gzip\"),\n bucket=test.name)\ntest_dataset = gcp.bigquery.Dataset(\"test\",\n dataset_id=\"job_load_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntest_table = gcp.bigquery.Table(\"test\",\n deletion_protection=False,\n table_id=\"job_load_table\",\n dataset_id=test_dataset.dataset_id)\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_load\",\n labels={\n \"my_job\": \"load\",\n },\n load=gcp.bigquery.JobLoadArgs(\n source_uris=[pulumi.Output.all(test_bucket_object.bucket, test_bucket_object.name).apply(lambda bucket, name: f\"gs://{bucket}/{name}\")],\n destination_table=gcp.bigquery.JobLoadDestinationTableArgs(\n project_id=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id,\n ),\n schema_update_options=[\n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\",\n ],\n write_disposition=\"WRITE_APPEND\",\n source_format=\"PARQUET\",\n autodetect=True,\n parquet_options=gcp.bigquery.JobLoadParquetOptionsArgs(\n enum_as_string=True,\n enable_list_inference=True,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.Storage.Bucket(\"test\", new()\n {\n Name = \"job_load_bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var testBucketObject = new Gcp.Storage.BucketObject(\"test\", new()\n {\n Name = \"job_load_bucket_object\",\n Source = new FileAsset(\"./test-fixtures/test.parquet.gzip\"),\n Bucket = test.Name,\n });\n\n var testDataset = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"job_load_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n DeletionProtection = false,\n TableId = \"job_load_table\",\n DatasetId = testDataset.DatasetId,\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_load\",\n Labels = \n {\n { \"my_job\", \"load\" },\n },\n Load = new Gcp.BigQuery.Inputs.JobLoadArgs\n {\n SourceUris = new[]\n {\n Output.Tuple(testBucketObject.Bucket, testBucketObject.Name).Apply(values =\u003e\n {\n var bucket = values.Item1;\n var name = values.Item2;\n return $\"gs://{bucket}/{name}\";\n }),\n },\n DestinationTable = new Gcp.BigQuery.Inputs.JobLoadDestinationTableArgs\n {\n ProjectId = testTable.Project,\n DatasetId = testTable.DatasetId,\n TableId = testTable.TableId,\n },\n SchemaUpdateOptions = new[]\n {\n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\",\n },\n WriteDisposition = \"WRITE_APPEND\",\n SourceFormat = \"PARQUET\",\n Autodetect = true,\n ParquetOptions = new Gcp.BigQuery.Inputs.JobLoadParquetOptionsArgs\n {\n EnumAsString = true,\n EnableListInference = true,\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/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := storage.NewBucket(ctx, \"test\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"job_load_bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestBucketObject, err := storage.NewBucketObject(ctx, \"test\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"job_load_bucket_object\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/test.parquet.gzip\"),\n\t\t\tBucket: test.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestDataset, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_load_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTableId: pulumi.String(\"job_load_table\"),\n\t\t\tDatasetId: testDataset.DatasetId,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_load\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_job\": pulumi.String(\"load\"),\n\t\t\t},\n\t\t\tLoad: \u0026bigquery.JobLoadArgs{\n\t\t\t\tSourceUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.All(testBucketObject.Bucket, testBucketObject.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tbucket := _args[0].(string)\n\t\t\t\t\t\tname := _args[1].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", bucket, name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tDestinationTable: \u0026bigquery.JobLoadDestinationTableArgs{\n\t\t\t\t\tProjectId: testTable.Project,\n\t\t\t\t\tDatasetId: testTable.DatasetId,\n\t\t\t\t\tTableId: testTable.TableId,\n\t\t\t\t},\n\t\t\t\tSchemaUpdateOptions: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALLOW_FIELD_RELAXATION\"),\n\t\t\t\t\tpulumi.String(\"ALLOW_FIELD_ADDITION\"),\n\t\t\t\t},\n\t\t\t\tWriteDisposition: pulumi.String(\"WRITE_APPEND\"),\n\t\t\t\tSourceFormat: pulumi.String(\"PARQUET\"),\n\t\t\t\tAutodetect: pulumi.Bool(true),\n\t\t\t\tParquetOptions: \u0026bigquery.JobLoadParquetOptionsArgs{\n\t\t\t\t\tEnumAsString: pulumi.Bool(true),\n\t\t\t\t\tEnableListInference: 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.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadDestinationTableArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobLoadParquetOptionsArgs;\nimport com.pulumi.asset.FileAsset;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Bucket(\"test\", BucketArgs.builder() \n .name(\"job_load_bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var testBucketObject = new BucketObject(\"testBucketObject\", BucketObjectArgs.builder() \n .name(\"job_load_bucket_object\")\n .source(new FileAsset(\"./test-fixtures/test.parquet.gzip\"))\n .bucket(test.name())\n .build());\n\n var testDataset = new Dataset(\"testDataset\", DatasetArgs.builder() \n .datasetId(\"job_load_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder() \n .deletionProtection(false)\n .tableId(\"job_load_table\")\n .datasetId(testDataset.datasetId())\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_load\")\n .labels(Map.of(\"my_job\", \"load\"))\n .load(JobLoadArgs.builder()\n .sourceUris(Output.tuple(testBucketObject.bucket(), testBucketObject.name()).applyValue(values -\u003e {\n var bucket = values.t1;\n var name = values.t2;\n return String.format(\"gs://%s/%s\", bucket,name);\n }))\n .destinationTable(JobLoadDestinationTableArgs.builder()\n .projectId(testTable.project())\n .datasetId(testTable.datasetId())\n .tableId(testTable.tableId())\n .build())\n .schemaUpdateOptions( \n \"ALLOW_FIELD_RELAXATION\",\n \"ALLOW_FIELD_ADDITION\")\n .writeDisposition(\"WRITE_APPEND\")\n .sourceFormat(\"PARQUET\")\n .autodetect(true)\n .parquetOptions(JobLoadParquetOptionsArgs.builder()\n .enumAsString(true)\n .enableListInference(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:storage:Bucket\n properties:\n name: job_load_bucket\n location: US\n uniformBucketLevelAccess: true\n testBucketObject:\n type: gcp:storage:BucketObject\n name: test\n properties:\n name: job_load_bucket_object\n source:\n fn::FileAsset: ./test-fixtures/test.parquet.gzip\n bucket: ${test.name}\n testDataset:\n type: gcp:bigquery:Dataset\n name: test\n properties:\n datasetId: job_load_dataset\n friendlyName: test\n description: This is a test description\n location: US\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n deletionProtection: false\n tableId: job_load_table\n datasetId: ${testDataset.datasetId}\n job:\n type: gcp:bigquery:Job\n properties:\n jobId: job_load\n labels:\n my_job: load\n load:\n sourceUris:\n - gs://${testBucketObject.bucket}/${testBucketObject.name}\n destinationTable:\n projectId: ${testTable.project}\n datasetId: ${testTable.datasetId}\n tableId: ${testTable.tableId}\n schemaUpdateOptions:\n - ALLOW_FIELD_RELAXATION\n - ALLOW_FIELD_ADDITION\n writeDisposition: WRITE_APPEND\n sourceFormat: PARQUET\n autodetect: true\n parquetOptions:\n enumAsString: true\n enableListInference: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Job Copy\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst count = 2;\nconst sourceDataset: gcp.bigquery.Dataset[] = [];\nfor (const range = {value: 0}; range.value \u003c count; range.value++) {\n sourceDataset.push(new gcp.bigquery.Dataset(`source-${range.value}`, {\n datasetId: `job_copy_${range.value}_dataset`,\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n }));\n}\nconst source: gcp.bigquery.Table[] = [];\nfor (const range = {value: 0}; range.value \u003c count; range.value++) {\n source.push(new gcp.bigquery.Table(`source-${range.value}`, {\n deletionProtection: false,\n datasetId: sourceDataset[range.value].datasetId,\n tableId: `job_copy_${range.value}_table`,\n schema: `[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n }));\n}\nconst destDataset = new gcp.bigquery.Dataset(\"dest\", {\n datasetId: \"job_copy_dest_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst keyRing = new gcp.kms.KeyRing(\"key_ring\", {\n name: \"example-keyring\",\n location: \"global\",\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"crypto_key\", {\n name: \"example-key\",\n keyRing: keyRing.id,\n});\nconst dest = new gcp.bigquery.Table(\"dest\", {\n deletionProtection: false,\n datasetId: destDataset.datasetId,\n tableId: \"job_copy_dest_table\",\n schema: `[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n encryptionConfiguration: {\n kmsKeyName: cryptoKey.id,\n },\n});\nconst project = gcp.organizations.getProject({\n projectId: \"my-project-name\",\n});\nconst encryptRole = new gcp.projects.IAMMember(\"encrypt_role\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:bq-${project.number}@bigquery-encryption.iam.gserviceaccount.com`),\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_copy\",\n copy: {\n sourceTables: [\n {\n projectId: source[0].project,\n datasetId: source[0].datasetId,\n tableId: source[0].tableId,\n },\n {\n projectId: source[1].project,\n datasetId: source[1].datasetId,\n tableId: source[1].tableId,\n },\n ],\n destinationTable: {\n projectId: dest.project,\n datasetId: dest.datasetId,\n tableId: dest.tableId,\n },\n destinationEncryptionConfiguration: {\n kmsKeyName: cryptoKey.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncount = 2\nsource_dataset = []\nfor range in [{\"value\": i} for i in range(0, count)]:\n source_dataset.append(gcp.bigquery.Dataset(f\"source-{range['value']}\",\n dataset_id=f\"job_copy_{range['value']}_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\"))\nsource = []\nfor range in [{\"value\": i} for i in range(0, count)]:\n source.append(gcp.bigquery.Table(f\"source-{range['value']}\",\n deletion_protection=False,\n dataset_id=source_dataset[range[\"value\"]].dataset_id,\n table_id=f\"job_copy_{range['value']}_table\",\n schema=\"\"\"[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\"))\ndest_dataset = gcp.bigquery.Dataset(\"dest\",\n dataset_id=\"job_copy_dest_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nkey_ring = gcp.kms.KeyRing(\"key_ring\",\n name=\"example-keyring\",\n location=\"global\")\ncrypto_key = gcp.kms.CryptoKey(\"crypto_key\",\n name=\"example-key\",\n key_ring=key_ring.id)\ndest = gcp.bigquery.Table(\"dest\",\n deletion_protection=False,\n dataset_id=dest_dataset.dataset_id,\n table_id=\"job_copy_dest_table\",\n schema=\"\"\"[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\",\n encryption_configuration=gcp.bigquery.TableEncryptionConfigurationArgs(\n kms_key_name=crypto_key.id,\n ))\nproject = gcp.organizations.get_project(project_id=\"my-project-name\")\nencrypt_role = gcp.projects.IAMMember(\"encrypt_role\",\n project=project.project_id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:bq-{project.number}@bigquery-encryption.iam.gserviceaccount.com\")\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_copy\",\n copy=gcp.bigquery.JobCopyArgs(\n source_tables=[\n gcp.bigquery.JobCopySourceTableArgs(\n project_id=source[0].project,\n dataset_id=source[0].dataset_id,\n table_id=source[0].table_id,\n ),\n gcp.bigquery.JobCopySourceTableArgs(\n project_id=source[1].project,\n dataset_id=source[1].dataset_id,\n table_id=source[1].table_id,\n ),\n ],\n destination_table=gcp.bigquery.JobCopyDestinationTableArgs(\n project_id=dest.project,\n dataset_id=dest.dataset_id,\n table_id=dest.table_id,\n ),\n destination_encryption_configuration=gcp.bigquery.JobCopyDestinationEncryptionConfigurationArgs(\n kms_key_name=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 count = 2;\n\n var sourceDataset = new List\u003cGcp.BigQuery.Dataset\u003e();\n for (var rangeIndex = 0; rangeIndex \u003c count; rangeIndex++)\n {\n var range = new { Value = rangeIndex };\n sourceDataset.Add(new Gcp.BigQuery.Dataset($\"source-{range.Value}\", new()\n {\n DatasetId = $\"job_copy_{range.Value}_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n }));\n }\n var source = new List\u003cGcp.BigQuery.Table\u003e();\n for (var rangeIndex = 0; rangeIndex \u003c count; rangeIndex++)\n {\n var range = new { Value = rangeIndex };\n source.Add(new Gcp.BigQuery.Table($\"source-{range.Value}\", new()\n {\n DeletionProtection = false,\n DatasetId = sourceDataset[range.Value].DatasetId,\n TableId = $\"job_copy_{range.Value}_table\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"name\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"post_abbr\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"date\"\",\n \"\"type\"\": \"\"DATE\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n }));\n }\n var destDataset = new Gcp.BigQuery.Dataset(\"dest\", new()\n {\n DatasetId = \"job_copy_dest_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var keyRing = new Gcp.Kms.KeyRing(\"key_ring\", new()\n {\n Name = \"example-keyring\",\n Location = \"global\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"crypto_key\", new()\n {\n Name = \"example-key\",\n KeyRing = keyRing.Id,\n });\n\n var dest = new Gcp.BigQuery.Table(\"dest\", new()\n {\n DeletionProtection = false,\n DatasetId = destDataset.DatasetId,\n TableId = \"job_copy_dest_table\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"name\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"post_abbr\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"date\"\",\n \"\"type\"\": \"\"DATE\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n EncryptionConfiguration = new Gcp.BigQuery.Inputs.TableEncryptionConfigurationArgs\n {\n KmsKeyName = cryptoKey.Id,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke(new()\n {\n ProjectId = \"my-project-name\",\n });\n\n var encryptRole = new Gcp.Projects.IAMMember(\"encrypt_role\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:bq-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@bigquery-encryption.iam.gserviceaccount.com\",\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_copy\",\n Copy = new Gcp.BigQuery.Inputs.JobCopyArgs\n {\n SourceTables = new[]\n {\n new Gcp.BigQuery.Inputs.JobCopySourceTableArgs\n {\n ProjectId = source[0].Project,\n DatasetId = source[0].DatasetId,\n TableId = source[0].TableId,\n },\n new Gcp.BigQuery.Inputs.JobCopySourceTableArgs\n {\n ProjectId = source[1].Project,\n DatasetId = source[1].DatasetId,\n TableId = source[1].TableId,\n },\n },\n DestinationTable = new Gcp.BigQuery.Inputs.JobCopyDestinationTableArgs\n {\n ProjectId = dest.Project,\n DatasetId = dest.DatasetId,\n TableId = dest.TableId,\n },\n DestinationEncryptionConfiguration = new Gcp.BigQuery.Inputs.JobCopyDestinationEncryptionConfigurationArgs\n {\n KmsKeyName = cryptoKey.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/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\tcount := 2\n\t\tvar sourceDataset []*bigquery.Dataset\n\t\tfor index := 0; index \u003c count; index++ {\n\t\t\tkey0 := index\n\t\t\tval0 := index\n\t\t\t__res, err := bigquery.NewDataset(ctx, fmt.Sprintf(\"source-%v\", key0), \u0026bigquery.DatasetArgs{\n\t\t\t\tDatasetId: pulumi.String(fmt.Sprintf(\"job_copy_%v_dataset\", val0)),\n\t\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tsourceDataset = append(sourceDataset, __res)\n\t\t}\n\t\tvar source []*bigquery.Table\n\t\tfor index := 0; index \u003c count; index++ {\n\t\t\tkey0 := index\n\t\t\tval0 := index\n\t\t\t__res, err := bigquery.NewTable(ctx, fmt.Sprintf(\"source-%v\", key0), \u0026bigquery.TableArgs{\n\t\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\t\tDatasetId: sourceDataset[val0].DatasetId,\n\t\t\t\tTableId: pulumi.String(fmt.Sprintf(\"job_copy_%v_table\", val0)),\n\t\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tsource = append(source, __res)\n\t\t}\n\t\tdestDataset, err := bigquery.NewDataset(ctx, \"dest\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_copy_dest_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyRing, err := kms.NewKeyRing(ctx, \"key_ring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"example-keyring\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"crypto_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"example-key\"),\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdest, err := bigquery.NewTable(ctx, \"dest\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: destDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"job_copy_dest_table\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t\tEncryptionConfiguration: \u0026bigquery.TableEncryptionConfigurationArgs{\n\t\t\t\tKmsKeyName: cryptoKey.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{\n\t\t\tProjectId: pulumi.StringRef(\"my-project-name\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = projects.NewIAMMember(ctx, \"encrypt_role\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:bq-%v@bigquery-encryption.iam.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_copy\"),\n\t\t\tCopy: \u0026bigquery.JobCopyArgs{\n\t\t\t\tSourceTables: bigquery.JobCopySourceTableArray{\n\t\t\t\t\t\u0026bigquery.JobCopySourceTableArgs{\n\t\t\t\t\t\tProjectId: source[0].Project,\n\t\t\t\t\t\tDatasetId: source[0].DatasetId,\n\t\t\t\t\t\tTableId: source[0].TableId,\n\t\t\t\t\t},\n\t\t\t\t\t\u0026bigquery.JobCopySourceTableArgs{\n\t\t\t\t\t\tProjectId: source[1].Project,\n\t\t\t\t\t\tDatasetId: source[1].DatasetId,\n\t\t\t\t\t\tTableId: source[1].TableId,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tDestinationTable: \u0026bigquery.JobCopyDestinationTableArgs{\n\t\t\t\t\tProjectId: dest.Project,\n\t\t\t\t\tDatasetId: dest.DatasetId,\n\t\t\t\t\tTableId: dest.TableId,\n\t\t\t\t},\n\t\t\t\tDestinationEncryptionConfiguration: \u0026bigquery.JobCopyDestinationEncryptionConfigurationArgs{\n\t\t\t\t\tKmsKeyName: 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.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\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.bigquery.inputs.TableEncryptionConfigurationArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobCopyArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobCopyDestinationTableArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobCopyDestinationEncryptionConfigurationArgs;\nimport com.pulumi.codegen.internal.KeyedValue;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var count = 2;\n\n for (var i = 0; i \u003c count; i++) {\n new Dataset(\"sourceDataset-\" + i, DatasetArgs.builder() \n .datasetId(String.format(\"job_copy_%s_dataset\", range.value()))\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n \n}\n for (var i = 0; i \u003c count; i++) {\n new Table(\"source-\" + i, TableArgs.builder() \n .deletionProtection(false)\n .datasetId(sourceDataset[range.value()].datasetId())\n .tableId(String.format(\"job_copy_%s_table\", range.value()))\n .schema(\"\"\"\n[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n \n}\n var destDataset = new Dataset(\"destDataset\", DatasetArgs.builder() \n .datasetId(\"job_copy_dest_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .name(\"example-keyring\")\n .location(\"global\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .name(\"example-key\")\n .keyRing(keyRing.id())\n .build());\n\n var dest = new Table(\"dest\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(destDataset.datasetId())\n .tableId(\"job_copy_dest_table\")\n .schema(\"\"\"\n[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .encryptionConfiguration(TableEncryptionConfigurationArgs.builder()\n .kmsKeyName(cryptoKey.id())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject(GetProjectArgs.builder()\n .projectId(\"my-project-name\")\n .build());\n\n var encryptRole = new IAMMember(\"encryptRole\", IAMMemberArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:bq-%s@bigquery-encryption.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_copy\")\n .copy(JobCopyArgs.builder()\n .sourceTables( \n JobCopySourceTableArgs.builder()\n .projectId(source[0].project())\n .datasetId(source[0].datasetId())\n .tableId(source[0].tableId())\n .build(),\n JobCopySourceTableArgs.builder()\n .projectId(source[1].project())\n .datasetId(source[1].datasetId())\n .tableId(source[1].tableId())\n .build())\n .destinationTable(JobCopyDestinationTableArgs.builder()\n .projectId(dest.project())\n .datasetId(dest.datasetId())\n .tableId(dest.tableId())\n .build())\n .destinationEncryptionConfiguration(JobCopyDestinationEncryptionConfigurationArgs.builder()\n .kmsKeyName(cryptoKey.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Job Extract\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst source_oneDataset = new gcp.bigquery.Dataset(\"source-one\", {\n datasetId: \"job_extract_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst source_one = new gcp.bigquery.Table(\"source-one\", {\n deletionProtection: false,\n datasetId: source_oneDataset.datasetId,\n tableId: \"job_extract_table\",\n schema: `[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst dest = new gcp.storage.Bucket(\"dest\", {\n name: \"job_extract_bucket\",\n location: \"US\",\n forceDestroy: true,\n});\nconst job = new gcp.bigquery.Job(\"job\", {\n jobId: \"job_extract\",\n extract: {\n destinationUris: [pulumi.interpolate`${dest.url}/extract`],\n sourceTable: {\n projectId: source_one.project,\n datasetId: source_one.datasetId,\n tableId: source_one.tableId,\n },\n destinationFormat: \"NEWLINE_DELIMITED_JSON\",\n compression: \"GZIP\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsource_one_dataset = gcp.bigquery.Dataset(\"source-one\",\n dataset_id=\"job_extract_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nsource_one = gcp.bigquery.Table(\"source-one\",\n deletion_protection=False,\n dataset_id=source_one_dataset.dataset_id,\n table_id=\"job_extract_table\",\n schema=\"\"\"[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\ndest = gcp.storage.Bucket(\"dest\",\n name=\"job_extract_bucket\",\n location=\"US\",\n force_destroy=True)\njob = gcp.bigquery.Job(\"job\",\n job_id=\"job_extract\",\n extract=gcp.bigquery.JobExtractArgs(\n destination_uris=[dest.url.apply(lambda url: f\"{url}/extract\")],\n source_table=gcp.bigquery.JobExtractSourceTableArgs(\n project_id=source_one.project,\n dataset_id=source_one.dataset_id,\n table_id=source_one.table_id,\n ),\n destination_format=\"NEWLINE_DELIMITED_JSON\",\n compression=\"GZIP\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var source_oneDataset = new Gcp.BigQuery.Dataset(\"source-one\", new()\n {\n DatasetId = \"job_extract_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var source_one = new Gcp.BigQuery.Table(\"source-one\", new()\n {\n DeletionProtection = false,\n DatasetId = source_oneDataset.DatasetId,\n TableId = \"job_extract_table\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"name\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"post_abbr\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"date\"\",\n \"\"type\"\": \"\"DATE\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var dest = new Gcp.Storage.Bucket(\"dest\", new()\n {\n Name = \"job_extract_bucket\",\n Location = \"US\",\n ForceDestroy = true,\n });\n\n var job = new Gcp.BigQuery.Job(\"job\", new()\n {\n JobId = \"job_extract\",\n Extract = new Gcp.BigQuery.Inputs.JobExtractArgs\n {\n DestinationUris = new[]\n {\n dest.Url.Apply(url =\u003e $\"{url}/extract\"),\n },\n SourceTable = new Gcp.BigQuery.Inputs.JobExtractSourceTableArgs\n {\n ProjectId = source_one.Project,\n DatasetId = source_one.DatasetId,\n TableId = source_one.TableId,\n },\n DestinationFormat = \"NEWLINE_DELIMITED_JSON\",\n Compression = \"GZIP\",\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/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewDataset(ctx, \"source-one\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"job_extract_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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"source-one\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: source_oneDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"job_extract_table\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdest, err := storage.NewBucket(ctx, \"dest\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"job_extract_bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewJob(ctx, \"job\", \u0026bigquery.JobArgs{\n\t\t\tJobId: pulumi.String(\"job_extract\"),\n\t\t\tExtract: \u0026bigquery.JobExtractArgs{\n\t\t\t\tDestinationUris: pulumi.StringArray{\n\t\t\t\t\tdest.Url.ApplyT(func(url string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"%v/extract\", url), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tSourceTable: \u0026bigquery.JobExtractSourceTableArgs{\n\t\t\t\t\tProjectId: source_one.Project,\n\t\t\t\t\tDatasetId: source_one.DatasetId,\n\t\t\t\t\tTableId: source_one.TableId,\n\t\t\t\t},\n\t\t\t\tDestinationFormat: pulumi.String(\"NEWLINE_DELIMITED_JSON\"),\n\t\t\t\tCompression: pulumi.String(\"GZIP\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.bigquery.Job;\nimport com.pulumi.gcp.bigquery.JobArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobExtractArgs;\nimport com.pulumi.gcp.bigquery.inputs.JobExtractSourceTableArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var source_oneDataset = new Dataset(\"source-oneDataset\", DatasetArgs.builder() \n .datasetId(\"job_extract_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var source_one = new Table(\"source-one\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(source_oneDataset.datasetId())\n .tableId(\"job_extract_table\")\n .schema(\"\"\"\n[\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var dest = new Bucket(\"dest\", BucketArgs.builder() \n .name(\"job_extract_bucket\")\n .location(\"US\")\n .forceDestroy(true)\n .build());\n\n var job = new Job(\"job\", JobArgs.builder() \n .jobId(\"job_extract\")\n .extract(JobExtractArgs.builder()\n .destinationUris(dest.url().applyValue(url -\u003e String.format(\"%s/extract\", url)))\n .sourceTable(JobExtractSourceTableArgs.builder()\n .projectId(source_one.project())\n .datasetId(source_one.datasetId())\n .tableId(source_one.tableId())\n .build())\n .destinationFormat(\"NEWLINE_DELIMITED_JSON\")\n .compression(\"GZIP\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n source-one:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"source-oneDataset\"].datasetId}\n tableId: job_extract_table\n schema: |\n [\n {\n \"name\": \"name\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"post_abbr\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"date\",\n \"type\": \"DATE\",\n \"mode\": \"NULLABLE\"\n }\n ]\n source-oneDataset:\n type: gcp:bigquery:Dataset\n name: source-one\n properties:\n datasetId: job_extract_dataset\n friendlyName: test\n description: This is a test description\n location: US\n dest:\n type: gcp:storage:Bucket\n properties:\n name: job_extract_bucket\n location: US\n forceDestroy: true\n job:\n type: gcp:bigquery:Job\n properties:\n jobId: job_extract\n extract:\n destinationUris:\n - ${dest.url}/extract\n sourceTable:\n projectId: ${[\"source-one\"].project}\n datasetId: ${[\"source-one\"].datasetId}\n tableId: ${[\"source-one\"].tableId}\n destinationFormat: NEWLINE_DELIMITED_JSON\n compression: GZIP\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nJob can be imported using any of these accepted formats:\n\n* `projects/{{project}}/jobs/{{job_id}}/location/{{location}}`\n\n* `projects/{{project}}/jobs/{{job_id}}`\n\n* `{{project}}/{{job_id}}/{{location}}`\n\n* `{{job_id}}/{{location}}`\n\n* `{{project}}/{{job_id}}`\n\n* `{{job_id}}`\n\nWhen using the `pulumi import` command, Job can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:bigquery/job:Job default projects/{{project}}/jobs/{{job_id}}/location/{{location}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/job:Job default projects/{{project}}/jobs/{{job_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/job:Job default {{project}}/{{job_id}}/{{location}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/job:Job default {{job_id}}/{{location}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/job:Job default {{project}}/{{job_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/job:Job default {{job_id}}\n```\n\n", "properties": { "copy": { "$ref": "#/types/gcp:bigquery/JobCopy:JobCopy", @@ -132593,7 +133041,7 @@ } }, "gcp:cloudrunv2/job:Job": { - "description": "A Cloud Run Job resource that references a container image which is run to completion.\n\n\nTo get more information about Job, see:\n\n* [API documentation](https://cloud.google.com/run/docs/reference/rest/v2/projects.locations.jobs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/run/docs/)\n\n## Example Usage\n\n### Cloudrunv2 Job 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.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Limits\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.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n resources: {\n limits: {\n cpu: \"2\",\n memory: \"1024Mi\",\n },\n },\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n resources=gcp.cloudrunv2.JobTemplateTemplateContainerResourcesArgs(\n limits={\n \"cpu\": \"2\",\n \"memory\": \"1024Mi\",\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 @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Resources = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerResourcesArgs\n {\n Limits = \n {\n { \"cpu\", \"2\" },\n { \"memory\", \"1024Mi\" },\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tResources: \u0026cloudrunv2.JobTemplateTemplateContainerResourcesArgs{\n\t\t\t\t\t\t\t\tLimits: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\t\"cpu\": pulumi.String(\"2\"),\n\t\t\t\t\t\t\t\t\t\"memory\": pulumi.String(\"1024Mi\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .resources(JobTemplateTemplateContainerResourcesArgs.builder()\n .limits(Map.ofEntries(\n Map.entry(\"cpu\", \"2\"),\n Map.entry(\"memory\", \"1024Mi\")\n ))\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n resources:\n limits:\n cpu: '2'\n memory: 1024Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Sql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret\",\n replication: {\n auto: {},\n },\n});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"cloudrun-sql\",\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n template: {\n template: {\n volumes: [{\n name: \"cloudsql\",\n cloudSqlInstance: {\n instances: [instance.connectionName],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n envs: [\n {\n name: \"FOO\",\n value: \"bar\",\n },\n {\n name: \"latestdclsecret\",\n valueSource: {\n secretKeyRef: {\n secret: secret.secretId,\n version: \"1\",\n },\n },\n },\n ],\n volumeMounts: [{\n name: \"cloudsql\",\n mountPath: \"/cloudsql\",\n }],\n }],\n },\n },\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n auto=gcp.secretmanager.SecretReplicationAutoArgs(),\n ))\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"cloudrun-sql\",\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ),\n deletion_protection=True)\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n volumes=[gcp.cloudrunv2.JobTemplateTemplateVolumeArgs(\n name=\"cloudsql\",\n cloud_sql_instance=gcp.cloudrunv2.JobTemplateTemplateVolumeCloudSqlInstanceArgs(\n instances=[instance.connection_name],\n ),\n )],\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n envs=[\n gcp.cloudrunv2.JobTemplateTemplateContainerEnvArgs(\n name=\"FOO\",\n value=\"bar\",\n ),\n gcp.cloudrunv2.JobTemplateTemplateContainerEnvArgs(\n name=\"latestdclsecret\",\n value_source=gcp.cloudrunv2.JobTemplateTemplateContainerEnvValueSourceArgs(\n secret_key_ref=gcp.cloudrunv2.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs(\n secret=secret.secret_id,\n version=\"1\",\n ),\n ),\n ),\n ],\n volume_mounts=[gcp.cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs(\n name=\"cloudsql\",\n mount_path=\"/cloudsql\",\n )],\n )],\n ),\n ))\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"cloudrun-sql\",\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"cloudsql\",\n CloudSqlInstance = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeCloudSqlInstanceArgs\n {\n Instances = new[]\n {\n instance.ConnectionName,\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvArgs\n {\n Name = \"FOO\",\n Value = \"bar\",\n },\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvArgs\n {\n Name = \"latestdclsecret\",\n ValueSource = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvValueSourceArgs\n {\n SecretKeyRef = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs\n {\n Secret = secret.SecretId,\n Version = \"1\",\n },\n },\n },\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"cloudsql\",\n MountPath = \"/cloudsql\",\n },\n },\n },\n },\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\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-gcp/sdk/v7/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: nil,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-sql\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\tCloudSqlInstance: \u0026cloudrunv2.JobTemplateTemplateVolumeCloudSqlInstanceArgs{\n\t\t\t\t\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tinstance.ConnectionName,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tEnvs: cloudrunv2.JobTemplateTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"FOO\"),\n\t\t\t\t\t\t\t\t\tValue: pulumi.String(\"bar\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"latestdclsecret\"),\n\t\t\t\t\t\t\t\t\tValueSource: \u0026cloudrunv2.JobTemplateTemplateContainerEnvValueSourceArgs{\n\t\t\t\t\t\t\t\t\t\tSecretKeyRef: \u0026cloudrunv2.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs{\n\t\t\t\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/cloudsql\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret = new Secret(\"secret\", SecretArgs.builder() \n .secretId(\"secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder() \n .name(\"cloudrun-sql\")\n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"cloudsql\")\n .cloudSqlInstance(JobTemplateTemplateVolumeCloudSqlInstanceArgs.builder()\n .instances(instance.connectionName())\n .build())\n .build())\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .envs( \n JobTemplateTemplateContainerEnvArgs.builder()\n .name(\"FOO\")\n .value(\"bar\")\n .build(),\n JobTemplateTemplateContainerEnvArgs.builder()\n .name(\"latestdclsecret\")\n .valueSource(JobTemplateTemplateContainerEnvValueSourceArgs.builder()\n .secretKeyRef(JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs.builder()\n .secret(secret.secretId())\n .version(\"1\")\n .build())\n .build())\n .build())\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"cloudsql\")\n .mountPath(\"/cloudsql\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder() \n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder() \n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n template:\n template:\n volumes:\n - name: cloudsql\n cloudSqlInstance:\n instances:\n - ${instance.connectionName}\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n envs:\n - name: FOO\n value: bar\n - name: latestdclsecret\n valueSource:\n secretKeyRef:\n secret: ${secret.secretId}\n version: '1'\n volumeMounts:\n - name: cloudsql\n mountPath: /cloudsql\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: cloudrun-sql\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n deletionProtection: 'true'\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Vpcaccess\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customTestNetwork = new gcp.compute.Network(\"custom_test\", {\n name: \"run-network\",\n autoCreateSubnetworks: false,\n});\nconst customTest = new gcp.compute.Subnetwork(\"custom_test\", {\n name: \"run-subnetwork\",\n ipCidrRange: \"10.2.0.0/28\",\n region: \"us-central1\",\n network: customTestNetwork.id,\n});\nconst connector = new gcp.vpcaccess.Connector(\"connector\", {\n name: \"run-vpc\",\n subnet: {\n name: customTest.name,\n },\n machineType: \"e2-standard-4\",\n minInstances: 2,\n maxInstances: 3,\n region: \"us-central1\",\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n vpcAccess: {\n connector: connector.id,\n egress: \"ALL_TRAFFIC\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom_test_network = gcp.compute.Network(\"custom_test\",\n name=\"run-network\",\n auto_create_subnetworks=False)\ncustom_test = gcp.compute.Subnetwork(\"custom_test\",\n name=\"run-subnetwork\",\n ip_cidr_range=\"10.2.0.0/28\",\n region=\"us-central1\",\n network=custom_test_network.id)\nconnector = gcp.vpcaccess.Connector(\"connector\",\n name=\"run-vpc\",\n subnet=gcp.vpcaccess.ConnectorSubnetArgs(\n name=custom_test.name,\n ),\n machine_type=\"e2-standard-4\",\n min_instances=2,\n max_instances=3,\n region=\"us-central1\")\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n vpc_access=gcp.cloudrunv2.JobTemplateTemplateVpcAccessArgs(\n connector=connector.id,\n egress=\"ALL_TRAFFIC\",\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 customTestNetwork = new Gcp.Compute.Network(\"custom_test\", new()\n {\n Name = \"run-network\",\n AutoCreateSubnetworks = false,\n });\n\n var customTest = new Gcp.Compute.Subnetwork(\"custom_test\", new()\n {\n Name = \"run-subnetwork\",\n IpCidrRange = \"10.2.0.0/28\",\n Region = \"us-central1\",\n Network = customTestNetwork.Id,\n });\n\n var connector = new Gcp.VpcAccess.Connector(\"connector\", new()\n {\n Name = \"run-vpc\",\n Subnet = new Gcp.VpcAccess.Inputs.ConnectorSubnetArgs\n {\n Name = customTest.Name,\n },\n MachineType = \"e2-standard-4\",\n MinInstances = 2,\n MaxInstances = 3,\n Region = \"us-central1\",\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessArgs\n {\n Connector = connector.Id,\n Egress = \"ALL_TRAFFIC\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/vpcaccess\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomTestNetwork, err := compute.NewNetwork(ctx, \"custom_test\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"run-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcustomTest, err := compute.NewSubnetwork(ctx, \"custom_test\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"run-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.2.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: customTestNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconnector, err := vpcaccess.NewConnector(ctx, \"connector\", \u0026vpcaccess.ConnectorArgs{\n\t\t\tName: pulumi.String(\"run-vpc\"),\n\t\t\tSubnet: \u0026vpcaccess.ConnectorSubnetArgs{\n\t\t\t\tName: customTest.Name,\n\t\t\t},\n\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\tMinInstances: pulumi.Int(2),\n\t\t\tMaxInstances: pulumi.Int(3),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcAccess: \u0026cloudrunv2.JobTemplateTemplateVpcAccessArgs{\n\t\t\t\t\t\tConnector: connector.ID(),\n\t\t\t\t\t\tEgress: pulumi.String(\"ALL_TRAFFIC\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.vpcaccess.Connector;\nimport com.pulumi.gcp.vpcaccess.ConnectorArgs;\nimport com.pulumi.gcp.vpcaccess.inputs.ConnectorSubnetArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateVpcAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var customTestNetwork = new Network(\"customTestNetwork\", NetworkArgs.builder() \n .name(\"run-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var customTest = new Subnetwork(\"customTest\", SubnetworkArgs.builder() \n .name(\"run-subnetwork\")\n .ipCidrRange(\"10.2.0.0/28\")\n .region(\"us-central1\")\n .network(customTestNetwork.id())\n .build());\n\n var connector = new Connector(\"connector\", ConnectorArgs.builder() \n .name(\"run-vpc\")\n .subnet(ConnectorSubnetArgs.builder()\n .name(customTest.name())\n .build())\n .machineType(\"e2-standard-4\")\n .minInstances(2)\n .maxInstances(3)\n .region(\"us-central1\")\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .vpcAccess(JobTemplateTemplateVpcAccessArgs.builder()\n .connector(connector.id())\n .egress(\"ALL_TRAFFIC\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n vpcAccess:\n connector: ${connector.id}\n egress: ALL_TRAFFIC\n connector:\n type: gcp:vpcaccess:Connector\n properties:\n name: run-vpc\n subnet:\n name: ${customTest.name}\n machineType: e2-standard-4\n minInstances: 2\n maxInstances: 3\n region: us-central1\n customTest:\n type: gcp:compute:Subnetwork\n name: custom_test\n properties:\n name: run-subnetwork\n ipCidrRange: 10.2.0.0/28\n region: us-central1\n network: ${customTestNetwork.id}\n customTestNetwork:\n type: gcp:compute:Network\n name: custom_test\n properties:\n name: run-network\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Directvpc\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.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n vpcAccess: {\n networkInterfaces: [{\n network: \"default\",\n subnetwork: \"default\",\n tags: [\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n }],\n egress: \"ALL_TRAFFIC\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/job\",\n )],\n vpc_access=gcp.cloudrunv2.JobTemplateTemplateVpcAccessArgs(\n network_interfaces=[gcp.cloudrunv2.JobTemplateTemplateVpcAccessNetworkInterfaceArgs(\n network=\"default\",\n subnetwork=\"default\",\n tags=[\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n )],\n egress=\"ALL_TRAFFIC\",\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.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessArgs\n {\n NetworkInterfaces = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessNetworkInterfaceArgs\n {\n Network = \"default\",\n Subnetwork = \"default\",\n Tags = new[]\n {\n \"tag1\",\n \"tag2\",\n \"tag3\",\n },\n },\n },\n Egress = \"ALL_TRAFFIC\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcAccess: \u0026cloudrunv2.JobTemplateTemplateVpcAccessArgs{\n\t\t\t\t\t\tNetworkInterfaces: cloudrunv2.JobTemplateTemplateVpcAccessNetworkInterfaceArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVpcAccessNetworkInterfaceArgs{\n\t\t\t\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\t\tTags: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"tag2\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"tag3\"),\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\tEgress: pulumi.String(\"ALL_TRAFFIC\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateVpcAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .build())\n .vpcAccess(JobTemplateTemplateVpcAccessArgs.builder()\n .networkInterfaces(JobTemplateTemplateVpcAccessNetworkInterfaceArgs.builder()\n .network(\"default\")\n .subnetwork(\"default\")\n .tags( \n \"tag1\",\n \"tag2\",\n \"tag3\")\n .build())\n .egress(\"ALL_TRAFFIC\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n launchStage: BETA\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n vpcAccess:\n networkInterfaces:\n - network: default\n subnetwork: default\n tags:\n - tag1\n - tag2\n - tag3\n egress: ALL_TRAFFIC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Secret\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret\",\n replication: {\n auto: {},\n },\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n template: {\n template: {\n volumes: [{\n name: \"a-volume\",\n secret: {\n secret: secret.secretId,\n defaultMode: 292,\n items: [{\n version: \"1\",\n path: \"my-secret\",\n mode: 256,\n }],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"a-volume\",\n mountPath: \"/secrets\",\n }],\n }],\n },\n },\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n auto=gcp.secretmanager.SecretReplicationAutoArgs(),\n ))\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n volumes=[gcp.cloudrunv2.JobTemplateTemplateVolumeArgs(\n name=\"a-volume\",\n secret=gcp.cloudrunv2.JobTemplateTemplateVolumeSecretArgs(\n secret=secret.secret_id,\n default_mode=292,\n items=[gcp.cloudrunv2.JobTemplateTemplateVolumeSecretItemArgs(\n version=\"1\",\n path=\"my-secret\",\n mode=256,\n )],\n ),\n )],\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n volume_mounts=[gcp.cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs(\n name=\"a-volume\",\n mount_path=\"/secrets\",\n )],\n )],\n ),\n ))\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"a-volume\",\n Secret = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeSecretArgs\n {\n Secret = secret.SecretId,\n DefaultMode = 292,\n Items = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeSecretItemArgs\n {\n Version = \"1\",\n Path = \"my-secret\",\n Mode = 256,\n },\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"a-volume\",\n MountPath = \"/secrets\",\n },\n },\n },\n },\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\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\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: nil,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\tSecret: \u0026cloudrunv2.JobTemplateTemplateVolumeSecretArgs{\n\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\tDefaultMode: pulumi.Int(292),\n\t\t\t\t\t\t\t\tItems: cloudrunv2.JobTemplateTemplateVolumeSecretItemArray{\n\t\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeSecretItemArgs{\n\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"my-secret\"),\n\t\t\t\t\t\t\t\t\t\tMode: pulumi.Int(256),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/secrets\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret = new Secret(\"secret\", SecretArgs.builder() \n .secretId(\"secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"a-volume\")\n .secret(JobTemplateTemplateVolumeSecretArgs.builder()\n .secret(secret.secretId())\n .defaultMode(292)\n .items(JobTemplateTemplateVolumeSecretItemArgs.builder()\n .version(\"1\")\n .path(\"my-secret\")\n .mode(256)\n .build())\n .build())\n .build())\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"a-volume\")\n .mountPath(\"/secrets\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder() \n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder() \n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n template:\n template:\n volumes:\n - name: a-volume\n secret:\n secret: ${secret.secretId}\n defaultMode: 292\n items:\n - version: '1'\n path: my-secret\n mode: 256\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: a-volume\n mountPath: /secrets\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Emptydir\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.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"empty-dir-volume\",\n mountPath: \"/mnt\",\n }],\n }],\n volumes: [{\n name: \"empty-dir-volume\",\n emptyDir: {\n medium: \"MEMORY\",\n sizeLimit: \"128Mi\",\n },\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n volume_mounts=[gcp.cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs(\n name=\"empty-dir-volume\",\n mount_path=\"/mnt\",\n )],\n )],\n volumes=[gcp.cloudrunv2.JobTemplateTemplateVolumeArgs(\n name=\"empty-dir-volume\",\n empty_dir=gcp.cloudrunv2.JobTemplateTemplateVolumeEmptyDirArgs(\n medium=\"MEMORY\",\n size_limit=\"128Mi\",\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.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"empty-dir-volume\",\n MountPath = \"/mnt\",\n },\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"empty-dir-volume\",\n EmptyDir = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeEmptyDirArgs\n {\n Medium = \"MEMORY\",\n SizeLimit = \"128Mi\",\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/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/mnt\"),\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\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\t\tEmptyDir: \u0026cloudrunv2.JobTemplateTemplateVolumeEmptyDirArgs{\n\t\t\t\t\t\t\t\tMedium: pulumi.String(\"MEMORY\"),\n\t\t\t\t\t\t\t\tSizeLimit: pulumi.String(\"128Mi\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"empty-dir-volume\")\n .mountPath(\"/mnt\")\n .build())\n .build())\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"empty-dir-volume\")\n .emptyDir(JobTemplateTemplateVolumeEmptyDirArgs.builder()\n .medium(\"MEMORY\")\n .sizeLimit(\"128Mi\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n launchStage: BETA\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: empty-dir-volume\n mountPath: /mnt\n volumes:\n - name: empty-dir-volume\n emptyDir:\n medium: MEMORY\n sizeLimit: 128Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nJob can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/jobs/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Job can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:cloudrunv2/job:Job default projects/{{project}}/locations/{{location}}/jobs/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/job:Job default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/job:Job default {{location}}/{{name}}\n```\n\n", + "description": "A Cloud Run Job resource that references a container image which is run to completion.\n\n\nTo get more information about Job, see:\n\n* [API documentation](https://cloud.google.com/run/docs/reference/rest/v2/projects.locations.jobs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/run/docs/)\n\n## Example Usage\n\n### Cloudrunv2 Job 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.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Limits\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.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n resources: {\n limits: {\n cpu: \"2\",\n memory: \"1024Mi\",\n },\n },\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n resources=gcp.cloudrunv2.JobTemplateTemplateContainerResourcesArgs(\n limits={\n \"cpu\": \"2\",\n \"memory\": \"1024Mi\",\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 @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Resources = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerResourcesArgs\n {\n Limits = \n {\n { \"cpu\", \"2\" },\n { \"memory\", \"1024Mi\" },\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tResources: \u0026cloudrunv2.JobTemplateTemplateContainerResourcesArgs{\n\t\t\t\t\t\t\t\tLimits: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\t\"cpu\": pulumi.String(\"2\"),\n\t\t\t\t\t\t\t\t\t\"memory\": pulumi.String(\"1024Mi\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .resources(JobTemplateTemplateContainerResourcesArgs.builder()\n .limits(Map.ofEntries(\n Map.entry(\"cpu\", \"2\"),\n Map.entry(\"memory\", \"1024Mi\")\n ))\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n resources:\n limits:\n cpu: '2'\n memory: 1024Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Sql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret\",\n replication: {\n auto: {},\n },\n});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"cloudrun-sql\",\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n template: {\n template: {\n volumes: [{\n name: \"cloudsql\",\n cloudSqlInstance: {\n instances: [instance.connectionName],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n envs: [\n {\n name: \"FOO\",\n value: \"bar\",\n },\n {\n name: \"latestdclsecret\",\n valueSource: {\n secretKeyRef: {\n secret: secret.secretId,\n version: \"1\",\n },\n },\n },\n ],\n volumeMounts: [{\n name: \"cloudsql\",\n mountPath: \"/cloudsql\",\n }],\n }],\n },\n },\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n auto=gcp.secretmanager.SecretReplicationAutoArgs(),\n ))\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"cloudrun-sql\",\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ),\n deletion_protection=True)\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n volumes=[gcp.cloudrunv2.JobTemplateTemplateVolumeArgs(\n name=\"cloudsql\",\n cloud_sql_instance=gcp.cloudrunv2.JobTemplateTemplateVolumeCloudSqlInstanceArgs(\n instances=[instance.connection_name],\n ),\n )],\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n envs=[\n gcp.cloudrunv2.JobTemplateTemplateContainerEnvArgs(\n name=\"FOO\",\n value=\"bar\",\n ),\n gcp.cloudrunv2.JobTemplateTemplateContainerEnvArgs(\n name=\"latestdclsecret\",\n value_source=gcp.cloudrunv2.JobTemplateTemplateContainerEnvValueSourceArgs(\n secret_key_ref=gcp.cloudrunv2.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs(\n secret=secret.secret_id,\n version=\"1\",\n ),\n ),\n ),\n ],\n volume_mounts=[gcp.cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs(\n name=\"cloudsql\",\n mount_path=\"/cloudsql\",\n )],\n )],\n ),\n ))\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"cloudrun-sql\",\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"cloudsql\",\n CloudSqlInstance = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeCloudSqlInstanceArgs\n {\n Instances = new[]\n {\n instance.ConnectionName,\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvArgs\n {\n Name = \"FOO\",\n Value = \"bar\",\n },\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvArgs\n {\n Name = \"latestdclsecret\",\n ValueSource = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvValueSourceArgs\n {\n SecretKeyRef = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs\n {\n Secret = secret.SecretId,\n Version = \"1\",\n },\n },\n },\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"cloudsql\",\n MountPath = \"/cloudsql\",\n },\n },\n },\n },\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\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-gcp/sdk/v7/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: nil,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-sql\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\tCloudSqlInstance: \u0026cloudrunv2.JobTemplateTemplateVolumeCloudSqlInstanceArgs{\n\t\t\t\t\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tinstance.ConnectionName,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tEnvs: cloudrunv2.JobTemplateTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"FOO\"),\n\t\t\t\t\t\t\t\t\tValue: pulumi.String(\"bar\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"latestdclsecret\"),\n\t\t\t\t\t\t\t\t\tValueSource: \u0026cloudrunv2.JobTemplateTemplateContainerEnvValueSourceArgs{\n\t\t\t\t\t\t\t\t\t\tSecretKeyRef: \u0026cloudrunv2.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs{\n\t\t\t\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/cloudsql\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret = new Secret(\"secret\", SecretArgs.builder() \n .secretId(\"secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder() \n .name(\"cloudrun-sql\")\n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"cloudsql\")\n .cloudSqlInstance(JobTemplateTemplateVolumeCloudSqlInstanceArgs.builder()\n .instances(instance.connectionName())\n .build())\n .build())\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .envs( \n JobTemplateTemplateContainerEnvArgs.builder()\n .name(\"FOO\")\n .value(\"bar\")\n .build(),\n JobTemplateTemplateContainerEnvArgs.builder()\n .name(\"latestdclsecret\")\n .valueSource(JobTemplateTemplateContainerEnvValueSourceArgs.builder()\n .secretKeyRef(JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs.builder()\n .secret(secret.secretId())\n .version(\"1\")\n .build())\n .build())\n .build())\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"cloudsql\")\n .mountPath(\"/cloudsql\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder() \n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder() \n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n template:\n template:\n volumes:\n - name: cloudsql\n cloudSqlInstance:\n instances:\n - ${instance.connectionName}\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n envs:\n - name: FOO\n value: bar\n - name: latestdclsecret\n valueSource:\n secretKeyRef:\n secret: ${secret.secretId}\n version: '1'\n volumeMounts:\n - name: cloudsql\n mountPath: /cloudsql\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: cloudrun-sql\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n deletionProtection: 'true'\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Vpcaccess\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customTestNetwork = new gcp.compute.Network(\"custom_test\", {\n name: \"run-network\",\n autoCreateSubnetworks: false,\n});\nconst customTest = new gcp.compute.Subnetwork(\"custom_test\", {\n name: \"run-subnetwork\",\n ipCidrRange: \"10.2.0.0/28\",\n region: \"us-central1\",\n network: customTestNetwork.id,\n});\nconst connector = new gcp.vpcaccess.Connector(\"connector\", {\n name: \"run-vpc\",\n subnet: {\n name: customTest.name,\n },\n machineType: \"e2-standard-4\",\n minInstances: 2,\n maxInstances: 3,\n region: \"us-central1\",\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n vpcAccess: {\n connector: connector.id,\n egress: \"ALL_TRAFFIC\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom_test_network = gcp.compute.Network(\"custom_test\",\n name=\"run-network\",\n auto_create_subnetworks=False)\ncustom_test = gcp.compute.Subnetwork(\"custom_test\",\n name=\"run-subnetwork\",\n ip_cidr_range=\"10.2.0.0/28\",\n region=\"us-central1\",\n network=custom_test_network.id)\nconnector = gcp.vpcaccess.Connector(\"connector\",\n name=\"run-vpc\",\n subnet=gcp.vpcaccess.ConnectorSubnetArgs(\n name=custom_test.name,\n ),\n machine_type=\"e2-standard-4\",\n min_instances=2,\n max_instances=3,\n region=\"us-central1\")\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n vpc_access=gcp.cloudrunv2.JobTemplateTemplateVpcAccessArgs(\n connector=connector.id,\n egress=\"ALL_TRAFFIC\",\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 customTestNetwork = new Gcp.Compute.Network(\"custom_test\", new()\n {\n Name = \"run-network\",\n AutoCreateSubnetworks = false,\n });\n\n var customTest = new Gcp.Compute.Subnetwork(\"custom_test\", new()\n {\n Name = \"run-subnetwork\",\n IpCidrRange = \"10.2.0.0/28\",\n Region = \"us-central1\",\n Network = customTestNetwork.Id,\n });\n\n var connector = new Gcp.VpcAccess.Connector(\"connector\", new()\n {\n Name = \"run-vpc\",\n Subnet = new Gcp.VpcAccess.Inputs.ConnectorSubnetArgs\n {\n Name = customTest.Name,\n },\n MachineType = \"e2-standard-4\",\n MinInstances = 2,\n MaxInstances = 3,\n Region = \"us-central1\",\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessArgs\n {\n Connector = connector.Id,\n Egress = \"ALL_TRAFFIC\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/vpcaccess\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomTestNetwork, err := compute.NewNetwork(ctx, \"custom_test\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"run-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcustomTest, err := compute.NewSubnetwork(ctx, \"custom_test\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"run-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.2.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: customTestNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconnector, err := vpcaccess.NewConnector(ctx, \"connector\", \u0026vpcaccess.ConnectorArgs{\n\t\t\tName: pulumi.String(\"run-vpc\"),\n\t\t\tSubnet: \u0026vpcaccess.ConnectorSubnetArgs{\n\t\t\t\tName: customTest.Name,\n\t\t\t},\n\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\tMinInstances: pulumi.Int(2),\n\t\t\tMaxInstances: pulumi.Int(3),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcAccess: \u0026cloudrunv2.JobTemplateTemplateVpcAccessArgs{\n\t\t\t\t\t\tConnector: connector.ID(),\n\t\t\t\t\t\tEgress: pulumi.String(\"ALL_TRAFFIC\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.vpcaccess.Connector;\nimport com.pulumi.gcp.vpcaccess.ConnectorArgs;\nimport com.pulumi.gcp.vpcaccess.inputs.ConnectorSubnetArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateVpcAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var customTestNetwork = new Network(\"customTestNetwork\", NetworkArgs.builder() \n .name(\"run-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var customTest = new Subnetwork(\"customTest\", SubnetworkArgs.builder() \n .name(\"run-subnetwork\")\n .ipCidrRange(\"10.2.0.0/28\")\n .region(\"us-central1\")\n .network(customTestNetwork.id())\n .build());\n\n var connector = new Connector(\"connector\", ConnectorArgs.builder() \n .name(\"run-vpc\")\n .subnet(ConnectorSubnetArgs.builder()\n .name(customTest.name())\n .build())\n .machineType(\"e2-standard-4\")\n .minInstances(2)\n .maxInstances(3)\n .region(\"us-central1\")\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .vpcAccess(JobTemplateTemplateVpcAccessArgs.builder()\n .connector(connector.id())\n .egress(\"ALL_TRAFFIC\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n vpcAccess:\n connector: ${connector.id}\n egress: ALL_TRAFFIC\n connector:\n type: gcp:vpcaccess:Connector\n properties:\n name: run-vpc\n subnet:\n name: ${customTest.name}\n machineType: e2-standard-4\n minInstances: 2\n maxInstances: 3\n region: us-central1\n customTest:\n type: gcp:compute:Subnetwork\n name: custom_test\n properties:\n name: run-subnetwork\n ipCidrRange: 10.2.0.0/28\n region: us-central1\n network: ${customTestNetwork.id}\n customTestNetwork:\n type: gcp:compute:Network\n name: custom_test\n properties:\n name: run-network\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Directvpc\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.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n launchStage: \"GA\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n vpcAccess: {\n networkInterfaces: [{\n network: \"default\",\n subnetwork: \"default\",\n tags: [\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n }],\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n launch_stage=\"GA\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/job\",\n )],\n vpc_access=gcp.cloudrunv2.JobTemplateTemplateVpcAccessArgs(\n network_interfaces=[gcp.cloudrunv2.JobTemplateTemplateVpcAccessNetworkInterfaceArgs(\n network=\"default\",\n subnetwork=\"default\",\n tags=[\n \"tag1\",\n \"tag2\",\n \"tag3\",\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 @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n LaunchStage = \"GA\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessArgs\n {\n NetworkInterfaces = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessNetworkInterfaceArgs\n {\n Network = \"default\",\n Subnetwork = \"default\",\n Tags = new[]\n {\n \"tag1\",\n \"tag2\",\n \"tag3\",\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"GA\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcAccess: \u0026cloudrunv2.JobTemplateTemplateVpcAccessArgs{\n\t\t\t\t\t\tNetworkInterfaces: cloudrunv2.JobTemplateTemplateVpcAccessNetworkInterfaceArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVpcAccessNetworkInterfaceArgs{\n\t\t\t\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\t\tTags: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"tag2\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"tag3\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateVpcAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .launchStage(\"GA\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .build())\n .vpcAccess(JobTemplateTemplateVpcAccessArgs.builder()\n .networkInterfaces(JobTemplateTemplateVpcAccessNetworkInterfaceArgs.builder()\n .network(\"default\")\n .subnetwork(\"default\")\n .tags( \n \"tag1\",\n \"tag2\",\n \"tag3\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n launchStage: GA\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n vpcAccess:\n networkInterfaces:\n - network: default\n subnetwork: default\n tags:\n - tag1\n - tag2\n - tag3\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Secret\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret\",\n replication: {\n auto: {},\n },\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n template: {\n template: {\n volumes: [{\n name: \"a-volume\",\n secret: {\n secret: secret.secretId,\n defaultMode: 292,\n items: [{\n version: \"1\",\n path: \"my-secret\",\n mode: 256,\n }],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"a-volume\",\n mountPath: \"/secrets\",\n }],\n }],\n },\n },\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n auto=gcp.secretmanager.SecretReplicationAutoArgs(),\n ))\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n volumes=[gcp.cloudrunv2.JobTemplateTemplateVolumeArgs(\n name=\"a-volume\",\n secret=gcp.cloudrunv2.JobTemplateTemplateVolumeSecretArgs(\n secret=secret.secret_id,\n default_mode=292,\n items=[gcp.cloudrunv2.JobTemplateTemplateVolumeSecretItemArgs(\n version=\"1\",\n path=\"my-secret\",\n mode=256,\n )],\n ),\n )],\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n volume_mounts=[gcp.cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs(\n name=\"a-volume\",\n mount_path=\"/secrets\",\n )],\n )],\n ),\n ))\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"a-volume\",\n Secret = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeSecretArgs\n {\n Secret = secret.SecretId,\n DefaultMode = 292,\n Items = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeSecretItemArgs\n {\n Version = \"1\",\n Path = \"my-secret\",\n Mode = 256,\n },\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"a-volume\",\n MountPath = \"/secrets\",\n },\n },\n },\n },\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\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\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: nil,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\tSecret: \u0026cloudrunv2.JobTemplateTemplateVolumeSecretArgs{\n\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\tDefaultMode: pulumi.Int(292),\n\t\t\t\t\t\t\t\tItems: cloudrunv2.JobTemplateTemplateVolumeSecretItemArray{\n\t\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeSecretItemArgs{\n\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"my-secret\"),\n\t\t\t\t\t\t\t\t\t\tMode: pulumi.Int(256),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/secrets\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret = new Secret(\"secret\", SecretArgs.builder() \n .secretId(\"secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"a-volume\")\n .secret(JobTemplateTemplateVolumeSecretArgs.builder()\n .secret(secret.secretId())\n .defaultMode(292)\n .items(JobTemplateTemplateVolumeSecretItemArgs.builder()\n .version(\"1\")\n .path(\"my-secret\")\n .mode(256)\n .build())\n .build())\n .build())\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"a-volume\")\n .mountPath(\"/secrets\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder() \n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder() \n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n template:\n template:\n volumes:\n - name: a-volume\n secret:\n secret: ${secret.secretId}\n defaultMode: 292\n items:\n - version: '1'\n path: my-secret\n mode: 256\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: a-volume\n mountPath: /secrets\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Emptydir\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.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"empty-dir-volume\",\n mountPath: \"/mnt\",\n }],\n }],\n volumes: [{\n name: \"empty-dir-volume\",\n emptyDir: {\n medium: \"MEMORY\",\n sizeLimit: \"128Mi\",\n },\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n volume_mounts=[gcp.cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs(\n name=\"empty-dir-volume\",\n mount_path=\"/mnt\",\n )],\n )],\n volumes=[gcp.cloudrunv2.JobTemplateTemplateVolumeArgs(\n name=\"empty-dir-volume\",\n empty_dir=gcp.cloudrunv2.JobTemplateTemplateVolumeEmptyDirArgs(\n medium=\"MEMORY\",\n size_limit=\"128Mi\",\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.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"empty-dir-volume\",\n MountPath = \"/mnt\",\n },\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"empty-dir-volume\",\n EmptyDir = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeEmptyDirArgs\n {\n Medium = \"MEMORY\",\n SizeLimit = \"128Mi\",\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/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/mnt\"),\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\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\t\tEmptyDir: \u0026cloudrunv2.JobTemplateTemplateVolumeEmptyDirArgs{\n\t\t\t\t\t\t\t\tMedium: pulumi.String(\"MEMORY\"),\n\t\t\t\t\t\t\t\tSizeLimit: pulumi.String(\"128Mi\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Job(\"default\", JobArgs.builder() \n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"empty-dir-volume\")\n .mountPath(\"/mnt\")\n .build())\n .build())\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"empty-dir-volume\")\n .emptyDir(JobTemplateTemplateVolumeEmptyDirArgs.builder()\n .medium(\"MEMORY\")\n .sizeLimit(\"128Mi\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n launchStage: BETA\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: empty-dir-volume\n mountPath: /mnt\n volumes:\n - name: empty-dir-volume\n emptyDir:\n medium: MEMORY\n sizeLimit: 128Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nJob can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/jobs/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Job can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:cloudrunv2/job:Job default projects/{{project}}/locations/{{location}}/jobs/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/job:Job default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/job:Job default {{location}}/{{name}}\n```\n\n", "properties": { "annotations": { "type": "object", @@ -133278,7 +133726,7 @@ } }, "gcp:cloudrunv2/service:Service": { - "description": "Service acts as a top-level container that manages a set of configurations and revision templates which implement a network service. Service exists to provide a singular abstraction which can be access controlled, reasoned about, and which encapsulates software lifecycle decisions such as rollout policy and team resource ownership.\n\n\nTo get more information about Service, see:\n\n* [API documentation](https://cloud.google.com/run/docs/reference/rest/v2/projects.locations.services)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/run/docs/)\n\n## Example Usage\n\n### Cloudrunv2 Service 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.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\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.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Limits\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.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n resources: {\n limits: {\n cpu: \"2\",\n memory: \"1024Mi\",\n },\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n resources=gcp.cloudrunv2.ServiceTemplateContainerResourcesArgs(\n limits={\n \"cpu\": \"2\",\n \"memory\": \"1024Mi\",\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.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Resources = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerResourcesArgs\n {\n Limits = \n {\n { \"cpu\", \"2\" },\n { \"memory\", \"1024Mi\" },\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/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tResources: \u0026cloudrunv2.ServiceTemplateContainerResourcesArgs{\n\t\t\t\t\t\t\tLimits: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"cpu\": pulumi.String(\"2\"),\n\t\t\t\t\t\t\t\t\"memory\": pulumi.String(\"1024Mi\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .resources(ServiceTemplateContainerResourcesArgs.builder()\n .limits(Map.ofEntries(\n Map.entry(\"cpu\", \"2\"),\n Map.entry(\"memory\", \"1024Mi\")\n ))\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n resources:\n limits:\n cpu: '2'\n memory: 1024Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Sql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret-1\",\n replication: {\n auto: {},\n },\n});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"cloudrun-sql\",\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n scaling: {\n maxInstanceCount: 2,\n },\n volumes: [{\n name: \"cloudsql\",\n cloudSqlInstance: {\n instances: [instance.connectionName],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n envs: [\n {\n name: \"FOO\",\n value: \"bar\",\n },\n {\n name: \"SECRET_ENV_VAR\",\n valueSource: {\n secretKeyRef: {\n secret: secret.secretId,\n version: \"1\",\n },\n },\n },\n ],\n volumeMounts: [{\n name: \"cloudsql\",\n mountPath: \"/cloudsql\",\n }],\n }],\n },\n traffics: [{\n type: \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\",\n percent: 100,\n }],\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret-1\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n auto=gcp.secretmanager.SecretReplicationAutoArgs(),\n ))\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"cloudrun-sql\",\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ),\n deletion_protection=True)\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n scaling=gcp.cloudrunv2.ServiceTemplateScalingArgs(\n max_instance_count=2,\n ),\n volumes=[gcp.cloudrunv2.ServiceTemplateVolumeArgs(\n name=\"cloudsql\",\n cloud_sql_instance=gcp.cloudrunv2.ServiceTemplateVolumeCloudSqlInstanceArgs(\n instances=[instance.connection_name],\n ),\n )],\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n envs=[\n gcp.cloudrunv2.ServiceTemplateContainerEnvArgs(\n name=\"FOO\",\n value=\"bar\",\n ),\n gcp.cloudrunv2.ServiceTemplateContainerEnvArgs(\n name=\"SECRET_ENV_VAR\",\n value_source=gcp.cloudrunv2.ServiceTemplateContainerEnvValueSourceArgs(\n secret_key_ref=gcp.cloudrunv2.ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs(\n secret=secret.secret_id,\n version=\"1\",\n ),\n ),\n ),\n ],\n volume_mounts=[gcp.cloudrunv2.ServiceTemplateContainerVolumeMountArgs(\n name=\"cloudsql\",\n mount_path=\"/cloudsql\",\n )],\n )],\n ),\n traffics=[gcp.cloudrunv2.ServiceTrafficArgs(\n type=\"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\",\n percent=100,\n )])\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret-1\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"cloudrun-sql\",\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Scaling = new Gcp.CloudRunV2.Inputs.ServiceTemplateScalingArgs\n {\n MaxInstanceCount = 2,\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"cloudsql\",\n CloudSqlInstance = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeCloudSqlInstanceArgs\n {\n Instances = new[]\n {\n instance.ConnectionName,\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvArgs\n {\n Name = \"FOO\",\n Value = \"bar\",\n },\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvArgs\n {\n Name = \"SECRET_ENV_VAR\",\n ValueSource = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvValueSourceArgs\n {\n SecretKeyRef = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs\n {\n Secret = secret.SecretId,\n Version = \"1\",\n },\n },\n },\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"cloudsql\",\n MountPath = \"/cloudsql\",\n },\n },\n },\n },\n },\n Traffics = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTrafficArgs\n {\n Type = \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\",\n Percent = 100,\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\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-gcp/sdk/v7/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret-1\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: nil,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-sql\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tScaling: \u0026cloudrunv2.ServiceTemplateScalingArgs{\n\t\t\t\t\tMaxInstanceCount: pulumi.Int(2),\n\t\t\t\t},\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\tCloudSqlInstance: \u0026cloudrunv2.ServiceTemplateVolumeCloudSqlInstanceArgs{\n\t\t\t\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\t\t\t\tinstance.ConnectionName,\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\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tEnvs: cloudrunv2.ServiceTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"FOO\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"bar\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"SECRET_ENV_VAR\"),\n\t\t\t\t\t\t\t\tValueSource: \u0026cloudrunv2.ServiceTemplateContainerEnvValueSourceArgs{\n\t\t\t\t\t\t\t\t\tSecretKeyRef: \u0026cloudrunv2.ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs{\n\t\t\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\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\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/cloudsql\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTraffics: cloudrunv2.ServiceTrafficArray{\n\t\t\t\t\u0026cloudrunv2.ServiceTrafficArgs{\n\t\t\t\t\tType: pulumi.String(\"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\"),\n\t\t\t\t\tPercent: pulumi.Int(100),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateScalingArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTrafficArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret = new Secret(\"secret\", SecretArgs.builder() \n .secretId(\"secret-1\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder() \n .name(\"cloudrun-sql\")\n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .scaling(ServiceTemplateScalingArgs.builder()\n .maxInstanceCount(2)\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"cloudsql\")\n .cloudSqlInstance(ServiceTemplateVolumeCloudSqlInstanceArgs.builder()\n .instances(instance.connectionName())\n .build())\n .build())\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .envs( \n ServiceTemplateContainerEnvArgs.builder()\n .name(\"FOO\")\n .value(\"bar\")\n .build(),\n ServiceTemplateContainerEnvArgs.builder()\n .name(\"SECRET_ENV_VAR\")\n .valueSource(ServiceTemplateContainerEnvValueSourceArgs.builder()\n .secretKeyRef(ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs.builder()\n .secret(secret.secretId())\n .version(\"1\")\n .build())\n .build())\n .build())\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"cloudsql\")\n .mountPath(\"/cloudsql\")\n .build())\n .build())\n .build())\n .traffics(ServiceTrafficArgs.builder()\n .type(\"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\")\n .percent(100)\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder() \n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder() \n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n ingress: INGRESS_TRAFFIC_ALL\n template:\n scaling:\n maxInstanceCount: 2\n volumes:\n - name: cloudsql\n cloudSqlInstance:\n instances:\n - ${instance.connectionName}\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n envs:\n - name: FOO\n value: bar\n - name: SECRET_ENV_VAR\n valueSource:\n secretKeyRef:\n secret: ${secret.secretId}\n version: '1'\n volumeMounts:\n - name: cloudsql\n mountPath: /cloudsql\n traffics:\n - type: TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\n percent: 100\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret-1\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: cloudrun-sql\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n deletionProtection: 'true'\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Vpcaccess\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customTestNetwork = new gcp.compute.Network(\"custom_test\", {\n name: \"run-network\",\n autoCreateSubnetworks: false,\n});\nconst customTest = new gcp.compute.Subnetwork(\"custom_test\", {\n name: \"run-subnetwork\",\n ipCidrRange: \"10.2.0.0/28\",\n region: \"us-central1\",\n network: customTestNetwork.id,\n});\nconst connector = new gcp.vpcaccess.Connector(\"connector\", {\n name: \"run-vpc\",\n subnet: {\n name: customTest.name,\n },\n machineType: \"e2-standard-4\",\n minInstances: 2,\n maxInstances: 3,\n region: \"us-central1\",\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n vpcAccess: {\n connector: connector.id,\n egress: \"ALL_TRAFFIC\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom_test_network = gcp.compute.Network(\"custom_test\",\n name=\"run-network\",\n auto_create_subnetworks=False)\ncustom_test = gcp.compute.Subnetwork(\"custom_test\",\n name=\"run-subnetwork\",\n ip_cidr_range=\"10.2.0.0/28\",\n region=\"us-central1\",\n network=custom_test_network.id)\nconnector = gcp.vpcaccess.Connector(\"connector\",\n name=\"run-vpc\",\n subnet=gcp.vpcaccess.ConnectorSubnetArgs(\n name=custom_test.name,\n ),\n machine_type=\"e2-standard-4\",\n min_instances=2,\n max_instances=3,\n region=\"us-central1\")\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n vpc_access=gcp.cloudrunv2.ServiceTemplateVpcAccessArgs(\n connector=connector.id,\n egress=\"ALL_TRAFFIC\",\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 customTestNetwork = new Gcp.Compute.Network(\"custom_test\", new()\n {\n Name = \"run-network\",\n AutoCreateSubnetworks = false,\n });\n\n var customTest = new Gcp.Compute.Subnetwork(\"custom_test\", new()\n {\n Name = \"run-subnetwork\",\n IpCidrRange = \"10.2.0.0/28\",\n Region = \"us-central1\",\n Network = customTestNetwork.Id,\n });\n\n var connector = new Gcp.VpcAccess.Connector(\"connector\", new()\n {\n Name = \"run-vpc\",\n Subnet = new Gcp.VpcAccess.Inputs.ConnectorSubnetArgs\n {\n Name = customTest.Name,\n },\n MachineType = \"e2-standard-4\",\n MinInstances = 2,\n MaxInstances = 3,\n Region = \"us-central1\",\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessArgs\n {\n Connector = connector.Id,\n Egress = \"ALL_TRAFFIC\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/vpcaccess\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomTestNetwork, err := compute.NewNetwork(ctx, \"custom_test\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"run-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcustomTest, err := compute.NewSubnetwork(ctx, \"custom_test\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"run-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.2.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: customTestNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconnector, err := vpcaccess.NewConnector(ctx, \"connector\", \u0026vpcaccess.ConnectorArgs{\n\t\t\tName: pulumi.String(\"run-vpc\"),\n\t\t\tSubnet: \u0026vpcaccess.ConnectorSubnetArgs{\n\t\t\t\tName: customTest.Name,\n\t\t\t},\n\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\tMinInstances: pulumi.Int(2),\n\t\t\tMaxInstances: pulumi.Int(3),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVpcAccess: \u0026cloudrunv2.ServiceTemplateVpcAccessArgs{\n\t\t\t\t\tConnector: connector.ID(),\n\t\t\t\t\tEgress: pulumi.String(\"ALL_TRAFFIC\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.vpcaccess.Connector;\nimport com.pulumi.gcp.vpcaccess.ConnectorArgs;\nimport com.pulumi.gcp.vpcaccess.inputs.ConnectorSubnetArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateVpcAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var customTestNetwork = new Network(\"customTestNetwork\", NetworkArgs.builder() \n .name(\"run-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var customTest = new Subnetwork(\"customTest\", SubnetworkArgs.builder() \n .name(\"run-subnetwork\")\n .ipCidrRange(\"10.2.0.0/28\")\n .region(\"us-central1\")\n .network(customTestNetwork.id())\n .build());\n\n var connector = new Connector(\"connector\", ConnectorArgs.builder() \n .name(\"run-vpc\")\n .subnet(ConnectorSubnetArgs.builder()\n .name(customTest.name())\n .build())\n .machineType(\"e2-standard-4\")\n .minInstances(2)\n .maxInstances(3)\n .region(\"us-central1\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .vpcAccess(ServiceTemplateVpcAccessArgs.builder()\n .connector(connector.id())\n .egress(\"ALL_TRAFFIC\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n vpcAccess:\n connector: ${connector.id}\n egress: ALL_TRAFFIC\n connector:\n type: gcp:vpcaccess:Connector\n properties:\n name: run-vpc\n subnet:\n name: ${customTest.name}\n machineType: e2-standard-4\n minInstances: 2\n maxInstances: 3\n region: us-central1\n customTest:\n type: gcp:compute:Subnetwork\n name: custom_test\n properties:\n name: run-subnetwork\n ipCidrRange: 10.2.0.0/28\n region: us-central1\n network: ${customTestNetwork.id}\n customTestNetwork:\n type: gcp:compute:Network\n name: custom_test\n properties:\n name: run-network\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Directvpc\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.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n vpcAccess: {\n networkInterfaces: [{\n network: \"default\",\n subnetwork: \"default\",\n tags: [\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n }],\n egress: \"ALL_TRAFFIC\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n vpc_access=gcp.cloudrunv2.ServiceTemplateVpcAccessArgs(\n network_interfaces=[gcp.cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArgs(\n network=\"default\",\n subnetwork=\"default\",\n tags=[\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n )],\n egress=\"ALL_TRAFFIC\",\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.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessArgs\n {\n NetworkInterfaces = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessNetworkInterfaceArgs\n {\n Network = \"default\",\n Subnetwork = \"default\",\n Tags = new[]\n {\n \"tag1\",\n \"tag2\",\n \"tag3\",\n },\n },\n },\n Egress = \"ALL_TRAFFIC\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVpcAccess: \u0026cloudrunv2.ServiceTemplateVpcAccessArgs{\n\t\t\t\t\tNetworkInterfaces: cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArray{\n\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArgs{\n\t\t\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\tTags: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"tag2\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"tag3\"),\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\tEgress: pulumi.String(\"ALL_TRAFFIC\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateVpcAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .vpcAccess(ServiceTemplateVpcAccessArgs.builder()\n .networkInterfaces(ServiceTemplateVpcAccessNetworkInterfaceArgs.builder()\n .network(\"default\")\n .subnetwork(\"default\")\n .tags( \n \"tag1\",\n \"tag2\",\n \"tag3\")\n .build())\n .egress(\"ALL_TRAFFIC\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n launchStage: BETA\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n vpcAccess:\n networkInterfaces:\n - network: default\n subnetwork: default\n tags:\n - tag1\n - tag2\n - tag3\n egress: ALL_TRAFFIC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Probes\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.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n startupProbe: {\n initialDelaySeconds: 0,\n timeoutSeconds: 1,\n periodSeconds: 3,\n failureThreshold: 1,\n tcpSocket: {\n port: 8080,\n },\n },\n livenessProbe: {\n httpGet: {\n path: \"/\",\n },\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n startup_probe=gcp.cloudrunv2.ServiceTemplateContainerStartupProbeArgs(\n initial_delay_seconds=0,\n timeout_seconds=1,\n period_seconds=3,\n failure_threshold=1,\n tcp_socket=gcp.cloudrunv2.ServiceTemplateContainerStartupProbeTcpSocketArgs(\n port=8080,\n ),\n ),\n liveness_probe=gcp.cloudrunv2.ServiceTemplateContainerLivenessProbeArgs(\n http_get=gcp.cloudrunv2.ServiceTemplateContainerLivenessProbeHttpGetArgs(\n path=\"/\",\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.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n StartupProbe = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeArgs\n {\n InitialDelaySeconds = 0,\n TimeoutSeconds = 1,\n PeriodSeconds = 3,\n FailureThreshold = 1,\n TcpSocket = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeTcpSocketArgs\n {\n Port = 8080,\n },\n },\n LivenessProbe = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerLivenessProbeArgs\n {\n HttpGet = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerLivenessProbeHttpGetArgs\n {\n Path = \"/\",\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/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tStartupProbe: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeArgs{\n\t\t\t\t\t\t\tInitialDelaySeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tTimeoutSeconds: pulumi.Int(1),\n\t\t\t\t\t\t\tPeriodSeconds: pulumi.Int(3),\n\t\t\t\t\t\t\tFailureThreshold: pulumi.Int(1),\n\t\t\t\t\t\t\tTcpSocket: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeTcpSocketArgs{\n\t\t\t\t\t\t\t\tPort: pulumi.Int(8080),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLivenessProbe: \u0026cloudrunv2.ServiceTemplateContainerLivenessProbeArgs{\n\t\t\t\t\t\t\tHttpGet: \u0026cloudrunv2.ServiceTemplateContainerLivenessProbeHttpGetArgs{\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .startupProbe(ServiceTemplateContainerStartupProbeArgs.builder()\n .initialDelaySeconds(0)\n .timeoutSeconds(1)\n .periodSeconds(3)\n .failureThreshold(1)\n .tcpSocket(ServiceTemplateContainerStartupProbeTcpSocketArgs.builder()\n .port(8080)\n .build())\n .build())\n .livenessProbe(ServiceTemplateContainerLivenessProbeArgs.builder()\n .httpGet(ServiceTemplateContainerLivenessProbeHttpGetArgs.builder()\n .path(\"/\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n startupProbe:\n initialDelaySeconds: 0\n timeoutSeconds: 1\n periodSeconds: 3\n failureThreshold: 1\n tcpSocket:\n port: 8080\n livenessProbe:\n httpGet:\n path: /\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Secret\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret-1\",\n replication: {\n auto: {},\n },\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n volumes: [{\n name: \"a-volume\",\n secret: {\n secret: secret.secretId,\n defaultMode: 292,\n items: [{\n version: \"1\",\n path: \"my-secret\",\n }],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"a-volume\",\n mountPath: \"/secrets\",\n }],\n }],\n },\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret-1\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n auto=gcp.secretmanager.SecretReplicationAutoArgs(),\n ))\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n volumes=[gcp.cloudrunv2.ServiceTemplateVolumeArgs(\n name=\"a-volume\",\n secret=gcp.cloudrunv2.ServiceTemplateVolumeSecretArgs(\n secret=secret.secret_id,\n default_mode=292,\n items=[gcp.cloudrunv2.ServiceTemplateVolumeSecretItemArgs(\n version=\"1\",\n path=\"my-secret\",\n )],\n ),\n )],\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n volume_mounts=[gcp.cloudrunv2.ServiceTemplateContainerVolumeMountArgs(\n name=\"a-volume\",\n mount_path=\"/secrets\",\n )],\n )],\n ))\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret-1\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"a-volume\",\n Secret = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeSecretArgs\n {\n Secret = secret.SecretId,\n DefaultMode = 292,\n Items = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeSecretItemArgs\n {\n Version = \"1\",\n Path = \"my-secret\",\n },\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"a-volume\",\n MountPath = \"/secrets\",\n },\n },\n },\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\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\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret-1\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: nil,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\tSecret: \u0026cloudrunv2.ServiceTemplateVolumeSecretArgs{\n\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\tDefaultMode: pulumi.Int(292),\n\t\t\t\t\t\t\tItems: cloudrunv2.ServiceTemplateVolumeSecretItemArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeSecretItemArgs{\n\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"my-secret\"),\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\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/secrets\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret = new Secret(\"secret\", SecretArgs.builder() \n .secretId(\"secret-1\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"a-volume\")\n .secret(ServiceTemplateVolumeSecretArgs.builder()\n .secret(secret.secretId())\n .defaultMode(292)\n .items(ServiceTemplateVolumeSecretItemArgs.builder()\n .version(\"1\")\n .path(\"my-secret\")\n .build())\n .build())\n .build())\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"a-volume\")\n .mountPath(\"/secrets\")\n .build())\n .build())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder() \n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder() \n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n ingress: INGRESS_TRAFFIC_ALL\n template:\n volumes:\n - name: a-volume\n secret:\n secret: ${secret.secretId}\n defaultMode: 292\n items:\n - version: '1'\n path: my-secret\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: a-volume\n mountPath: /secrets\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret-1\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Multicontainer\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.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n launchStage: \"BETA\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [\n {\n name: \"hello-1\",\n ports: {\n containerPort: 8080,\n },\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n dependsOns: [\"hello-2\"],\n volumeMounts: [{\n name: \"empty-dir-volume\",\n mountPath: \"/mnt\",\n }],\n },\n {\n name: \"hello-2\",\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n envs: [{\n name: \"PORT\",\n value: \"8081\",\n }],\n startupProbe: {\n httpGet: {\n port: 8081,\n },\n },\n },\n ],\n volumes: [{\n name: \"empty-dir-volume\",\n emptyDir: {\n medium: \"MEMORY\",\n sizeLimit: \"256Mi\",\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n containers=[\n gcp.cloudrunv2.ServiceTemplateContainerArgs(\n name=\"hello-1\",\n ports={\n \"containerPort\": 8080,\n },\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n depends_ons=[\"hello-2\"],\n volume_mounts=[gcp.cloudrunv2.ServiceTemplateContainerVolumeMountArgs(\n name=\"empty-dir-volume\",\n mount_path=\"/mnt\",\n )],\n ),\n gcp.cloudrunv2.ServiceTemplateContainerArgs(\n name=\"hello-2\",\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n envs=[gcp.cloudrunv2.ServiceTemplateContainerEnvArgs(\n name=\"PORT\",\n value=\"8081\",\n )],\n startup_probe=gcp.cloudrunv2.ServiceTemplateContainerStartupProbeArgs(\n http_get=gcp.cloudrunv2.ServiceTemplateContainerStartupProbeHttpGetArgs(\n port=8081,\n ),\n ),\n ),\n ],\n volumes=[gcp.cloudrunv2.ServiceTemplateVolumeArgs(\n name=\"empty-dir-volume\",\n empty_dir=gcp.cloudrunv2.ServiceTemplateVolumeEmptyDirArgs(\n medium=\"MEMORY\",\n size_limit=\"256Mi\",\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.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Name = \"hello-1\",\n Ports = \n {\n { \"containerPort\", 8080 },\n },\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n DependsOns = new[]\n {\n \"hello-2\",\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"empty-dir-volume\",\n MountPath = \"/mnt\",\n },\n },\n },\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Name = \"hello-2\",\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvArgs\n {\n Name = \"PORT\",\n Value = \"8081\",\n },\n },\n StartupProbe = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeArgs\n {\n HttpGet = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeHttpGetArgs\n {\n Port = 8081,\n },\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"empty-dir-volume\",\n EmptyDir = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeEmptyDirArgs\n {\n Medium = \"MEMORY\",\n SizeLimit = \"256Mi\",\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/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tName: pulumi.String(\"hello-1\"),\n\t\t\t\t\t\tPorts: cloudrunv2.ServiceTemplateContainerPortArray{\n\t\t\t\t\t\t\tContainerPort: 8080,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tDependsOns: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"hello-2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/mnt\"),\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\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tName: pulumi.String(\"hello-2\"),\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tEnvs: cloudrunv2.ServiceTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"PORT\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"8081\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStartupProbe: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeArgs{\n\t\t\t\t\t\t\tHttpGet: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeHttpGetArgs{\n\t\t\t\t\t\t\t\tPort: pulumi.Int(8081),\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\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\tEmptyDir: \u0026cloudrunv2.ServiceTemplateVolumeEmptyDirArgs{\n\t\t\t\t\t\t\tMedium: pulumi.String(\"MEMORY\"),\n\t\t\t\t\t\t\tSizeLimit: pulumi.String(\"256Mi\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers( \n ServiceTemplateContainerArgs.builder()\n .name(\"hello-1\")\n .ports(ServiceTemplateContainerPortArgs.builder()\n .containerPort(8080)\n .build())\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .dependsOns(\"hello-2\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"empty-dir-volume\")\n .mountPath(\"/mnt\")\n .build())\n .build(),\n ServiceTemplateContainerArgs.builder()\n .name(\"hello-2\")\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .envs(ServiceTemplateContainerEnvArgs.builder()\n .name(\"PORT\")\n .value(\"8081\")\n .build())\n .startupProbe(ServiceTemplateContainerStartupProbeArgs.builder()\n .httpGet(ServiceTemplateContainerStartupProbeHttpGetArgs.builder()\n .port(8081)\n .build())\n .build())\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"empty-dir-volume\")\n .emptyDir(ServiceTemplateVolumeEmptyDirArgs.builder()\n .medium(\"MEMORY\")\n .sizeLimit(\"256Mi\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n launchStage: BETA\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - name: hello-1\n ports:\n containerPort: 8080\n image: us-docker.pkg.dev/cloudrun/container/hello\n dependsOns:\n - hello-2\n volumeMounts:\n - name: empty-dir-volume\n mountPath: /mnt\n - name: hello-2\n image: us-docker.pkg.dev/cloudrun/container/hello\n envs:\n - name: PORT\n value: '8081'\n startupProbe:\n httpGet:\n port: 8081\n volumes:\n - name: empty-dir-volume\n emptyDir:\n medium: MEMORY\n sizeLimit: 256Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Mount Gcs\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultBucket = new gcp.storage.Bucket(\"default\", {\n name: \"cloudrun-service\",\n location: \"US\",\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n executionEnvironment: \"EXECUTION_ENVIRONMENT_GEN2\",\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"bucket\",\n mountPath: \"/var/www\",\n }],\n }],\n volumes: [{\n name: \"bucket\",\n gcs: {\n bucket: defaultBucket.name,\n readOnly: false,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_bucket = gcp.storage.Bucket(\"default\",\n name=\"cloudrun-service\",\n location=\"US\")\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n execution_environment=\"EXECUTION_ENVIRONMENT_GEN2\",\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n volume_mounts=[gcp.cloudrunv2.ServiceTemplateContainerVolumeMountArgs(\n name=\"bucket\",\n mount_path=\"/var/www\",\n )],\n )],\n volumes=[gcp.cloudrunv2.ServiceTemplateVolumeArgs(\n name=\"bucket\",\n gcs=gcp.cloudrunv2.ServiceTemplateVolumeGcsArgs(\n bucket=default_bucket.name,\n read_only=False,\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 defaultBucket = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"US\",\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n ExecutionEnvironment = \"EXECUTION_ENVIRONMENT_GEN2\",\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"bucket\",\n MountPath = \"/var/www\",\n },\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"bucket\",\n Gcs = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeGcsArgs\n {\n Bucket = defaultBucket.Name,\n ReadOnly = false,\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/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultBucket, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tExecutionEnvironment: pulumi.String(\"EXECUTION_ENVIRONMENT_GEN2\"),\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"bucket\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/var/www\"),\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\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"bucket\"),\n\t\t\t\t\t\tGcs: \u0026cloudrunv2.ServiceTemplateVolumeGcsArgs{\n\t\t\t\t\t\t\tBucket: defaultBucket.Name,\n\t\t\t\t\t\t\tReadOnly: pulumi.Bool(false),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultBucket = new Bucket(\"defaultBucket\", BucketArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"US\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(ServiceTemplateArgs.builder()\n .executionEnvironment(\"EXECUTION_ENVIRONMENT_GEN2\")\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"bucket\")\n .mountPath(\"/var/www\")\n .build())\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"bucket\")\n .gcs(ServiceTemplateVolumeGcsArgs.builder()\n .bucket(defaultBucket.name())\n .readOnly(false)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n launchStage: BETA\n template:\n executionEnvironment: EXECUTION_ENVIRONMENT_GEN2\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: bucket\n mountPath: /var/www\n volumes:\n - name: bucket\n gcs:\n bucket: ${defaultBucket.name}\n readOnly: false\n defaultBucket:\n type: gcp:storage:Bucket\n name: default\n properties:\n name: cloudrun-service\n location: US\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Mount Nfs\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultInstance = new gcp.filestore.Instance(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1-b\",\n tier: \"BASIC_HDD\",\n fileShares: {\n capacityGb: 1024,\n name: \"share1\",\n },\n networks: [{\n network: \"default\",\n modes: [\"MODE_IPV4\"],\n }],\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n launchStage: \"BETA\",\n template: {\n executionEnvironment: \"EXECUTION_ENVIRONMENT_GEN2\",\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello:latest\",\n volumeMounts: [{\n name: \"nfs\",\n mountPath: \"/mnt/nfs/filestore\",\n }],\n }],\n vpcAccess: {\n networkInterfaces: [{\n network: \"default\",\n subnetwork: \"default\",\n }],\n },\n volumes: [{\n name: \"nfs\",\n nfs: {\n server: defaultInstance.networks.apply(networks =\u003e networks[0].ipAddresses?.[0]),\n path: \"/share1\",\n readOnly: false,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_instance = gcp.filestore.Instance(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1-b\",\n tier=\"BASIC_HDD\",\n file_shares=gcp.filestore.InstanceFileSharesArgs(\n capacity_gb=1024,\n name=\"share1\",\n ),\n networks=[gcp.filestore.InstanceNetworkArgs(\n network=\"default\",\n modes=[\"MODE_IPV4\"],\n )])\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n execution_environment=\"EXECUTION_ENVIRONMENT_GEN2\",\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello:latest\",\n volume_mounts=[gcp.cloudrunv2.ServiceTemplateContainerVolumeMountArgs(\n name=\"nfs\",\n mount_path=\"/mnt/nfs/filestore\",\n )],\n )],\n vpc_access=gcp.cloudrunv2.ServiceTemplateVpcAccessArgs(\n network_interfaces=[gcp.cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArgs(\n network=\"default\",\n subnetwork=\"default\",\n )],\n ),\n volumes=[gcp.cloudrunv2.ServiceTemplateVolumeArgs(\n name=\"nfs\",\n nfs=gcp.cloudrunv2.ServiceTemplateVolumeNfsArgs(\n server=default_instance.networks[0].ip_addresses[0],\n path=\"/share1\",\n read_only=False,\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 defaultInstance = new Gcp.Filestore.Instance(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1-b\",\n Tier = \"BASIC_HDD\",\n FileShares = new Gcp.Filestore.Inputs.InstanceFileSharesArgs\n {\n CapacityGb = 1024,\n Name = \"share1\",\n },\n Networks = new[]\n {\n new Gcp.Filestore.Inputs.InstanceNetworkArgs\n {\n Network = \"default\",\n Modes = new[]\n {\n \"MODE_IPV4\",\n },\n },\n },\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n ExecutionEnvironment = \"EXECUTION_ENVIRONMENT_GEN2\",\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello:latest\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"nfs\",\n MountPath = \"/mnt/nfs/filestore\",\n },\n },\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessArgs\n {\n NetworkInterfaces = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessNetworkInterfaceArgs\n {\n Network = \"default\",\n Subnetwork = \"default\",\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"nfs\",\n Nfs = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeNfsArgs\n {\n Server = defaultInstance.Networks.Apply(networks =\u003e networks[0].IpAddresses[0]),\n Path = \"/share1\",\n ReadOnly = false,\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/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/filestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultInstance, err := filestore.NewInstance(ctx, \"default\", \u0026filestore.InstanceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1-b\"),\n\t\t\tTier: pulumi.String(\"BASIC_HDD\"),\n\t\t\tFileShares: \u0026filestore.InstanceFileSharesArgs{\n\t\t\t\tCapacityGb: pulumi.Int(1024),\n\t\t\t\tName: pulumi.String(\"share1\"),\n\t\t\t},\n\t\t\tNetworks: filestore.InstanceNetworkArray{\n\t\t\t\t\u0026filestore.InstanceNetworkArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\tModes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"MODE_IPV4\"),\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 = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tExecutionEnvironment: pulumi.String(\"EXECUTION_ENVIRONMENT_GEN2\"),\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello:latest\"),\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"nfs\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/mnt/nfs/filestore\"),\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\tVpcAccess: \u0026cloudrunv2.ServiceTemplateVpcAccessArgs{\n\t\t\t\t\tNetworkInterfaces: cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArray{\n\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArgs{\n\t\t\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"nfs\"),\n\t\t\t\t\t\tNfs: \u0026cloudrunv2.ServiceTemplateVolumeNfsArgs{\n\t\t\t\t\t\t\tServer: defaultInstance.Networks.ApplyT(func(networks []filestore.InstanceNetwork) (*string, error) {\n\t\t\t\t\t\t\t\treturn \u0026networks[0].IpAddresses[0], nil\n\t\t\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t\t\t\tPath: pulumi.String(\"/share1\"),\n\t\t\t\t\t\t\tReadOnly: pulumi.Bool(false),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.filestore.Instance;\nimport com.pulumi.gcp.filestore.InstanceArgs;\nimport com.pulumi.gcp.filestore.inputs.InstanceFileSharesArgs;\nimport com.pulumi.gcp.filestore.inputs.InstanceNetworkArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateVpcAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultInstance = new Instance(\"defaultInstance\", InstanceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1-b\")\n .tier(\"BASIC_HDD\")\n .fileShares(InstanceFileSharesArgs.builder()\n .capacityGb(1024)\n .name(\"share1\")\n .build())\n .networks(InstanceNetworkArgs.builder()\n .network(\"default\")\n .modes(\"MODE_IPV4\")\n .build())\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .launchStage(\"BETA\")\n .template(ServiceTemplateArgs.builder()\n .executionEnvironment(\"EXECUTION_ENVIRONMENT_GEN2\")\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello:latest\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"nfs\")\n .mountPath(\"/mnt/nfs/filestore\")\n .build())\n .build())\n .vpcAccess(ServiceTemplateVpcAccessArgs.builder()\n .networkInterfaces(ServiceTemplateVpcAccessNetworkInterfaceArgs.builder()\n .network(\"default\")\n .subnetwork(\"default\")\n .build())\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"nfs\")\n .nfs(ServiceTemplateVolumeNfsArgs.builder()\n .server(defaultInstance.networks().applyValue(networks -\u003e networks[0].ipAddresses()[0]))\n .path(\"/share1\")\n .readOnly(false)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n ingress: INGRESS_TRAFFIC_ALL\n launchStage: BETA\n template:\n executionEnvironment: EXECUTION_ENVIRONMENT_GEN2\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello:latest\n volumeMounts:\n - name: nfs\n mountPath: /mnt/nfs/filestore\n vpcAccess:\n networkInterfaces:\n - network: default\n subnetwork: default\n volumes:\n - name: nfs\n nfs:\n server: ${defaultInstance.networks[0].ipAddresses[0]}\n path: /share1\n readOnly: false\n defaultInstance:\n type: gcp:filestore:Instance\n name: default\n properties:\n name: cloudrun-service\n location: us-central1-b\n tier: BASIC_HDD\n fileShares:\n capacityGb: 1024\n name: share1\n networks:\n - network: default\n modes:\n - MODE_IPV4\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nService can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/services/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Service can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:cloudrunv2/service:Service default projects/{{project}}/locations/{{location}}/services/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/service:Service default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/service:Service default {{location}}/{{name}}\n```\n\n", + "description": "Service acts as a top-level container that manages a set of configurations and revision templates which implement a network service. Service exists to provide a singular abstraction which can be access controlled, reasoned about, and which encapsulates software lifecycle decisions such as rollout policy and team resource ownership.\n\n\nTo get more information about Service, see:\n\n* [API documentation](https://cloud.google.com/run/docs/reference/rest/v2/projects.locations.services)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/run/docs/)\n\n## Example Usage\n\n### Cloudrunv2 Service 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.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\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.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Limits\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.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n resources: {\n limits: {\n cpu: \"2\",\n memory: \"1024Mi\",\n },\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n resources=gcp.cloudrunv2.ServiceTemplateContainerResourcesArgs(\n limits={\n \"cpu\": \"2\",\n \"memory\": \"1024Mi\",\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.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Resources = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerResourcesArgs\n {\n Limits = \n {\n { \"cpu\", \"2\" },\n { \"memory\", \"1024Mi\" },\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/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tResources: \u0026cloudrunv2.ServiceTemplateContainerResourcesArgs{\n\t\t\t\t\t\t\tLimits: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"cpu\": pulumi.String(\"2\"),\n\t\t\t\t\t\t\t\t\"memory\": pulumi.String(\"1024Mi\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .resources(ServiceTemplateContainerResourcesArgs.builder()\n .limits(Map.ofEntries(\n Map.entry(\"cpu\", \"2\"),\n Map.entry(\"memory\", \"1024Mi\")\n ))\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n resources:\n limits:\n cpu: '2'\n memory: 1024Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Sql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret-1\",\n replication: {\n auto: {},\n },\n});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"cloudrun-sql\",\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n scaling: {\n maxInstanceCount: 2,\n },\n volumes: [{\n name: \"cloudsql\",\n cloudSqlInstance: {\n instances: [instance.connectionName],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n envs: [\n {\n name: \"FOO\",\n value: \"bar\",\n },\n {\n name: \"SECRET_ENV_VAR\",\n valueSource: {\n secretKeyRef: {\n secret: secret.secretId,\n version: \"1\",\n },\n },\n },\n ],\n volumeMounts: [{\n name: \"cloudsql\",\n mountPath: \"/cloudsql\",\n }],\n }],\n },\n traffics: [{\n type: \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\",\n percent: 100,\n }],\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret-1\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n auto=gcp.secretmanager.SecretReplicationAutoArgs(),\n ))\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"cloudrun-sql\",\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ),\n deletion_protection=True)\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n scaling=gcp.cloudrunv2.ServiceTemplateScalingArgs(\n max_instance_count=2,\n ),\n volumes=[gcp.cloudrunv2.ServiceTemplateVolumeArgs(\n name=\"cloudsql\",\n cloud_sql_instance=gcp.cloudrunv2.ServiceTemplateVolumeCloudSqlInstanceArgs(\n instances=[instance.connection_name],\n ),\n )],\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n envs=[\n gcp.cloudrunv2.ServiceTemplateContainerEnvArgs(\n name=\"FOO\",\n value=\"bar\",\n ),\n gcp.cloudrunv2.ServiceTemplateContainerEnvArgs(\n name=\"SECRET_ENV_VAR\",\n value_source=gcp.cloudrunv2.ServiceTemplateContainerEnvValueSourceArgs(\n secret_key_ref=gcp.cloudrunv2.ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs(\n secret=secret.secret_id,\n version=\"1\",\n ),\n ),\n ),\n ],\n volume_mounts=[gcp.cloudrunv2.ServiceTemplateContainerVolumeMountArgs(\n name=\"cloudsql\",\n mount_path=\"/cloudsql\",\n )],\n )],\n ),\n traffics=[gcp.cloudrunv2.ServiceTrafficArgs(\n type=\"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\",\n percent=100,\n )])\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret-1\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"cloudrun-sql\",\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Scaling = new Gcp.CloudRunV2.Inputs.ServiceTemplateScalingArgs\n {\n MaxInstanceCount = 2,\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"cloudsql\",\n CloudSqlInstance = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeCloudSqlInstanceArgs\n {\n Instances = new[]\n {\n instance.ConnectionName,\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvArgs\n {\n Name = \"FOO\",\n Value = \"bar\",\n },\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvArgs\n {\n Name = \"SECRET_ENV_VAR\",\n ValueSource = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvValueSourceArgs\n {\n SecretKeyRef = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs\n {\n Secret = secret.SecretId,\n Version = \"1\",\n },\n },\n },\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"cloudsql\",\n MountPath = \"/cloudsql\",\n },\n },\n },\n },\n },\n Traffics = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTrafficArgs\n {\n Type = \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\",\n Percent = 100,\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\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-gcp/sdk/v7/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret-1\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: nil,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-sql\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tScaling: \u0026cloudrunv2.ServiceTemplateScalingArgs{\n\t\t\t\t\tMaxInstanceCount: pulumi.Int(2),\n\t\t\t\t},\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\tCloudSqlInstance: \u0026cloudrunv2.ServiceTemplateVolumeCloudSqlInstanceArgs{\n\t\t\t\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\t\t\t\tinstance.ConnectionName,\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\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tEnvs: cloudrunv2.ServiceTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"FOO\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"bar\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"SECRET_ENV_VAR\"),\n\t\t\t\t\t\t\t\tValueSource: \u0026cloudrunv2.ServiceTemplateContainerEnvValueSourceArgs{\n\t\t\t\t\t\t\t\t\tSecretKeyRef: \u0026cloudrunv2.ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs{\n\t\t\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\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\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/cloudsql\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTraffics: cloudrunv2.ServiceTrafficArray{\n\t\t\t\t\u0026cloudrunv2.ServiceTrafficArgs{\n\t\t\t\t\tType: pulumi.String(\"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\"),\n\t\t\t\t\tPercent: pulumi.Int(100),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateScalingArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTrafficArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret = new Secret(\"secret\", SecretArgs.builder() \n .secretId(\"secret-1\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder() \n .name(\"cloudrun-sql\")\n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .scaling(ServiceTemplateScalingArgs.builder()\n .maxInstanceCount(2)\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"cloudsql\")\n .cloudSqlInstance(ServiceTemplateVolumeCloudSqlInstanceArgs.builder()\n .instances(instance.connectionName())\n .build())\n .build())\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .envs( \n ServiceTemplateContainerEnvArgs.builder()\n .name(\"FOO\")\n .value(\"bar\")\n .build(),\n ServiceTemplateContainerEnvArgs.builder()\n .name(\"SECRET_ENV_VAR\")\n .valueSource(ServiceTemplateContainerEnvValueSourceArgs.builder()\n .secretKeyRef(ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs.builder()\n .secret(secret.secretId())\n .version(\"1\")\n .build())\n .build())\n .build())\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"cloudsql\")\n .mountPath(\"/cloudsql\")\n .build())\n .build())\n .build())\n .traffics(ServiceTrafficArgs.builder()\n .type(\"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\")\n .percent(100)\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder() \n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder() \n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n ingress: INGRESS_TRAFFIC_ALL\n template:\n scaling:\n maxInstanceCount: 2\n volumes:\n - name: cloudsql\n cloudSqlInstance:\n instances:\n - ${instance.connectionName}\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n envs:\n - name: FOO\n value: bar\n - name: SECRET_ENV_VAR\n valueSource:\n secretKeyRef:\n secret: ${secret.secretId}\n version: '1'\n volumeMounts:\n - name: cloudsql\n mountPath: /cloudsql\n traffics:\n - type: TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\n percent: 100\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret-1\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: cloudrun-sql\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n deletionProtection: 'true'\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Vpcaccess\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customTestNetwork = new gcp.compute.Network(\"custom_test\", {\n name: \"run-network\",\n autoCreateSubnetworks: false,\n});\nconst customTest = new gcp.compute.Subnetwork(\"custom_test\", {\n name: \"run-subnetwork\",\n ipCidrRange: \"10.2.0.0/28\",\n region: \"us-central1\",\n network: customTestNetwork.id,\n});\nconst connector = new gcp.vpcaccess.Connector(\"connector\", {\n name: \"run-vpc\",\n subnet: {\n name: customTest.name,\n },\n machineType: \"e2-standard-4\",\n minInstances: 2,\n maxInstances: 3,\n region: \"us-central1\",\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n vpcAccess: {\n connector: connector.id,\n egress: \"ALL_TRAFFIC\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom_test_network = gcp.compute.Network(\"custom_test\",\n name=\"run-network\",\n auto_create_subnetworks=False)\ncustom_test = gcp.compute.Subnetwork(\"custom_test\",\n name=\"run-subnetwork\",\n ip_cidr_range=\"10.2.0.0/28\",\n region=\"us-central1\",\n network=custom_test_network.id)\nconnector = gcp.vpcaccess.Connector(\"connector\",\n name=\"run-vpc\",\n subnet=gcp.vpcaccess.ConnectorSubnetArgs(\n name=custom_test.name,\n ),\n machine_type=\"e2-standard-4\",\n min_instances=2,\n max_instances=3,\n region=\"us-central1\")\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n vpc_access=gcp.cloudrunv2.ServiceTemplateVpcAccessArgs(\n connector=connector.id,\n egress=\"ALL_TRAFFIC\",\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 customTestNetwork = new Gcp.Compute.Network(\"custom_test\", new()\n {\n Name = \"run-network\",\n AutoCreateSubnetworks = false,\n });\n\n var customTest = new Gcp.Compute.Subnetwork(\"custom_test\", new()\n {\n Name = \"run-subnetwork\",\n IpCidrRange = \"10.2.0.0/28\",\n Region = \"us-central1\",\n Network = customTestNetwork.Id,\n });\n\n var connector = new Gcp.VpcAccess.Connector(\"connector\", new()\n {\n Name = \"run-vpc\",\n Subnet = new Gcp.VpcAccess.Inputs.ConnectorSubnetArgs\n {\n Name = customTest.Name,\n },\n MachineType = \"e2-standard-4\",\n MinInstances = 2,\n MaxInstances = 3,\n Region = \"us-central1\",\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessArgs\n {\n Connector = connector.Id,\n Egress = \"ALL_TRAFFIC\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/vpcaccess\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomTestNetwork, err := compute.NewNetwork(ctx, \"custom_test\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"run-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcustomTest, err := compute.NewSubnetwork(ctx, \"custom_test\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"run-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.2.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: customTestNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconnector, err := vpcaccess.NewConnector(ctx, \"connector\", \u0026vpcaccess.ConnectorArgs{\n\t\t\tName: pulumi.String(\"run-vpc\"),\n\t\t\tSubnet: \u0026vpcaccess.ConnectorSubnetArgs{\n\t\t\t\tName: customTest.Name,\n\t\t\t},\n\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\tMinInstances: pulumi.Int(2),\n\t\t\tMaxInstances: pulumi.Int(3),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVpcAccess: \u0026cloudrunv2.ServiceTemplateVpcAccessArgs{\n\t\t\t\t\tConnector: connector.ID(),\n\t\t\t\t\tEgress: pulumi.String(\"ALL_TRAFFIC\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.vpcaccess.Connector;\nimport com.pulumi.gcp.vpcaccess.ConnectorArgs;\nimport com.pulumi.gcp.vpcaccess.inputs.ConnectorSubnetArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateVpcAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var customTestNetwork = new Network(\"customTestNetwork\", NetworkArgs.builder() \n .name(\"run-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var customTest = new Subnetwork(\"customTest\", SubnetworkArgs.builder() \n .name(\"run-subnetwork\")\n .ipCidrRange(\"10.2.0.0/28\")\n .region(\"us-central1\")\n .network(customTestNetwork.id())\n .build());\n\n var connector = new Connector(\"connector\", ConnectorArgs.builder() \n .name(\"run-vpc\")\n .subnet(ConnectorSubnetArgs.builder()\n .name(customTest.name())\n .build())\n .machineType(\"e2-standard-4\")\n .minInstances(2)\n .maxInstances(3)\n .region(\"us-central1\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .vpcAccess(ServiceTemplateVpcAccessArgs.builder()\n .connector(connector.id())\n .egress(\"ALL_TRAFFIC\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n vpcAccess:\n connector: ${connector.id}\n egress: ALL_TRAFFIC\n connector:\n type: gcp:vpcaccess:Connector\n properties:\n name: run-vpc\n subnet:\n name: ${customTest.name}\n machineType: e2-standard-4\n minInstances: 2\n maxInstances: 3\n region: us-central1\n customTest:\n type: gcp:compute:Subnetwork\n name: custom_test\n properties:\n name: run-subnetwork\n ipCidrRange: 10.2.0.0/28\n region: us-central1\n network: ${customTestNetwork.id}\n customTestNetwork:\n type: gcp:compute:Network\n name: custom_test\n properties:\n name: run-network\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Directvpc\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.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n launchStage: \"GA\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n vpcAccess: {\n networkInterfaces: [{\n network: \"default\",\n subnetwork: \"default\",\n tags: [\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n launch_stage=\"GA\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n vpc_access=gcp.cloudrunv2.ServiceTemplateVpcAccessArgs(\n network_interfaces=[gcp.cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArgs(\n network=\"default\",\n subnetwork=\"default\",\n tags=[\n \"tag1\",\n \"tag2\",\n \"tag3\",\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.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n LaunchStage = \"GA\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessArgs\n {\n NetworkInterfaces = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessNetworkInterfaceArgs\n {\n Network = \"default\",\n Subnetwork = \"default\",\n Tags = new[]\n {\n \"tag1\",\n \"tag2\",\n \"tag3\",\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/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"GA\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVpcAccess: \u0026cloudrunv2.ServiceTemplateVpcAccessArgs{\n\t\t\t\t\tNetworkInterfaces: cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArray{\n\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArgs{\n\t\t\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\tTags: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"tag2\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"tag3\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateVpcAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .launchStage(\"GA\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .vpcAccess(ServiceTemplateVpcAccessArgs.builder()\n .networkInterfaces(ServiceTemplateVpcAccessNetworkInterfaceArgs.builder()\n .network(\"default\")\n .subnetwork(\"default\")\n .tags( \n \"tag1\",\n \"tag2\",\n \"tag3\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n launchStage: GA\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n vpcAccess:\n networkInterfaces:\n - network: default\n subnetwork: default\n tags:\n - tag1\n - tag2\n - tag3\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Probes\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.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n startupProbe: {\n initialDelaySeconds: 0,\n timeoutSeconds: 1,\n periodSeconds: 3,\n failureThreshold: 1,\n tcpSocket: {\n port: 8080,\n },\n },\n livenessProbe: {\n httpGet: {\n path: \"/\",\n },\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n startup_probe=gcp.cloudrunv2.ServiceTemplateContainerStartupProbeArgs(\n initial_delay_seconds=0,\n timeout_seconds=1,\n period_seconds=3,\n failure_threshold=1,\n tcp_socket=gcp.cloudrunv2.ServiceTemplateContainerStartupProbeTcpSocketArgs(\n port=8080,\n ),\n ),\n liveness_probe=gcp.cloudrunv2.ServiceTemplateContainerLivenessProbeArgs(\n http_get=gcp.cloudrunv2.ServiceTemplateContainerLivenessProbeHttpGetArgs(\n path=\"/\",\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.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n StartupProbe = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeArgs\n {\n InitialDelaySeconds = 0,\n TimeoutSeconds = 1,\n PeriodSeconds = 3,\n FailureThreshold = 1,\n TcpSocket = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeTcpSocketArgs\n {\n Port = 8080,\n },\n },\n LivenessProbe = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerLivenessProbeArgs\n {\n HttpGet = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerLivenessProbeHttpGetArgs\n {\n Path = \"/\",\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/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tStartupProbe: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeArgs{\n\t\t\t\t\t\t\tInitialDelaySeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tTimeoutSeconds: pulumi.Int(1),\n\t\t\t\t\t\t\tPeriodSeconds: pulumi.Int(3),\n\t\t\t\t\t\t\tFailureThreshold: pulumi.Int(1),\n\t\t\t\t\t\t\tTcpSocket: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeTcpSocketArgs{\n\t\t\t\t\t\t\t\tPort: pulumi.Int(8080),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLivenessProbe: \u0026cloudrunv2.ServiceTemplateContainerLivenessProbeArgs{\n\t\t\t\t\t\t\tHttpGet: \u0026cloudrunv2.ServiceTemplateContainerLivenessProbeHttpGetArgs{\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .startupProbe(ServiceTemplateContainerStartupProbeArgs.builder()\n .initialDelaySeconds(0)\n .timeoutSeconds(1)\n .periodSeconds(3)\n .failureThreshold(1)\n .tcpSocket(ServiceTemplateContainerStartupProbeTcpSocketArgs.builder()\n .port(8080)\n .build())\n .build())\n .livenessProbe(ServiceTemplateContainerLivenessProbeArgs.builder()\n .httpGet(ServiceTemplateContainerLivenessProbeHttpGetArgs.builder()\n .path(\"/\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n startupProbe:\n initialDelaySeconds: 0\n timeoutSeconds: 1\n periodSeconds: 3\n failureThreshold: 1\n tcpSocket:\n port: 8080\n livenessProbe:\n httpGet:\n path: /\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Secret\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret-1\",\n replication: {\n auto: {},\n },\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n volumes: [{\n name: \"a-volume\",\n secret: {\n secret: secret.secretId,\n defaultMode: 292,\n items: [{\n version: \"1\",\n path: \"my-secret\",\n }],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"a-volume\",\n mountPath: \"/secrets\",\n }],\n }],\n },\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret-1\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n auto=gcp.secretmanager.SecretReplicationAutoArgs(),\n ))\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n volumes=[gcp.cloudrunv2.ServiceTemplateVolumeArgs(\n name=\"a-volume\",\n secret=gcp.cloudrunv2.ServiceTemplateVolumeSecretArgs(\n secret=secret.secret_id,\n default_mode=292,\n items=[gcp.cloudrunv2.ServiceTemplateVolumeSecretItemArgs(\n version=\"1\",\n path=\"my-secret\",\n )],\n ),\n )],\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n volume_mounts=[gcp.cloudrunv2.ServiceTemplateContainerVolumeMountArgs(\n name=\"a-volume\",\n mount_path=\"/secrets\",\n )],\n )],\n ))\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret-1\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"a-volume\",\n Secret = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeSecretArgs\n {\n Secret = secret.SecretId,\n DefaultMode = 292,\n Items = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeSecretItemArgs\n {\n Version = \"1\",\n Path = \"my-secret\",\n },\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"a-volume\",\n MountPath = \"/secrets\",\n },\n },\n },\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudrunv2\"\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\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret-1\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: nil,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\tSecret: \u0026cloudrunv2.ServiceTemplateVolumeSecretArgs{\n\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\tDefaultMode: pulumi.Int(292),\n\t\t\t\t\t\t\tItems: cloudrunv2.ServiceTemplateVolumeSecretItemArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeSecretItemArgs{\n\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"my-secret\"),\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\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/secrets\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret = new Secret(\"secret\", SecretArgs.builder() \n .secretId(\"secret-1\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"a-volume\")\n .secret(ServiceTemplateVolumeSecretArgs.builder()\n .secret(secret.secretId())\n .defaultMode(292)\n .items(ServiceTemplateVolumeSecretItemArgs.builder()\n .version(\"1\")\n .path(\"my-secret\")\n .build())\n .build())\n .build())\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"a-volume\")\n .mountPath(\"/secrets\")\n .build())\n .build())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder() \n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder() \n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n ingress: INGRESS_TRAFFIC_ALL\n template:\n volumes:\n - name: a-volume\n secret:\n secret: ${secret.secretId}\n defaultMode: 292\n items:\n - version: '1'\n path: my-secret\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: a-volume\n mountPath: /secrets\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret-1\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Multicontainer\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.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n launchStage: \"BETA\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [\n {\n name: \"hello-1\",\n ports: {\n containerPort: 8080,\n },\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n dependsOns: [\"hello-2\"],\n volumeMounts: [{\n name: \"empty-dir-volume\",\n mountPath: \"/mnt\",\n }],\n },\n {\n name: \"hello-2\",\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n envs: [{\n name: \"PORT\",\n value: \"8081\",\n }],\n startupProbe: {\n httpGet: {\n port: 8081,\n },\n },\n },\n ],\n volumes: [{\n name: \"empty-dir-volume\",\n emptyDir: {\n medium: \"MEMORY\",\n sizeLimit: \"256Mi\",\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n containers=[\n gcp.cloudrunv2.ServiceTemplateContainerArgs(\n name=\"hello-1\",\n ports={\n \"containerPort\": 8080,\n },\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n depends_ons=[\"hello-2\"],\n volume_mounts=[gcp.cloudrunv2.ServiceTemplateContainerVolumeMountArgs(\n name=\"empty-dir-volume\",\n mount_path=\"/mnt\",\n )],\n ),\n gcp.cloudrunv2.ServiceTemplateContainerArgs(\n name=\"hello-2\",\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n envs=[gcp.cloudrunv2.ServiceTemplateContainerEnvArgs(\n name=\"PORT\",\n value=\"8081\",\n )],\n startup_probe=gcp.cloudrunv2.ServiceTemplateContainerStartupProbeArgs(\n http_get=gcp.cloudrunv2.ServiceTemplateContainerStartupProbeHttpGetArgs(\n port=8081,\n ),\n ),\n ),\n ],\n volumes=[gcp.cloudrunv2.ServiceTemplateVolumeArgs(\n name=\"empty-dir-volume\",\n empty_dir=gcp.cloudrunv2.ServiceTemplateVolumeEmptyDirArgs(\n medium=\"MEMORY\",\n size_limit=\"256Mi\",\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.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Name = \"hello-1\",\n Ports = \n {\n { \"containerPort\", 8080 },\n },\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n DependsOns = new[]\n {\n \"hello-2\",\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"empty-dir-volume\",\n MountPath = \"/mnt\",\n },\n },\n },\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Name = \"hello-2\",\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvArgs\n {\n Name = \"PORT\",\n Value = \"8081\",\n },\n },\n StartupProbe = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeArgs\n {\n HttpGet = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeHttpGetArgs\n {\n Port = 8081,\n },\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"empty-dir-volume\",\n EmptyDir = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeEmptyDirArgs\n {\n Medium = \"MEMORY\",\n SizeLimit = \"256Mi\",\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/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tName: pulumi.String(\"hello-1\"),\n\t\t\t\t\t\tPorts: cloudrunv2.ServiceTemplateContainerPortArray{\n\t\t\t\t\t\t\tContainerPort: 8080,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tDependsOns: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"hello-2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/mnt\"),\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\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tName: pulumi.String(\"hello-2\"),\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tEnvs: cloudrunv2.ServiceTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"PORT\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"8081\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStartupProbe: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeArgs{\n\t\t\t\t\t\t\tHttpGet: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeHttpGetArgs{\n\t\t\t\t\t\t\t\tPort: pulumi.Int(8081),\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\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\tEmptyDir: \u0026cloudrunv2.ServiceTemplateVolumeEmptyDirArgs{\n\t\t\t\t\t\t\tMedium: pulumi.String(\"MEMORY\"),\n\t\t\t\t\t\t\tSizeLimit: pulumi.String(\"256Mi\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers( \n ServiceTemplateContainerArgs.builder()\n .name(\"hello-1\")\n .ports(ServiceTemplateContainerPortArgs.builder()\n .containerPort(8080)\n .build())\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .dependsOns(\"hello-2\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"empty-dir-volume\")\n .mountPath(\"/mnt\")\n .build())\n .build(),\n ServiceTemplateContainerArgs.builder()\n .name(\"hello-2\")\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .envs(ServiceTemplateContainerEnvArgs.builder()\n .name(\"PORT\")\n .value(\"8081\")\n .build())\n .startupProbe(ServiceTemplateContainerStartupProbeArgs.builder()\n .httpGet(ServiceTemplateContainerStartupProbeHttpGetArgs.builder()\n .port(8081)\n .build())\n .build())\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"empty-dir-volume\")\n .emptyDir(ServiceTemplateVolumeEmptyDirArgs.builder()\n .medium(\"MEMORY\")\n .sizeLimit(\"256Mi\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n launchStage: BETA\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - name: hello-1\n ports:\n containerPort: 8080\n image: us-docker.pkg.dev/cloudrun/container/hello\n dependsOns:\n - hello-2\n volumeMounts:\n - name: empty-dir-volume\n mountPath: /mnt\n - name: hello-2\n image: us-docker.pkg.dev/cloudrun/container/hello\n envs:\n - name: PORT\n value: '8081'\n startupProbe:\n httpGet:\n port: 8081\n volumes:\n - name: empty-dir-volume\n emptyDir:\n medium: MEMORY\n sizeLimit: 256Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Mount Gcs\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultBucket = new gcp.storage.Bucket(\"default\", {\n name: \"cloudrun-service\",\n location: \"US\",\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n executionEnvironment: \"EXECUTION_ENVIRONMENT_GEN2\",\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"bucket\",\n mountPath: \"/var/www\",\n }],\n }],\n volumes: [{\n name: \"bucket\",\n gcs: {\n bucket: defaultBucket.name,\n readOnly: false,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_bucket = gcp.storage.Bucket(\"default\",\n name=\"cloudrun-service\",\n location=\"US\")\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n execution_environment=\"EXECUTION_ENVIRONMENT_GEN2\",\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n volume_mounts=[gcp.cloudrunv2.ServiceTemplateContainerVolumeMountArgs(\n name=\"bucket\",\n mount_path=\"/var/www\",\n )],\n )],\n volumes=[gcp.cloudrunv2.ServiceTemplateVolumeArgs(\n name=\"bucket\",\n gcs=gcp.cloudrunv2.ServiceTemplateVolumeGcsArgs(\n bucket=default_bucket.name,\n read_only=False,\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 defaultBucket = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"US\",\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n ExecutionEnvironment = \"EXECUTION_ENVIRONMENT_GEN2\",\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"bucket\",\n MountPath = \"/var/www\",\n },\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"bucket\",\n Gcs = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeGcsArgs\n {\n Bucket = defaultBucket.Name,\n ReadOnly = false,\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/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultBucket, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tExecutionEnvironment: pulumi.String(\"EXECUTION_ENVIRONMENT_GEN2\"),\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"bucket\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/var/www\"),\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\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"bucket\"),\n\t\t\t\t\t\tGcs: \u0026cloudrunv2.ServiceTemplateVolumeGcsArgs{\n\t\t\t\t\t\t\tBucket: defaultBucket.Name,\n\t\t\t\t\t\t\tReadOnly: pulumi.Bool(false),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultBucket = new Bucket(\"defaultBucket\", BucketArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"US\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(ServiceTemplateArgs.builder()\n .executionEnvironment(\"EXECUTION_ENVIRONMENT_GEN2\")\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"bucket\")\n .mountPath(\"/var/www\")\n .build())\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"bucket\")\n .gcs(ServiceTemplateVolumeGcsArgs.builder()\n .bucket(defaultBucket.name())\n .readOnly(false)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n launchStage: BETA\n template:\n executionEnvironment: EXECUTION_ENVIRONMENT_GEN2\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: bucket\n mountPath: /var/www\n volumes:\n - name: bucket\n gcs:\n bucket: ${defaultBucket.name}\n readOnly: false\n defaultBucket:\n type: gcp:storage:Bucket\n name: default\n properties:\n name: cloudrun-service\n location: US\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Mount Nfs\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultInstance = new gcp.filestore.Instance(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1-b\",\n tier: \"BASIC_HDD\",\n fileShares: {\n capacityGb: 1024,\n name: \"share1\",\n },\n networks: [{\n network: \"default\",\n modes: [\"MODE_IPV4\"],\n }],\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n launchStage: \"BETA\",\n template: {\n executionEnvironment: \"EXECUTION_ENVIRONMENT_GEN2\",\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello:latest\",\n volumeMounts: [{\n name: \"nfs\",\n mountPath: \"/mnt/nfs/filestore\",\n }],\n }],\n vpcAccess: {\n networkInterfaces: [{\n network: \"default\",\n subnetwork: \"default\",\n }],\n },\n volumes: [{\n name: \"nfs\",\n nfs: {\n server: defaultInstance.networks.apply(networks =\u003e networks[0].ipAddresses?.[0]),\n path: \"/share1\",\n readOnly: false,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_instance = gcp.filestore.Instance(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1-b\",\n tier=\"BASIC_HDD\",\n file_shares=gcp.filestore.InstanceFileSharesArgs(\n capacity_gb=1024,\n name=\"share1\",\n ),\n networks=[gcp.filestore.InstanceNetworkArgs(\n network=\"default\",\n modes=[\"MODE_IPV4\"],\n )])\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.ServiceTemplateArgs(\n execution_environment=\"EXECUTION_ENVIRONMENT_GEN2\",\n containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello:latest\",\n volume_mounts=[gcp.cloudrunv2.ServiceTemplateContainerVolumeMountArgs(\n name=\"nfs\",\n mount_path=\"/mnt/nfs/filestore\",\n )],\n )],\n vpc_access=gcp.cloudrunv2.ServiceTemplateVpcAccessArgs(\n network_interfaces=[gcp.cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArgs(\n network=\"default\",\n subnetwork=\"default\",\n )],\n ),\n volumes=[gcp.cloudrunv2.ServiceTemplateVolumeArgs(\n name=\"nfs\",\n nfs=gcp.cloudrunv2.ServiceTemplateVolumeNfsArgs(\n server=default_instance.networks[0].ip_addresses[0],\n path=\"/share1\",\n read_only=False,\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 defaultInstance = new Gcp.Filestore.Instance(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1-b\",\n Tier = \"BASIC_HDD\",\n FileShares = new Gcp.Filestore.Inputs.InstanceFileSharesArgs\n {\n CapacityGb = 1024,\n Name = \"share1\",\n },\n Networks = new[]\n {\n new Gcp.Filestore.Inputs.InstanceNetworkArgs\n {\n Network = \"default\",\n Modes = new[]\n {\n \"MODE_IPV4\",\n },\n },\n },\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n ExecutionEnvironment = \"EXECUTION_ENVIRONMENT_GEN2\",\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello:latest\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"nfs\",\n MountPath = \"/mnt/nfs/filestore\",\n },\n },\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessArgs\n {\n NetworkInterfaces = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessNetworkInterfaceArgs\n {\n Network = \"default\",\n Subnetwork = \"default\",\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"nfs\",\n Nfs = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeNfsArgs\n {\n Server = defaultInstance.Networks.Apply(networks =\u003e networks[0].IpAddresses[0]),\n Path = \"/share1\",\n ReadOnly = false,\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/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/filestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultInstance, err := filestore.NewInstance(ctx, \"default\", \u0026filestore.InstanceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1-b\"),\n\t\t\tTier: pulumi.String(\"BASIC_HDD\"),\n\t\t\tFileShares: \u0026filestore.InstanceFileSharesArgs{\n\t\t\t\tCapacityGb: pulumi.Int(1024),\n\t\t\t\tName: pulumi.String(\"share1\"),\n\t\t\t},\n\t\t\tNetworks: filestore.InstanceNetworkArray{\n\t\t\t\t\u0026filestore.InstanceNetworkArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\tModes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"MODE_IPV4\"),\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 = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tExecutionEnvironment: pulumi.String(\"EXECUTION_ENVIRONMENT_GEN2\"),\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello:latest\"),\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"nfs\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/mnt/nfs/filestore\"),\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\tVpcAccess: \u0026cloudrunv2.ServiceTemplateVpcAccessArgs{\n\t\t\t\t\tNetworkInterfaces: cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArray{\n\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArgs{\n\t\t\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"nfs\"),\n\t\t\t\t\t\tNfs: \u0026cloudrunv2.ServiceTemplateVolumeNfsArgs{\n\t\t\t\t\t\t\tServer: defaultInstance.Networks.ApplyT(func(networks []filestore.InstanceNetwork) (*string, error) {\n\t\t\t\t\t\t\t\treturn \u0026networks[0].IpAddresses[0], nil\n\t\t\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t\t\t\tPath: pulumi.String(\"/share1\"),\n\t\t\t\t\t\t\tReadOnly: pulumi.Bool(false),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.filestore.Instance;\nimport com.pulumi.gcp.filestore.InstanceArgs;\nimport com.pulumi.gcp.filestore.inputs.InstanceFileSharesArgs;\nimport com.pulumi.gcp.filestore.inputs.InstanceNetworkArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateVpcAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultInstance = new Instance(\"defaultInstance\", InstanceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1-b\")\n .tier(\"BASIC_HDD\")\n .fileShares(InstanceFileSharesArgs.builder()\n .capacityGb(1024)\n .name(\"share1\")\n .build())\n .networks(InstanceNetworkArgs.builder()\n .network(\"default\")\n .modes(\"MODE_IPV4\")\n .build())\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .launchStage(\"BETA\")\n .template(ServiceTemplateArgs.builder()\n .executionEnvironment(\"EXECUTION_ENVIRONMENT_GEN2\")\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello:latest\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"nfs\")\n .mountPath(\"/mnt/nfs/filestore\")\n .build())\n .build())\n .vpcAccess(ServiceTemplateVpcAccessArgs.builder()\n .networkInterfaces(ServiceTemplateVpcAccessNetworkInterfaceArgs.builder()\n .network(\"default\")\n .subnetwork(\"default\")\n .build())\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"nfs\")\n .nfs(ServiceTemplateVolumeNfsArgs.builder()\n .server(defaultInstance.networks().applyValue(networks -\u003e networks[0].ipAddresses()[0]))\n .path(\"/share1\")\n .readOnly(false)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n ingress: INGRESS_TRAFFIC_ALL\n launchStage: BETA\n template:\n executionEnvironment: EXECUTION_ENVIRONMENT_GEN2\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello:latest\n volumeMounts:\n - name: nfs\n mountPath: /mnt/nfs/filestore\n vpcAccess:\n networkInterfaces:\n - network: default\n subnetwork: default\n volumes:\n - name: nfs\n nfs:\n server: ${defaultInstance.networks[0].ipAddresses[0]}\n path: /share1\n readOnly: false\n defaultInstance:\n type: gcp:filestore:Instance\n name: default\n properties:\n name: cloudrun-service\n location: us-central1-b\n tier: BASIC_HDD\n fileShares:\n capacityGb: 1024\n name: share1\n networks:\n - network: default\n modes:\n - MODE_IPV4\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nService can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/services/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Service can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:cloudrunv2/service:Service default projects/{{project}}/locations/{{location}}/services/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/service:Service default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/service:Service default {{location}}/{{name}}\n```\n\n", "properties": { "annotations": { "type": "object", @@ -154995,7 +155443,7 @@ } }, "gcp:compute/routerPeer:RouterPeer": { - "description": "BGP information that must be configured into the routing stack to\nestablish BGP peering. This information must specify the peer ASN\nand either the interface name, IP address, or peer IP address.\nPlease refer to RFC4273.\n\n\nTo get more information about RouterBgpPeer, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/routers)\n* How-to Guides\n * [Google Cloud Router](https://cloud.google.com/router/docs/)\n\n## Example Usage\n\n### Router Peer Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst peer = new gcp.compute.RouterPeer(\"peer\", {\n name: \"my-router-peer\",\n router: \"my-router\",\n region: \"us-central1\",\n peerAsn: 65513,\n advertisedRoutePriority: 100,\n \"interface\": \"interface-1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npeer = gcp.compute.RouterPeer(\"peer\",\n name=\"my-router-peer\",\n router=\"my-router\",\n region=\"us-central1\",\n peer_asn=65513,\n advertised_route_priority=100,\n interface=\"interface-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 peer = new Gcp.Compute.RouterPeer(\"peer\", new()\n {\n Name = \"my-router-peer\",\n Router = \"my-router\",\n Region = \"us-central1\",\n PeerAsn = 65513,\n AdvertisedRoutePriority = 100,\n Interface = \"interface-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.NewRouterPeer(ctx, \"peer\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"my-router-peer\"),\n\t\t\tRouter: pulumi.String(\"my-router\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerAsn: pulumi.Int(65513),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: pulumi.String(\"interface-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.RouterPeer;\nimport com.pulumi.gcp.compute.RouterPeerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var peer = new RouterPeer(\"peer\", RouterPeerArgs.builder() \n .name(\"my-router-peer\")\n .router(\"my-router\")\n .region(\"us-central1\")\n .peerAsn(65513)\n .advertisedRoutePriority(100)\n .interface_(\"interface-1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n peer:\n type: gcp:compute:RouterPeer\n properties:\n name: my-router-peer\n router: my-router\n region: us-central1\n peerAsn: 65513\n advertisedRoutePriority: 100\n interface: interface-1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Router Peer Disabled\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst peer = new gcp.compute.RouterPeer(\"peer\", {\n name: \"my-router-peer\",\n router: \"my-router\",\n region: \"us-central1\",\n peerIpAddress: \"169.254.1.2\",\n peerAsn: 65513,\n advertisedRoutePriority: 100,\n \"interface\": \"interface-1\",\n enable: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npeer = gcp.compute.RouterPeer(\"peer\",\n name=\"my-router-peer\",\n router=\"my-router\",\n region=\"us-central1\",\n peer_ip_address=\"169.254.1.2\",\n peer_asn=65513,\n advertised_route_priority=100,\n interface=\"interface-1\",\n enable=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var peer = new Gcp.Compute.RouterPeer(\"peer\", new()\n {\n Name = \"my-router-peer\",\n Router = \"my-router\",\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.1.2\",\n PeerAsn = 65513,\n AdvertisedRoutePriority = 100,\n Interface = \"interface-1\",\n Enable = false,\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.NewRouterPeer(ctx, \"peer\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"my-router-peer\"),\n\t\t\tRouter: pulumi.String(\"my-router\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerIpAddress: pulumi.String(\"169.254.1.2\"),\n\t\t\tPeerAsn: pulumi.Int(65513),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: pulumi.String(\"interface-1\"),\n\t\t\tEnable: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RouterPeer;\nimport com.pulumi.gcp.compute.RouterPeerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var peer = new RouterPeer(\"peer\", RouterPeerArgs.builder() \n .name(\"my-router-peer\")\n .router(\"my-router\")\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.1.2\")\n .peerAsn(65513)\n .advertisedRoutePriority(100)\n .interface_(\"interface-1\")\n .enable(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n peer:\n type: gcp:compute:RouterPeer\n properties:\n name: my-router-peer\n router: my-router\n region: us-central1\n peerIpAddress: 169.254.1.2\n peerAsn: 65513\n advertisedRoutePriority: 100\n interface: interface-1\n enable: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Router Peer Bfd\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst peer = new gcp.compute.RouterPeer(\"peer\", {\n name: \"my-router-peer\",\n router: \"my-router\",\n region: \"us-central1\",\n peerIpAddress: \"169.254.1.2\",\n peerAsn: 65513,\n advertisedRoutePriority: 100,\n \"interface\": \"interface-1\",\n bfd: {\n minReceiveInterval: 1000,\n minTransmitInterval: 1000,\n multiplier: 5,\n sessionInitializationMode: \"ACTIVE\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npeer = gcp.compute.RouterPeer(\"peer\",\n name=\"my-router-peer\",\n router=\"my-router\",\n region=\"us-central1\",\n peer_ip_address=\"169.254.1.2\",\n peer_asn=65513,\n advertised_route_priority=100,\n interface=\"interface-1\",\n bfd=gcp.compute.RouterPeerBfdArgs(\n min_receive_interval=1000,\n min_transmit_interval=1000,\n multiplier=5,\n session_initialization_mode=\"ACTIVE\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var peer = new Gcp.Compute.RouterPeer(\"peer\", new()\n {\n Name = \"my-router-peer\",\n Router = \"my-router\",\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.1.2\",\n PeerAsn = 65513,\n AdvertisedRoutePriority = 100,\n Interface = \"interface-1\",\n Bfd = new Gcp.Compute.Inputs.RouterPeerBfdArgs\n {\n MinReceiveInterval = 1000,\n MinTransmitInterval = 1000,\n Multiplier = 5,\n SessionInitializationMode = \"ACTIVE\",\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.NewRouterPeer(ctx, \"peer\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"my-router-peer\"),\n\t\t\tRouter: pulumi.String(\"my-router\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerIpAddress: pulumi.String(\"169.254.1.2\"),\n\t\t\tPeerAsn: pulumi.Int(65513),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: pulumi.String(\"interface-1\"),\n\t\t\tBfd: \u0026compute.RouterPeerBfdArgs{\n\t\t\t\tMinReceiveInterval: pulumi.Int(1000),\n\t\t\t\tMinTransmitInterval: pulumi.Int(1000),\n\t\t\t\tMultiplier: pulumi.Int(5),\n\t\t\t\tSessionInitializationMode: pulumi.String(\"ACTIVE\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RouterPeer;\nimport com.pulumi.gcp.compute.RouterPeerArgs;\nimport com.pulumi.gcp.compute.inputs.RouterPeerBfdArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var peer = new RouterPeer(\"peer\", RouterPeerArgs.builder() \n .name(\"my-router-peer\")\n .router(\"my-router\")\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.1.2\")\n .peerAsn(65513)\n .advertisedRoutePriority(100)\n .interface_(\"interface-1\")\n .bfd(RouterPeerBfdArgs.builder()\n .minReceiveInterval(1000)\n .minTransmitInterval(1000)\n .multiplier(5)\n .sessionInitializationMode(\"ACTIVE\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n peer:\n type: gcp:compute:RouterPeer\n properties:\n name: my-router-peer\n router: my-router\n region: us-central1\n peerIpAddress: 169.254.1.2\n peerAsn: 65513\n advertisedRoutePriority: 100\n interface: interface-1\n bfd:\n minReceiveInterval: 1000\n minTransmitInterval: 1000\n multiplier: 5\n sessionInitializationMode: ACTIVE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Router Peer Router Appliance\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"my-router-net\",\n autoCreateSubnetworks: false,\n});\nconst subnetwork = new gcp.compute.Subnetwork(\"subnetwork\", {\n name: \"my-router-sub\",\n network: network.selfLink,\n ipCidrRange: \"10.0.0.0/16\",\n region: \"us-central1\",\n});\nconst addrIntf = new gcp.compute.Address(\"addr_intf\", {\n name: \"my-router-addr-intf\",\n region: subnetwork.region,\n subnetwork: subnetwork.id,\n addressType: \"INTERNAL\",\n});\nconst addrIntfRedundant = new gcp.compute.Address(\"addr_intf_redundant\", {\n name: \"my-router-addr-intf-red\",\n region: subnetwork.region,\n subnetwork: subnetwork.id,\n addressType: \"INTERNAL\",\n});\nconst addrPeer = new gcp.compute.Address(\"addr_peer\", {\n name: \"my-router-addr-peer\",\n region: subnetwork.region,\n subnetwork: subnetwork.id,\n addressType: \"INTERNAL\",\n});\nconst instance = new gcp.compute.Instance(\"instance\", {\n name: \"router-appliance\",\n zone: \"us-central1-a\",\n machineType: \"e2-medium\",\n canIpForward: true,\n bootDisk: {\n initializeParams: {\n image: \"debian-cloud/debian-11\",\n },\n },\n networkInterfaces: [{\n networkIp: addrPeer.address,\n subnetwork: subnetwork.selfLink,\n }],\n});\nconst hub = new gcp.networkconnectivity.Hub(\"hub\", {name: \"my-router-hub\"});\nconst spoke = new gcp.networkconnectivity.Spoke(\"spoke\", {\n name: \"my-router-spoke\",\n location: subnetwork.region,\n hub: hub.id,\n linkedRouterApplianceInstances: {\n instances: [{\n virtualMachine: instance.selfLink,\n ipAddress: addrPeer.address,\n }],\n siteToSiteDataTransfer: false,\n },\n});\nconst router = new gcp.compute.Router(\"router\", {\n name: \"my-router-router\",\n region: subnetwork.region,\n network: network.selfLink,\n bgp: {\n asn: 64514,\n },\n});\nconst interfaceRedundant = new gcp.compute.RouterInterface(\"interface_redundant\", {\n name: \"my-router-intf-red\",\n region: router.region,\n router: router.name,\n subnetwork: subnetwork.selfLink,\n privateIpAddress: addrIntfRedundant.address,\n});\nconst _interface = new gcp.compute.RouterInterface(\"interface\", {\n name: \"my-router-intf\",\n region: router.region,\n router: router.name,\n subnetwork: subnetwork.selfLink,\n privateIpAddress: addrIntf.address,\n redundantInterface: interfaceRedundant.name,\n});\nconst peer = new gcp.compute.RouterPeer(\"peer\", {\n name: \"my-router-peer\",\n router: router.name,\n region: router.region,\n \"interface\": _interface.name,\n routerApplianceInstance: instance.selfLink,\n peerAsn: 65513,\n peerIpAddress: addrPeer.address,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"my-router-net\",\n auto_create_subnetworks=False)\nsubnetwork = gcp.compute.Subnetwork(\"subnetwork\",\n name=\"my-router-sub\",\n network=network.self_link,\n ip_cidr_range=\"10.0.0.0/16\",\n region=\"us-central1\")\naddr_intf = gcp.compute.Address(\"addr_intf\",\n name=\"my-router-addr-intf\",\n region=subnetwork.region,\n subnetwork=subnetwork.id,\n address_type=\"INTERNAL\")\naddr_intf_redundant = gcp.compute.Address(\"addr_intf_redundant\",\n name=\"my-router-addr-intf-red\",\n region=subnetwork.region,\n subnetwork=subnetwork.id,\n address_type=\"INTERNAL\")\naddr_peer = gcp.compute.Address(\"addr_peer\",\n name=\"my-router-addr-peer\",\n region=subnetwork.region,\n subnetwork=subnetwork.id,\n address_type=\"INTERNAL\")\ninstance = gcp.compute.Instance(\"instance\",\n name=\"router-appliance\",\n zone=\"us-central1-a\",\n machine_type=\"e2-medium\",\n can_ip_forward=True,\n boot_disk=gcp.compute.InstanceBootDiskArgs(\n initialize_params=gcp.compute.InstanceBootDiskInitializeParamsArgs(\n image=\"debian-cloud/debian-11\",\n ),\n ),\n network_interfaces=[gcp.compute.InstanceNetworkInterfaceArgs(\n network_ip=addr_peer.address,\n subnetwork=subnetwork.self_link,\n )])\nhub = gcp.networkconnectivity.Hub(\"hub\", name=\"my-router-hub\")\nspoke = gcp.networkconnectivity.Spoke(\"spoke\",\n name=\"my-router-spoke\",\n location=subnetwork.region,\n hub=hub.id,\n linked_router_appliance_instances=gcp.networkconnectivity.SpokeLinkedRouterApplianceInstancesArgs(\n instances=[gcp.networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArgs(\n virtual_machine=instance.self_link,\n ip_address=addr_peer.address,\n )],\n site_to_site_data_transfer=False,\n ))\nrouter = gcp.compute.Router(\"router\",\n name=\"my-router-router\",\n region=subnetwork.region,\n network=network.self_link,\n bgp=gcp.compute.RouterBgpArgs(\n asn=64514,\n ))\ninterface_redundant = gcp.compute.RouterInterface(\"interface_redundant\",\n name=\"my-router-intf-red\",\n region=router.region,\n router=router.name,\n subnetwork=subnetwork.self_link,\n private_ip_address=addr_intf_redundant.address)\ninterface = gcp.compute.RouterInterface(\"interface\",\n name=\"my-router-intf\",\n region=router.region,\n router=router.name,\n subnetwork=subnetwork.self_link,\n private_ip_address=addr_intf.address,\n redundant_interface=interface_redundant.name)\npeer = gcp.compute.RouterPeer(\"peer\",\n name=\"my-router-peer\",\n router=router.name,\n region=router.region,\n interface=interface.name,\n router_appliance_instance=instance.self_link,\n peer_asn=65513,\n peer_ip_address=addr_peer.address)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"my-router-net\",\n AutoCreateSubnetworks = false,\n });\n\n var subnetwork = new Gcp.Compute.Subnetwork(\"subnetwork\", new()\n {\n Name = \"my-router-sub\",\n Network = network.SelfLink,\n IpCidrRange = \"10.0.0.0/16\",\n Region = \"us-central1\",\n });\n\n var addrIntf = new Gcp.Compute.Address(\"addr_intf\", new()\n {\n Name = \"my-router-addr-intf\",\n Region = subnetwork.Region,\n Subnetwork = subnetwork.Id,\n AddressType = \"INTERNAL\",\n });\n\n var addrIntfRedundant = new Gcp.Compute.Address(\"addr_intf_redundant\", new()\n {\n Name = \"my-router-addr-intf-red\",\n Region = subnetwork.Region,\n Subnetwork = subnetwork.Id,\n AddressType = \"INTERNAL\",\n });\n\n var addrPeer = new Gcp.Compute.Address(\"addr_peer\", new()\n {\n Name = \"my-router-addr-peer\",\n Region = subnetwork.Region,\n Subnetwork = subnetwork.Id,\n AddressType = \"INTERNAL\",\n });\n\n var instance = new Gcp.Compute.Instance(\"instance\", new()\n {\n Name = \"router-appliance\",\n Zone = \"us-central1-a\",\n MachineType = \"e2-medium\",\n CanIpForward = true,\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = \"debian-cloud/debian-11\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n NetworkIp = addrPeer.IPAddress,\n Subnetwork = subnetwork.SelfLink,\n },\n },\n });\n\n var hub = new Gcp.NetworkConnectivity.Hub(\"hub\", new()\n {\n Name = \"my-router-hub\",\n });\n\n var spoke = new Gcp.NetworkConnectivity.Spoke(\"spoke\", new()\n {\n Name = \"my-router-spoke\",\n Location = subnetwork.Region,\n Hub = hub.Id,\n LinkedRouterApplianceInstances = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesArgs\n {\n Instances = new[]\n {\n new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesInstanceArgs\n {\n VirtualMachine = instance.SelfLink,\n IpAddress = addrPeer.IPAddress,\n },\n },\n SiteToSiteDataTransfer = false,\n },\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Name = \"my-router-router\",\n Region = subnetwork.Region,\n Network = network.SelfLink,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 64514,\n },\n });\n\n var interfaceRedundant = new Gcp.Compute.RouterInterface(\"interface_redundant\", new()\n {\n Name = \"my-router-intf-red\",\n Region = router.Region,\n Router = router.Name,\n Subnetwork = subnetwork.SelfLink,\n PrivateIpAddress = addrIntfRedundant.IPAddress,\n });\n\n var @interface = new Gcp.Compute.RouterInterface(\"interface\", new()\n {\n Name = \"my-router-intf\",\n Region = router.Region,\n Router = router.Name,\n Subnetwork = subnetwork.SelfLink,\n PrivateIpAddress = addrIntf.IPAddress,\n RedundantInterface = interfaceRedundant.Name,\n });\n\n var peer = new Gcp.Compute.RouterPeer(\"peer\", new()\n {\n Name = \"my-router-peer\",\n Router = router.Name,\n Region = router.Region,\n Interface = @interface.Name,\n RouterApplianceInstance = instance.SelfLink,\n PeerAsn = 65513,\n PeerIpAddress = addrPeer.IPAddress,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\nfunc main() {\npulumi.Run(func(ctx *pulumi.Context) error {\nnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\nName: pulumi.String(\"my-router-net\"),\nAutoCreateSubnetworks: pulumi.Bool(false),\n})\nif err != nil {\nreturn err\n}\nsubnetwork, err := compute.NewSubnetwork(ctx, \"subnetwork\", \u0026compute.SubnetworkArgs{\nName: pulumi.String(\"my-router-sub\"),\nNetwork: network.SelfLink,\nIpCidrRange: pulumi.String(\"10.0.0.0/16\"),\nRegion: pulumi.String(\"us-central1\"),\n})\nif err != nil {\nreturn err\n}\naddrIntf, err := compute.NewAddress(ctx, \"addr_intf\", \u0026compute.AddressArgs{\nName: pulumi.String(\"my-router-addr-intf\"),\nRegion: subnetwork.Region,\nSubnetwork: subnetwork.ID(),\nAddressType: pulumi.String(\"INTERNAL\"),\n})\nif err != nil {\nreturn err\n}\naddrIntfRedundant, err := compute.NewAddress(ctx, \"addr_intf_redundant\", \u0026compute.AddressArgs{\nName: pulumi.String(\"my-router-addr-intf-red\"),\nRegion: subnetwork.Region,\nSubnetwork: subnetwork.ID(),\nAddressType: pulumi.String(\"INTERNAL\"),\n})\nif err != nil {\nreturn err\n}\naddrPeer, err := compute.NewAddress(ctx, \"addr_peer\", \u0026compute.AddressArgs{\nName: pulumi.String(\"my-router-addr-peer\"),\nRegion: subnetwork.Region,\nSubnetwork: subnetwork.ID(),\nAddressType: pulumi.String(\"INTERNAL\"),\n})\nif err != nil {\nreturn err\n}\ninstance, err := compute.NewInstance(ctx, \"instance\", \u0026compute.InstanceArgs{\nName: pulumi.String(\"router-appliance\"),\nZone: pulumi.String(\"us-central1-a\"),\nMachineType: pulumi.String(\"e2-medium\"),\nCanIpForward: pulumi.Bool(true),\nBootDisk: \u0026compute.InstanceBootDiskArgs{\nInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\nImage: pulumi.String(\"debian-cloud/debian-11\"),\n},\n},\nNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\u0026compute.InstanceNetworkInterfaceArgs{\nNetworkIp: addrPeer.Address,\nSubnetwork: subnetwork.SelfLink,\n},\n},\n})\nif err != nil {\nreturn err\n}\nhub, err := networkconnectivity.NewHub(ctx, \"hub\", \u0026networkconnectivity.HubArgs{\nName: pulumi.String(\"my-router-hub\"),\n})\nif err != nil {\nreturn err\n}\n_, err = networkconnectivity.NewSpoke(ctx, \"spoke\", \u0026networkconnectivity.SpokeArgs{\nName: pulumi.String(\"my-router-spoke\"),\nLocation: subnetwork.Region,\nHub: hub.ID(),\nLinkedRouterApplianceInstances: \u0026networkconnectivity.SpokeLinkedRouterApplianceInstancesArgs{\nInstances: networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArray{\n\u0026networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArgs{\nVirtualMachine: instance.SelfLink,\nIpAddress: addrPeer.Address,\n},\n},\nSiteToSiteDataTransfer: pulumi.Bool(false),\n},\n})\nif err != nil {\nreturn err\n}\nrouter, err := compute.NewRouter(ctx, \"router\", \u0026compute.RouterArgs{\nName: pulumi.String(\"my-router-router\"),\nRegion: subnetwork.Region,\nNetwork: network.SelfLink,\nBgp: \u0026compute.RouterBgpArgs{\nAsn: pulumi.Int(64514),\n},\n})\nif err != nil {\nreturn err\n}\ninterfaceRedundant, err := compute.NewRouterInterface(ctx, \"interface_redundant\", \u0026compute.RouterInterfaceArgs{\nName: pulumi.String(\"my-router-intf-red\"),\nRegion: router.Region,\nRouter: router.Name,\nSubnetwork: subnetwork.SelfLink,\nPrivateIpAddress: addrIntfRedundant.Address,\n})\nif err != nil {\nreturn err\n}\ninterface, err := compute.NewRouterInterface(ctx, \"interface\", \u0026compute.RouterInterfaceArgs{\nName: pulumi.String(\"my-router-intf\"),\nRegion: router.Region,\nRouter: router.Name,\nSubnetwork: subnetwork.SelfLink,\nPrivateIpAddress: addrIntf.Address,\nRedundantInterface: interfaceRedundant.Name,\n})\nif err != nil {\nreturn err\n}\n_, err = compute.NewRouterPeer(ctx, \"peer\", \u0026compute.RouterPeerArgs{\nName: pulumi.String(\"my-router-peer\"),\nRouter: router.Name,\nRegion: router.Region,\nInterface: interface.Name,\nRouterApplianceInstance: instance.SelfLink,\nPeerAsn: pulumi.Int(65513),\nPeerIpAddress: addrPeer.Address,\n})\nif err != nil {\nreturn err\n}\nreturn nil\n})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.Address;\nimport com.pulumi.gcp.compute.AddressArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedRouterApplianceInstancesArgs;\nimport com.pulumi.gcp.compute.Router;\nimport com.pulumi.gcp.compute.RouterArgs;\nimport com.pulumi.gcp.compute.inputs.RouterBgpArgs;\nimport com.pulumi.gcp.compute.RouterInterface;\nimport com.pulumi.gcp.compute.RouterInterfaceArgs;\nimport com.pulumi.gcp.compute.RouterPeer;\nimport com.pulumi.gcp.compute.RouterPeerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder() \n .name(\"my-router-net\")\n .autoCreateSubnetworks(false)\n .build());\n\n var subnetwork = new Subnetwork(\"subnetwork\", SubnetworkArgs.builder() \n .name(\"my-router-sub\")\n .network(network.selfLink())\n .ipCidrRange(\"10.0.0.0/16\")\n .region(\"us-central1\")\n .build());\n\n var addrIntf = new Address(\"addrIntf\", AddressArgs.builder() \n .name(\"my-router-addr-intf\")\n .region(subnetwork.region())\n .subnetwork(subnetwork.id())\n .addressType(\"INTERNAL\")\n .build());\n\n var addrIntfRedundant = new Address(\"addrIntfRedundant\", AddressArgs.builder() \n .name(\"my-router-addr-intf-red\")\n .region(subnetwork.region())\n .subnetwork(subnetwork.id())\n .addressType(\"INTERNAL\")\n .build());\n\n var addrPeer = new Address(\"addrPeer\", AddressArgs.builder() \n .name(\"my-router-addr-peer\")\n .region(subnetwork.region())\n .subnetwork(subnetwork.id())\n .addressType(\"INTERNAL\")\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder() \n .name(\"router-appliance\")\n .zone(\"us-central1-a\")\n .machineType(\"e2-medium\")\n .canIpForward(true)\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"debian-cloud/debian-11\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .networkIp(addrPeer.address())\n .subnetwork(subnetwork.selfLink())\n .build())\n .build());\n\n var hub = new Hub(\"hub\", HubArgs.builder() \n .name(\"my-router-hub\")\n .build());\n\n var spoke = new Spoke(\"spoke\", SpokeArgs.builder() \n .name(\"my-router-spoke\")\n .location(subnetwork.region())\n .hub(hub.id())\n .linkedRouterApplianceInstances(SpokeLinkedRouterApplianceInstancesArgs.builder()\n .instances(SpokeLinkedRouterApplianceInstancesInstanceArgs.builder()\n .virtualMachine(instance.selfLink())\n .ipAddress(addrPeer.address())\n .build())\n .siteToSiteDataTransfer(false)\n .build())\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder() \n .name(\"my-router-router\")\n .region(subnetwork.region())\n .network(network.selfLink())\n .bgp(RouterBgpArgs.builder()\n .asn(64514)\n .build())\n .build());\n\n var interfaceRedundant = new RouterInterface(\"interfaceRedundant\", RouterInterfaceArgs.builder() \n .name(\"my-router-intf-red\")\n .region(router.region())\n .router(router.name())\n .subnetwork(subnetwork.selfLink())\n .privateIpAddress(addrIntfRedundant.address())\n .build());\n\n var interface_ = new RouterInterface(\"interface\", RouterInterfaceArgs.builder() \n .name(\"my-router-intf\")\n .region(router.region())\n .router(router.name())\n .subnetwork(subnetwork.selfLink())\n .privateIpAddress(addrIntf.address())\n .redundantInterface(interfaceRedundant.name())\n .build());\n\n var peer = new RouterPeer(\"peer\", RouterPeerArgs.builder() \n .name(\"my-router-peer\")\n .router(router.name())\n .region(router.region())\n .interface_(interface_.name())\n .routerApplianceInstance(instance.selfLink())\n .peerAsn(65513)\n .peerIpAddress(addrPeer.address())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: my-router-net\n autoCreateSubnetworks: false\n subnetwork:\n type: gcp:compute:Subnetwork\n properties:\n name: my-router-sub\n network: ${network.selfLink}\n ipCidrRange: 10.0.0.0/16\n region: us-central1\n addrIntf:\n type: gcp:compute:Address\n name: addr_intf\n properties:\n name: my-router-addr-intf\n region: ${subnetwork.region}\n subnetwork: ${subnetwork.id}\n addressType: INTERNAL\n addrIntfRedundant:\n type: gcp:compute:Address\n name: addr_intf_redundant\n properties:\n name: my-router-addr-intf-red\n region: ${subnetwork.region}\n subnetwork: ${subnetwork.id}\n addressType: INTERNAL\n addrPeer:\n type: gcp:compute:Address\n name: addr_peer\n properties:\n name: my-router-addr-peer\n region: ${subnetwork.region}\n subnetwork: ${subnetwork.id}\n addressType: INTERNAL\n instance:\n type: gcp:compute:Instance\n properties:\n name: router-appliance\n zone: us-central1-a\n machineType: e2-medium\n canIpForward: true\n bootDisk:\n initializeParams:\n image: debian-cloud/debian-11\n networkInterfaces:\n - networkIp: ${addrPeer.address}\n subnetwork: ${subnetwork.selfLink}\n hub:\n type: gcp:networkconnectivity:Hub\n properties:\n name: my-router-hub\n spoke:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: my-router-spoke\n location: ${subnetwork.region}\n hub: ${hub.id}\n linkedRouterApplianceInstances:\n instances:\n - virtualMachine: ${instance.selfLink}\n ipAddress: ${addrPeer.address}\n siteToSiteDataTransfer: false\n router:\n type: gcp:compute:Router\n properties:\n name: my-router-router\n region: ${subnetwork.region}\n network: ${network.selfLink}\n bgp:\n asn: 64514\n interfaceRedundant:\n type: gcp:compute:RouterInterface\n name: interface_redundant\n properties:\n name: my-router-intf-red\n region: ${router.region}\n router: ${router.name}\n subnetwork: ${subnetwork.selfLink}\n privateIpAddress: ${addrIntfRedundant.address}\n interface:\n type: gcp:compute:RouterInterface\n properties:\n name: my-router-intf\n region: ${router.region}\n router: ${router.name}\n subnetwork: ${subnetwork.selfLink}\n privateIpAddress: ${addrIntf.address}\n redundantInterface: ${interfaceRedundant.name}\n peer:\n type: gcp:compute:RouterPeer\n properties:\n name: my-router-peer\n router: ${router.name}\n region: ${router.region}\n interface: ${interface.name}\n routerApplianceInstance: ${instance.selfLink}\n peerAsn: 65513\n peerIpAddress: ${addrPeer.address}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRouterBgpPeer can be imported using any of these accepted formats:\n\n* `projects/{{project}}/regions/{{region}}/routers/{{router}}/{{name}}`\n\n* `{{project}}/{{region}}/{{router}}/{{name}}`\n\n* `{{region}}/{{router}}/{{name}}`\n\n* `{{router}}/{{name}}`\n\nWhen using the `pulumi import` command, RouterBgpPeer can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/routerPeer:RouterPeer default projects/{{project}}/regions/{{region}}/routers/{{router}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/routerPeer:RouterPeer default {{project}}/{{region}}/{{router}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/routerPeer:RouterPeer default {{region}}/{{router}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/routerPeer:RouterPeer default {{router}}/{{name}}\n```\n\n", + "description": "BGP information that must be configured into the routing stack to\nestablish BGP peering. This information must specify the peer ASN\nand either the interface name, IP address, or peer IP address.\nPlease refer to RFC4273.\n\n\nTo get more information about RouterBgpPeer, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/routers)\n* How-to Guides\n * [Google Cloud Router](https://cloud.google.com/router/docs/)\n\n## Example Usage\n\n### Router Peer Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst peer = new gcp.compute.RouterPeer(\"peer\", {\n name: \"my-router-peer\",\n router: \"my-router\",\n region: \"us-central1\",\n peerAsn: 65513,\n advertisedRoutePriority: 100,\n \"interface\": \"interface-1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npeer = gcp.compute.RouterPeer(\"peer\",\n name=\"my-router-peer\",\n router=\"my-router\",\n region=\"us-central1\",\n peer_asn=65513,\n advertised_route_priority=100,\n interface=\"interface-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 peer = new Gcp.Compute.RouterPeer(\"peer\", new()\n {\n Name = \"my-router-peer\",\n Router = \"my-router\",\n Region = \"us-central1\",\n PeerAsn = 65513,\n AdvertisedRoutePriority = 100,\n Interface = \"interface-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.NewRouterPeer(ctx, \"peer\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"my-router-peer\"),\n\t\t\tRouter: pulumi.String(\"my-router\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerAsn: pulumi.Int(65513),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: pulumi.String(\"interface-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.RouterPeer;\nimport com.pulumi.gcp.compute.RouterPeerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var peer = new RouterPeer(\"peer\", RouterPeerArgs.builder() \n .name(\"my-router-peer\")\n .router(\"my-router\")\n .region(\"us-central1\")\n .peerAsn(65513)\n .advertisedRoutePriority(100)\n .interface_(\"interface-1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n peer:\n type: gcp:compute:RouterPeer\n properties:\n name: my-router-peer\n router: my-router\n region: us-central1\n peerAsn: 65513\n advertisedRoutePriority: 100\n interface: interface-1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Router Peer Disabled\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst peer = new gcp.compute.RouterPeer(\"peer\", {\n name: \"my-router-peer\",\n router: \"my-router\",\n region: \"us-central1\",\n peerIpAddress: \"169.254.1.2\",\n peerAsn: 65513,\n advertisedRoutePriority: 100,\n \"interface\": \"interface-1\",\n enable: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npeer = gcp.compute.RouterPeer(\"peer\",\n name=\"my-router-peer\",\n router=\"my-router\",\n region=\"us-central1\",\n peer_ip_address=\"169.254.1.2\",\n peer_asn=65513,\n advertised_route_priority=100,\n interface=\"interface-1\",\n enable=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var peer = new Gcp.Compute.RouterPeer(\"peer\", new()\n {\n Name = \"my-router-peer\",\n Router = \"my-router\",\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.1.2\",\n PeerAsn = 65513,\n AdvertisedRoutePriority = 100,\n Interface = \"interface-1\",\n Enable = false,\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.NewRouterPeer(ctx, \"peer\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"my-router-peer\"),\n\t\t\tRouter: pulumi.String(\"my-router\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerIpAddress: pulumi.String(\"169.254.1.2\"),\n\t\t\tPeerAsn: pulumi.Int(65513),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: pulumi.String(\"interface-1\"),\n\t\t\tEnable: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RouterPeer;\nimport com.pulumi.gcp.compute.RouterPeerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var peer = new RouterPeer(\"peer\", RouterPeerArgs.builder() \n .name(\"my-router-peer\")\n .router(\"my-router\")\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.1.2\")\n .peerAsn(65513)\n .advertisedRoutePriority(100)\n .interface_(\"interface-1\")\n .enable(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n peer:\n type: gcp:compute:RouterPeer\n properties:\n name: my-router-peer\n router: my-router\n region: us-central1\n peerIpAddress: 169.254.1.2\n peerAsn: 65513\n advertisedRoutePriority: 100\n interface: interface-1\n enable: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Router Peer Bfd\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst peer = new gcp.compute.RouterPeer(\"peer\", {\n name: \"my-router-peer\",\n router: \"my-router\",\n region: \"us-central1\",\n peerIpAddress: \"169.254.1.2\",\n peerAsn: 65513,\n advertisedRoutePriority: 100,\n \"interface\": \"interface-1\",\n bfd: {\n minReceiveInterval: 1000,\n minTransmitInterval: 1000,\n multiplier: 5,\n sessionInitializationMode: \"ACTIVE\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npeer = gcp.compute.RouterPeer(\"peer\",\n name=\"my-router-peer\",\n router=\"my-router\",\n region=\"us-central1\",\n peer_ip_address=\"169.254.1.2\",\n peer_asn=65513,\n advertised_route_priority=100,\n interface=\"interface-1\",\n bfd=gcp.compute.RouterPeerBfdArgs(\n min_receive_interval=1000,\n min_transmit_interval=1000,\n multiplier=5,\n session_initialization_mode=\"ACTIVE\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var peer = new Gcp.Compute.RouterPeer(\"peer\", new()\n {\n Name = \"my-router-peer\",\n Router = \"my-router\",\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.1.2\",\n PeerAsn = 65513,\n AdvertisedRoutePriority = 100,\n Interface = \"interface-1\",\n Bfd = new Gcp.Compute.Inputs.RouterPeerBfdArgs\n {\n MinReceiveInterval = 1000,\n MinTransmitInterval = 1000,\n Multiplier = 5,\n SessionInitializationMode = \"ACTIVE\",\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.NewRouterPeer(ctx, \"peer\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"my-router-peer\"),\n\t\t\tRouter: pulumi.String(\"my-router\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerIpAddress: pulumi.String(\"169.254.1.2\"),\n\t\t\tPeerAsn: pulumi.Int(65513),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: pulumi.String(\"interface-1\"),\n\t\t\tBfd: \u0026compute.RouterPeerBfdArgs{\n\t\t\t\tMinReceiveInterval: pulumi.Int(1000),\n\t\t\t\tMinTransmitInterval: pulumi.Int(1000),\n\t\t\t\tMultiplier: pulumi.Int(5),\n\t\t\t\tSessionInitializationMode: pulumi.String(\"ACTIVE\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RouterPeer;\nimport com.pulumi.gcp.compute.RouterPeerArgs;\nimport com.pulumi.gcp.compute.inputs.RouterPeerBfdArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var peer = new RouterPeer(\"peer\", RouterPeerArgs.builder() \n .name(\"my-router-peer\")\n .router(\"my-router\")\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.1.2\")\n .peerAsn(65513)\n .advertisedRoutePriority(100)\n .interface_(\"interface-1\")\n .bfd(RouterPeerBfdArgs.builder()\n .minReceiveInterval(1000)\n .minTransmitInterval(1000)\n .multiplier(5)\n .sessionInitializationMode(\"ACTIVE\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n peer:\n type: gcp:compute:RouterPeer\n properties:\n name: my-router-peer\n router: my-router\n region: us-central1\n peerIpAddress: 169.254.1.2\n peerAsn: 65513\n advertisedRoutePriority: 100\n interface: interface-1\n bfd:\n minReceiveInterval: 1000\n minTransmitInterval: 1000\n multiplier: 5\n sessionInitializationMode: ACTIVE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Router Peer Router Appliance\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"my-router-net\",\n autoCreateSubnetworks: false,\n});\nconst subnetwork = new gcp.compute.Subnetwork(\"subnetwork\", {\n name: \"my-router-sub\",\n network: network.selfLink,\n ipCidrRange: \"10.0.0.0/16\",\n region: \"us-central1\",\n});\nconst addrIntf = new gcp.compute.Address(\"addr_intf\", {\n name: \"my-router-addr-intf\",\n region: subnetwork.region,\n subnetwork: subnetwork.id,\n addressType: \"INTERNAL\",\n});\nconst addrIntfRedundant = new gcp.compute.Address(\"addr_intf_redundant\", {\n name: \"my-router-addr-intf-red\",\n region: subnetwork.region,\n subnetwork: subnetwork.id,\n addressType: \"INTERNAL\",\n});\nconst addrPeer = new gcp.compute.Address(\"addr_peer\", {\n name: \"my-router-addr-peer\",\n region: subnetwork.region,\n subnetwork: subnetwork.id,\n addressType: \"INTERNAL\",\n});\nconst instance = new gcp.compute.Instance(\"instance\", {\n name: \"router-appliance\",\n zone: \"us-central1-a\",\n machineType: \"e2-medium\",\n canIpForward: true,\n bootDisk: {\n initializeParams: {\n image: \"debian-cloud/debian-11\",\n },\n },\n networkInterfaces: [{\n networkIp: addrPeer.address,\n subnetwork: subnetwork.selfLink,\n }],\n});\nconst hub = new gcp.networkconnectivity.Hub(\"hub\", {name: \"my-router-hub\"});\nconst spoke = new gcp.networkconnectivity.Spoke(\"spoke\", {\n name: \"my-router-spoke\",\n location: subnetwork.region,\n hub: hub.id,\n linkedRouterApplianceInstances: {\n instances: [{\n virtualMachine: instance.selfLink,\n ipAddress: addrPeer.address,\n }],\n siteToSiteDataTransfer: false,\n },\n});\nconst router = new gcp.compute.Router(\"router\", {\n name: \"my-router-router\",\n region: subnetwork.region,\n network: network.selfLink,\n bgp: {\n asn: 64514,\n },\n});\nconst interfaceRedundant = new gcp.compute.RouterInterface(\"interface_redundant\", {\n name: \"my-router-intf-red\",\n region: router.region,\n router: router.name,\n subnetwork: subnetwork.selfLink,\n privateIpAddress: addrIntfRedundant.address,\n});\nconst _interface = new gcp.compute.RouterInterface(\"interface\", {\n name: \"my-router-intf\",\n region: router.region,\n router: router.name,\n subnetwork: subnetwork.selfLink,\n privateIpAddress: addrIntf.address,\n redundantInterface: interfaceRedundant.name,\n});\nconst peer = new gcp.compute.RouterPeer(\"peer\", {\n name: \"my-router-peer\",\n router: router.name,\n region: router.region,\n \"interface\": _interface.name,\n routerApplianceInstance: instance.selfLink,\n peerAsn: 65513,\n peerIpAddress: addrPeer.address,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"my-router-net\",\n auto_create_subnetworks=False)\nsubnetwork = gcp.compute.Subnetwork(\"subnetwork\",\n name=\"my-router-sub\",\n network=network.self_link,\n ip_cidr_range=\"10.0.0.0/16\",\n region=\"us-central1\")\naddr_intf = gcp.compute.Address(\"addr_intf\",\n name=\"my-router-addr-intf\",\n region=subnetwork.region,\n subnetwork=subnetwork.id,\n address_type=\"INTERNAL\")\naddr_intf_redundant = gcp.compute.Address(\"addr_intf_redundant\",\n name=\"my-router-addr-intf-red\",\n region=subnetwork.region,\n subnetwork=subnetwork.id,\n address_type=\"INTERNAL\")\naddr_peer = gcp.compute.Address(\"addr_peer\",\n name=\"my-router-addr-peer\",\n region=subnetwork.region,\n subnetwork=subnetwork.id,\n address_type=\"INTERNAL\")\ninstance = gcp.compute.Instance(\"instance\",\n name=\"router-appliance\",\n zone=\"us-central1-a\",\n machine_type=\"e2-medium\",\n can_ip_forward=True,\n boot_disk=gcp.compute.InstanceBootDiskArgs(\n initialize_params=gcp.compute.InstanceBootDiskInitializeParamsArgs(\n image=\"debian-cloud/debian-11\",\n ),\n ),\n network_interfaces=[gcp.compute.InstanceNetworkInterfaceArgs(\n network_ip=addr_peer.address,\n subnetwork=subnetwork.self_link,\n )])\nhub = gcp.networkconnectivity.Hub(\"hub\", name=\"my-router-hub\")\nspoke = gcp.networkconnectivity.Spoke(\"spoke\",\n name=\"my-router-spoke\",\n location=subnetwork.region,\n hub=hub.id,\n linked_router_appliance_instances=gcp.networkconnectivity.SpokeLinkedRouterApplianceInstancesArgs(\n instances=[gcp.networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArgs(\n virtual_machine=instance.self_link,\n ip_address=addr_peer.address,\n )],\n site_to_site_data_transfer=False,\n ))\nrouter = gcp.compute.Router(\"router\",\n name=\"my-router-router\",\n region=subnetwork.region,\n network=network.self_link,\n bgp=gcp.compute.RouterBgpArgs(\n asn=64514,\n ))\ninterface_redundant = gcp.compute.RouterInterface(\"interface_redundant\",\n name=\"my-router-intf-red\",\n region=router.region,\n router=router.name,\n subnetwork=subnetwork.self_link,\n private_ip_address=addr_intf_redundant.address)\ninterface = gcp.compute.RouterInterface(\"interface\",\n name=\"my-router-intf\",\n region=router.region,\n router=router.name,\n subnetwork=subnetwork.self_link,\n private_ip_address=addr_intf.address,\n redundant_interface=interface_redundant.name)\npeer = gcp.compute.RouterPeer(\"peer\",\n name=\"my-router-peer\",\n router=router.name,\n region=router.region,\n interface=interface.name,\n router_appliance_instance=instance.self_link,\n peer_asn=65513,\n peer_ip_address=addr_peer.address)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"my-router-net\",\n AutoCreateSubnetworks = false,\n });\n\n var subnetwork = new Gcp.Compute.Subnetwork(\"subnetwork\", new()\n {\n Name = \"my-router-sub\",\n Network = network.SelfLink,\n IpCidrRange = \"10.0.0.0/16\",\n Region = \"us-central1\",\n });\n\n var addrIntf = new Gcp.Compute.Address(\"addr_intf\", new()\n {\n Name = \"my-router-addr-intf\",\n Region = subnetwork.Region,\n Subnetwork = subnetwork.Id,\n AddressType = \"INTERNAL\",\n });\n\n var addrIntfRedundant = new Gcp.Compute.Address(\"addr_intf_redundant\", new()\n {\n Name = \"my-router-addr-intf-red\",\n Region = subnetwork.Region,\n Subnetwork = subnetwork.Id,\n AddressType = \"INTERNAL\",\n });\n\n var addrPeer = new Gcp.Compute.Address(\"addr_peer\", new()\n {\n Name = \"my-router-addr-peer\",\n Region = subnetwork.Region,\n Subnetwork = subnetwork.Id,\n AddressType = \"INTERNAL\",\n });\n\n var instance = new Gcp.Compute.Instance(\"instance\", new()\n {\n Name = \"router-appliance\",\n Zone = \"us-central1-a\",\n MachineType = \"e2-medium\",\n CanIpForward = true,\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = \"debian-cloud/debian-11\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n NetworkIp = addrPeer.IPAddress,\n Subnetwork = subnetwork.SelfLink,\n },\n },\n });\n\n var hub = new Gcp.NetworkConnectivity.Hub(\"hub\", new()\n {\n Name = \"my-router-hub\",\n });\n\n var spoke = new Gcp.NetworkConnectivity.Spoke(\"spoke\", new()\n {\n Name = \"my-router-spoke\",\n Location = subnetwork.Region,\n Hub = hub.Id,\n LinkedRouterApplianceInstances = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesArgs\n {\n Instances = new[]\n {\n new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesInstanceArgs\n {\n VirtualMachine = instance.SelfLink,\n IpAddress = addrPeer.IPAddress,\n },\n },\n SiteToSiteDataTransfer = false,\n },\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Name = \"my-router-router\",\n Region = subnetwork.Region,\n Network = network.SelfLink,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 64514,\n },\n });\n\n var interfaceRedundant = new Gcp.Compute.RouterInterface(\"interface_redundant\", new()\n {\n Name = \"my-router-intf-red\",\n Region = router.Region,\n Router = router.Name,\n Subnetwork = subnetwork.SelfLink,\n PrivateIpAddress = addrIntfRedundant.IPAddress,\n });\n\n var @interface = new Gcp.Compute.RouterInterface(\"interface\", new()\n {\n Name = \"my-router-intf\",\n Region = router.Region,\n Router = router.Name,\n Subnetwork = subnetwork.SelfLink,\n PrivateIpAddress = addrIntf.IPAddress,\n RedundantInterface = interfaceRedundant.Name,\n });\n\n var peer = new Gcp.Compute.RouterPeer(\"peer\", new()\n {\n Name = \"my-router-peer\",\n Router = router.Name,\n Region = router.Region,\n Interface = @interface.Name,\n RouterApplianceInstance = instance.SelfLink,\n PeerAsn = 65513,\n PeerIpAddress = addrPeer.IPAddress,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\nfunc main() {\npulumi.Run(func(ctx *pulumi.Context) error {\nnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\nName: pulumi.String(\"my-router-net\"),\nAutoCreateSubnetworks: pulumi.Bool(false),\n})\nif err != nil {\nreturn err\n}\nsubnetwork, err := compute.NewSubnetwork(ctx, \"subnetwork\", \u0026compute.SubnetworkArgs{\nName: pulumi.String(\"my-router-sub\"),\nNetwork: network.SelfLink,\nIpCidrRange: pulumi.String(\"10.0.0.0/16\"),\nRegion: pulumi.String(\"us-central1\"),\n})\nif err != nil {\nreturn err\n}\naddrIntf, err := compute.NewAddress(ctx, \"addr_intf\", \u0026compute.AddressArgs{\nName: pulumi.String(\"my-router-addr-intf\"),\nRegion: subnetwork.Region,\nSubnetwork: subnetwork.ID(),\nAddressType: pulumi.String(\"INTERNAL\"),\n})\nif err != nil {\nreturn err\n}\naddrIntfRedundant, err := compute.NewAddress(ctx, \"addr_intf_redundant\", \u0026compute.AddressArgs{\nName: pulumi.String(\"my-router-addr-intf-red\"),\nRegion: subnetwork.Region,\nSubnetwork: subnetwork.ID(),\nAddressType: pulumi.String(\"INTERNAL\"),\n})\nif err != nil {\nreturn err\n}\naddrPeer, err := compute.NewAddress(ctx, \"addr_peer\", \u0026compute.AddressArgs{\nName: pulumi.String(\"my-router-addr-peer\"),\nRegion: subnetwork.Region,\nSubnetwork: subnetwork.ID(),\nAddressType: pulumi.String(\"INTERNAL\"),\n})\nif err != nil {\nreturn err\n}\ninstance, err := compute.NewInstance(ctx, \"instance\", \u0026compute.InstanceArgs{\nName: pulumi.String(\"router-appliance\"),\nZone: pulumi.String(\"us-central1-a\"),\nMachineType: pulumi.String(\"e2-medium\"),\nCanIpForward: pulumi.Bool(true),\nBootDisk: \u0026compute.InstanceBootDiskArgs{\nInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\nImage: pulumi.String(\"debian-cloud/debian-11\"),\n},\n},\nNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\u0026compute.InstanceNetworkInterfaceArgs{\nNetworkIp: addrPeer.Address,\nSubnetwork: subnetwork.SelfLink,\n},\n},\n})\nif err != nil {\nreturn err\n}\nhub, err := networkconnectivity.NewHub(ctx, \"hub\", \u0026networkconnectivity.HubArgs{\nName: pulumi.String(\"my-router-hub\"),\n})\nif err != nil {\nreturn err\n}\n_, err = networkconnectivity.NewSpoke(ctx, \"spoke\", \u0026networkconnectivity.SpokeArgs{\nName: pulumi.String(\"my-router-spoke\"),\nLocation: subnetwork.Region,\nHub: hub.ID(),\nLinkedRouterApplianceInstances: \u0026networkconnectivity.SpokeLinkedRouterApplianceInstancesArgs{\nInstances: networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArray{\n\u0026networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArgs{\nVirtualMachine: instance.SelfLink,\nIpAddress: addrPeer.Address,\n},\n},\nSiteToSiteDataTransfer: pulumi.Bool(false),\n},\n})\nif err != nil {\nreturn err\n}\nrouter, err := compute.NewRouter(ctx, \"router\", \u0026compute.RouterArgs{\nName: pulumi.String(\"my-router-router\"),\nRegion: subnetwork.Region,\nNetwork: network.SelfLink,\nBgp: \u0026compute.RouterBgpArgs{\nAsn: pulumi.Int(64514),\n},\n})\nif err != nil {\nreturn err\n}\ninterfaceRedundant, err := compute.NewRouterInterface(ctx, \"interface_redundant\", \u0026compute.RouterInterfaceArgs{\nName: pulumi.String(\"my-router-intf-red\"),\nRegion: router.Region,\nRouter: router.Name,\nSubnetwork: subnetwork.SelfLink,\nPrivateIpAddress: addrIntfRedundant.Address,\n})\nif err != nil {\nreturn err\n}\ninterface, err := compute.NewRouterInterface(ctx, \"interface\", \u0026compute.RouterInterfaceArgs{\nName: pulumi.String(\"my-router-intf\"),\nRegion: router.Region,\nRouter: router.Name,\nSubnetwork: subnetwork.SelfLink,\nPrivateIpAddress: addrIntf.Address,\nRedundantInterface: interfaceRedundant.Name,\n})\nif err != nil {\nreturn err\n}\n_, err = compute.NewRouterPeer(ctx, \"peer\", \u0026compute.RouterPeerArgs{\nName: pulumi.String(\"my-router-peer\"),\nRouter: router.Name,\nRegion: router.Region,\nInterface: interface.Name,\nRouterApplianceInstance: instance.SelfLink,\nPeerAsn: pulumi.Int(65513),\nPeerIpAddress: addrPeer.Address,\n})\nif err != nil {\nreturn err\n}\nreturn nil\n})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.Address;\nimport com.pulumi.gcp.compute.AddressArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedRouterApplianceInstancesArgs;\nimport com.pulumi.gcp.compute.Router;\nimport com.pulumi.gcp.compute.RouterArgs;\nimport com.pulumi.gcp.compute.inputs.RouterBgpArgs;\nimport com.pulumi.gcp.compute.RouterInterface;\nimport com.pulumi.gcp.compute.RouterInterfaceArgs;\nimport com.pulumi.gcp.compute.RouterPeer;\nimport com.pulumi.gcp.compute.RouterPeerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder() \n .name(\"my-router-net\")\n .autoCreateSubnetworks(false)\n .build());\n\n var subnetwork = new Subnetwork(\"subnetwork\", SubnetworkArgs.builder() \n .name(\"my-router-sub\")\n .network(network.selfLink())\n .ipCidrRange(\"10.0.0.0/16\")\n .region(\"us-central1\")\n .build());\n\n var addrIntf = new Address(\"addrIntf\", AddressArgs.builder() \n .name(\"my-router-addr-intf\")\n .region(subnetwork.region())\n .subnetwork(subnetwork.id())\n .addressType(\"INTERNAL\")\n .build());\n\n var addrIntfRedundant = new Address(\"addrIntfRedundant\", AddressArgs.builder() \n .name(\"my-router-addr-intf-red\")\n .region(subnetwork.region())\n .subnetwork(subnetwork.id())\n .addressType(\"INTERNAL\")\n .build());\n\n var addrPeer = new Address(\"addrPeer\", AddressArgs.builder() \n .name(\"my-router-addr-peer\")\n .region(subnetwork.region())\n .subnetwork(subnetwork.id())\n .addressType(\"INTERNAL\")\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder() \n .name(\"router-appliance\")\n .zone(\"us-central1-a\")\n .machineType(\"e2-medium\")\n .canIpForward(true)\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"debian-cloud/debian-11\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .networkIp(addrPeer.address())\n .subnetwork(subnetwork.selfLink())\n .build())\n .build());\n\n var hub = new Hub(\"hub\", HubArgs.builder() \n .name(\"my-router-hub\")\n .build());\n\n var spoke = new Spoke(\"spoke\", SpokeArgs.builder() \n .name(\"my-router-spoke\")\n .location(subnetwork.region())\n .hub(hub.id())\n .linkedRouterApplianceInstances(SpokeLinkedRouterApplianceInstancesArgs.builder()\n .instances(SpokeLinkedRouterApplianceInstancesInstanceArgs.builder()\n .virtualMachine(instance.selfLink())\n .ipAddress(addrPeer.address())\n .build())\n .siteToSiteDataTransfer(false)\n .build())\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder() \n .name(\"my-router-router\")\n .region(subnetwork.region())\n .network(network.selfLink())\n .bgp(RouterBgpArgs.builder()\n .asn(64514)\n .build())\n .build());\n\n var interfaceRedundant = new RouterInterface(\"interfaceRedundant\", RouterInterfaceArgs.builder() \n .name(\"my-router-intf-red\")\n .region(router.region())\n .router(router.name())\n .subnetwork(subnetwork.selfLink())\n .privateIpAddress(addrIntfRedundant.address())\n .build());\n\n var interface_ = new RouterInterface(\"interface\", RouterInterfaceArgs.builder() \n .name(\"my-router-intf\")\n .region(router.region())\n .router(router.name())\n .subnetwork(subnetwork.selfLink())\n .privateIpAddress(addrIntf.address())\n .redundantInterface(interfaceRedundant.name())\n .build());\n\n var peer = new RouterPeer(\"peer\", RouterPeerArgs.builder() \n .name(\"my-router-peer\")\n .router(router.name())\n .region(router.region())\n .interface_(interface_.name())\n .routerApplianceInstance(instance.selfLink())\n .peerAsn(65513)\n .peerIpAddress(addrPeer.address())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: my-router-net\n autoCreateSubnetworks: false\n subnetwork:\n type: gcp:compute:Subnetwork\n properties:\n name: my-router-sub\n network: ${network.selfLink}\n ipCidrRange: 10.0.0.0/16\n region: us-central1\n addrIntf:\n type: gcp:compute:Address\n name: addr_intf\n properties:\n name: my-router-addr-intf\n region: ${subnetwork.region}\n subnetwork: ${subnetwork.id}\n addressType: INTERNAL\n addrIntfRedundant:\n type: gcp:compute:Address\n name: addr_intf_redundant\n properties:\n name: my-router-addr-intf-red\n region: ${subnetwork.region}\n subnetwork: ${subnetwork.id}\n addressType: INTERNAL\n addrPeer:\n type: gcp:compute:Address\n name: addr_peer\n properties:\n name: my-router-addr-peer\n region: ${subnetwork.region}\n subnetwork: ${subnetwork.id}\n addressType: INTERNAL\n instance:\n type: gcp:compute:Instance\n properties:\n name: router-appliance\n zone: us-central1-a\n machineType: e2-medium\n canIpForward: true\n bootDisk:\n initializeParams:\n image: debian-cloud/debian-11\n networkInterfaces:\n - networkIp: ${addrPeer.address}\n subnetwork: ${subnetwork.selfLink}\n hub:\n type: gcp:networkconnectivity:Hub\n properties:\n name: my-router-hub\n spoke:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: my-router-spoke\n location: ${subnetwork.region}\n hub: ${hub.id}\n linkedRouterApplianceInstances:\n instances:\n - virtualMachine: ${instance.selfLink}\n ipAddress: ${addrPeer.address}\n siteToSiteDataTransfer: false\n router:\n type: gcp:compute:Router\n properties:\n name: my-router-router\n region: ${subnetwork.region}\n network: ${network.selfLink}\n bgp:\n asn: 64514\n interfaceRedundant:\n type: gcp:compute:RouterInterface\n name: interface_redundant\n properties:\n name: my-router-intf-red\n region: ${router.region}\n router: ${router.name}\n subnetwork: ${subnetwork.selfLink}\n privateIpAddress: ${addrIntfRedundant.address}\n interface:\n type: gcp:compute:RouterInterface\n properties:\n name: my-router-intf\n region: ${router.region}\n router: ${router.name}\n subnetwork: ${subnetwork.selfLink}\n privateIpAddress: ${addrIntf.address}\n redundantInterface: ${interfaceRedundant.name}\n peer:\n type: gcp:compute:RouterPeer\n properties:\n name: my-router-peer\n router: ${router.name}\n region: ${router.region}\n interface: ${interface.name}\n routerApplianceInstance: ${instance.selfLink}\n peerAsn: 65513\n peerIpAddress: ${addrPeer.address}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Router Peer Md5 Authentication Key\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst foobar = new gcp.compute.RouterPeer(\"foobar\", {\n name: \"%s-peer\",\n router: foobarGoogleComputeRouter.name,\n region: foobarGoogleComputeRouter.region,\n peerAsn: 65515,\n advertisedRoutePriority: 100,\n \"interface\": foobarGoogleComputeRouterInterface.name,\n peerIpAddress: \"169.254.3.2\",\n md5AuthenticationKey: {\n name: \"%s-peer-key\",\n key: \"%s-peer-key-value\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfoobar = gcp.compute.RouterPeer(\"foobar\",\n name=\"%s-peer\",\n router=foobar_google_compute_router[\"name\"],\n region=foobar_google_compute_router[\"region\"],\n peer_asn=65515,\n advertised_route_priority=100,\n interface=foobar_google_compute_router_interface[\"name\"],\n peer_ip_address=\"169.254.3.2\",\n md5_authentication_key=gcp.compute.RouterPeerMd5AuthenticationKeyArgs(\n name=\"%s-peer-key\",\n key=\"%s-peer-key-value\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foobar = new Gcp.Compute.RouterPeer(\"foobar\", new()\n {\n Name = \"%s-peer\",\n Router = foobarGoogleComputeRouter.Name,\n Region = foobarGoogleComputeRouter.Region,\n PeerAsn = 65515,\n AdvertisedRoutePriority = 100,\n Interface = foobarGoogleComputeRouterInterface.Name,\n PeerIpAddress = \"169.254.3.2\",\n Md5AuthenticationKey = new Gcp.Compute.Inputs.RouterPeerMd5AuthenticationKeyArgs\n {\n Name = \"%s-peer-key\",\n Key = \"%s-peer-key-value\",\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.NewRouterPeer(ctx, \"foobar\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"%s-peer\"),\n\t\t\tRouter: pulumi.Any(foobarGoogleComputeRouter.Name),\n\t\t\tRegion: pulumi.Any(foobarGoogleComputeRouter.Region),\n\t\t\tPeerAsn: pulumi.Int(65515),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: pulumi.Any(foobarGoogleComputeRouterInterface.Name),\n\t\t\tPeerIpAddress: pulumi.String(\"169.254.3.2\"),\n\t\t\tMd5AuthenticationKey: \u0026compute.RouterPeerMd5AuthenticationKeyArgs{\n\t\t\t\tName: pulumi.String(\"%s-peer-key\"),\n\t\t\t\tKey: pulumi.String(\"%s-peer-key-value\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RouterPeer;\nimport com.pulumi.gcp.compute.RouterPeerArgs;\nimport com.pulumi.gcp.compute.inputs.RouterPeerMd5AuthenticationKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var foobar = new RouterPeer(\"foobar\", RouterPeerArgs.builder() \n .name(\"%s-peer\")\n .router(foobarGoogleComputeRouter.name())\n .region(foobarGoogleComputeRouter.region())\n .peerAsn(65515)\n .advertisedRoutePriority(100)\n .interface_(foobarGoogleComputeRouterInterface.name())\n .peerIpAddress(\"169.254.3.2\")\n .md5AuthenticationKey(RouterPeerMd5AuthenticationKeyArgs.builder()\n .name(\"%s-peer-key\")\n .key(\"%s-peer-key-value\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n foobar:\n type: gcp:compute:RouterPeer\n properties:\n name: '%s-peer'\n router: ${foobarGoogleComputeRouter.name}\n region: ${foobarGoogleComputeRouter.region}\n peerAsn: 65515\n advertisedRoutePriority: 100\n interface: ${foobarGoogleComputeRouterInterface.name}\n peerIpAddress: 169.254.3.2\n md5AuthenticationKey:\n name: '%s-peer-key'\n key: '%s-peer-key-value'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRouterBgpPeer can be imported using any of these accepted formats:\n\n* `projects/{{project}}/regions/{{region}}/routers/{{router}}/{{name}}`\n\n* `{{project}}/{{region}}/{{router}}/{{name}}`\n\n* `{{region}}/{{router}}/{{name}}`\n\n* `{{router}}/{{name}}`\n\nWhen using the `pulumi import` command, RouterBgpPeer can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/routerPeer:RouterPeer default projects/{{project}}/regions/{{region}}/routers/{{router}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/routerPeer:RouterPeer default {{project}}/{{region}}/{{router}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/routerPeer:RouterPeer default {{region}}/{{router}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/routerPeer:RouterPeer default {{router}}/{{name}}\n```\n\n", "properties": { "advertiseMode": { "type": "string", @@ -155057,7 +155505,7 @@ }, "md5AuthenticationKey": { "$ref": "#/types/gcp:compute/RouterPeerMd5AuthenticationKey:RouterPeerMd5AuthenticationKey", - "description": "Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the\nRouter.md5_authentication_keys. The field must comply with RFC1035.\n" + "description": "Configuration for MD5 authentication on the BGP session.\nStructure is documented below.\n" }, "name": { "type": "string", @@ -155171,7 +155619,7 @@ }, "md5AuthenticationKey": { "$ref": "#/types/gcp:compute/RouterPeerMd5AuthenticationKey:RouterPeerMd5AuthenticationKey", - "description": "Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the\nRouter.md5_authentication_keys. The field must comply with RFC1035.\n" + "description": "Configuration for MD5 authentication on the BGP session.\nStructure is documented below.\n" }, "name": { "type": "string", @@ -155283,7 +155731,7 @@ }, "md5AuthenticationKey": { "$ref": "#/types/gcp:compute/RouterPeerMd5AuthenticationKey:RouterPeerMd5AuthenticationKey", - "description": "Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the\nRouter.md5_authentication_keys. The field must comply with RFC1035.\n" + "description": "Configuration for MD5 authentication on the BGP session.\nStructure is documented below.\n" }, "name": { "type": "string", @@ -165304,7 +165752,7 @@ "additionalProperties": { "$ref": "pulumi.json#/Any" }, - "description": "Key/Value pairs to be passed to the Dataflow job (as\nused in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options)\nsuch as `serviceAccount`, `workerMachineType`, etc can be specified here.\n" + "description": "**Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are\ncase-sensitive based on the language on which the pipeline is coded, mostly Java.\n**Note**: do not configure Dataflow options here in parameters.\n" }, "project": { "type": "string", @@ -165457,7 +165905,7 @@ "additionalProperties": { "$ref": "pulumi.json#/Any" }, - "description": "Key/Value pairs to be passed to the Dataflow job (as\nused in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options)\nsuch as `serviceAccount`, `workerMachineType`, etc can be specified here.\n" + "description": "**Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are\ncase-sensitive based on the language on which the pipeline is coded, mostly Java.\n**Note**: do not configure Dataflow options here in parameters.\n" }, "project": { "type": "string", @@ -165588,7 +166036,7 @@ "additionalProperties": { "$ref": "pulumi.json#/Any" }, - "description": "Key/Value pairs to be passed to the Dataflow job (as\nused in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options)\nsuch as `serviceAccount`, `workerMachineType`, etc can be specified here.\n" + "description": "**Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are\ncase-sensitive based on the language on which the pipeline is coded, mostly Java.\n**Note**: do not configure Dataflow options here in parameters.\n" }, "project": { "type": "string", @@ -165716,7 +166164,7 @@ "additionalProperties": { "$ref": "pulumi.json#/Any" }, - "description": "Key/Value pairs to be passed to the Dataflow job (as used in the template).\n" + "description": "**Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are\ncase-sensitive based on the language on which the pipeline is coded, mostly Java.\n**Note**: do not configure Dataflow options here in parameters.\n" }, "project": { "type": "string", @@ -165840,7 +166288,7 @@ "additionalProperties": { "$ref": "pulumi.json#/Any" }, - "description": "Key/Value pairs to be passed to the Dataflow job (as used in the template).\n" + "description": "**Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are\ncase-sensitive based on the language on which the pipeline is coded, mostly Java.\n**Note**: do not configure Dataflow options here in parameters.\n" }, "project": { "type": "string", @@ -165957,7 +166405,7 @@ "additionalProperties": { "$ref": "pulumi.json#/Any" }, - "description": "Key/Value pairs to be passed to the Dataflow job (as used in the template).\n" + "description": "**Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are\ncase-sensitive based on the language on which the pipeline is coded, mostly Java.\n**Note**: do not configure Dataflow options here in parameters.\n" }, "project": { "type": "string", @@ -180765,7 +181213,7 @@ } }, "gcp:essentialcontacts/documentAiWarehouseDocumentSchema:DocumentAiWarehouseDocumentSchema": { - "description": "A document schema is used to define document structure.\n\n\nTo get more information about DocumentSchema, see:\n\n* [API documentation](https://cloud.google.com/document-warehouse/docs/reference/rest/v1/projects.locations.documentSchemas)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/document-warehouse/docs/manage-document-schemas)\n\n## Example Usage\n\n### Document Ai Warehouse Document Schema Text\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst exampleText = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_text\", {\n projectNumber: project.then(project =\u003e project.number),\n displayName: \"test-property-text\",\n location: \"us\",\n documentIsFolder: false,\n propertyDefinitions: [{\n name: \"prop3\",\n displayName: \"propdisp3\",\n isRepeatable: false,\n isFilterable: true,\n isSearchable: true,\n isMetadata: false,\n isRequired: false,\n retrievalImportance: \"HIGHEST\",\n schemaSources: [{\n name: \"dummy_source\",\n processorType: \"dummy_processor\",\n }],\n textTypeOptions: {},\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_text = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_text\",\n project_number=project.number,\n display_name=\"test-property-text\",\n location=\"us\",\n document_is_folder=False,\n property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs(\n name=\"prop3\",\n display_name=\"propdisp3\",\n is_repeatable=False,\n is_filterable=True,\n is_searchable=True,\n is_metadata=False,\n is_required=False,\n retrieval_importance=\"HIGHEST\",\n schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs(\n name=\"dummy_source\",\n processor_type=\"dummy_processor\",\n )],\n text_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionTextTypeOptionsArgs(),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleText = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema(\"example_text\", new()\n {\n ProjectNumber = project.Apply(getProjectResult =\u003e getProjectResult.Number),\n DisplayName = \"test-property-text\",\n Location = \"us\",\n DocumentIsFolder = false,\n PropertyDefinitions = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs\n {\n Name = \"prop3\",\n DisplayName = \"propdisp3\",\n IsRepeatable = false,\n IsFilterable = true,\n IsSearchable = true,\n IsMetadata = false,\n IsRequired = false,\n RetrievalImportance = \"HIGHEST\",\n SchemaSources = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs\n {\n Name = \"dummy_source\",\n ProcessorType = \"dummy_processor\",\n },\n },\n TextTypeOptions = null,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, \"example_text\", \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{\n\t\t\tProjectNumber: pulumi.String(project.Number),\n\t\t\tDisplayName: pulumi.String(\"test-property-text\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tDocumentIsFolder: pulumi.Bool(false),\n\t\t\tPropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{\n\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{\n\t\t\t\t\tName: pulumi.String(\"prop3\"),\n\t\t\t\t\tDisplayName: pulumi.String(\"propdisp3\"),\n\t\t\t\t\tIsRepeatable: pulumi.Bool(false),\n\t\t\t\t\tIsFilterable: pulumi.Bool(true),\n\t\t\t\t\tIsSearchable: pulumi.Bool(true),\n\t\t\t\t\tIsMetadata: pulumi.Bool(false),\n\t\t\t\t\tIsRequired: pulumi.Bool(false),\n\t\t\t\t\tRetrievalImportance: pulumi.String(\"HIGHEST\"),\n\t\t\t\t\tSchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{\n\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"dummy_source\"),\n\t\t\t\t\t\t\tProcessorType: pulumi.String(\"dummy_processor\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tTextTypeOptions: nil,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionTextTypeOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var exampleText = new DocumentAiWarehouseDocumentSchema(\"exampleText\", DocumentAiWarehouseDocumentSchemaArgs.builder() \n .projectNumber(project.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .displayName(\"test-property-text\")\n .location(\"us\")\n .documentIsFolder(false)\n .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()\n .name(\"prop3\")\n .displayName(\"propdisp3\")\n .isRepeatable(false)\n .isFilterable(true)\n .isSearchable(true)\n .isMetadata(false)\n .isRequired(false)\n .retrievalImportance(\"HIGHEST\")\n .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()\n .name(\"dummy_source\")\n .processorType(\"dummy_processor\")\n .build())\n .textTypeOptions()\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleText:\n type: gcp:essentialcontacts:DocumentAiWarehouseDocumentSchema\n name: example_text\n properties:\n projectNumber: ${project.number}\n displayName: test-property-text\n location: us\n documentIsFolder: false\n propertyDefinitions:\n - name: prop3\n displayName: propdisp3\n isRepeatable: false\n isFilterable: true\n isSearchable: true\n isMetadata: false\n isRequired: false\n retrievalImportance: HIGHEST\n schemaSources:\n - name: dummy_source\n processorType: dummy_processor\n textTypeOptions: {}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Document Ai Warehouse Document Schema Integer\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst exampleInteger = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_integer\", {\n projectNumber: project.then(project =\u003e project.number),\n displayName: \"test-property-integer\",\n location: \"us\",\n propertyDefinitions: [{\n name: \"prop1\",\n displayName: \"propdisp1\",\n isRepeatable: false,\n isFilterable: true,\n isSearchable: true,\n isMetadata: false,\n isRequired: false,\n retrievalImportance: \"HIGHEST\",\n schemaSources: [{\n name: \"dummy_source\",\n processorType: \"dummy_processor\",\n }],\n integerTypeOptions: {},\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_integer = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_integer\",\n project_number=project.number,\n display_name=\"test-property-integer\",\n location=\"us\",\n property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs(\n name=\"prop1\",\n display_name=\"propdisp1\",\n is_repeatable=False,\n is_filterable=True,\n is_searchable=True,\n is_metadata=False,\n is_required=False,\n retrieval_importance=\"HIGHEST\",\n schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs(\n name=\"dummy_source\",\n processor_type=\"dummy_processor\",\n )],\n integer_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionIntegerTypeOptionsArgs(),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleInteger = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema(\"example_integer\", new()\n {\n ProjectNumber = project.Apply(getProjectResult =\u003e getProjectResult.Number),\n DisplayName = \"test-property-integer\",\n Location = \"us\",\n PropertyDefinitions = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs\n {\n Name = \"prop1\",\n DisplayName = \"propdisp1\",\n IsRepeatable = false,\n IsFilterable = true,\n IsSearchable = true,\n IsMetadata = false,\n IsRequired = false,\n RetrievalImportance = \"HIGHEST\",\n SchemaSources = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs\n {\n Name = \"dummy_source\",\n ProcessorType = \"dummy_processor\",\n },\n },\n IntegerTypeOptions = null,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, \"example_integer\", \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{\n\t\t\tProjectNumber: pulumi.String(project.Number),\n\t\t\tDisplayName: pulumi.String(\"test-property-integer\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tPropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{\n\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{\n\t\t\t\t\tName: pulumi.String(\"prop1\"),\n\t\t\t\t\tDisplayName: pulumi.String(\"propdisp1\"),\n\t\t\t\t\tIsRepeatable: pulumi.Bool(false),\n\t\t\t\t\tIsFilterable: pulumi.Bool(true),\n\t\t\t\t\tIsSearchable: pulumi.Bool(true),\n\t\t\t\t\tIsMetadata: pulumi.Bool(false),\n\t\t\t\t\tIsRequired: pulumi.Bool(false),\n\t\t\t\t\tRetrievalImportance: pulumi.String(\"HIGHEST\"),\n\t\t\t\t\tSchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{\n\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"dummy_source\"),\n\t\t\t\t\t\t\tProcessorType: pulumi.String(\"dummy_processor\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tIntegerTypeOptions: nil,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionIntegerTypeOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var exampleInteger = new DocumentAiWarehouseDocumentSchema(\"exampleInteger\", DocumentAiWarehouseDocumentSchemaArgs.builder() \n .projectNumber(project.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .displayName(\"test-property-integer\")\n .location(\"us\")\n .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()\n .name(\"prop1\")\n .displayName(\"propdisp1\")\n .isRepeatable(false)\n .isFilterable(true)\n .isSearchable(true)\n .isMetadata(false)\n .isRequired(false)\n .retrievalImportance(\"HIGHEST\")\n .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()\n .name(\"dummy_source\")\n .processorType(\"dummy_processor\")\n .build())\n .integerTypeOptions()\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleInteger:\n type: gcp:essentialcontacts:DocumentAiWarehouseDocumentSchema\n name: example_integer\n properties:\n projectNumber: ${project.number}\n displayName: test-property-integer\n location: us\n propertyDefinitions:\n - name: prop1\n displayName: propdisp1\n isRepeatable: false\n isFilterable: true\n isSearchable: true\n isMetadata: false\n isRequired: false\n retrievalImportance: HIGHEST\n schemaSources:\n - name: dummy_source\n processorType: dummy_processor\n integerTypeOptions: {}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Document Ai Warehouse Document Schema Float\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst exampleFloat = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_float\", {\n projectNumber: project.then(project =\u003e project.number),\n displayName: \"test-property-float\",\n location: \"us\",\n propertyDefinitions: [{\n name: \"prop2\",\n displayName: \"propdisp2\",\n isRepeatable: false,\n isFilterable: true,\n isSearchable: true,\n isMetadata: false,\n isRequired: false,\n retrievalImportance: \"HIGHEST\",\n schemaSources: [{\n name: \"dummy_source\",\n processorType: \"dummy_processor\",\n }],\n floatTypeOptions: {},\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_float = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_float\",\n project_number=project.number,\n display_name=\"test-property-float\",\n location=\"us\",\n property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs(\n name=\"prop2\",\n display_name=\"propdisp2\",\n is_repeatable=False,\n is_filterable=True,\n is_searchable=True,\n is_metadata=False,\n is_required=False,\n retrieval_importance=\"HIGHEST\",\n schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs(\n name=\"dummy_source\",\n processor_type=\"dummy_processor\",\n )],\n float_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionFloatTypeOptionsArgs(),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleFloat = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema(\"example_float\", new()\n {\n ProjectNumber = project.Apply(getProjectResult =\u003e getProjectResult.Number),\n DisplayName = \"test-property-float\",\n Location = \"us\",\n PropertyDefinitions = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs\n {\n Name = \"prop2\",\n DisplayName = \"propdisp2\",\n IsRepeatable = false,\n IsFilterable = true,\n IsSearchable = true,\n IsMetadata = false,\n IsRequired = false,\n RetrievalImportance = \"HIGHEST\",\n SchemaSources = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs\n {\n Name = \"dummy_source\",\n ProcessorType = \"dummy_processor\",\n },\n },\n FloatTypeOptions = null,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, \"example_float\", \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{\n\t\t\tProjectNumber: pulumi.String(project.Number),\n\t\t\tDisplayName: pulumi.String(\"test-property-float\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tPropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{\n\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{\n\t\t\t\t\tName: pulumi.String(\"prop2\"),\n\t\t\t\t\tDisplayName: pulumi.String(\"propdisp2\"),\n\t\t\t\t\tIsRepeatable: pulumi.Bool(false),\n\t\t\t\t\tIsFilterable: pulumi.Bool(true),\n\t\t\t\t\tIsSearchable: pulumi.Bool(true),\n\t\t\t\t\tIsMetadata: pulumi.Bool(false),\n\t\t\t\t\tIsRequired: pulumi.Bool(false),\n\t\t\t\t\tRetrievalImportance: pulumi.String(\"HIGHEST\"),\n\t\t\t\t\tSchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{\n\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"dummy_source\"),\n\t\t\t\t\t\t\tProcessorType: pulumi.String(\"dummy_processor\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tFloatTypeOptions: nil,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionFloatTypeOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var exampleFloat = new DocumentAiWarehouseDocumentSchema(\"exampleFloat\", DocumentAiWarehouseDocumentSchemaArgs.builder() \n .projectNumber(project.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .displayName(\"test-property-float\")\n .location(\"us\")\n .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()\n .name(\"prop2\")\n .displayName(\"propdisp2\")\n .isRepeatable(false)\n .isFilterable(true)\n .isSearchable(true)\n .isMetadata(false)\n .isRequired(false)\n .retrievalImportance(\"HIGHEST\")\n .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()\n .name(\"dummy_source\")\n .processorType(\"dummy_processor\")\n .build())\n .floatTypeOptions()\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleFloat:\n type: gcp:essentialcontacts:DocumentAiWarehouseDocumentSchema\n name: example_float\n properties:\n projectNumber: ${project.number}\n displayName: test-property-float\n location: us\n propertyDefinitions:\n - name: prop2\n displayName: propdisp2\n isRepeatable: false\n isFilterable: true\n isSearchable: true\n isMetadata: false\n isRequired: false\n retrievalImportance: HIGHEST\n schemaSources:\n - name: dummy_source\n processorType: dummy_processor\n floatTypeOptions: {}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Document Ai Warehouse Document Schema Property\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst exampleProperty = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_property\", {\n projectNumber: project.then(project =\u003e project.number),\n displayName: \"test-property-property\",\n location: \"us\",\n documentIsFolder: false,\n propertyDefinitions: [{\n name: \"prop8\",\n displayName: \"propdisp8\",\n isRepeatable: false,\n isFilterable: true,\n isSearchable: true,\n isMetadata: false,\n isRequired: false,\n retrievalImportance: \"HIGHEST\",\n schemaSources: [{\n name: \"dummy_source\",\n processorType: \"dummy_processor\",\n }],\n propertyTypeOptions: {\n propertyDefinitions: [{\n name: \"prop8_nested\",\n displayName: \"propdisp8_nested\",\n isRepeatable: false,\n isFilterable: true,\n isSearchable: true,\n isMetadata: false,\n isRequired: false,\n retrievalImportance: \"HIGHEST\",\n schemaSources: [{\n name: \"dummy_source_nested\",\n processorType: \"dummy_processor_nested\",\n }],\n textTypeOptions: {},\n }],\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_property = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_property\",\n project_number=project.number,\n display_name=\"test-property-property\",\n location=\"us\",\n document_is_folder=False,\n property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs(\n name=\"prop8\",\n display_name=\"propdisp8\",\n is_repeatable=False,\n is_filterable=True,\n is_searchable=True,\n is_metadata=False,\n is_required=False,\n retrieval_importance=\"HIGHEST\",\n schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs(\n name=\"dummy_source\",\n processor_type=\"dummy_processor\",\n )],\n property_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs(\n property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs(\n name=\"prop8_nested\",\n display_name=\"propdisp8_nested\",\n is_repeatable=False,\n is_filterable=True,\n is_searchable=True,\n is_metadata=False,\n is_required=False,\n retrieval_importance=\"HIGHEST\",\n schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs(\n name=\"dummy_source_nested\",\n processor_type=\"dummy_processor_nested\",\n )],\n text_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionTextTypeOptionsArgs(),\n )],\n ),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleProperty = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema(\"example_property\", new()\n {\n ProjectNumber = project.Apply(getProjectResult =\u003e getProjectResult.Number),\n DisplayName = \"test-property-property\",\n Location = \"us\",\n DocumentIsFolder = false,\n PropertyDefinitions = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs\n {\n Name = \"prop8\",\n DisplayName = \"propdisp8\",\n IsRepeatable = false,\n IsFilterable = true,\n IsSearchable = true,\n IsMetadata = false,\n IsRequired = false,\n RetrievalImportance = \"HIGHEST\",\n SchemaSources = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs\n {\n Name = \"dummy_source\",\n ProcessorType = \"dummy_processor\",\n },\n },\n PropertyTypeOptions = new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs\n {\n PropertyDefinitions = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs\n {\n Name = \"prop8_nested\",\n DisplayName = \"propdisp8_nested\",\n IsRepeatable = false,\n IsFilterable = true,\n IsSearchable = true,\n IsMetadata = false,\n IsRequired = false,\n RetrievalImportance = \"HIGHEST\",\n SchemaSources = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs\n {\n Name = \"dummy_source_nested\",\n ProcessorType = \"dummy_processor_nested\",\n },\n },\n TextTypeOptions = null,\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/essentialcontacts\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, \"example_property\", \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{\n\t\t\tProjectNumber: pulumi.String(project.Number),\n\t\t\tDisplayName: pulumi.String(\"test-property-property\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tDocumentIsFolder: pulumi.Bool(false),\n\t\t\tPropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{\n\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{\n\t\t\t\t\tName: pulumi.String(\"prop8\"),\n\t\t\t\t\tDisplayName: pulumi.String(\"propdisp8\"),\n\t\t\t\t\tIsRepeatable: pulumi.Bool(false),\n\t\t\t\t\tIsFilterable: pulumi.Bool(true),\n\t\t\t\t\tIsSearchable: pulumi.Bool(true),\n\t\t\t\t\tIsMetadata: pulumi.Bool(false),\n\t\t\t\t\tIsRequired: pulumi.Bool(false),\n\t\t\t\t\tRetrievalImportance: pulumi.String(\"HIGHEST\"),\n\t\t\t\t\tSchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{\n\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"dummy_source\"),\n\t\t\t\t\t\t\tProcessorType: pulumi.String(\"dummy_processor\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPropertyTypeOptions: \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs{\n\t\t\t\t\t\tPropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArray{\n\t\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"prop8_nested\"),\n\t\t\t\t\t\t\t\tDisplayName: pulumi.String(\"propdisp8_nested\"),\n\t\t\t\t\t\t\t\tIsRepeatable: pulumi.Bool(false),\n\t\t\t\t\t\t\t\tIsFilterable: pulumi.Bool(true),\n\t\t\t\t\t\t\t\tIsSearchable: pulumi.Bool(true),\n\t\t\t\t\t\t\t\tIsMetadata: pulumi.Bool(false),\n\t\t\t\t\t\t\t\tIsRequired: pulumi.Bool(false),\n\t\t\t\t\t\t\t\tRetrievalImportance: pulumi.String(\"HIGHEST\"),\n\t\t\t\t\t\t\t\tSchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArray{\n\t\t\t\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs{\n\t\t\t\t\t\t\t\t\t\tName: pulumi.String(\"dummy_source_nested\"),\n\t\t\t\t\t\t\t\t\t\tProcessorType: pulumi.String(\"dummy_processor_nested\"),\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\tTextTypeOptions: nil,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var exampleProperty = new DocumentAiWarehouseDocumentSchema(\"exampleProperty\", DocumentAiWarehouseDocumentSchemaArgs.builder() \n .projectNumber(project.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .displayName(\"test-property-property\")\n .location(\"us\")\n .documentIsFolder(false)\n .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()\n .name(\"prop8\")\n .displayName(\"propdisp8\")\n .isRepeatable(false)\n .isFilterable(true)\n .isSearchable(true)\n .isMetadata(false)\n .isRequired(false)\n .retrievalImportance(\"HIGHEST\")\n .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()\n .name(\"dummy_source\")\n .processorType(\"dummy_processor\")\n .build())\n .propertyTypeOptions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs.builder()\n .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs.builder()\n .name(\"prop8_nested\")\n .displayName(\"propdisp8_nested\")\n .isRepeatable(false)\n .isFilterable(true)\n .isSearchable(true)\n .isMetadata(false)\n .isRequired(false)\n .retrievalImportance(\"HIGHEST\")\n .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs.builder()\n .name(\"dummy_source_nested\")\n .processorType(\"dummy_processor_nested\")\n .build())\n .textTypeOptions()\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleProperty:\n type: gcp:essentialcontacts:DocumentAiWarehouseDocumentSchema\n name: example_property\n properties:\n projectNumber: ${project.number}\n displayName: test-property-property\n location: us\n documentIsFolder: false\n propertyDefinitions:\n - name: prop8\n displayName: propdisp8\n isRepeatable: false\n isFilterable: true\n isSearchable: true\n isMetadata: false\n isRequired: false\n retrievalImportance: HIGHEST\n schemaSources:\n - name: dummy_source\n processorType: dummy_processor\n propertyTypeOptions:\n propertyDefinitions:\n - name: prop8_nested\n displayName: propdisp8_nested\n isRepeatable: false\n isFilterable: true\n isSearchable: true\n isMetadata: false\n isRequired: false\n retrievalImportance: HIGHEST\n schemaSources:\n - name: dummy_source_nested\n processorType: dummy_processor_nested\n textTypeOptions: {}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Document Ai Warehouse Document Schema Property Enum\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst examplePropertyEnum = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_property_enum\", {\n projectNumber: project.then(project =\u003e project.number),\n displayName: \"test-property-property\",\n location: \"us\",\n documentIsFolder: false,\n propertyDefinitions: [{\n name: \"prop8\",\n displayName: \"propdisp8\",\n isRepeatable: false,\n isFilterable: true,\n isSearchable: true,\n isMetadata: false,\n isRequired: false,\n retrievalImportance: \"HIGHEST\",\n schemaSources: [{\n name: \"dummy_source\",\n processorType: \"dummy_processor\",\n }],\n propertyTypeOptions: {\n propertyDefinitions: [{\n name: \"prop8_nested\",\n displayName: \"propdisp8_nested\",\n isRepeatable: false,\n isFilterable: true,\n isSearchable: true,\n isMetadata: false,\n isRequired: false,\n retrievalImportance: \"HIGHEST\",\n schemaSources: [{\n name: \"dummy_source_nested\",\n processorType: \"dummy_processor_nested\",\n }],\n enumTypeOptions: {\n possibleValues: [\n \"M\",\n \"F\",\n \"X\",\n ],\n validationCheckDisabled: false,\n },\n }],\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_property_enum = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_property_enum\",\n project_number=project.number,\n display_name=\"test-property-property\",\n location=\"us\",\n document_is_folder=False,\n property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs(\n name=\"prop8\",\n display_name=\"propdisp8\",\n is_repeatable=False,\n is_filterable=True,\n is_searchable=True,\n is_metadata=False,\n is_required=False,\n retrieval_importance=\"HIGHEST\",\n schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs(\n name=\"dummy_source\",\n processor_type=\"dummy_processor\",\n )],\n property_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs(\n property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs(\n name=\"prop8_nested\",\n display_name=\"propdisp8_nested\",\n is_repeatable=False,\n is_filterable=True,\n is_searchable=True,\n is_metadata=False,\n is_required=False,\n retrieval_importance=\"HIGHEST\",\n schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs(\n name=\"dummy_source_nested\",\n processor_type=\"dummy_processor_nested\",\n )],\n enum_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionEnumTypeOptionsArgs(\n possible_values=[\n \"M\",\n \"F\",\n \"X\",\n ],\n validation_check_disabled=False,\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 project = Gcp.Organizations.GetProject.Invoke();\n\n var examplePropertyEnum = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema(\"example_property_enum\", new()\n {\n ProjectNumber = project.Apply(getProjectResult =\u003e getProjectResult.Number),\n DisplayName = \"test-property-property\",\n Location = \"us\",\n DocumentIsFolder = false,\n PropertyDefinitions = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs\n {\n Name = \"prop8\",\n DisplayName = \"propdisp8\",\n IsRepeatable = false,\n IsFilterable = true,\n IsSearchable = true,\n IsMetadata = false,\n IsRequired = false,\n RetrievalImportance = \"HIGHEST\",\n SchemaSources = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs\n {\n Name = \"dummy_source\",\n ProcessorType = \"dummy_processor\",\n },\n },\n PropertyTypeOptions = new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs\n {\n PropertyDefinitions = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs\n {\n Name = \"prop8_nested\",\n DisplayName = \"propdisp8_nested\",\n IsRepeatable = false,\n IsFilterable = true,\n IsSearchable = true,\n IsMetadata = false,\n IsRequired = false,\n RetrievalImportance = \"HIGHEST\",\n SchemaSources = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs\n {\n Name = \"dummy_source_nested\",\n ProcessorType = \"dummy_processor_nested\",\n },\n },\n EnumTypeOptions = new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionEnumTypeOptionsArgs\n {\n PossibleValues = new[]\n {\n \"M\",\n \"F\",\n \"X\",\n },\n ValidationCheckDisabled = false,\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, \"example_property_enum\", \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{\n\t\t\tProjectNumber: pulumi.String(project.Number),\n\t\t\tDisplayName: pulumi.String(\"test-property-property\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tDocumentIsFolder: pulumi.Bool(false),\n\t\t\tPropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{\n\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{\n\t\t\t\t\tName: pulumi.String(\"prop8\"),\n\t\t\t\t\tDisplayName: pulumi.String(\"propdisp8\"),\n\t\t\t\t\tIsRepeatable: pulumi.Bool(false),\n\t\t\t\t\tIsFilterable: pulumi.Bool(true),\n\t\t\t\t\tIsSearchable: pulumi.Bool(true),\n\t\t\t\t\tIsMetadata: pulumi.Bool(false),\n\t\t\t\t\tIsRequired: pulumi.Bool(false),\n\t\t\t\t\tRetrievalImportance: pulumi.String(\"HIGHEST\"),\n\t\t\t\t\tSchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{\n\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"dummy_source\"),\n\t\t\t\t\t\t\tProcessorType: pulumi.String(\"dummy_processor\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPropertyTypeOptions: \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs{\n\t\t\t\t\t\tPropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArray{\n\t\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"prop8_nested\"),\n\t\t\t\t\t\t\t\tDisplayName: pulumi.String(\"propdisp8_nested\"),\n\t\t\t\t\t\t\t\tIsRepeatable: pulumi.Bool(false),\n\t\t\t\t\t\t\t\tIsFilterable: pulumi.Bool(true),\n\t\t\t\t\t\t\t\tIsSearchable: pulumi.Bool(true),\n\t\t\t\t\t\t\t\tIsMetadata: pulumi.Bool(false),\n\t\t\t\t\t\t\t\tIsRequired: pulumi.Bool(false),\n\t\t\t\t\t\t\t\tRetrievalImportance: pulumi.String(\"HIGHEST\"),\n\t\t\t\t\t\t\t\tSchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArray{\n\t\t\t\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs{\n\t\t\t\t\t\t\t\t\t\tName: pulumi.String(\"dummy_source_nested\"),\n\t\t\t\t\t\t\t\t\t\tProcessorType: pulumi.String(\"dummy_processor_nested\"),\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\tEnumTypeOptions: \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionEnumTypeOptionsArgs{\n\t\t\t\t\t\t\t\t\tPossibleValues: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"M\"),\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"F\"),\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"X\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tValidationCheckDisabled: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var examplePropertyEnum = new DocumentAiWarehouseDocumentSchema(\"examplePropertyEnum\", DocumentAiWarehouseDocumentSchemaArgs.builder() \n .projectNumber(project.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .displayName(\"test-property-property\")\n .location(\"us\")\n .documentIsFolder(false)\n .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()\n .name(\"prop8\")\n .displayName(\"propdisp8\")\n .isRepeatable(false)\n .isFilterable(true)\n .isSearchable(true)\n .isMetadata(false)\n .isRequired(false)\n .retrievalImportance(\"HIGHEST\")\n .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()\n .name(\"dummy_source\")\n .processorType(\"dummy_processor\")\n .build())\n .propertyTypeOptions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs.builder()\n .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs.builder()\n .name(\"prop8_nested\")\n .displayName(\"propdisp8_nested\")\n .isRepeatable(false)\n .isFilterable(true)\n .isSearchable(true)\n .isMetadata(false)\n .isRequired(false)\n .retrievalImportance(\"HIGHEST\")\n .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs.builder()\n .name(\"dummy_source_nested\")\n .processorType(\"dummy_processor_nested\")\n .build())\n .enumTypeOptions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionEnumTypeOptionsArgs.builder()\n .possibleValues( \n \"M\",\n \"F\",\n \"X\")\n .validationCheckDisabled(false)\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n examplePropertyEnum:\n type: gcp:essentialcontacts:DocumentAiWarehouseDocumentSchema\n name: example_property_enum\n properties:\n projectNumber: ${project.number}\n displayName: test-property-property\n location: us\n documentIsFolder: false\n propertyDefinitions:\n - name: prop8\n displayName: propdisp8\n isRepeatable: false\n isFilterable: true\n isSearchable: true\n isMetadata: false\n isRequired: false\n retrievalImportance: HIGHEST\n schemaSources:\n - name: dummy_source\n processorType: dummy_processor\n propertyTypeOptions:\n propertyDefinitions:\n - name: prop8_nested\n displayName: propdisp8_nested\n isRepeatable: false\n isFilterable: true\n isSearchable: true\n isMetadata: false\n isRequired: false\n retrievalImportance: HIGHEST\n schemaSources:\n - name: dummy_source_nested\n processorType: dummy_processor_nested\n enumTypeOptions:\n possibleValues:\n - M\n - F\n - X\n validationCheckDisabled: false\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Document Ai Warehouse Document Schema Enum\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst exampleEnum = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_enum\", {\n projectNumber: project.then(project =\u003e project.number),\n displayName: \"test-property-enum\",\n location: \"us\",\n propertyDefinitions: [{\n name: \"prop6\",\n displayName: \"propdisp6\",\n isRepeatable: false,\n isFilterable: true,\n isSearchable: true,\n isMetadata: false,\n isRequired: false,\n retrievalImportance: \"HIGHEST\",\n schemaSources: [{\n name: \"dummy_source\",\n processorType: \"dummy_processor\",\n }],\n enumTypeOptions: {\n possibleValues: [\n \"M\",\n \"F\",\n \"X\",\n ],\n validationCheckDisabled: false,\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_enum = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_enum\",\n project_number=project.number,\n display_name=\"test-property-enum\",\n location=\"us\",\n property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs(\n name=\"prop6\",\n display_name=\"propdisp6\",\n is_repeatable=False,\n is_filterable=True,\n is_searchable=True,\n is_metadata=False,\n is_required=False,\n retrieval_importance=\"HIGHEST\",\n schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs(\n name=\"dummy_source\",\n processor_type=\"dummy_processor\",\n )],\n enum_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionEnumTypeOptionsArgs(\n possible_values=[\n \"M\",\n \"F\",\n \"X\",\n ],\n validation_check_disabled=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 project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleEnum = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema(\"example_enum\", new()\n {\n ProjectNumber = project.Apply(getProjectResult =\u003e getProjectResult.Number),\n DisplayName = \"test-property-enum\",\n Location = \"us\",\n PropertyDefinitions = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs\n {\n Name = \"prop6\",\n DisplayName = \"propdisp6\",\n IsRepeatable = false,\n IsFilterable = true,\n IsSearchable = true,\n IsMetadata = false,\n IsRequired = false,\n RetrievalImportance = \"HIGHEST\",\n SchemaSources = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs\n {\n Name = \"dummy_source\",\n ProcessorType = \"dummy_processor\",\n },\n },\n EnumTypeOptions = new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionEnumTypeOptionsArgs\n {\n PossibleValues = new[]\n {\n \"M\",\n \"F\",\n \"X\",\n },\n ValidationCheckDisabled = 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/essentialcontacts\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, \"example_enum\", \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{\n\t\t\tProjectNumber: pulumi.String(project.Number),\n\t\t\tDisplayName: pulumi.String(\"test-property-enum\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tPropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{\n\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{\n\t\t\t\t\tName: pulumi.String(\"prop6\"),\n\t\t\t\t\tDisplayName: pulumi.String(\"propdisp6\"),\n\t\t\t\t\tIsRepeatable: pulumi.Bool(false),\n\t\t\t\t\tIsFilterable: pulumi.Bool(true),\n\t\t\t\t\tIsSearchable: pulumi.Bool(true),\n\t\t\t\t\tIsMetadata: pulumi.Bool(false),\n\t\t\t\t\tIsRequired: pulumi.Bool(false),\n\t\t\t\t\tRetrievalImportance: pulumi.String(\"HIGHEST\"),\n\t\t\t\t\tSchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{\n\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"dummy_source\"),\n\t\t\t\t\t\t\tProcessorType: pulumi.String(\"dummy_processor\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tEnumTypeOptions: \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionEnumTypeOptionsArgs{\n\t\t\t\t\t\tPossibleValues: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"M\"),\n\t\t\t\t\t\t\tpulumi.String(\"F\"),\n\t\t\t\t\t\t\tpulumi.String(\"X\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tValidationCheckDisabled: 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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionEnumTypeOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var exampleEnum = new DocumentAiWarehouseDocumentSchema(\"exampleEnum\", DocumentAiWarehouseDocumentSchemaArgs.builder() \n .projectNumber(project.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .displayName(\"test-property-enum\")\n .location(\"us\")\n .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()\n .name(\"prop6\")\n .displayName(\"propdisp6\")\n .isRepeatable(false)\n .isFilterable(true)\n .isSearchable(true)\n .isMetadata(false)\n .isRequired(false)\n .retrievalImportance(\"HIGHEST\")\n .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()\n .name(\"dummy_source\")\n .processorType(\"dummy_processor\")\n .build())\n .enumTypeOptions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionEnumTypeOptionsArgs.builder()\n .possibleValues( \n \"M\",\n \"F\",\n \"X\")\n .validationCheckDisabled(false)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleEnum:\n type: gcp:essentialcontacts:DocumentAiWarehouseDocumentSchema\n name: example_enum\n properties:\n projectNumber: ${project.number}\n displayName: test-property-enum\n location: us\n propertyDefinitions:\n - name: prop6\n displayName: propdisp6\n isRepeatable: false\n isFilterable: true\n isSearchable: true\n isMetadata: false\n isRequired: false\n retrievalImportance: HIGHEST\n schemaSources:\n - name: dummy_source\n processorType: dummy_processor\n enumTypeOptions:\n possibleValues:\n - M\n - F\n - X\n validationCheckDisabled: false\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Document Ai Warehouse Document Schema Map\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst exampleMap = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_map\", {\n projectNumber: project.then(project =\u003e project.number),\n displayName: \"test-property-map\",\n location: \"us\",\n propertyDefinitions: [{\n name: \"prop4\",\n displayName: \"propdisp4\",\n isRepeatable: false,\n isFilterable: true,\n isSearchable: true,\n isMetadata: false,\n isRequired: false,\n retrievalImportance: \"HIGHEST\",\n schemaSources: [{\n name: \"dummy_source\",\n processorType: \"dummy_processor\",\n }],\n mapTypeOptions: {},\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_map = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_map\",\n project_number=project.number,\n display_name=\"test-property-map\",\n location=\"us\",\n property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs(\n name=\"prop4\",\n display_name=\"propdisp4\",\n is_repeatable=False,\n is_filterable=True,\n is_searchable=True,\n is_metadata=False,\n is_required=False,\n retrieval_importance=\"HIGHEST\",\n schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs(\n name=\"dummy_source\",\n processor_type=\"dummy_processor\",\n )],\n map_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionMapTypeOptionsArgs(),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleMap = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema(\"example_map\", new()\n {\n ProjectNumber = project.Apply(getProjectResult =\u003e getProjectResult.Number),\n DisplayName = \"test-property-map\",\n Location = \"us\",\n PropertyDefinitions = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs\n {\n Name = \"prop4\",\n DisplayName = \"propdisp4\",\n IsRepeatable = false,\n IsFilterable = true,\n IsSearchable = true,\n IsMetadata = false,\n IsRequired = false,\n RetrievalImportance = \"HIGHEST\",\n SchemaSources = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs\n {\n Name = \"dummy_source\",\n ProcessorType = \"dummy_processor\",\n },\n },\n MapTypeOptions = null,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, \"example_map\", \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{\n\t\t\tProjectNumber: pulumi.String(project.Number),\n\t\t\tDisplayName: pulumi.String(\"test-property-map\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tPropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{\n\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{\n\t\t\t\t\tName: pulumi.String(\"prop4\"),\n\t\t\t\t\tDisplayName: pulumi.String(\"propdisp4\"),\n\t\t\t\t\tIsRepeatable: pulumi.Bool(false),\n\t\t\t\t\tIsFilterable: pulumi.Bool(true),\n\t\t\t\t\tIsSearchable: pulumi.Bool(true),\n\t\t\t\t\tIsMetadata: pulumi.Bool(false),\n\t\t\t\t\tIsRequired: pulumi.Bool(false),\n\t\t\t\t\tRetrievalImportance: pulumi.String(\"HIGHEST\"),\n\t\t\t\t\tSchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{\n\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"dummy_source\"),\n\t\t\t\t\t\t\tProcessorType: pulumi.String(\"dummy_processor\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tMapTypeOptions: nil,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionMapTypeOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var exampleMap = new DocumentAiWarehouseDocumentSchema(\"exampleMap\", DocumentAiWarehouseDocumentSchemaArgs.builder() \n .projectNumber(project.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .displayName(\"test-property-map\")\n .location(\"us\")\n .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()\n .name(\"prop4\")\n .displayName(\"propdisp4\")\n .isRepeatable(false)\n .isFilterable(true)\n .isSearchable(true)\n .isMetadata(false)\n .isRequired(false)\n .retrievalImportance(\"HIGHEST\")\n .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()\n .name(\"dummy_source\")\n .processorType(\"dummy_processor\")\n .build())\n .mapTypeOptions()\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleMap:\n type: gcp:essentialcontacts:DocumentAiWarehouseDocumentSchema\n name: example_map\n properties:\n projectNumber: ${project.number}\n displayName: test-property-map\n location: us\n propertyDefinitions:\n - name: prop4\n displayName: propdisp4\n isRepeatable: false\n isFilterable: true\n isSearchable: true\n isMetadata: false\n isRequired: false\n retrievalImportance: HIGHEST\n schemaSources:\n - name: dummy_source\n processorType: dummy_processor\n mapTypeOptions: {}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Document Ai Warehouse Document Schema Datetime\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst exampleDatetime = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_datetime\", {\n projectNumber: project.then(project =\u003e project.number),\n displayName: \"test-property-date_time\",\n location: \"us\",\n propertyDefinitions: [{\n name: \"prop7\",\n displayName: \"propdisp7\",\n isRepeatable: false,\n isFilterable: true,\n isSearchable: true,\n isMetadata: false,\n isRequired: false,\n retrievalImportance: \"HIGHEST\",\n schemaSources: [{\n name: \"dummy_source\",\n processorType: \"dummy_processor\",\n }],\n dateTimeTypeOptions: {},\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_datetime = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_datetime\",\n project_number=project.number,\n display_name=\"test-property-date_time\",\n location=\"us\",\n property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs(\n name=\"prop7\",\n display_name=\"propdisp7\",\n is_repeatable=False,\n is_filterable=True,\n is_searchable=True,\n is_metadata=False,\n is_required=False,\n retrieval_importance=\"HIGHEST\",\n schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs(\n name=\"dummy_source\",\n processor_type=\"dummy_processor\",\n )],\n date_time_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionDateTimeTypeOptionsArgs(),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleDatetime = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema(\"example_datetime\", new()\n {\n ProjectNumber = project.Apply(getProjectResult =\u003e getProjectResult.Number),\n DisplayName = \"test-property-date_time\",\n Location = \"us\",\n PropertyDefinitions = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs\n {\n Name = \"prop7\",\n DisplayName = \"propdisp7\",\n IsRepeatable = false,\n IsFilterable = true,\n IsSearchable = true,\n IsMetadata = false,\n IsRequired = false,\n RetrievalImportance = \"HIGHEST\",\n SchemaSources = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs\n {\n Name = \"dummy_source\",\n ProcessorType = \"dummy_processor\",\n },\n },\n DateTimeTypeOptions = null,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, \"example_datetime\", \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{\n\t\t\tProjectNumber: pulumi.String(project.Number),\n\t\t\tDisplayName: pulumi.String(\"test-property-date_time\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tPropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{\n\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{\n\t\t\t\t\tName: pulumi.String(\"prop7\"),\n\t\t\t\t\tDisplayName: pulumi.String(\"propdisp7\"),\n\t\t\t\t\tIsRepeatable: pulumi.Bool(false),\n\t\t\t\t\tIsFilterable: pulumi.Bool(true),\n\t\t\t\t\tIsSearchable: pulumi.Bool(true),\n\t\t\t\t\tIsMetadata: pulumi.Bool(false),\n\t\t\t\t\tIsRequired: pulumi.Bool(false),\n\t\t\t\t\tRetrievalImportance: pulumi.String(\"HIGHEST\"),\n\t\t\t\t\tSchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{\n\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"dummy_source\"),\n\t\t\t\t\t\t\tProcessorType: pulumi.String(\"dummy_processor\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tDateTimeTypeOptions: nil,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionDateTimeTypeOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var exampleDatetime = new DocumentAiWarehouseDocumentSchema(\"exampleDatetime\", DocumentAiWarehouseDocumentSchemaArgs.builder() \n .projectNumber(project.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .displayName(\"test-property-date_time\")\n .location(\"us\")\n .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()\n .name(\"prop7\")\n .displayName(\"propdisp7\")\n .isRepeatable(false)\n .isFilterable(true)\n .isSearchable(true)\n .isMetadata(false)\n .isRequired(false)\n .retrievalImportance(\"HIGHEST\")\n .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()\n .name(\"dummy_source\")\n .processorType(\"dummy_processor\")\n .build())\n .dateTimeTypeOptions()\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleDatetime:\n type: gcp:essentialcontacts:DocumentAiWarehouseDocumentSchema\n name: example_datetime\n properties:\n projectNumber: ${project.number}\n displayName: test-property-date_time\n location: us\n propertyDefinitions:\n - name: prop7\n displayName: propdisp7\n isRepeatable: false\n isFilterable: true\n isSearchable: true\n isMetadata: false\n isRequired: false\n retrievalImportance: HIGHEST\n schemaSources:\n - name: dummy_source\n processorType: dummy_processor\n dateTimeTypeOptions: {}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Document Ai Warehouse Document Schema Timestamp\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst exampleTimestamp = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_timestamp\", {\n projectNumber: project.then(project =\u003e project.number),\n displayName: \"test-property-timestamp\",\n location: \"us\",\n propertyDefinitions: [{\n name: \"prop5\",\n displayName: \"propdisp5\",\n isRepeatable: false,\n isFilterable: true,\n isSearchable: true,\n isMetadata: false,\n isRequired: false,\n retrievalImportance: \"HIGHEST\",\n schemaSources: [{\n name: \"dummy_source\",\n processorType: \"dummy_processor\",\n }],\n timestampTypeOptions: {},\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_timestamp = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_timestamp\",\n project_number=project.number,\n display_name=\"test-property-timestamp\",\n location=\"us\",\n property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs(\n name=\"prop5\",\n display_name=\"propdisp5\",\n is_repeatable=False,\n is_filterable=True,\n is_searchable=True,\n is_metadata=False,\n is_required=False,\n retrieval_importance=\"HIGHEST\",\n schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs(\n name=\"dummy_source\",\n processor_type=\"dummy_processor\",\n )],\n timestamp_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionTimestampTypeOptionsArgs(),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleTimestamp = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema(\"example_timestamp\", new()\n {\n ProjectNumber = project.Apply(getProjectResult =\u003e getProjectResult.Number),\n DisplayName = \"test-property-timestamp\",\n Location = \"us\",\n PropertyDefinitions = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs\n {\n Name = \"prop5\",\n DisplayName = \"propdisp5\",\n IsRepeatable = false,\n IsFilterable = true,\n IsSearchable = true,\n IsMetadata = false,\n IsRequired = false,\n RetrievalImportance = \"HIGHEST\",\n SchemaSources = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs\n {\n Name = \"dummy_source\",\n ProcessorType = \"dummy_processor\",\n },\n },\n TimestampTypeOptions = null,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, \"example_timestamp\", \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{\n\t\t\tProjectNumber: pulumi.String(project.Number),\n\t\t\tDisplayName: pulumi.String(\"test-property-timestamp\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tPropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{\n\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{\n\t\t\t\t\tName: pulumi.String(\"prop5\"),\n\t\t\t\t\tDisplayName: pulumi.String(\"propdisp5\"),\n\t\t\t\t\tIsRepeatable: pulumi.Bool(false),\n\t\t\t\t\tIsFilterable: pulumi.Bool(true),\n\t\t\t\t\tIsSearchable: pulumi.Bool(true),\n\t\t\t\t\tIsMetadata: pulumi.Bool(false),\n\t\t\t\t\tIsRequired: pulumi.Bool(false),\n\t\t\t\t\tRetrievalImportance: pulumi.String(\"HIGHEST\"),\n\t\t\t\t\tSchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{\n\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"dummy_source\"),\n\t\t\t\t\t\t\tProcessorType: pulumi.String(\"dummy_processor\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tTimestampTypeOptions: nil,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionTimestampTypeOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var exampleTimestamp = new DocumentAiWarehouseDocumentSchema(\"exampleTimestamp\", DocumentAiWarehouseDocumentSchemaArgs.builder() \n .projectNumber(project.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .displayName(\"test-property-timestamp\")\n .location(\"us\")\n .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()\n .name(\"prop5\")\n .displayName(\"propdisp5\")\n .isRepeatable(false)\n .isFilterable(true)\n .isSearchable(true)\n .isMetadata(false)\n .isRequired(false)\n .retrievalImportance(\"HIGHEST\")\n .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()\n .name(\"dummy_source\")\n .processorType(\"dummy_processor\")\n .build())\n .timestampTypeOptions()\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleTimestamp:\n type: gcp:essentialcontacts:DocumentAiWarehouseDocumentSchema\n name: example_timestamp\n properties:\n projectNumber: ${project.number}\n displayName: test-property-timestamp\n location: us\n propertyDefinitions:\n - name: prop5\n displayName: propdisp5\n isRepeatable: false\n isFilterable: true\n isSearchable: true\n isMetadata: false\n isRequired: false\n retrievalImportance: HIGHEST\n schemaSources:\n - name: dummy_source\n processorType: dummy_processor\n timestampTypeOptions: {}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDocumentSchema can be imported using any of these accepted formats:\n\n* `projects/{{project_number}}/locations/{{location}}/documentSchemas/{{name}}`\n\n* `{{project_number}}/{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, DocumentSchema can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:essentialcontacts/documentAiWarehouseDocumentSchema:DocumentAiWarehouseDocumentSchema default projects/{{project_number}}/locations/{{location}}/documentSchemas/{{name}}\n```\n\n```sh\n$ pulumi import gcp:essentialcontacts/documentAiWarehouseDocumentSchema:DocumentAiWarehouseDocumentSchema default {{project_number}}/{{location}}/{{name}}\n```\n\n", + "description": "A document schema is used to define document structure.\n\n\nTo get more information about DocumentSchema, see:\n\n* [API documentation](https://cloud.google.com/document-warehouse/docs/reference/rest/v1/projects.locations.documentSchemas)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/document-warehouse/docs/manage-document-schemas)\n\n## Example Usage\n\n### Document Ai Warehouse Document Schema Text\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst exampleText = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_text\", {\n projectNumber: project.then(project =\u003e project.number),\n displayName: \"test-property-text\",\n location: \"us\",\n documentIsFolder: false,\n propertyDefinitions: [{\n name: \"prop3\",\n displayName: \"propdisp3\",\n isRepeatable: false,\n isFilterable: true,\n isSearchable: true,\n isMetadata: false,\n isRequired: false,\n retrievalImportance: \"HIGHEST\",\n schemaSources: [{\n name: \"dummy_source\",\n processorType: \"dummy_processor\",\n }],\n textTypeOptions: {},\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_text = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema(\"example_text\",\n project_number=project.number,\n display_name=\"test-property-text\",\n location=\"us\",\n document_is_folder=False,\n property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs(\n name=\"prop3\",\n display_name=\"propdisp3\",\n is_repeatable=False,\n is_filterable=True,\n is_searchable=True,\n is_metadata=False,\n is_required=False,\n retrieval_importance=\"HIGHEST\",\n schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs(\n name=\"dummy_source\",\n processor_type=\"dummy_processor\",\n )],\n text_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionTextTypeOptionsArgs(),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleText = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema(\"example_text\", new()\n {\n ProjectNumber = project.Apply(getProjectResult =\u003e getProjectResult.Number),\n DisplayName = \"test-property-text\",\n Location = \"us\",\n DocumentIsFolder = false,\n PropertyDefinitions = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs\n {\n Name = \"prop3\",\n DisplayName = \"propdisp3\",\n IsRepeatable = false,\n IsFilterable = true,\n IsSearchable = true,\n IsMetadata = false,\n IsRequired = false,\n RetrievalImportance = \"HIGHEST\",\n SchemaSources = new[]\n {\n new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs\n {\n Name = \"dummy_source\",\n ProcessorType = \"dummy_processor\",\n },\n },\n TextTypeOptions = null,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, \"example_text\", \u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{\n\t\t\tProjectNumber: pulumi.String(project.Number),\n\t\t\tDisplayName: pulumi.String(\"test-property-text\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tDocumentIsFolder: pulumi.Bool(false),\n\t\t\tPropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{\n\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{\n\t\t\t\t\tName: pulumi.String(\"prop3\"),\n\t\t\t\t\tDisplayName: pulumi.String(\"propdisp3\"),\n\t\t\t\t\tIsRepeatable: pulumi.Bool(false),\n\t\t\t\t\tIsFilterable: pulumi.Bool(true),\n\t\t\t\t\tIsSearchable: pulumi.Bool(true),\n\t\t\t\t\tIsMetadata: pulumi.Bool(false),\n\t\t\t\t\tIsRequired: pulumi.Bool(false),\n\t\t\t\t\tRetrievalImportance: pulumi.String(\"HIGHEST\"),\n\t\t\t\t\tSchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{\n\t\t\t\t\t\t\u0026essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"dummy_source\"),\n\t\t\t\t\t\t\tProcessorType: pulumi.String(\"dummy_processor\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tTextTypeOptions: nil,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;\nimport com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;\nimport com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionTextTypeOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var exampleText = new DocumentAiWarehouseDocumentSchema(\"exampleText\", DocumentAiWarehouseDocumentSchemaArgs.builder() \n .projectNumber(project.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .displayName(\"test-property-text\")\n .location(\"us\")\n .documentIsFolder(false)\n .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()\n .name(\"prop3\")\n .displayName(\"propdisp3\")\n .isRepeatable(false)\n .isFilterable(true)\n .isSearchable(true)\n .isMetadata(false)\n .isRequired(false)\n .retrievalImportance(\"HIGHEST\")\n .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()\n .name(\"dummy_source\")\n .processorType(\"dummy_processor\")\n .build())\n .textTypeOptions()\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleText:\n type: gcp:essentialcontacts:DocumentAiWarehouseDocumentSchema\n name: example_text\n properties:\n projectNumber: ${project.number}\n displayName: test-property-text\n location: us\n documentIsFolder: false\n propertyDefinitions:\n - name: prop3\n displayName: propdisp3\n isRepeatable: false\n isFilterable: true\n isSearchable: true\n isMetadata: false\n isRequired: false\n retrievalImportance: HIGHEST\n schemaSources:\n - name: dummy_source\n processorType: dummy_processor\n textTypeOptions: {}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDocumentSchema can be imported using any of these accepted formats:\n\n* `projects/{{project_number}}/locations/{{location}}/documentSchemas/{{name}}`\n\n* `{{project_number}}/{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, DocumentSchema can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:essentialcontacts/documentAiWarehouseDocumentSchema:DocumentAiWarehouseDocumentSchema default projects/{{project_number}}/locations/{{location}}/documentSchemas/{{name}}\n```\n\n```sh\n$ pulumi import gcp:essentialcontacts/documentAiWarehouseDocumentSchema:DocumentAiWarehouseDocumentSchema default {{project_number}}/{{location}}/{{name}}\n```\n\n", "properties": { "displayName": { "type": "string", @@ -184099,7 +184547,7 @@ } }, "gcp:firebaserules/release:Release": { - "description": "For more information, see:\n* [Get started with Firebase Security Rules](https://firebase.google.com/docs/rules/get-started)\n## Example Usage\n\n### Firestore_release\nCreates a Firebase Rules Release to Cloud Firestore\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst firestore = new gcp.firebaserules.Ruleset(\"firestore\", {\n source: {\n files: [{\n content: \"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\",\n name: \"firestore.rules\",\n }],\n },\n project: \"my-project-name\",\n});\nconst primary = new gcp.firebaserules.Release(\"primary\", {\n name: \"cloud.firestore\",\n rulesetName: pulumi.interpolate`projects/my-project-name/rulesets/${firestore.name}`,\n project: \"my-project-name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfirestore = gcp.firebaserules.Ruleset(\"firestore\",\n source=gcp.firebaserules.RulesetSourceArgs(\n files=[gcp.firebaserules.RulesetSourceFileArgs(\n content=\"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\",\n name=\"firestore.rules\",\n )],\n ),\n project=\"my-project-name\")\nprimary = gcp.firebaserules.Release(\"primary\",\n name=\"cloud.firestore\",\n ruleset_name=firestore.name.apply(lambda name: f\"projects/my-project-name/rulesets/{name}\"),\n project=\"my-project-name\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firestore = new Gcp.Firebaserules.Ruleset(\"firestore\", new()\n {\n Source = new Gcp.Firebaserules.Inputs.RulesetSourceArgs\n {\n Files = new[]\n {\n new Gcp.Firebaserules.Inputs.RulesetSourceFileArgs\n {\n Content = \"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\",\n Name = \"firestore.rules\",\n },\n },\n },\n Project = \"my-project-name\",\n });\n\n var primary = new Gcp.Firebaserules.Release(\"primary\", new()\n {\n Name = \"cloud.firestore\",\n RulesetName = firestore.Name.Apply(name =\u003e $\"projects/my-project-name/rulesets/{name}\"),\n Project = \"my-project-name\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/firebaserules\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfirestore, err := firebaserules.NewRuleset(ctx, \"firestore\", \u0026firebaserules.RulesetArgs{\n\t\t\tSource: \u0026firebaserules.RulesetSourceArgs{\n\t\t\t\tFiles: firebaserules.RulesetSourceFileArray{\n\t\t\t\t\t\u0026firebaserules.RulesetSourceFileArgs{\n\t\t\t\t\t\tContent: pulumi.String(\"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\"),\n\t\t\t\t\t\tName: pulumi.String(\"firestore.rules\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firebaserules.NewRelease(ctx, \"primary\", \u0026firebaserules.ReleaseArgs{\n\t\t\tName: pulumi.String(\"cloud.firestore\"),\n\t\t\tRulesetName: firestore.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/my-project-name/rulesets/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firebaserules.Ruleset;\nimport com.pulumi.gcp.firebaserules.RulesetArgs;\nimport com.pulumi.gcp.firebaserules.inputs.RulesetSourceArgs;\nimport com.pulumi.gcp.firebaserules.Release;\nimport com.pulumi.gcp.firebaserules.ReleaseArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var firestore = new Ruleset(\"firestore\", RulesetArgs.builder() \n .source(RulesetSourceArgs.builder()\n .files(RulesetSourceFileArgs.builder()\n .content(\"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\")\n .name(\"firestore.rules\")\n .build())\n .build())\n .project(\"my-project-name\")\n .build());\n\n var primary = new Release(\"primary\", ReleaseArgs.builder() \n .name(\"cloud.firestore\")\n .rulesetName(firestore.name().applyValue(name -\u003e String.format(\"projects/my-project-name/rulesets/%s\", name)))\n .project(\"my-project-name\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:firebaserules:Release\n properties:\n name: cloud.firestore\n rulesetName: projects/my-project-name/rulesets/${firestore.name}\n project: my-project-name\n firestore:\n type: gcp:firebaserules:Ruleset\n properties:\n source:\n files:\n - content: 'service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }'\n name: firestore.rules\n project: my-project-name\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Storage_release\nCreates a Firebase Rules Release for a Storage bucket\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\n// Provision a non-default Cloud Storage bucket.\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n project: \"my-project-name\",\n name: \"bucket\",\n location: \"us-west1\",\n});\n// Create a ruleset of Firebase Security Rules from a local file.\nconst storage = new gcp.firebaserules.Ruleset(\"storage\", {\n project: \"my-project-name\",\n source: {\n files: [{\n name: \"storage.rules\",\n content: \"service firebase.storage {match /b/{bucket}/o {match /{allPaths=**} {allow read, write: if request.auth != null;}}}\",\n }],\n },\n});\nconst primary = new gcp.firebaserules.Release(\"primary\", {\n name: pulumi.interpolate`firebase.storage/${bucket.name}`,\n rulesetName: pulumi.interpolate`projects/my-project-name/rulesets/${storage.name}`,\n project: \"my-project-name\",\n});\n// Make the Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.\nconst bucketStorageBucket = new gcp.firebase.StorageBucket(\"bucket\", {\n project: \"my-project-name\",\n bucketId: bucket.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\n# Provision a non-default Cloud Storage bucket.\nbucket = gcp.storage.Bucket(\"bucket\",\n project=\"my-project-name\",\n name=\"bucket\",\n location=\"us-west1\")\n# Create a ruleset of Firebase Security Rules from a local file.\nstorage = gcp.firebaserules.Ruleset(\"storage\",\n project=\"my-project-name\",\n source=gcp.firebaserules.RulesetSourceArgs(\n files=[gcp.firebaserules.RulesetSourceFileArgs(\n name=\"storage.rules\",\n content=\"service firebase.storage {match /b/{bucket}/o {match /{allPaths=**} {allow read, write: if request.auth != null;}}}\",\n )],\n ))\nprimary = gcp.firebaserules.Release(\"primary\",\n name=bucket.name.apply(lambda name: f\"firebase.storage/{name}\"),\n ruleset_name=storage.name.apply(lambda name: f\"projects/my-project-name/rulesets/{name}\"),\n project=\"my-project-name\")\n# Make the Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.\nbucket_storage_bucket = gcp.firebase.StorageBucket(\"bucket\",\n project=\"my-project-name\",\n bucket_id=bucket.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // Provision a non-default Cloud Storage bucket.\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Project = \"my-project-name\",\n Name = \"bucket\",\n Location = \"us-west1\",\n });\n\n // Create a ruleset of Firebase Security Rules from a local file.\n var storage = new Gcp.Firebaserules.Ruleset(\"storage\", new()\n {\n Project = \"my-project-name\",\n Source = new Gcp.Firebaserules.Inputs.RulesetSourceArgs\n {\n Files = new[]\n {\n new Gcp.Firebaserules.Inputs.RulesetSourceFileArgs\n {\n Name = \"storage.rules\",\n Content = \"service firebase.storage {match /b/{bucket}/o {match /{allPaths=**} {allow read, write: if request.auth != null;}}}\",\n },\n },\n },\n });\n\n var primary = new Gcp.Firebaserules.Release(\"primary\", new()\n {\n Name = bucket.Name.Apply(name =\u003e $\"firebase.storage/{name}\"),\n RulesetName = storage.Name.Apply(name =\u003e $\"projects/my-project-name/rulesets/{name}\"),\n Project = \"my-project-name\",\n });\n\n // Make the Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.\n var bucketStorageBucket = new Gcp.Firebase.StorageBucket(\"bucket\", new()\n {\n Project = \"my-project-name\",\n BucketId = bucket.Name,\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/firebase\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/firebaserules\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// Provision a non-default Cloud Storage bucket.\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"bucket\"),\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Create a ruleset of Firebase Security Rules from a local file.\n\t\tstorage, err := firebaserules.NewRuleset(ctx, \"storage\", \u0026firebaserules.RulesetArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tSource: \u0026firebaserules.RulesetSourceArgs{\n\t\t\t\tFiles: firebaserules.RulesetSourceFileArray{\n\t\t\t\t\t\u0026firebaserules.RulesetSourceFileArgs{\n\t\t\t\t\t\tName: pulumi.String(\"storage.rules\"),\n\t\t\t\t\t\tContent: pulumi.String(\"service firebase.storage {match /b/{bucket}/o {match /{allPaths=**} {allow read, write: if request.auth != null;}}}\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firebaserules.NewRelease(ctx, \"primary\", \u0026firebaserules.ReleaseArgs{\n\t\t\tName: bucket.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"firebase.storage/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tRulesetName: storage.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/my-project-name/rulesets/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Make the Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.\n\t\t_, err = firebase.NewStorageBucket(ctx, \"bucket\", \u0026firebase.StorageBucketArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tBucketId: bucket.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.firebaserules.Ruleset;\nimport com.pulumi.gcp.firebaserules.RulesetArgs;\nimport com.pulumi.gcp.firebaserules.inputs.RulesetSourceArgs;\nimport com.pulumi.gcp.firebaserules.Release;\nimport com.pulumi.gcp.firebaserules.ReleaseArgs;\nimport com.pulumi.gcp.firebase.StorageBucket;\nimport com.pulumi.gcp.firebase.StorageBucketArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // Provision a non-default Cloud Storage bucket.\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .project(\"my-project-name\")\n .name(\"bucket\")\n .location(\"us-west1\")\n .build());\n\n // Create a ruleset of Firebase Security Rules from a local file.\n var storage = new Ruleset(\"storage\", RulesetArgs.builder() \n .project(\"my-project-name\")\n .source(RulesetSourceArgs.builder()\n .files(RulesetSourceFileArgs.builder()\n .name(\"storage.rules\")\n .content(\"service firebase.storage {match /b/{bucket}/o {match /{allPaths=**} {allow read, write: if request.auth != null;}}}\")\n .build())\n .build())\n .build());\n\n var primary = new Release(\"primary\", ReleaseArgs.builder() \n .name(bucket.name().applyValue(name -\u003e String.format(\"firebase.storage/%s\", name)))\n .rulesetName(storage.name().applyValue(name -\u003e String.format(\"projects/my-project-name/rulesets/%s\", name)))\n .project(\"my-project-name\")\n .build());\n\n // Make the Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.\n var bucketStorageBucket = new StorageBucket(\"bucketStorageBucket\", StorageBucketArgs.builder() \n .project(\"my-project-name\")\n .bucketId(bucket.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:firebaserules:Release\n properties:\n name: firebase.storage/${bucket.name}\n rulesetName: projects/my-project-name/rulesets/${storage.name}\n project: my-project-name\n # Provision a non-default Cloud Storage bucket.\n bucket:\n type: gcp:storage:Bucket\n properties:\n project: my-project-name\n name: bucket\n location: us-west1\n # Make the Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.\n bucketStorageBucket:\n type: gcp:firebase:StorageBucket\n name: bucket\n properties:\n project: my-project-name\n bucketId: ${bucket.name}\n # Create a ruleset of Firebase Security Rules from a local file.\n storage:\n type: gcp:firebaserules:Ruleset\n properties:\n project: my-project-name\n source:\n files:\n - name: storage.rules\n content: 'service firebase.storage {match /b/{bucket}/o {match /{allPaths=**} {allow read, write: if request.auth != null;}}}'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRelease can be imported using any of these accepted formats:\n* `projects/{{project}}/releases/{{name}}`\n\nWhen using the `pulumi import` command, Release can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firebaserules/release:Release default projects/{{project}}/releases/{{name}}\n```\n", + "description": "For more information, see:\n* [Get started with Firebase Security Rules](https://firebase.google.com/docs/rules/get-started)\n## Example Usage\n\n### Firestore_release\nCreates a Firebase Rules Release to Cloud Firestore\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst firestore = new gcp.firebaserules.Ruleset(\"firestore\", {\n source: {\n files: [{\n content: \"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\",\n name: \"firestore.rules\",\n }],\n },\n project: \"my-project-name\",\n});\nconst primary = new gcp.firebaserules.Release(\"primary\", {\n name: \"cloud.firestore/database\",\n rulesetName: pulumi.interpolate`projects/my-project-name/rulesets/${firestore.name}`,\n project: \"my-project-name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfirestore = gcp.firebaserules.Ruleset(\"firestore\",\n source=gcp.firebaserules.RulesetSourceArgs(\n files=[gcp.firebaserules.RulesetSourceFileArgs(\n content=\"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\",\n name=\"firestore.rules\",\n )],\n ),\n project=\"my-project-name\")\nprimary = gcp.firebaserules.Release(\"primary\",\n name=\"cloud.firestore/database\",\n ruleset_name=firestore.name.apply(lambda name: f\"projects/my-project-name/rulesets/{name}\"),\n project=\"my-project-name\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firestore = new Gcp.Firebaserules.Ruleset(\"firestore\", new()\n {\n Source = new Gcp.Firebaserules.Inputs.RulesetSourceArgs\n {\n Files = new[]\n {\n new Gcp.Firebaserules.Inputs.RulesetSourceFileArgs\n {\n Content = \"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\",\n Name = \"firestore.rules\",\n },\n },\n },\n Project = \"my-project-name\",\n });\n\n var primary = new Gcp.Firebaserules.Release(\"primary\", new()\n {\n Name = \"cloud.firestore/database\",\n RulesetName = firestore.Name.Apply(name =\u003e $\"projects/my-project-name/rulesets/{name}\"),\n Project = \"my-project-name\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/firebaserules\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfirestore, err := firebaserules.NewRuleset(ctx, \"firestore\", \u0026firebaserules.RulesetArgs{\n\t\t\tSource: \u0026firebaserules.RulesetSourceArgs{\n\t\t\t\tFiles: firebaserules.RulesetSourceFileArray{\n\t\t\t\t\t\u0026firebaserules.RulesetSourceFileArgs{\n\t\t\t\t\t\tContent: pulumi.String(\"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\"),\n\t\t\t\t\t\tName: pulumi.String(\"firestore.rules\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firebaserules.NewRelease(ctx, \"primary\", \u0026firebaserules.ReleaseArgs{\n\t\t\tName: pulumi.String(\"cloud.firestore/database\"),\n\t\t\tRulesetName: firestore.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/my-project-name/rulesets/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firebaserules.Ruleset;\nimport com.pulumi.gcp.firebaserules.RulesetArgs;\nimport com.pulumi.gcp.firebaserules.inputs.RulesetSourceArgs;\nimport com.pulumi.gcp.firebaserules.Release;\nimport com.pulumi.gcp.firebaserules.ReleaseArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var firestore = new Ruleset(\"firestore\", RulesetArgs.builder() \n .source(RulesetSourceArgs.builder()\n .files(RulesetSourceFileArgs.builder()\n .content(\"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\")\n .name(\"firestore.rules\")\n .build())\n .build())\n .project(\"my-project-name\")\n .build());\n\n var primary = new Release(\"primary\", ReleaseArgs.builder() \n .name(\"cloud.firestore/database\")\n .rulesetName(firestore.name().applyValue(name -\u003e String.format(\"projects/my-project-name/rulesets/%s\", name)))\n .project(\"my-project-name\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:firebaserules:Release\n properties:\n name: cloud.firestore/database\n rulesetName: projects/my-project-name/rulesets/${firestore.name}\n project: my-project-name\n firestore:\n type: gcp:firebaserules:Ruleset\n properties:\n source:\n files:\n - content: 'service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }'\n name: firestore.rules\n project: my-project-name\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Storage_release\nCreates a Firebase Rules Release for a Storage bucket\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\n// Provision a non-default Cloud Storage bucket.\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n project: \"my-project-name\",\n name: \"bucket\",\n location: \"us-west1\",\n});\n// Create a ruleset of Firebase Security Rules from a local file.\nconst storage = new gcp.firebaserules.Ruleset(\"storage\", {\n project: \"my-project-name\",\n source: {\n files: [{\n name: \"storage.rules\",\n content: \"service firebase.storage {match /b/{bucket}/o {match /{allPaths=**} {allow read, write: if request.auth != null;}}}\",\n }],\n },\n});\nconst primary = new gcp.firebaserules.Release(\"primary\", {\n name: pulumi.interpolate`firebase.storage/${bucket.name}`,\n rulesetName: pulumi.interpolate`projects/my-project-name/rulesets/${storage.name}`,\n project: \"my-project-name\",\n});\n// Make the Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.\nconst bucketStorageBucket = new gcp.firebase.StorageBucket(\"bucket\", {\n project: \"my-project-name\",\n bucketId: bucket.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\n# Provision a non-default Cloud Storage bucket.\nbucket = gcp.storage.Bucket(\"bucket\",\n project=\"my-project-name\",\n name=\"bucket\",\n location=\"us-west1\")\n# Create a ruleset of Firebase Security Rules from a local file.\nstorage = gcp.firebaserules.Ruleset(\"storage\",\n project=\"my-project-name\",\n source=gcp.firebaserules.RulesetSourceArgs(\n files=[gcp.firebaserules.RulesetSourceFileArgs(\n name=\"storage.rules\",\n content=\"service firebase.storage {match /b/{bucket}/o {match /{allPaths=**} {allow read, write: if request.auth != null;}}}\",\n )],\n ))\nprimary = gcp.firebaserules.Release(\"primary\",\n name=bucket.name.apply(lambda name: f\"firebase.storage/{name}\"),\n ruleset_name=storage.name.apply(lambda name: f\"projects/my-project-name/rulesets/{name}\"),\n project=\"my-project-name\")\n# Make the Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.\nbucket_storage_bucket = gcp.firebase.StorageBucket(\"bucket\",\n project=\"my-project-name\",\n bucket_id=bucket.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // Provision a non-default Cloud Storage bucket.\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Project = \"my-project-name\",\n Name = \"bucket\",\n Location = \"us-west1\",\n });\n\n // Create a ruleset of Firebase Security Rules from a local file.\n var storage = new Gcp.Firebaserules.Ruleset(\"storage\", new()\n {\n Project = \"my-project-name\",\n Source = new Gcp.Firebaserules.Inputs.RulesetSourceArgs\n {\n Files = new[]\n {\n new Gcp.Firebaserules.Inputs.RulesetSourceFileArgs\n {\n Name = \"storage.rules\",\n Content = \"service firebase.storage {match /b/{bucket}/o {match /{allPaths=**} {allow read, write: if request.auth != null;}}}\",\n },\n },\n },\n });\n\n var primary = new Gcp.Firebaserules.Release(\"primary\", new()\n {\n Name = bucket.Name.Apply(name =\u003e $\"firebase.storage/{name}\"),\n RulesetName = storage.Name.Apply(name =\u003e $\"projects/my-project-name/rulesets/{name}\"),\n Project = \"my-project-name\",\n });\n\n // Make the Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.\n var bucketStorageBucket = new Gcp.Firebase.StorageBucket(\"bucket\", new()\n {\n Project = \"my-project-name\",\n BucketId = bucket.Name,\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/firebase\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/firebaserules\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// Provision a non-default Cloud Storage bucket.\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"bucket\"),\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Create a ruleset of Firebase Security Rules from a local file.\n\t\tstorage, err := firebaserules.NewRuleset(ctx, \"storage\", \u0026firebaserules.RulesetArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tSource: \u0026firebaserules.RulesetSourceArgs{\n\t\t\t\tFiles: firebaserules.RulesetSourceFileArray{\n\t\t\t\t\t\u0026firebaserules.RulesetSourceFileArgs{\n\t\t\t\t\t\tName: pulumi.String(\"storage.rules\"),\n\t\t\t\t\t\tContent: pulumi.String(\"service firebase.storage {match /b/{bucket}/o {match /{allPaths=**} {allow read, write: if request.auth != null;}}}\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firebaserules.NewRelease(ctx, \"primary\", \u0026firebaserules.ReleaseArgs{\n\t\t\tName: bucket.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"firebase.storage/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tRulesetName: storage.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/my-project-name/rulesets/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Make the Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.\n\t\t_, err = firebase.NewStorageBucket(ctx, \"bucket\", \u0026firebase.StorageBucketArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tBucketId: bucket.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.firebaserules.Ruleset;\nimport com.pulumi.gcp.firebaserules.RulesetArgs;\nimport com.pulumi.gcp.firebaserules.inputs.RulesetSourceArgs;\nimport com.pulumi.gcp.firebaserules.Release;\nimport com.pulumi.gcp.firebaserules.ReleaseArgs;\nimport com.pulumi.gcp.firebase.StorageBucket;\nimport com.pulumi.gcp.firebase.StorageBucketArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // Provision a non-default Cloud Storage bucket.\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .project(\"my-project-name\")\n .name(\"bucket\")\n .location(\"us-west1\")\n .build());\n\n // Create a ruleset of Firebase Security Rules from a local file.\n var storage = new Ruleset(\"storage\", RulesetArgs.builder() \n .project(\"my-project-name\")\n .source(RulesetSourceArgs.builder()\n .files(RulesetSourceFileArgs.builder()\n .name(\"storage.rules\")\n .content(\"service firebase.storage {match /b/{bucket}/o {match /{allPaths=**} {allow read, write: if request.auth != null;}}}\")\n .build())\n .build())\n .build());\n\n var primary = new Release(\"primary\", ReleaseArgs.builder() \n .name(bucket.name().applyValue(name -\u003e String.format(\"firebase.storage/%s\", name)))\n .rulesetName(storage.name().applyValue(name -\u003e String.format(\"projects/my-project-name/rulesets/%s\", name)))\n .project(\"my-project-name\")\n .build());\n\n // Make the Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.\n var bucketStorageBucket = new StorageBucket(\"bucketStorageBucket\", StorageBucketArgs.builder() \n .project(\"my-project-name\")\n .bucketId(bucket.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:firebaserules:Release\n properties:\n name: firebase.storage/${bucket.name}\n rulesetName: projects/my-project-name/rulesets/${storage.name}\n project: my-project-name\n # Provision a non-default Cloud Storage bucket.\n bucket:\n type: gcp:storage:Bucket\n properties:\n project: my-project-name\n name: bucket\n location: us-west1\n # Make the Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.\n bucketStorageBucket:\n type: gcp:firebase:StorageBucket\n name: bucket\n properties:\n project: my-project-name\n bucketId: ${bucket.name}\n # Create a ruleset of Firebase Security Rules from a local file.\n storage:\n type: gcp:firebaserules:Ruleset\n properties:\n project: my-project-name\n source:\n files:\n - name: storage.rules\n content: 'service firebase.storage {match /b/{bucket}/o {match /{allPaths=**} {allow read, write: if request.auth != null;}}}'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRelease can be imported using any of these accepted formats:\n* `projects/{{project}}/releases/{{name}}`\n\nWhen using the `pulumi import` command, Release can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firebaserules/release:Release default projects/{{project}}/releases/{{name}}\n```\n", "properties": { "createTime": { "type": "string", @@ -215708,6 +216156,207 @@ "type": "object" } }, + "gcp:privilegedaccessmanager/entitlement:entitlement": { + "description": "## Example Usage\n\n### Privileged Access Manager Entitlement Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst tfentitlement = new gcp.privilegedaccessmanager.Entitlement(\"tfentitlement\", {\n entitlementId: \"example-entitlement\",\n location: \"global\",\n maxRequestDuration: \"43200s\",\n parent: \"projects/my-project-name\",\n requesterJustificationConfig: {\n unstructured: {},\n },\n eligibleUsers: [{\n principals: [\"group:test@google.com\"],\n }],\n privilegedAccess: {\n gcpIamAccess: {\n roleBindings: [{\n role: \"roles/storage.admin\",\n conditionExpression: \"request.time \u003c timestamp(\\\"2024-04-23T18:30:00.000Z\\\")\",\n }],\n resource: \"//cloudresourcemanager.googleapis.com/projects/my-project-name\",\n resourceType: \"cloudresourcemanager.googleapis.com/Project\",\n },\n },\n additionalNotificationTargets: {\n adminEmailRecipients: [\"user@example.com\"],\n requesterEmailRecipients: [\"user@example.com\"],\n },\n approvalWorkflow: {\n manualApprovals: {\n requireApproverJustification: true,\n steps: [{\n approvalsNeeded: 1,\n approverEmailRecipients: [\"user@example.com\"],\n approvers: {\n principals: [\"group:test@google.com\"],\n },\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntfentitlement = gcp.privilegedaccessmanager.Entitlement(\"tfentitlement\",\n entitlement_id=\"example-entitlement\",\n location=\"global\",\n max_request_duration=\"43200s\",\n parent=\"projects/my-project-name\",\n requester_justification_config=gcp.privilegedaccessmanager.EntitlementRequesterJustificationConfigArgs(\n unstructured=gcp.privilegedaccessmanager.EntitlementRequesterJustificationConfigUnstructuredArgs(),\n ),\n eligible_users=[gcp.privilegedaccessmanager.EntitlementEligibleUserArgs(\n principals=[\"group:test@google.com\"],\n )],\n privileged_access=gcp.privilegedaccessmanager.EntitlementPrivilegedAccessArgs(\n gcp_iam_access=gcp.privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessArgs(\n role_bindings=[gcp.privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs(\n role=\"roles/storage.admin\",\n condition_expression=\"request.time \u003c timestamp(\\\"2024-04-23T18:30:00.000Z\\\")\",\n )],\n resource=\"//cloudresourcemanager.googleapis.com/projects/my-project-name\",\n resource_type=\"cloudresourcemanager.googleapis.com/Project\",\n ),\n ),\n additional_notification_targets=gcp.privilegedaccessmanager.EntitlementAdditionalNotificationTargetsArgs(\n admin_email_recipients=[\"user@example.com\"],\n requester_email_recipients=[\"user@example.com\"],\n ),\n approval_workflow=gcp.privilegedaccessmanager.EntitlementApprovalWorkflowArgs(\n manual_approvals=gcp.privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsArgs(\n require_approver_justification=True,\n steps=[gcp.privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepArgs(\n approvals_needed=1,\n approver_email_recipients=[\"user@example.com\"],\n approvers=gcp.privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepApproversArgs(\n principals=[\"group:test@google.com\"],\n ),\n )],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var tfentitlement = new Gcp.PrivilegedAccessManager.Entitlement(\"tfentitlement\", new()\n {\n EntitlementId = \"example-entitlement\",\n Location = \"global\",\n MaxRequestDuration = \"43200s\",\n Parent = \"projects/my-project-name\",\n RequesterJustificationConfig = new Gcp.PrivilegedAccessManager.Inputs.EntitlementRequesterJustificationConfigArgs\n {\n Unstructured = null,\n },\n EligibleUsers = new[]\n {\n new Gcp.PrivilegedAccessManager.Inputs.EntitlementEligibleUserArgs\n {\n Principals = new[]\n {\n \"group:test@google.com\",\n },\n },\n },\n PrivilegedAccess = new Gcp.PrivilegedAccessManager.Inputs.EntitlementPrivilegedAccessArgs\n {\n GcpIamAccess = new Gcp.PrivilegedAccessManager.Inputs.EntitlementPrivilegedAccessGcpIamAccessArgs\n {\n RoleBindings = new[]\n {\n new Gcp.PrivilegedAccessManager.Inputs.EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs\n {\n Role = \"roles/storage.admin\",\n ConditionExpression = \"request.time \u003c timestamp(\\\"2024-04-23T18:30:00.000Z\\\")\",\n },\n },\n Resource = \"//cloudresourcemanager.googleapis.com/projects/my-project-name\",\n ResourceType = \"cloudresourcemanager.googleapis.com/Project\",\n },\n },\n AdditionalNotificationTargets = new Gcp.PrivilegedAccessManager.Inputs.EntitlementAdditionalNotificationTargetsArgs\n {\n AdminEmailRecipients = new[]\n {\n \"user@example.com\",\n },\n RequesterEmailRecipients = new[]\n {\n \"user@example.com\",\n },\n },\n ApprovalWorkflow = new Gcp.PrivilegedAccessManager.Inputs.EntitlementApprovalWorkflowArgs\n {\n ManualApprovals = new Gcp.PrivilegedAccessManager.Inputs.EntitlementApprovalWorkflowManualApprovalsArgs\n {\n RequireApproverJustification = true,\n Steps = new[]\n {\n new Gcp.PrivilegedAccessManager.Inputs.EntitlementApprovalWorkflowManualApprovalsStepArgs\n {\n ApprovalsNeeded = 1,\n ApproverEmailRecipients = new[]\n {\n \"user@example.com\",\n },\n Approvers = new Gcp.PrivilegedAccessManager.Inputs.EntitlementApprovalWorkflowManualApprovalsStepApproversArgs\n {\n Principals = new[]\n {\n \"group:test@google.com\",\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/privilegedaccessmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := privilegedaccessmanager.Newentitlement(ctx, \"tfentitlement\", \u0026privilegedaccessmanager.entitlementArgs{\n\t\t\tEntitlementId: pulumi.String(\"example-entitlement\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tMaxRequestDuration: pulumi.String(\"43200s\"),\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tRequesterJustificationConfig: \u0026privilegedaccessmanager.EntitlementRequesterJustificationConfigArgs{\n\t\t\t\tUnstructured: nil,\n\t\t\t},\n\t\t\tEligibleUsers: privilegedaccessmanager.EntitlementEligibleUserArray{\n\t\t\t\t\u0026privilegedaccessmanager.EntitlementEligibleUserArgs{\n\t\t\t\t\tPrincipals: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"group:test@google.com\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPrivilegedAccess: \u0026privilegedaccessmanager.EntitlementPrivilegedAccessArgs{\n\t\t\t\tGcpIamAccess: \u0026privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessArgs{\n\t\t\t\t\tRoleBindings: privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessRoleBindingArray{\n\t\t\t\t\t\t\u0026privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs{\n\t\t\t\t\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\t\t\t\t\tConditionExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2024-04-23T18:30:00.000Z\\\")\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tResource: pulumi.String(\"//cloudresourcemanager.googleapis.com/projects/my-project-name\"),\n\t\t\t\t\tResourceType: pulumi.String(\"cloudresourcemanager.googleapis.com/Project\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAdditionalNotificationTargets: \u0026privilegedaccessmanager.EntitlementAdditionalNotificationTargetsArgs{\n\t\t\t\tAdminEmailRecipients: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"user@example.com\"),\n\t\t\t\t},\n\t\t\t\tRequesterEmailRecipients: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"user@example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tApprovalWorkflow: \u0026privilegedaccessmanager.EntitlementApprovalWorkflowArgs{\n\t\t\t\tManualApprovals: \u0026privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsArgs{\n\t\t\t\t\tRequireApproverJustification: pulumi.Bool(true),\n\t\t\t\t\tSteps: privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepArray{\n\t\t\t\t\t\t\u0026privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepArgs{\n\t\t\t\t\t\t\tApprovalsNeeded: pulumi.Int(1),\n\t\t\t\t\t\t\tApproverEmailRecipients: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"user@example.com\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tApprovers: \u0026privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepApproversArgs{\n\t\t\t\t\t\t\t\tPrincipals: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"group:test@google.com\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.privilegedaccessmanager.entitlement;\nimport com.pulumi.gcp.privilegedaccessmanager.EntitlementArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementRequesterJustificationConfigArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementRequesterJustificationConfigUnstructuredArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementEligibleUserArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementPrivilegedAccessArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementPrivilegedAccessGcpIamAccessArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementAdditionalNotificationTargetsArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementApprovalWorkflowArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementApprovalWorkflowManualApprovalsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var tfentitlement = new Entitlement(\"tfentitlement\", EntitlementArgs.builder() \n .entitlementId(\"example-entitlement\")\n .location(\"global\")\n .maxRequestDuration(\"43200s\")\n .parent(\"projects/my-project-name\")\n .requesterJustificationConfig(EntitlementRequesterJustificationConfigArgs.builder()\n .unstructured()\n .build())\n .eligibleUsers(EntitlementEligibleUserArgs.builder()\n .principals(\"group:test@google.com\")\n .build())\n .privilegedAccess(EntitlementPrivilegedAccessArgs.builder()\n .gcpIamAccess(EntitlementPrivilegedAccessGcpIamAccessArgs.builder()\n .roleBindings(EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs.builder()\n .role(\"roles/storage.admin\")\n .conditionExpression(\"request.time \u003c timestamp(\\\"2024-04-23T18:30:00.000Z\\\")\")\n .build())\n .resource(\"//cloudresourcemanager.googleapis.com/projects/my-project-name\")\n .resourceType(\"cloudresourcemanager.googleapis.com/Project\")\n .build())\n .build())\n .additionalNotificationTargets(EntitlementAdditionalNotificationTargetsArgs.builder()\n .adminEmailRecipients(\"user@example.com\")\n .requesterEmailRecipients(\"user@example.com\")\n .build())\n .approvalWorkflow(EntitlementApprovalWorkflowArgs.builder()\n .manualApprovals(EntitlementApprovalWorkflowManualApprovalsArgs.builder()\n .requireApproverJustification(true)\n .steps(EntitlementApprovalWorkflowManualApprovalsStepArgs.builder()\n .approvalsNeeded(1)\n .approverEmailRecipients(\"user@example.com\")\n .approvers(EntitlementApprovalWorkflowManualApprovalsStepApproversArgs.builder()\n .principals(\"group:test@google.com\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tfentitlement:\n type: gcp:privilegedaccessmanager:entitlement\n properties:\n entitlementId: example-entitlement\n location: global\n maxRequestDuration: 43200s\n parent: projects/my-project-name\n requesterJustificationConfig:\n unstructured: {}\n eligibleUsers:\n - principals:\n - group:test@google.com\n privilegedAccess:\n gcpIamAccess:\n roleBindings:\n - role: roles/storage.admin\n conditionExpression: request.time \u003c timestamp(\"2024-04-23T18:30:00.000Z\")\n resource: //cloudresourcemanager.googleapis.com/projects/my-project-name\n resourceType: cloudresourcemanager.googleapis.com/Project\n additionalNotificationTargets:\n adminEmailRecipients:\n - user@example.com\n requesterEmailRecipients:\n - user@example.com\n approvalWorkflow:\n manualApprovals:\n requireApproverJustification: true\n steps:\n - approvalsNeeded: 1\n approverEmailRecipients:\n - user@example.com\n approvers:\n principals:\n - group:test@google.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nEntitlement can be imported using any of these accepted formats:\n\n* `{{parent}}/locations/{{location}}/entitlements/{{entitlement_id}}`\n\nWhen using the `pulumi import` command, Entitlement can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:privilegedaccessmanager/entitlement:entitlement default {{parent}}/locations/{{location}}/entitlements/{{entitlement_id}}\n```\n\n", + "properties": { + "additionalNotificationTargets": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementAdditionalNotificationTargets:entitlementAdditionalNotificationTargets", + "description": "AdditionalNotificationTargets includes email addresses to be notified.\n" + }, + "approvalWorkflow": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementApprovalWorkflow:entitlementApprovalWorkflow", + "description": "The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null.\nDifferent types of approval workflows that can be used to gate privileged access granting.\n" + }, + "createTime": { + "type": "string", + "description": "Output only. Create time stamp. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits.\nExamples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\"\n" + }, + "eligibleUsers": { + "type": "array", + "items": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementEligibleUser:entitlementEligibleUser" + }, + "description": "Who can create Grants using Entitlement. This list should contain at most one entry\nStructure is documented below.\n" + }, + "entitlementId": { + "type": "string", + "description": "The ID to use for this Entitlement. This will become the last part of the resource name.\nThis value should be 4-63 characters, and valid characters are \"[a-z]\", \"[0-9]\", and \"-\". The first character should be from [a-z].\nThis value should be unique among all other Entitlements under the specified `parent`.\n" + }, + "etag": { + "type": "string", + "description": "For Resource freshness validation (https://google.aip.dev/154)\n" + }, + "location": { + "type": "string", + "description": "The region of the Entitlement resource.\n" + }, + "maxRequestDuration": { + "type": "string", + "description": "The maximum amount of time for which access would be granted for a request.\nA requester can choose to ask for access for less than this duration but never more.\nFormat: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = \"7200s\", 45 minutes = \"2700s\"\n" + }, + "name": { + "type": "string", + "description": "Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID.\nFormats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}.\n" + }, + "parent": { + "type": "string", + "description": "Format: project/{project_id} or organization/{organization_number} or folder/{folder_number}\n" + }, + "privilegedAccess": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementPrivilegedAccess:entitlementPrivilegedAccess", + "description": "Privileged access that this service can be used to gate.\nStructure is documented below.\n" + }, + "requesterJustificationConfig": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementRequesterJustificationConfig:entitlementRequesterJustificationConfig", + "description": "Defines the ways in which a requester should provide the justification while requesting for access.\nStructure is documented below.\n" + }, + "state": { + "type": "string", + "description": "Output only. The current state of the Entitlement.\n" + }, + "updateTime": { + "type": "string", + "description": "Output only. Update time stamp. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits.\nExamples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n" + } + }, + "required": [ + "createTime", + "eligibleUsers", + "entitlementId", + "etag", + "location", + "maxRequestDuration", + "name", + "parent", + "privilegedAccess", + "requesterJustificationConfig", + "state", + "updateTime" + ], + "inputProperties": { + "additionalNotificationTargets": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementAdditionalNotificationTargets:entitlementAdditionalNotificationTargets", + "description": "AdditionalNotificationTargets includes email addresses to be notified.\n" + }, + "approvalWorkflow": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementApprovalWorkflow:entitlementApprovalWorkflow", + "description": "The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null.\nDifferent types of approval workflows that can be used to gate privileged access granting.\n", + "willReplaceOnChanges": true + }, + "eligibleUsers": { + "type": "array", + "items": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementEligibleUser:entitlementEligibleUser" + }, + "description": "Who can create Grants using Entitlement. This list should contain at most one entry\nStructure is documented below.\n" + }, + "entitlementId": { + "type": "string", + "description": "The ID to use for this Entitlement. This will become the last part of the resource name.\nThis value should be 4-63 characters, and valid characters are \"[a-z]\", \"[0-9]\", and \"-\". The first character should be from [a-z].\nThis value should be unique among all other Entitlements under the specified `parent`.\n", + "willReplaceOnChanges": true + }, + "location": { + "type": "string", + "description": "The region of the Entitlement resource.\n", + "willReplaceOnChanges": true + }, + "maxRequestDuration": { + "type": "string", + "description": "The maximum amount of time for which access would be granted for a request.\nA requester can choose to ask for access for less than this duration but never more.\nFormat: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = \"7200s\", 45 minutes = \"2700s\"\n" + }, + "parent": { + "type": "string", + "description": "Format: project/{project_id} or organization/{organization_number} or folder/{folder_number}\n", + "willReplaceOnChanges": true + }, + "privilegedAccess": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementPrivilegedAccess:entitlementPrivilegedAccess", + "description": "Privileged access that this service can be used to gate.\nStructure is documented below.\n" + }, + "requesterJustificationConfig": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementRequesterJustificationConfig:entitlementRequesterJustificationConfig", + "description": "Defines the ways in which a requester should provide the justification while requesting for access.\nStructure is documented below.\n" + } + }, + "requiredInputs": [ + "eligibleUsers", + "entitlementId", + "location", + "maxRequestDuration", + "parent", + "privilegedAccess", + "requesterJustificationConfig" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering entitlement resources.\n", + "properties": { + "additionalNotificationTargets": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementAdditionalNotificationTargets:entitlementAdditionalNotificationTargets", + "description": "AdditionalNotificationTargets includes email addresses to be notified.\n" + }, + "approvalWorkflow": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementApprovalWorkflow:entitlementApprovalWorkflow", + "description": "The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null.\nDifferent types of approval workflows that can be used to gate privileged access granting.\n", + "willReplaceOnChanges": true + }, + "createTime": { + "type": "string", + "description": "Output only. Create time stamp. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits.\nExamples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\"\n" + }, + "eligibleUsers": { + "type": "array", + "items": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementEligibleUser:entitlementEligibleUser" + }, + "description": "Who can create Grants using Entitlement. This list should contain at most one entry\nStructure is documented below.\n" + }, + "entitlementId": { + "type": "string", + "description": "The ID to use for this Entitlement. This will become the last part of the resource name.\nThis value should be 4-63 characters, and valid characters are \"[a-z]\", \"[0-9]\", and \"-\". The first character should be from [a-z].\nThis value should be unique among all other Entitlements under the specified `parent`.\n", + "willReplaceOnChanges": true + }, + "etag": { + "type": "string", + "description": "For Resource freshness validation (https://google.aip.dev/154)\n" + }, + "location": { + "type": "string", + "description": "The region of the Entitlement resource.\n", + "willReplaceOnChanges": true + }, + "maxRequestDuration": { + "type": "string", + "description": "The maximum amount of time for which access would be granted for a request.\nA requester can choose to ask for access for less than this duration but never more.\nFormat: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = \"7200s\", 45 minutes = \"2700s\"\n" + }, + "name": { + "type": "string", + "description": "Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID.\nFormats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}.\n" + }, + "parent": { + "type": "string", + "description": "Format: project/{project_id} or organization/{organization_number} or folder/{folder_number}\n", + "willReplaceOnChanges": true + }, + "privilegedAccess": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementPrivilegedAccess:entitlementPrivilegedAccess", + "description": "Privileged access that this service can be used to gate.\nStructure is documented below.\n" + }, + "requesterJustificationConfig": { + "$ref": "#/types/gcp:privilegedaccessmanager/entitlementRequesterJustificationConfig:entitlementRequesterJustificationConfig", + "description": "Defines the ways in which a requester should provide the justification while requesting for access.\nStructure is documented below.\n" + }, + "state": { + "type": "string", + "description": "Output only. The current state of the Entitlement.\n" + }, + "updateTime": { + "type": "string", + "description": "Output only. Update time stamp. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits.\nExamples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n" + } + }, + "type": "object" + } + }, "gcp:projects/accessApprovalSettings:AccessApprovalSettings": { "description": "Access Approval enables you to require your explicit approval whenever Google support and engineering need to access your customer content.\n\n\nTo get more information about ProjectSettings, see:\n\n* [API documentation](https://cloud.google.com/access-approval/docs/reference/rest/v1/projects)\n\n## Example Usage\n\n### Project Access Approval Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst projectAccessApproval = new gcp.projects.AccessApprovalSettings(\"project_access_approval\", {\n projectId: \"my-project-name\",\n notificationEmails: [\n \"testuser@example.com\",\n \"example.user@example.com\",\n ],\n enrolledServices: [{\n cloudProduct: \"all\",\n enrollmentLevel: \"BLOCK_ALL\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject_access_approval = gcp.projects.AccessApprovalSettings(\"project_access_approval\",\n project_id=\"my-project-name\",\n notification_emails=[\n \"testuser@example.com\",\n \"example.user@example.com\",\n ],\n enrolled_services=[gcp.projects.AccessApprovalSettingsEnrolledServiceArgs(\n cloud_product=\"all\",\n enrollment_level=\"BLOCK_ALL\",\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var projectAccessApproval = new Gcp.Projects.AccessApprovalSettings(\"project_access_approval\", new()\n {\n ProjectId = \"my-project-name\",\n NotificationEmails = new[]\n {\n \"testuser@example.com\",\n \"example.user@example.com\",\n },\n EnrolledServices = new[]\n {\n new Gcp.Projects.Inputs.AccessApprovalSettingsEnrolledServiceArgs\n {\n CloudProduct = \"all\",\n EnrollmentLevel = \"BLOCK_ALL\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\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\t_, err := projects.NewAccessApprovalSettings(ctx, \"project_access_approval\", \u0026projects.AccessApprovalSettingsArgs{\n\t\t\tProjectId: pulumi.String(\"my-project-name\"),\n\t\t\tNotificationEmails: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"testuser@example.com\"),\n\t\t\t\tpulumi.String(\"example.user@example.com\"),\n\t\t\t},\n\t\t\tEnrolledServices: projects.AccessApprovalSettingsEnrolledServiceArray{\n\t\t\t\t\u0026projects.AccessApprovalSettingsEnrolledServiceArgs{\n\t\t\t\t\tCloudProduct: pulumi.String(\"all\"),\n\t\t\t\t\tEnrollmentLevel: pulumi.String(\"BLOCK_ALL\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.AccessApprovalSettings;\nimport com.pulumi.gcp.projects.AccessApprovalSettingsArgs;\nimport com.pulumi.gcp.projects.inputs.AccessApprovalSettingsEnrolledServiceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var projectAccessApproval = new AccessApprovalSettings(\"projectAccessApproval\", AccessApprovalSettingsArgs.builder() \n .projectId(\"my-project-name\")\n .notificationEmails( \n \"testuser@example.com\",\n \"example.user@example.com\")\n .enrolledServices(AccessApprovalSettingsEnrolledServiceArgs.builder()\n .cloudProduct(\"all\")\n .enrollmentLevel(\"BLOCK_ALL\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n projectAccessApproval:\n type: gcp:projects:AccessApprovalSettings\n name: project_access_approval\n properties:\n projectId: my-project-name\n notificationEmails:\n - testuser@example.com\n - example.user@example.com\n enrolledServices:\n - cloudProduct: all\n enrollmentLevel: BLOCK_ALL\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Project Access Approval Active Key Version\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRing(\"key_ring\", {\n name: \"key-ring\",\n location: \"global\",\n project: \"my-project-name\",\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"crypto_key\", {\n name: \"crypto-key\",\n keyRing: keyRing.id,\n purpose: \"ASYMMETRIC_SIGN\",\n versionTemplate: {\n algorithm: \"EC_SIGN_P384_SHA384\",\n },\n});\nconst serviceAccount = gcp.accessapproval.getProjectServiceAccount({\n projectId: \"my-project-name\",\n});\nconst iam = new gcp.kms.CryptoKeyIAMMember(\"iam\", {\n cryptoKeyId: cryptoKey.id,\n role: \"roles/cloudkms.signerVerifier\",\n member: serviceAccount.then(serviceAccount =\u003e `serviceAccount:${serviceAccount.accountEmail}`),\n});\nconst cryptoKeyVersion = gcp.kms.getKMSCryptoKeyVersionOutput({\n cryptoKey: cryptoKey.id,\n});\nconst projectAccessApproval = new gcp.projects.AccessApprovalSettings(\"project_access_approval\", {\n projectId: \"my-project-name\",\n activeKeyVersion: cryptoKeyVersion.apply(cryptoKeyVersion =\u003e cryptoKeyVersion.name),\n enrolledServices: [{\n cloudProduct: \"all\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRing(\"key_ring\",\n name=\"key-ring\",\n location=\"global\",\n project=\"my-project-name\")\ncrypto_key = gcp.kms.CryptoKey(\"crypto_key\",\n name=\"crypto-key\",\n key_ring=key_ring.id,\n purpose=\"ASYMMETRIC_SIGN\",\n version_template=gcp.kms.CryptoKeyVersionTemplateArgs(\n algorithm=\"EC_SIGN_P384_SHA384\",\n ))\nservice_account = gcp.accessapproval.get_project_service_account(project_id=\"my-project-name\")\niam = gcp.kms.CryptoKeyIAMMember(\"iam\",\n crypto_key_id=crypto_key.id,\n role=\"roles/cloudkms.signerVerifier\",\n member=f\"serviceAccount:{service_account.account_email}\")\ncrypto_key_version = gcp.kms.get_kms_crypto_key_version_output(crypto_key=crypto_key.id)\nproject_access_approval = gcp.projects.AccessApprovalSettings(\"project_access_approval\",\n project_id=\"my-project-name\",\n active_key_version=crypto_key_version.name,\n enrolled_services=[gcp.projects.AccessApprovalSettingsEnrolledServiceArgs(\n cloud_product=\"all\",\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRing(\"key_ring\", new()\n {\n Name = \"key-ring\",\n Location = \"global\",\n Project = \"my-project-name\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"crypto_key\", new()\n {\n Name = \"crypto-key\",\n KeyRing = keyRing.Id,\n Purpose = \"ASYMMETRIC_SIGN\",\n VersionTemplate = new Gcp.Kms.Inputs.CryptoKeyVersionTemplateArgs\n {\n Algorithm = \"EC_SIGN_P384_SHA384\",\n },\n });\n\n var serviceAccount = Gcp.AccessApproval.GetProjectServiceAccount.Invoke(new()\n {\n ProjectId = \"my-project-name\",\n });\n\n var iam = new Gcp.Kms.CryptoKeyIAMMember(\"iam\", new()\n {\n CryptoKeyId = cryptoKey.Id,\n Role = \"roles/cloudkms.signerVerifier\",\n Member = $\"serviceAccount:{serviceAccount.Apply(getProjectServiceAccountResult =\u003e getProjectServiceAccountResult.AccountEmail)}\",\n });\n\n var cryptoKeyVersion = Gcp.Kms.GetKMSCryptoKeyVersion.Invoke(new()\n {\n CryptoKey = cryptoKey.Id,\n });\n\n var projectAccessApproval = new Gcp.Projects.AccessApprovalSettings(\"project_access_approval\", new()\n {\n ProjectId = \"my-project-name\",\n ActiveKeyVersion = cryptoKeyVersion.Apply(getKMSCryptoKeyVersionResult =\u003e getKMSCryptoKeyVersionResult.Name),\n EnrolledServices = new[]\n {\n new Gcp.Projects.Inputs.AccessApprovalSettingsEnrolledServiceArgs\n {\n CloudProduct = \"all\",\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/accessapproval\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/kms\"\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\tkeyRing, err := kms.NewKeyRing(ctx, \"key_ring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"key-ring\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"crypto_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"crypto-key\"),\n\t\t\tKeyRing: keyRing.ID(),\n\t\t\tPurpose: pulumi.String(\"ASYMMETRIC_SIGN\"),\n\t\t\tVersionTemplate: \u0026kms.CryptoKeyVersionTemplateArgs{\n\t\t\t\tAlgorithm: pulumi.String(\"EC_SIGN_P384_SHA384\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tserviceAccount, err := accessapproval.GetProjectServiceAccount(ctx, \u0026accessapproval.GetProjectServiceAccountArgs{\n\t\t\tProjectId: \"my-project-name\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewCryptoKeyIAMMember(ctx, \"iam\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: cryptoKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.signerVerifier\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v\", serviceAccount.AccountEmail)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyVersion := kms.GetKMSCryptoKeyVersionOutput(ctx, kms.GetKMSCryptoKeyVersionOutputArgs{\n\t\t\tCryptoKey: cryptoKey.ID(),\n\t\t}, nil)\n\t\t_, err = projects.NewAccessApprovalSettings(ctx, \"project_access_approval\", \u0026projects.AccessApprovalSettingsArgs{\n\t\t\tProjectId: pulumi.String(\"my-project-name\"),\n\t\t\tActiveKeyVersion: cryptoKeyVersion.ApplyT(func(cryptoKeyVersion kms.GetKMSCryptoKeyVersionResult) (*string, error) {\n\t\t\t\treturn \u0026cryptoKeyVersion.Name, nil\n\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\tEnrolledServices: projects.AccessApprovalSettingsEnrolledServiceArray{\n\t\t\t\t\u0026projects.AccessApprovalSettingsEnrolledServiceArgs{\n\t\t\t\t\tCloudProduct: pulumi.String(\"all\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.kms.inputs.CryptoKeyVersionTemplateArgs;\nimport com.pulumi.gcp.accessapproval.AccessapprovalFunctions;\nimport com.pulumi.gcp.accessapproval.inputs.GetProjectServiceAccountArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.kms.KmsFunctions;\nimport com.pulumi.gcp.kms.inputs.GetKMSCryptoKeyVersionArgs;\nimport com.pulumi.gcp.projects.AccessApprovalSettings;\nimport com.pulumi.gcp.projects.AccessApprovalSettingsArgs;\nimport com.pulumi.gcp.projects.inputs.AccessApprovalSettingsEnrolledServiceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .name(\"key-ring\")\n .location(\"global\")\n .project(\"my-project-name\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .name(\"crypto-key\")\n .keyRing(keyRing.id())\n .purpose(\"ASYMMETRIC_SIGN\")\n .versionTemplate(CryptoKeyVersionTemplateArgs.builder()\n .algorithm(\"EC_SIGN_P384_SHA384\")\n .build())\n .build());\n\n final var serviceAccount = AccessapprovalFunctions.getProjectServiceAccount(GetProjectServiceAccountArgs.builder()\n .projectId(\"my-project-name\")\n .build());\n\n var iam = new CryptoKeyIAMMember(\"iam\", CryptoKeyIAMMemberArgs.builder() \n .cryptoKeyId(cryptoKey.id())\n .role(\"roles/cloudkms.signerVerifier\")\n .member(String.format(\"serviceAccount:%s\", serviceAccount.applyValue(getProjectServiceAccountResult -\u003e getProjectServiceAccountResult.accountEmail())))\n .build());\n\n final var cryptoKeyVersion = KmsFunctions.getKMSCryptoKeyVersion(GetKMSCryptoKeyVersionArgs.builder()\n .cryptoKey(cryptoKey.id())\n .build());\n\n var projectAccessApproval = new AccessApprovalSettings(\"projectAccessApproval\", AccessApprovalSettingsArgs.builder() \n .projectId(\"my-project-name\")\n .activeKeyVersion(cryptoKeyVersion.applyValue(getKMSCryptoKeyVersionResult -\u003e getKMSCryptoKeyVersionResult).applyValue(cryptoKeyVersion -\u003e cryptoKeyVersion.applyValue(getKMSCryptoKeyVersionResult -\u003e getKMSCryptoKeyVersionResult.name())))\n .enrolledServices(AccessApprovalSettingsEnrolledServiceArgs.builder()\n .cloudProduct(\"all\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyRing:\n type: gcp:kms:KeyRing\n name: key_ring\n properties:\n name: key-ring\n location: global\n project: my-project-name\n cryptoKey:\n type: gcp:kms:CryptoKey\n name: crypto_key\n properties:\n name: crypto-key\n keyRing: ${keyRing.id}\n purpose: ASYMMETRIC_SIGN\n versionTemplate:\n algorithm: EC_SIGN_P384_SHA384\n iam:\n type: gcp:kms:CryptoKeyIAMMember\n properties:\n cryptoKeyId: ${cryptoKey.id}\n role: roles/cloudkms.signerVerifier\n member: serviceAccount:${serviceAccount.accountEmail}\n projectAccessApproval:\n type: gcp:projects:AccessApprovalSettings\n name: project_access_approval\n properties:\n projectId: my-project-name\n activeKeyVersion: ${cryptoKeyVersion.name}\n enrolledServices:\n - cloudProduct: all\nvariables:\n serviceAccount:\n fn::invoke:\n Function: gcp:accessapproval:getProjectServiceAccount\n Arguments:\n projectId: my-project-name\n cryptoKeyVersion:\n fn::invoke:\n Function: gcp:kms:getKMSCryptoKeyVersion\n Arguments:\n cryptoKey: ${cryptoKey.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nProjectSettings can be imported using any of these accepted formats:\n\n* `projects/{{project_id}}/accessApprovalSettings`\n\n* `{{project_id}}`\n\nWhen using the `pulumi import` command, ProjectSettings can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:projects/accessApprovalSettings:AccessApprovalSettings default projects/{{project_id}}/accessApprovalSettings\n```\n\n```sh\n$ pulumi import gcp:projects/accessApprovalSettings:AccessApprovalSettings default {{project_id}}\n```\n\n", "properties": { @@ -218640,7 +219289,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 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});\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});\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)\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\")\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 ))\n```\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 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 });\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});\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\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})\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\treturn nil\n\t})\n}\n```\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.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 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 .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 }\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 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 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});\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});\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)\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 })\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 ))\n```\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 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 });\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});\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\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})\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\treturn nil\n\t})\n}\n```\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.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 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());\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 }\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 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", @@ -218686,6 +219335,13 @@ }, "description": "Output only. PSC connections for discovery of the cluster topology and accessing the cluster.\nStructure is documented below.\n" }, + "redisConfigs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore\ndocumentation for the list of supported parameters:\nhttps://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations\n" + }, "region": { "type": "string", "description": "The name of the region of the Redis cluster.\n" @@ -218765,6 +219421,13 @@ }, "description": "Required. Each PscConfig configures the consumer network where two\nnetwork addresses will be designated to the cluster for client access.\nCurrently, only one PscConfig is supported.\nStructure is documented below.\n" }, + "redisConfigs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore\ndocumentation for the list of supported parameters:\nhttps://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations\n" + }, "region": { "type": "string", "description": "The name of the region of the Redis cluster.\n", @@ -218839,6 +219502,13 @@ }, "description": "Output only. PSC connections for discovery of the cluster topology and accessing the cluster.\nStructure is documented below.\n" }, + "redisConfigs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore\ndocumentation for the list of supported parameters:\nhttps://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations\n" + }, "region": { "type": "string", "description": "The name of the region of the Redis cluster.\n", @@ -257230,6 +257900,50 @@ "type": "object" } }, + "gcp:storage/getBuckets:getBuckets": { + "description": "Gets a list of existing GCS buckets.\nSee [the official documentation](https://cloud.google.com/storage/docs/introduction)\nand [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list).\n\n## Example Usage\n\nExample GCS buckets.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = gcp.storage.getBuckets({\n project: \"example-project\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.storage.get_buckets(project=\"example-project\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = Gcp.Storage.GetBuckets.Invoke(new()\n {\n Project = \"example-project\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.GetBuckets(ctx, \u0026storage.GetBucketsArgs{\n\t\t\tProject: pulumi.StringRef(\"example-project\"),\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.storage.StorageFunctions;\nimport com.pulumi.gcp.storage.inputs.GetBucketsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = StorageFunctions.getBuckets(GetBucketsArgs.builder()\n .project(\"example-project\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n Function: gcp:storage:getBuckets\n Arguments:\n project: example-project\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "inputs": { + "description": "A collection of arguments for invoking getBuckets.\n", + "properties": { + "prefix": { + "type": "string", + "description": "Filter results to buckets whose names begin with this prefix.\n" + }, + "project": { + "type": "string", + "description": "The ID of the project. If it is not provided, the provider project is used.\n" + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getBuckets.\n", + "properties": { + "buckets": { + "description": "A list of all retrieved GCS buckets. Structure is defined below.\n", + "items": { + "$ref": "#/types/gcp:storage/getBucketsBucket:getBucketsBucket" + }, + "type": "array" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "prefix": { + "type": "string" + }, + "project": { + "type": "string" + } + }, + "required": [ + "buckets", + "id" + ], + "type": "object" + } + }, "gcp:storage/getObjectSignedUrl:getObjectSignedUrl": { "description": "The Google Cloud storage signed URL data source generates a signed URL for a given storage object. Signed URLs provide a way to give time-limited read or write access to anyone in possession of the URL, regardless of whether they have a Google account.\n\nFor more info about signed URL's is available [here](https://cloud.google.com/storage/docs/access-control/signed-urls).\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 artifact = gcp.storage.getObjectSignedUrl({\n bucket: \"install_binaries\",\n path: \"path/to/install_file.bin\",\n});\nconst vm = new gcp.compute.Instance(\"vm\", {name: \"vm\"});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nartifact = gcp.storage.get_object_signed_url(bucket=\"install_binaries\",\n path=\"path/to/install_file.bin\")\nvm = gcp.compute.Instance(\"vm\", name=\"vm\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var artifact = Gcp.Storage.GetObjectSignedUrl.Invoke(new()\n {\n Bucket = \"install_binaries\",\n Path = \"path/to/install_file.bin\",\n });\n\n var vm = new Gcp.Compute.Instance(\"vm\", new()\n {\n Name = \"vm\",\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/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.GetObjectSignedUrl(ctx, \u0026storage.GetObjectSignedUrlArgs{\n\t\t\tBucket: \"install_binaries\",\n\t\t\tPath: \"path/to/install_file.bin\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewInstance(ctx, \"vm\", \u0026compute.InstanceArgs{\n\t\t\tName: pulumi.String(\"vm\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.StorageFunctions;\nimport com.pulumi.gcp.storage.inputs.GetObjectSignedUrlArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var artifact = StorageFunctions.getObjectSignedUrl(GetObjectSignedUrlArgs.builder()\n .bucket(\"install_binaries\")\n .path(\"path/to/install_file.bin\")\n .build());\n\n var vm = new Instance(\"vm\", InstanceArgs.builder() \n .name(\"vm\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n vm:\n type: gcp:compute:Instance\n properties:\n name: vm\nvariables:\n artifact:\n fn::invoke:\n Function: gcp:storage:getObjectSignedUrl\n Arguments:\n bucket: install_binaries\n path: path/to/install_file.bin\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Full Example\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst getUrl = std.file({\n input: \"path/to/credentials.json\",\n}).then(invoke =\u003e gcp.storage.getObjectSignedUrl({\n bucket: \"fried_chicken\",\n path: \"path/to/file\",\n contentMd5: \"pRviqwS4c4OTJRTe03FD1w==\",\n contentType: \"text/plain\",\n duration: \"2d\",\n credentials: invoke.result,\n extensionHeaders: {\n \"x-goog-if-generation-match\": \"1\",\n },\n}));\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\nget_url = gcp.storage.get_object_signed_url(bucket=\"fried_chicken\",\n path=\"path/to/file\",\n content_md5=\"pRviqwS4c4OTJRTe03FD1w==\",\n content_type=\"text/plain\",\n duration=\"2d\",\n credentials=std.file(input=\"path/to/credentials.json\").result,\n extension_headers={\n \"x-goog-if-generation-match\": \"1\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var getUrl = Gcp.Storage.GetObjectSignedUrl.Invoke(new()\n {\n Bucket = \"fried_chicken\",\n Path = \"path/to/file\",\n ContentMd5 = \"pRviqwS4c4OTJRTe03FD1w==\",\n ContentType = \"text/plain\",\n Duration = \"2d\",\n Credentials = Std.File.Invoke(new()\n {\n Input = \"path/to/credentials.json\",\n }).Result,\n ExtensionHeaders = \n {\n { \"x-goog-if-generation-match\", \"1\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\nfunc main() {\npulumi.Run(func(ctx *pulumi.Context) error {\n_, err := storage.GetObjectSignedUrl(ctx, invokeFile, err := std.File(ctx, \u0026std.FileArgs{\nInput: \"path/to/credentials.json\",\n}, nil)\nif err != nil {\nreturn err\n}\n\u0026storage.GetObjectSignedUrlArgs{\nBucket: \"fried_chicken\",\nPath: \"path/to/file\",\nContentMd5: pulumi.StringRef(\"pRviqwS4c4OTJRTe03FD1w==\"),\nContentType: pulumi.StringRef(\"text/plain\"),\nDuration: pulumi.StringRef(\"2d\"),\nCredentials: pulumi.StringRef(invokeFile.Result),\nExtensionHeaders: map[string]interface{}{\n\"x-goog-if-generation-match\": \"1\",\n},\n}, nil);\nif err != nil {\nreturn err\n}\nreturn nil\n})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.StorageFunctions;\nimport com.pulumi.gcp.storage.inputs.GetObjectSignedUrlArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var getUrl = StorageFunctions.getObjectSignedUrl(GetObjectSignedUrlArgs.builder()\n .bucket(\"fried_chicken\")\n .path(\"path/to/file\")\n .contentMd5(\"pRviqwS4c4OTJRTe03FD1w==\")\n .contentType(\"text/plain\")\n .duration(\"2d\")\n .credentials(StdFunctions.file(FileArgs.builder()\n .input(\"path/to/credentials.json\")\n .build()).result())\n .extensionHeaders(Map.of(\"x-goog-if-generation-match\", 1))\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n getUrl:\n fn::invoke:\n Function: gcp:storage:getObjectSignedUrl\n Arguments:\n bucket: fried_chicken\n path: path/to/file\n contentMd5: pRviqwS4c4OTJRTe03FD1w==\n contentType: text/plain\n duration: 2d\n credentials:\n fn::invoke:\n Function: std:file\n Arguments:\n input: path/to/credentials.json\n Return: result\n extensionHeaders:\n x-goog-if-generation-match: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", "inputs": { diff --git a/provider/provider_yaml_test.go b/provider/provider_yaml_test.go index 9fb71eb147..1df884a82d 100644 --- a/provider/provider_yaml_test.go +++ b/provider/provider_yaml_test.go @@ -432,6 +432,7 @@ func TestNodePoolGpuAcceleratorPanic(t *testing.T) { "resourceManagerTags": {}, "sandboxConfig": null, "serviceAccount": "04da6b54-80e4-46f7-96ec-b56ff0331ba9", + "secondaryBootDisks": [], "shieldedInstanceConfig": "04da6b54-80e4-46f7-96ec-b56ff0331ba9", "soleTenantConfig": null, "spot": false, diff --git a/provider/resources.go b/provider/resources.go index 1e39bea54b..0c952c5a14 100644 --- a/provider/resources.go +++ b/provider/resources.go @@ -131,6 +131,7 @@ const ( gcpOsConfig = "OsConfig" // OsConfig resources gcpOsLogin = "OsLogin" // OsLogin resources gcpParallelStore = "ParallelStore" // ParallelStore resources + gcpPrivilegedAccessManager = "PrivilegedAccessManager" // Privileged Access Manager gcpProject = "Projects" // Project resources gcpPubSub = "PubSub" // PubSub resources gcpRecaptcha = "Recaptcha" // Recaptcha resources @@ -255,6 +256,7 @@ var moduleMapping = map[string]string{ "os_login": gcpOsLogin, "parallelstore": gcpParallelStore, "privateca": gcpCertificateAuthority, + "privileged_access_manager": gcpPrivilegedAccessManager, "project": gcpProject, "public": gcpCompute, "pubsub": gcpPubSub, @@ -3332,6 +3334,12 @@ func Provider() tfbridge.ProviderInfo { "google_compute_network_endpoints": { Tok: gcpResource(gcpCompute, "NetworkEndpointList"), }, + "google_privileged_access_manager_entitlement": { + Tok: gcpResource(gcpPrivilegedAccessManager, "entitlement"), + Docs: &tfbridge.DocInfo{ + Source: "privileged_access_manager_entitlement.html.markdown", + }, + }, }, DataSources: map[string]*tfbridge.DataSourceInfo{ // Access Approval diff --git a/sdk/dotnet/Alloydb/Cluster.cs b/sdk/dotnet/Alloydb/Cluster.cs index 7b1f26dff7..b20b72ffec 100644 --- a/sdk/dotnet/Alloydb/Cluster.cs +++ b/sdk/dotnet/Alloydb/Cluster.cs @@ -445,6 +445,13 @@ public partial class Cluster : global::Pulumi.CustomResource [Output("location")] public Output Location { get; private set; } = null!; + /// + /// MaintenanceUpdatePolicy defines the policy for system updates. + /// Structure is documented below. + /// + [Output("maintenanceUpdatePolicy")] + public Output MaintenanceUpdatePolicy { get; private set; } = null!; + /// /// Cluster created via DMS migration. /// Structure is documented below. @@ -689,6 +696,13 @@ public InputMap Labels [Input("location", required: true)] public Input Location { get; set; } = null!; + /// + /// MaintenanceUpdatePolicy defines the policy for system updates. + /// Structure is documented below. + /// + [Input("maintenanceUpdatePolicy")] + public Input? MaintenanceUpdatePolicy { get; set; } + /// /// (Optional, Deprecated) /// The relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form: @@ -914,6 +928,13 @@ public InputMap Labels [Input("location")] public Input? Location { get; set; } + /// + /// MaintenanceUpdatePolicy defines the policy for system updates. + /// Structure is documented below. + /// + [Input("maintenanceUpdatePolicy")] + public Input? MaintenanceUpdatePolicy { get; set; } + [Input("migrationSources")] private InputList? _migrationSources; diff --git a/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyArgs.cs b/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyArgs.cs new file mode 100644 index 0000000000..257b4d0a6c --- /dev/null +++ b/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyArgs.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.Alloydb.Inputs +{ + + public sealed class ClusterMaintenanceUpdatePolicyArgs : global::Pulumi.ResourceArgs + { + [Input("maintenanceWindows")] + private InputList? _maintenanceWindows; + + /// + /// Preferred windows to perform maintenance. Currently limited to 1. + /// Structure is documented below. + /// + public InputList MaintenanceWindows + { + get => _maintenanceWindows ?? (_maintenanceWindows = new InputList()); + set => _maintenanceWindows = value; + } + + public ClusterMaintenanceUpdatePolicyArgs() + { + } + public static new ClusterMaintenanceUpdatePolicyArgs Empty => new ClusterMaintenanceUpdatePolicyArgs(); + } +} diff --git a/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyGetArgs.cs b/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyGetArgs.cs new file mode 100644 index 0000000000..195684063f --- /dev/null +++ b/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyGetArgs.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.Alloydb.Inputs +{ + + public sealed class ClusterMaintenanceUpdatePolicyGetArgs : global::Pulumi.ResourceArgs + { + [Input("maintenanceWindows")] + private InputList? _maintenanceWindows; + + /// + /// Preferred windows to perform maintenance. Currently limited to 1. + /// Structure is documented below. + /// + public InputList MaintenanceWindows + { + get => _maintenanceWindows ?? (_maintenanceWindows = new InputList()); + set => _maintenanceWindows = value; + } + + public ClusterMaintenanceUpdatePolicyGetArgs() + { + } + public static new ClusterMaintenanceUpdatePolicyGetArgs Empty => new ClusterMaintenanceUpdatePolicyGetArgs(); + } +} diff --git a/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs.cs b/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs.cs new file mode 100644 index 0000000000..caeb04b0ab --- /dev/null +++ b/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs.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.Alloydb.Inputs +{ + + public sealed class ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs : global::Pulumi.ResourceArgs + { + /// + /// Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + /// Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + /// + [Input("day", required: true)] + public Input Day { get; set; } = null!; + + /// + /// Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + /// Structure is documented below. + /// + [Input("startTime", required: true)] + public Input StartTime { get; set; } = null!; + + public ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs() + { + } + public static new ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs Empty => new ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs(); + } +} diff --git a/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowGetArgs.cs b/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowGetArgs.cs new file mode 100644 index 0000000000..c40ca95ccc --- /dev/null +++ b/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowGetArgs.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.Alloydb.Inputs +{ + + public sealed class ClusterMaintenanceUpdatePolicyMaintenanceWindowGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + /// Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + /// + [Input("day", required: true)] + public Input Day { get; set; } = null!; + + /// + /// Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + /// Structure is documented below. + /// + [Input("startTime", required: true)] + public Input StartTime { get; set; } = null!; + + public ClusterMaintenanceUpdatePolicyMaintenanceWindowGetArgs() + { + } + public static new ClusterMaintenanceUpdatePolicyMaintenanceWindowGetArgs Empty => new ClusterMaintenanceUpdatePolicyMaintenanceWindowGetArgs(); + } +} diff --git a/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs.cs b/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs.cs new file mode 100644 index 0000000000..1bba4a6ca0 --- /dev/null +++ b/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs.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.Alloydb.Inputs +{ + + public sealed class ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs : global::Pulumi.ResourceArgs + { + /// + /// Hours of day in 24 hour format. Should be from 0 to 23. + /// + [Input("hours", required: true)] + public Input Hours { get; set; } = null!; + + /// + /// Minutes of hour of day. Currently, only the value 0 is supported. + /// + [Input("minutes")] + public Input? Minutes { get; set; } + + /// + /// Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + /// + [Input("nanos")] + public Input? Nanos { get; set; } + + /// + /// Seconds of minutes of the time. Currently, only the value 0 is supported. + /// + [Input("seconds")] + public Input? Seconds { get; set; } + + public ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs() + { + } + public static new ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs Empty => new ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs(); + } +} diff --git a/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeGetArgs.cs b/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeGetArgs.cs new file mode 100644 index 0000000000..a2471b0959 --- /dev/null +++ b/sdk/dotnet/Alloydb/Inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeGetArgs.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.Alloydb.Inputs +{ + + public sealed class ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Hours of day in 24 hour format. Should be from 0 to 23. + /// + [Input("hours", required: true)] + public Input Hours { get; set; } = null!; + + /// + /// Minutes of hour of day. Currently, only the value 0 is supported. + /// + [Input("minutes")] + public Input? Minutes { get; set; } + + /// + /// Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + /// + [Input("nanos")] + public Input? Nanos { get; set; } + + /// + /// Seconds of minutes of the time. Currently, only the value 0 is supported. + /// + [Input("seconds")] + public Input? Seconds { get; set; } + + public ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeGetArgs() + { + } + public static new ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeGetArgs Empty => new ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeGetArgs(); + } +} diff --git a/sdk/dotnet/Alloydb/Outputs/ClusterMaintenanceUpdatePolicy.cs b/sdk/dotnet/Alloydb/Outputs/ClusterMaintenanceUpdatePolicy.cs new file mode 100644 index 0000000000..ca3236784e --- /dev/null +++ b/sdk/dotnet/Alloydb/Outputs/ClusterMaintenanceUpdatePolicy.cs @@ -0,0 +1,28 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Alloydb.Outputs +{ + + [OutputType] + public sealed class ClusterMaintenanceUpdatePolicy + { + /// + /// Preferred windows to perform maintenance. Currently limited to 1. + /// Structure is documented below. + /// + public readonly ImmutableArray MaintenanceWindows; + + [OutputConstructor] + private ClusterMaintenanceUpdatePolicy(ImmutableArray maintenanceWindows) + { + MaintenanceWindows = maintenanceWindows; + } + } +} diff --git a/sdk/dotnet/Alloydb/Outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindow.cs b/sdk/dotnet/Alloydb/Outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindow.cs new file mode 100644 index 0000000000..847492d3cb --- /dev/null +++ b/sdk/dotnet/Alloydb/Outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindow.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.Alloydb.Outputs +{ + + [OutputType] + public sealed class ClusterMaintenanceUpdatePolicyMaintenanceWindow + { + /// + /// Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + /// Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + /// + public readonly string Day; + /// + /// Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + /// Structure is documented below. + /// + public readonly Outputs.ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime StartTime; + + [OutputConstructor] + private ClusterMaintenanceUpdatePolicyMaintenanceWindow( + string day, + + Outputs.ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime startTime) + { + Day = day; + StartTime = startTime; + } + } +} diff --git a/sdk/dotnet/Alloydb/Outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime.cs b/sdk/dotnet/Alloydb/Outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime.cs new file mode 100644 index 0000000000..0f8c848d95 --- /dev/null +++ b/sdk/dotnet/Alloydb/Outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime.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.Alloydb.Outputs +{ + + [OutputType] + public sealed class ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime + { + /// + /// Hours of day in 24 hour format. Should be from 0 to 23. + /// + public readonly int Hours; + /// + /// Minutes of hour of day. Currently, only the value 0 is supported. + /// + public readonly int? Minutes; + /// + /// Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + /// + public readonly int? Nanos; + /// + /// Seconds of minutes of the time. Currently, only the value 0 is supported. + /// + public readonly int? Seconds; + + [OutputConstructor] + private ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime( + int hours, + + int? minutes, + + int? nanos, + + int? seconds) + { + Hours = hours; + Minutes = minutes; + Nanos = nanos; + Seconds = seconds; + } + } +} diff --git a/sdk/dotnet/ApplicationIntegration/AuthConfig.cs b/sdk/dotnet/ApplicationIntegration/AuthConfig.cs index 3746b4c897..64540ce349 100644 --- a/sdk/dotnet/ApplicationIntegration/AuthConfig.cs +++ b/sdk/dotnet/ApplicationIntegration/AuthConfig.cs @@ -34,7 +34,6 @@ namespace Pulumi.Gcp.ApplicationIntegration /// var client = new Gcp.ApplicationIntegration.Client("client", new() /// { /// Location = "us-west1", - /// ProvisionGmek = true, /// }); /// /// var basicExample = new Gcp.ApplicationIntegration.AuthConfig("basic_example", new() diff --git a/sdk/dotnet/ApplicationIntegration/Client.cs b/sdk/dotnet/ApplicationIntegration/Client.cs index 05ac7199c8..fecb065c55 100644 --- a/sdk/dotnet/ApplicationIntegration/Client.cs +++ b/sdk/dotnet/ApplicationIntegration/Client.cs @@ -34,12 +34,11 @@ namespace Pulumi.Gcp.ApplicationIntegration /// var example = new Gcp.ApplicationIntegration.Client("example", new() /// { /// Location = "us-central1", - /// ProvisionGmek = true, /// }); /// /// }); /// ``` - /// ### Integrations Client Advance + /// ### Integrations Client Full /// /// ```csharp /// using System.Collections.Generic; @@ -78,7 +77,7 @@ namespace Pulumi.Gcp.ApplicationIntegration /// var example = new Gcp.ApplicationIntegration.Client("example", new() /// { /// Location = "us-east1", - /// CreateSampleWorkflows = true, + /// CreateSampleIntegrations = true, /// RunAsServiceAccount = serviceAccount.Email, /// CloudKmsConfig = new Gcp.ApplicationIntegration.Inputs.ClientCloudKmsConfigArgs /// { @@ -128,7 +127,16 @@ public partial class Client : global::Pulumi.CustomResource public Output CloudKmsConfig { get; private set; } = null!; /// + /// Indicates if sample integrations should be created along with provisioning. + /// + [Output("createSampleIntegrations")] + public Output CreateSampleIntegrations { get; private set; } = null!; + + /// + /// (Optional, Deprecated) /// Indicates if sample workflow should be created along with provisioning. + /// + /// > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. /// [Output("createSampleWorkflows")] public Output CreateSampleWorkflows { get; private set; } = null!; @@ -150,7 +158,10 @@ public partial class Client : global::Pulumi.CustomResource public Output Project { get; private set; } = null!; /// + /// (Optional, Deprecated) /// Indicates provision with GMEK or CMEK. + /// + /// > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. /// [Output("provisionGmek")] public Output ProvisionGmek { get; private set; } = null!; @@ -215,7 +226,16 @@ public sealed class ClientArgs : global::Pulumi.ResourceArgs public Input? CloudKmsConfig { get; set; } /// + /// Indicates if sample integrations should be created along with provisioning. + /// + [Input("createSampleIntegrations")] + public Input? CreateSampleIntegrations { get; set; } + + /// + /// (Optional, Deprecated) /// Indicates if sample workflow should be created along with provisioning. + /// + /// > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. /// [Input("createSampleWorkflows")] public Input? CreateSampleWorkflows { get; set; } @@ -237,7 +257,10 @@ public sealed class ClientArgs : global::Pulumi.ResourceArgs public Input? Project { get; set; } /// + /// (Optional, Deprecated) /// Indicates provision with GMEK or CMEK. + /// + /// > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. /// [Input("provisionGmek")] public Input? ProvisionGmek { get; set; } @@ -264,7 +287,16 @@ public sealed class ClientState : global::Pulumi.ResourceArgs public Input? CloudKmsConfig { get; set; } /// + /// Indicates if sample integrations should be created along with provisioning. + /// + [Input("createSampleIntegrations")] + public Input? CreateSampleIntegrations { get; set; } + + /// + /// (Optional, Deprecated) /// Indicates if sample workflow should be created along with provisioning. + /// + /// > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. /// [Input("createSampleWorkflows")] public Input? CreateSampleWorkflows { get; set; } @@ -286,7 +318,10 @@ public sealed class ClientState : global::Pulumi.ResourceArgs public Input? Project { get; set; } /// + /// (Optional, Deprecated) /// Indicates provision with GMEK or CMEK. + /// + /// > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. /// [Input("provisionGmek")] public Input? ProvisionGmek { get; set; } diff --git a/sdk/dotnet/BigQuery/Dataset.cs b/sdk/dotnet/BigQuery/Dataset.cs index c3febc464c..ac57a399eb 100644 --- a/sdk/dotnet/BigQuery/Dataset.cs +++ b/sdk/dotnet/BigQuery/Dataset.cs @@ -254,7 +254,7 @@ namespace Pulumi.Gcp.BigQuery /// /// }); /// ``` - /// ### Bigquery Dataset External Reference Aws Docs + /// ### Bigquery Dataset External Reference Aws /// /// ```csharp /// using System.Collections.Generic; diff --git a/sdk/dotnet/BigQuery/Job.cs b/sdk/dotnet/BigQuery/Job.cs index 8382d07c99..78503fc8c1 100644 --- a/sdk/dotnet/BigQuery/Job.cs +++ b/sdk/dotnet/BigQuery/Job.cs @@ -351,8 +351,10 @@ namespace Pulumi.Gcp.BigQuery /// /// return await Deployment.RunAsync(() => /// { + /// var count = 2; + /// /// var sourceDataset = new List<Gcp.BigQuery.Dataset>(); - /// for (var rangeIndex = 0; rangeIndex < 2; rangeIndex++) + /// for (var rangeIndex = 0; rangeIndex < count; rangeIndex++) /// { /// var range = new { Value = rangeIndex }; /// sourceDataset.Add(new Gcp.BigQuery.Dataset($"source-{range.Value}", new() @@ -364,7 +366,7 @@ namespace Pulumi.Gcp.BigQuery /// })); /// } /// var source = new List<Gcp.BigQuery.Table>(); - /// for (var rangeIndex = 0; rangeIndex < sourceDataset.Length; rangeIndex++) + /// for (var rangeIndex = 0; rangeIndex < count; rangeIndex++) /// { /// var range = new { Value = rangeIndex }; /// source.Add(new Gcp.BigQuery.Table($"source-{range.Value}", new() diff --git a/sdk/dotnet/CloudRunV2/Job.cs b/sdk/dotnet/CloudRunV2/Job.cs index 0044dbaa89..5a17c57690 100644 --- a/sdk/dotnet/CloudRunV2/Job.cs +++ b/sdk/dotnet/CloudRunV2/Job.cs @@ -276,7 +276,7 @@ namespace Pulumi.Gcp.CloudRunV2 /// { /// Name = "cloudrun-job", /// Location = "us-central1", - /// LaunchStage = "BETA", + /// LaunchStage = "GA", /// Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs /// { /// Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs @@ -304,7 +304,6 @@ namespace Pulumi.Gcp.CloudRunV2 /// }, /// }, /// }, - /// Egress = "ALL_TRAFFIC", /// }, /// }, /// }, diff --git a/sdk/dotnet/CloudRunV2/Service.cs b/sdk/dotnet/CloudRunV2/Service.cs index fba5500bd2..aa3ab87b7e 100644 --- a/sdk/dotnet/CloudRunV2/Service.cs +++ b/sdk/dotnet/CloudRunV2/Service.cs @@ -279,7 +279,7 @@ namespace Pulumi.Gcp.CloudRunV2 /// { /// Name = "cloudrun-service", /// Location = "us-central1", - /// LaunchStage = "BETA", + /// LaunchStage = "GA", /// Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs /// { /// Containers = new[] @@ -305,7 +305,6 @@ namespace Pulumi.Gcp.CloudRunV2 /// }, /// }, /// }, - /// Egress = "ALL_TRAFFIC", /// }, /// }, /// }); diff --git a/sdk/dotnet/Compute/Inputs/RouterPeerBfdArgs.cs b/sdk/dotnet/Compute/Inputs/RouterPeerBfdArgs.cs index 8fe0f6ffbb..f09a251cba 100644 --- a/sdk/dotnet/Compute/Inputs/RouterPeerBfdArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RouterPeerBfdArgs.cs @@ -36,6 +36,8 @@ public sealed class RouterPeerBfdArgs : global::Pulumi.ResourceArgs /// The number of consecutive BFD packets that must be missed before /// BFD declares that a peer is unavailable. If set, the value must /// be a value between 5 and 16. + /// + /// <a name="nested_md5_authentication_key"></a>The `md5_authentication_key` block supports: /// [Input("multiplier")] public Input? Multiplier { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/RouterPeerBfdGetArgs.cs b/sdk/dotnet/Compute/Inputs/RouterPeerBfdGetArgs.cs index 01b7dc73b2..b95a8f51d1 100644 --- a/sdk/dotnet/Compute/Inputs/RouterPeerBfdGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RouterPeerBfdGetArgs.cs @@ -36,6 +36,8 @@ public sealed class RouterPeerBfdGetArgs : global::Pulumi.ResourceArgs /// The number of consecutive BFD packets that must be missed before /// BFD declares that a peer is unavailable. If set, the value must /// be a value between 5 and 16. + /// + /// <a name="nested_md5_authentication_key"></a>The `md5_authentication_key` block supports: /// [Input("multiplier")] public Input? Multiplier { get; set; } diff --git a/sdk/dotnet/Compute/Outputs/RouterPeerBfd.cs b/sdk/dotnet/Compute/Outputs/RouterPeerBfd.cs index 6fdc6267b6..4f317ecb16 100644 --- a/sdk/dotnet/Compute/Outputs/RouterPeerBfd.cs +++ b/sdk/dotnet/Compute/Outputs/RouterPeerBfd.cs @@ -33,6 +33,8 @@ public sealed class RouterPeerBfd /// The number of consecutive BFD packets that must be missed before /// BFD declares that a peer is unavailable. If set, the value must /// be a value between 5 and 16. + /// + /// <a name="nested_md5_authentication_key"></a>The `md5_authentication_key` block supports: /// public readonly int? Multiplier; /// diff --git a/sdk/dotnet/Compute/RouterPeer.cs b/sdk/dotnet/Compute/RouterPeer.cs index 9c26e8be15..32f0570905 100644 --- a/sdk/dotnet/Compute/RouterPeer.cs +++ b/sdk/dotnet/Compute/RouterPeer.cs @@ -238,6 +238,35 @@ namespace Pulumi.Gcp.Compute /// }); /// ``` /// + /// ### Router Peer Md5 Authentication Key + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foobar = new Gcp.Compute.RouterPeer("foobar", new() + /// { + /// Name = "%s-peer", + /// Router = foobarGoogleComputeRouter.Name, + /// Region = foobarGoogleComputeRouter.Region, + /// PeerAsn = 65515, + /// AdvertisedRoutePriority = 100, + /// Interface = foobarGoogleComputeRouterInterface.Name, + /// PeerIpAddress = "169.254.3.2", + /// Md5AuthenticationKey = new Gcp.Compute.Inputs.RouterPeerMd5AuthenticationKeyArgs + /// { + /// Name = "%s-peer-key", + /// Key = "%s-peer-key-value", + /// }, + /// }); + /// + /// }); + /// ``` + /// /// ## Import /// /// RouterBgpPeer can be imported using any of these accepted formats: @@ -369,8 +398,8 @@ public partial class RouterPeer : global::Pulumi.CustomResource public Output ManagementType { get; private set; } = null!; /// - /// Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - /// Router.md5_authentication_keys. The field must comply with RFC1035. + /// Configuration for MD5 authentication on the BGP session. + /// Structure is documented below. /// [Output("md5AuthenticationKey")] public Output Md5AuthenticationKey { get; private set; } = null!; @@ -597,8 +626,8 @@ public InputList AdvertisedIpRanges public Input? Ipv6NexthopAddress { get; set; } /// - /// Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - /// Router.md5_authentication_keys. The field must comply with RFC1035. + /// Configuration for MD5 authentication on the BGP session. + /// Structure is documented below. /// [Input("md5AuthenticationKey")] public Input? Md5AuthenticationKey { get; set; } @@ -793,8 +822,8 @@ public InputList AdvertisedIpRanges public Input? ManagementType { get; set; } /// - /// Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - /// Router.md5_authentication_keys. The field must comply with RFC1035. + /// Configuration for MD5 authentication on the BGP session. + /// Structure is documented below. /// [Input("md5AuthenticationKey")] public Input? Md5AuthenticationKey { get; set; } diff --git a/sdk/dotnet/Config/Config.cs b/sdk/dotnet/Config/Config.cs index ee45d7117c..86dbdd93a5 100644 --- a/sdk/dotnet/Config/Config.cs +++ b/sdk/dotnet/Config/Config.cs @@ -907,6 +907,13 @@ public static string? PrivatecaCustomEndpoint set => _privatecaCustomEndpoint.Set(value); } + private static readonly __Value _privilegedAccessManagerCustomEndpoint = new __Value(() => __config.Get("privilegedAccessManagerCustomEndpoint")); + public static string? PrivilegedAccessManagerCustomEndpoint + { + get => _privilegedAccessManagerCustomEndpoint.Get(); + set => _privilegedAccessManagerCustomEndpoint.Set(value); + } + private static readonly __Value _project = new __Value(() => __config.Get("project") ?? Utilities.GetEnv("GOOGLE_PROJECT", "GOOGLE_CLOUD_PROJECT", "GCLOUD_PROJECT", "CLOUDSDK_CORE_PROJECT")); public static string? Project { diff --git a/sdk/dotnet/Container/Inputs/ClusterNodeConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodeConfigArgs.cs index af2f603c3a..d75121a54e 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodeConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodeConfigArgs.cs @@ -286,6 +286,18 @@ public InputMap ResourceManagerTags [Input("sandboxConfig")] public Input? SandboxConfig { get; set; } + [Input("secondaryBootDisks")] + private InputList? _secondaryBootDisks; + + /// + /// Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + /// + public InputList SecondaryBootDisks + { + get => _secondaryBootDisks ?? (_secondaryBootDisks = new InputList()); + set => _secondaryBootDisks = value; + } + /// /// The service account to be used by the Node VMs. /// If not specified, the "default" service account is used. diff --git a/sdk/dotnet/Container/Inputs/ClusterNodeConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodeConfigGetArgs.cs index c364d507d8..0b02b75aaf 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodeConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodeConfigGetArgs.cs @@ -286,6 +286,18 @@ public InputMap ResourceManagerTags [Input("sandboxConfig")] public Input? SandboxConfig { get; set; } + [Input("secondaryBootDisks")] + private InputList? _secondaryBootDisks; + + /// + /// Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + /// + public InputList SecondaryBootDisks + { + get => _secondaryBootDisks ?? (_secondaryBootDisks = new InputList()); + set => _secondaryBootDisks = value; + } + /// /// The service account to be used by the Node VMs. /// If not specified, the "default" service account is used. diff --git a/sdk/dotnet/Container/Inputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfigArgs.cs index b4d2f8e768..44986046bb 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfigArgs.cs @@ -16,6 +16,7 @@ public sealed class ClusterNodeConfigGuestAcceleratorGpuSharingConfigArgs : glob /// The type of GPU sharing strategy to enable on the GPU node. /// Accepted values are: /// * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + /// * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) /// [Input("gpuSharingStrategy", required: true)] public Input GpuSharingStrategy { get; set; } = null!; diff --git a/sdk/dotnet/Container/Inputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfigGetArgs.cs index fbf3df0c8e..0445c06d4d 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfigGetArgs.cs @@ -16,6 +16,7 @@ public sealed class ClusterNodeConfigGuestAcceleratorGpuSharingConfigGetArgs : g /// The type of GPU sharing strategy to enable on the GPU node. /// Accepted values are: /// * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + /// * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) /// [Input("gpuSharingStrategy", required: true)] public Input GpuSharingStrategy { get; set; } = null!; diff --git a/sdk/dotnet/Container/Inputs/ClusterNodeConfigSecondaryBootDiskArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodeConfigSecondaryBootDiskArgs.cs new file mode 100644 index 0000000000..daf7af71af --- /dev/null +++ b/sdk/dotnet/Container/Inputs/ClusterNodeConfigSecondaryBootDiskArgs.cs @@ -0,0 +1,32 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Container.Inputs +{ + + public sealed class ClusterNodeConfigSecondaryBootDiskArgs : global::Pulumi.ResourceArgs + { + /// + /// Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + /// + [Input("diskImage", required: true)] + public Input DiskImage { get; set; } = null!; + + /// + /// Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + /// + [Input("mode")] + public Input? Mode { get; set; } + + public ClusterNodeConfigSecondaryBootDiskArgs() + { + } + public static new ClusterNodeConfigSecondaryBootDiskArgs Empty => new ClusterNodeConfigSecondaryBootDiskArgs(); + } +} diff --git a/sdk/dotnet/Container/Inputs/ClusterNodeConfigSecondaryBootDiskGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodeConfigSecondaryBootDiskGetArgs.cs new file mode 100644 index 0000000000..16e055b50f --- /dev/null +++ b/sdk/dotnet/Container/Inputs/ClusterNodeConfigSecondaryBootDiskGetArgs.cs @@ -0,0 +1,32 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Container.Inputs +{ + + public sealed class ClusterNodeConfigSecondaryBootDiskGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + /// + [Input("diskImage", required: true)] + public Input DiskImage { get; set; } = null!; + + /// + /// Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + /// + [Input("mode")] + public Input? Mode { get; set; } + + public ClusterNodeConfigSecondaryBootDiskGetArgs() + { + } + public static new ClusterNodeConfigSecondaryBootDiskGetArgs Empty => new ClusterNodeConfigSecondaryBootDiskGetArgs(); + } +} diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigArgs.cs index 7978a4ad71..df4660905b 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigArgs.cs @@ -286,6 +286,18 @@ public InputMap ResourceManagerTags [Input("sandboxConfig")] public Input? SandboxConfig { get; set; } + [Input("secondaryBootDisks")] + private InputList? _secondaryBootDisks; + + /// + /// Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + /// + public InputList SecondaryBootDisks + { + get => _secondaryBootDisks ?? (_secondaryBootDisks = new InputList()); + set => _secondaryBootDisks = value; + } + /// /// The service account to be used by the Node VMs. /// If not specified, the "default" service account is used. diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGetArgs.cs index 8b51c4ac60..1752ff027a 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGetArgs.cs @@ -286,6 +286,18 @@ public InputMap ResourceManagerTags [Input("sandboxConfig")] public Input? SandboxConfig { get; set; } + [Input("secondaryBootDisks")] + private InputList? _secondaryBootDisks; + + /// + /// Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + /// + public InputList SecondaryBootDisks + { + get => _secondaryBootDisks ?? (_secondaryBootDisks = new InputList()); + set => _secondaryBootDisks = value; + } + /// /// The service account to be used by the Node VMs. /// If not specified, the "default" service account is used. diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigArgs.cs index e82d3dadbb..d222fe3f96 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigArgs.cs @@ -16,6 +16,7 @@ public sealed class ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigArg /// The type of GPU sharing strategy to enable on the GPU node. /// Accepted values are: /// * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + /// * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) /// [Input("gpuSharingStrategy", required: true)] public Input GpuSharingStrategy { get; set; } = null!; diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigGetArgs.cs index d64c9ea833..2b57f6c459 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigGetArgs.cs @@ -16,6 +16,7 @@ public sealed class ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigGet /// The type of GPU sharing strategy to enable on the GPU node. /// Accepted values are: /// * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + /// * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) /// [Input("gpuSharingStrategy", required: true)] public Input GpuSharingStrategy { get; set; } = null!; diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigSecondaryBootDiskArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigSecondaryBootDiskArgs.cs new file mode 100644 index 0000000000..557048744d --- /dev/null +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigSecondaryBootDiskArgs.cs @@ -0,0 +1,32 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Container.Inputs +{ + + public sealed class ClusterNodePoolNodeConfigSecondaryBootDiskArgs : global::Pulumi.ResourceArgs + { + /// + /// Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + /// + [Input("diskImage", required: true)] + public Input DiskImage { get; set; } = null!; + + /// + /// Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + /// + [Input("mode")] + public Input? Mode { get; set; } + + public ClusterNodePoolNodeConfigSecondaryBootDiskArgs() + { + } + public static new ClusterNodePoolNodeConfigSecondaryBootDiskArgs Empty => new ClusterNodePoolNodeConfigSecondaryBootDiskArgs(); + } +} diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigSecondaryBootDiskGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigSecondaryBootDiskGetArgs.cs new file mode 100644 index 0000000000..1afd2d5377 --- /dev/null +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigSecondaryBootDiskGetArgs.cs @@ -0,0 +1,32 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Container.Inputs +{ + + public sealed class ClusterNodePoolNodeConfigSecondaryBootDiskGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + /// + [Input("diskImage", required: true)] + public Input DiskImage { get; set; } = null!; + + /// + /// Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + /// + [Input("mode")] + public Input? Mode { get; set; } + + public ClusterNodePoolNodeConfigSecondaryBootDiskGetArgs() + { + } + public static new ClusterNodePoolNodeConfigSecondaryBootDiskGetArgs Empty => new ClusterNodePoolNodeConfigSecondaryBootDiskGetArgs(); + } +} diff --git a/sdk/dotnet/Container/Inputs/NodePoolNodeConfigArgs.cs b/sdk/dotnet/Container/Inputs/NodePoolNodeConfigArgs.cs index e7ca0a15af..015aa35803 100644 --- a/sdk/dotnet/Container/Inputs/NodePoolNodeConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/NodePoolNodeConfigArgs.cs @@ -240,6 +240,18 @@ public InputMap ResourceManagerTags [Input("sandboxConfig")] public Input? SandboxConfig { get; set; } + [Input("secondaryBootDisks")] + private InputList? _secondaryBootDisks; + + /// + /// Secondary boot disks for preloading data or container images. + /// + public InputList SecondaryBootDisks + { + get => _secondaryBootDisks ?? (_secondaryBootDisks = new InputList()); + set => _secondaryBootDisks = value; + } + /// /// The Google Cloud Platform Service Account to be used by the node VMs. /// diff --git a/sdk/dotnet/Container/Inputs/NodePoolNodeConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/NodePoolNodeConfigGetArgs.cs index d3c94b3216..20308aee5e 100644 --- a/sdk/dotnet/Container/Inputs/NodePoolNodeConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/NodePoolNodeConfigGetArgs.cs @@ -240,6 +240,18 @@ public InputMap ResourceManagerTags [Input("sandboxConfig")] public Input? SandboxConfig { get; set; } + [Input("secondaryBootDisks")] + private InputList? _secondaryBootDisks; + + /// + /// Secondary boot disks for preloading data or container images. + /// + public InputList SecondaryBootDisks + { + get => _secondaryBootDisks ?? (_secondaryBootDisks = new InputList()); + set => _secondaryBootDisks = value; + } + /// /// The Google Cloud Platform Service Account to be used by the node VMs. /// diff --git a/sdk/dotnet/Container/Inputs/NodePoolNodeConfigSecondaryBootDiskArgs.cs b/sdk/dotnet/Container/Inputs/NodePoolNodeConfigSecondaryBootDiskArgs.cs new file mode 100644 index 0000000000..7d5bbcb91f --- /dev/null +++ b/sdk/dotnet/Container/Inputs/NodePoolNodeConfigSecondaryBootDiskArgs.cs @@ -0,0 +1,32 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Container.Inputs +{ + + public sealed class NodePoolNodeConfigSecondaryBootDiskArgs : global::Pulumi.ResourceArgs + { + /// + /// Disk image to create the secondary boot disk from + /// + [Input("diskImage", required: true)] + public Input DiskImage { get; set; } = null!; + + /// + /// Mode for how the secondary boot disk is used. + /// + [Input("mode")] + public Input? Mode { get; set; } + + public NodePoolNodeConfigSecondaryBootDiskArgs() + { + } + public static new NodePoolNodeConfigSecondaryBootDiskArgs Empty => new NodePoolNodeConfigSecondaryBootDiskArgs(); + } +} diff --git a/sdk/dotnet/Container/Inputs/NodePoolNodeConfigSecondaryBootDiskGetArgs.cs b/sdk/dotnet/Container/Inputs/NodePoolNodeConfigSecondaryBootDiskGetArgs.cs new file mode 100644 index 0000000000..cd9600d91a --- /dev/null +++ b/sdk/dotnet/Container/Inputs/NodePoolNodeConfigSecondaryBootDiskGetArgs.cs @@ -0,0 +1,32 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Container.Inputs +{ + + public sealed class NodePoolNodeConfigSecondaryBootDiskGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Disk image to create the secondary boot disk from + /// + [Input("diskImage", required: true)] + public Input DiskImage { get; set; } = null!; + + /// + /// Mode for how the secondary boot disk is used. + /// + [Input("mode")] + public Input? Mode { get; set; } + + public NodePoolNodeConfigSecondaryBootDiskGetArgs() + { + } + public static new NodePoolNodeConfigSecondaryBootDiskGetArgs Empty => new NodePoolNodeConfigSecondaryBootDiskGetArgs(); + } +} diff --git a/sdk/dotnet/Container/Outputs/ClusterNodeConfig.cs b/sdk/dotnet/Container/Outputs/ClusterNodeConfig.cs index 263541a6c3..89de9d85bb 100644 --- a/sdk/dotnet/Container/Outputs/ClusterNodeConfig.cs +++ b/sdk/dotnet/Container/Outputs/ClusterNodeConfig.cs @@ -184,6 +184,10 @@ public sealed class ClusterNodeConfig /// public readonly Outputs.ClusterNodeConfigSandboxConfig? SandboxConfig; /// + /// Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + /// + public readonly ImmutableArray SecondaryBootDisks; + /// /// The service account to be used by the Node VMs. /// If not specified, the "default" service account is used. /// @@ -288,6 +292,8 @@ private ClusterNodeConfig( Outputs.ClusterNodeConfigSandboxConfig? sandboxConfig, + ImmutableArray secondaryBootDisks, + string? serviceAccount, Outputs.ClusterNodeConfigShieldedInstanceConfig? shieldedInstanceConfig, @@ -333,6 +339,7 @@ private ClusterNodeConfig( ResourceLabels = resourceLabels; ResourceManagerTags = resourceManagerTags; SandboxConfig = sandboxConfig; + SecondaryBootDisks = secondaryBootDisks; ServiceAccount = serviceAccount; ShieldedInstanceConfig = shieldedInstanceConfig; SoleTenantConfig = soleTenantConfig; diff --git a/sdk/dotnet/Container/Outputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfig.cs b/sdk/dotnet/Container/Outputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfig.cs index c0cb029c34..c1c43cdbf8 100644 --- a/sdk/dotnet/Container/Outputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfig.cs +++ b/sdk/dotnet/Container/Outputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfig.cs @@ -17,6 +17,7 @@ public sealed class ClusterNodeConfigGuestAcceleratorGpuSharingConfig /// The type of GPU sharing strategy to enable on the GPU node. /// Accepted values are: /// * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + /// * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) /// public readonly string GpuSharingStrategy; /// diff --git a/sdk/dotnet/Container/Outputs/ClusterNodeConfigSecondaryBootDisk.cs b/sdk/dotnet/Container/Outputs/ClusterNodeConfigSecondaryBootDisk.cs new file mode 100644 index 0000000000..63d8dd417a --- /dev/null +++ b/sdk/dotnet/Container/Outputs/ClusterNodeConfigSecondaryBootDisk.cs @@ -0,0 +1,35 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Container.Outputs +{ + + [OutputType] + public sealed class ClusterNodeConfigSecondaryBootDisk + { + /// + /// Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + /// + public readonly string DiskImage; + /// + /// Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + /// + public readonly string? Mode; + + [OutputConstructor] + private ClusterNodeConfigSecondaryBootDisk( + string diskImage, + + string? mode) + { + DiskImage = diskImage; + Mode = mode; + } + } +} diff --git a/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfig.cs b/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfig.cs index cc18ff59f6..eac9f143ab 100644 --- a/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfig.cs +++ b/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfig.cs @@ -184,6 +184,10 @@ public sealed class ClusterNodePoolNodeConfig /// public readonly Outputs.ClusterNodePoolNodeConfigSandboxConfig? SandboxConfig; /// + /// Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + /// + public readonly ImmutableArray SecondaryBootDisks; + /// /// The service account to be used by the Node VMs. /// If not specified, the "default" service account is used. /// @@ -288,6 +292,8 @@ private ClusterNodePoolNodeConfig( Outputs.ClusterNodePoolNodeConfigSandboxConfig? sandboxConfig, + ImmutableArray secondaryBootDisks, + string? serviceAccount, Outputs.ClusterNodePoolNodeConfigShieldedInstanceConfig? shieldedInstanceConfig, @@ -333,6 +339,7 @@ private ClusterNodePoolNodeConfig( ResourceLabels = resourceLabels; ResourceManagerTags = resourceManagerTags; SandboxConfig = sandboxConfig; + SecondaryBootDisks = secondaryBootDisks; ServiceAccount = serviceAccount; ShieldedInstanceConfig = shieldedInstanceConfig; SoleTenantConfig = soleTenantConfig; diff --git a/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig.cs b/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig.cs index 1447465a89..dece2b7dd8 100644 --- a/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig.cs +++ b/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig.cs @@ -17,6 +17,7 @@ public sealed class ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig /// The type of GPU sharing strategy to enable on the GPU node. /// Accepted values are: /// * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + /// * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) /// public readonly string GpuSharingStrategy; /// diff --git a/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfigSecondaryBootDisk.cs b/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfigSecondaryBootDisk.cs new file mode 100644 index 0000000000..4a8c5bcc10 --- /dev/null +++ b/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfigSecondaryBootDisk.cs @@ -0,0 +1,35 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Container.Outputs +{ + + [OutputType] + public sealed class ClusterNodePoolNodeConfigSecondaryBootDisk + { + /// + /// Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + /// + public readonly string DiskImage; + /// + /// Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + /// + public readonly string? Mode; + + [OutputConstructor] + private ClusterNodePoolNodeConfigSecondaryBootDisk( + string diskImage, + + string? mode) + { + DiskImage = diskImage; + Mode = mode; + } + } +} diff --git a/sdk/dotnet/Container/Outputs/GetClusterNodeConfigResult.cs b/sdk/dotnet/Container/Outputs/GetClusterNodeConfigResult.cs index bec25a46be..896db4353a 100644 --- a/sdk/dotnet/Container/Outputs/GetClusterNodeConfigResult.cs +++ b/sdk/dotnet/Container/Outputs/GetClusterNodeConfigResult.cs @@ -138,6 +138,10 @@ public sealed class GetClusterNodeConfigResult /// public readonly ImmutableArray SandboxConfigs; /// + /// Secondary boot disks for preloading data or container images. + /// + public readonly ImmutableArray SecondaryBootDisks; + /// /// The Google Cloud Platform Service Account to be used by the node VMs. /// public readonly string ServiceAccount; @@ -230,6 +234,8 @@ private GetClusterNodeConfigResult( ImmutableArray sandboxConfigs, + ImmutableArray secondaryBootDisks, + string serviceAccount, ImmutableArray shieldedInstanceConfigs, @@ -275,6 +281,7 @@ private GetClusterNodeConfigResult( ResourceLabels = resourceLabels; ResourceManagerTags = resourceManagerTags; SandboxConfigs = sandboxConfigs; + SecondaryBootDisks = secondaryBootDisks; ServiceAccount = serviceAccount; ShieldedInstanceConfigs = shieldedInstanceConfigs; SoleTenantConfigs = soleTenantConfigs; diff --git a/sdk/dotnet/Container/Outputs/GetClusterNodeConfigSecondaryBootDiskResult.cs b/sdk/dotnet/Container/Outputs/GetClusterNodeConfigSecondaryBootDiskResult.cs new file mode 100644 index 0000000000..2723657130 --- /dev/null +++ b/sdk/dotnet/Container/Outputs/GetClusterNodeConfigSecondaryBootDiskResult.cs @@ -0,0 +1,35 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Container.Outputs +{ + + [OutputType] + public sealed class GetClusterNodeConfigSecondaryBootDiskResult + { + /// + /// Disk image to create the secondary boot disk from + /// + public readonly string DiskImage; + /// + /// Mode for how the secondary boot disk is used. + /// + public readonly string Mode; + + [OutputConstructor] + private GetClusterNodeConfigSecondaryBootDiskResult( + string diskImage, + + string mode) + { + DiskImage = diskImage; + Mode = mode; + } + } +} diff --git a/sdk/dotnet/Container/Outputs/GetClusterNodePoolNodeConfigResult.cs b/sdk/dotnet/Container/Outputs/GetClusterNodePoolNodeConfigResult.cs index c5e7fd4ca8..b54f78bec7 100644 --- a/sdk/dotnet/Container/Outputs/GetClusterNodePoolNodeConfigResult.cs +++ b/sdk/dotnet/Container/Outputs/GetClusterNodePoolNodeConfigResult.cs @@ -138,6 +138,10 @@ public sealed class GetClusterNodePoolNodeConfigResult /// public readonly ImmutableArray SandboxConfigs; /// + /// Secondary boot disks for preloading data or container images. + /// + public readonly ImmutableArray SecondaryBootDisks; + /// /// The Google Cloud Platform Service Account to be used by the node VMs. /// public readonly string ServiceAccount; @@ -230,6 +234,8 @@ private GetClusterNodePoolNodeConfigResult( ImmutableArray sandboxConfigs, + ImmutableArray secondaryBootDisks, + string serviceAccount, ImmutableArray shieldedInstanceConfigs, @@ -275,6 +281,7 @@ private GetClusterNodePoolNodeConfigResult( ResourceLabels = resourceLabels; ResourceManagerTags = resourceManagerTags; SandboxConfigs = sandboxConfigs; + SecondaryBootDisks = secondaryBootDisks; ServiceAccount = serviceAccount; ShieldedInstanceConfigs = shieldedInstanceConfigs; SoleTenantConfigs = soleTenantConfigs; diff --git a/sdk/dotnet/Container/Outputs/GetClusterNodePoolNodeConfigSecondaryBootDiskResult.cs b/sdk/dotnet/Container/Outputs/GetClusterNodePoolNodeConfigSecondaryBootDiskResult.cs new file mode 100644 index 0000000000..13bdb12e8b --- /dev/null +++ b/sdk/dotnet/Container/Outputs/GetClusterNodePoolNodeConfigSecondaryBootDiskResult.cs @@ -0,0 +1,35 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Container.Outputs +{ + + [OutputType] + public sealed class GetClusterNodePoolNodeConfigSecondaryBootDiskResult + { + /// + /// Disk image to create the secondary boot disk from + /// + public readonly string DiskImage; + /// + /// Mode for how the secondary boot disk is used. + /// + public readonly string Mode; + + [OutputConstructor] + private GetClusterNodePoolNodeConfigSecondaryBootDiskResult( + string diskImage, + + string mode) + { + DiskImage = diskImage; + Mode = mode; + } + } +} diff --git a/sdk/dotnet/Container/Outputs/NodePoolNodeConfig.cs b/sdk/dotnet/Container/Outputs/NodePoolNodeConfig.cs index 50b1201512..d2cab3f28a 100644 --- a/sdk/dotnet/Container/Outputs/NodePoolNodeConfig.cs +++ b/sdk/dotnet/Container/Outputs/NodePoolNodeConfig.cs @@ -138,6 +138,10 @@ public sealed class NodePoolNodeConfig /// public readonly Outputs.NodePoolNodeConfigSandboxConfig? SandboxConfig; /// + /// Secondary boot disks for preloading data or container images. + /// + public readonly ImmutableArray SecondaryBootDisks; + /// /// The Google Cloud Platform Service Account to be used by the node VMs. /// public readonly string? ServiceAccount; @@ -230,6 +234,8 @@ private NodePoolNodeConfig( Outputs.NodePoolNodeConfigSandboxConfig? sandboxConfig, + ImmutableArray secondaryBootDisks, + string? serviceAccount, Outputs.NodePoolNodeConfigShieldedInstanceConfig? shieldedInstanceConfig, @@ -275,6 +281,7 @@ private NodePoolNodeConfig( ResourceLabels = resourceLabels; ResourceManagerTags = resourceManagerTags; SandboxConfig = sandboxConfig; + SecondaryBootDisks = secondaryBootDisks; ServiceAccount = serviceAccount; ShieldedInstanceConfig = shieldedInstanceConfig; SoleTenantConfig = soleTenantConfig; diff --git a/sdk/dotnet/Container/Outputs/NodePoolNodeConfigSecondaryBootDisk.cs b/sdk/dotnet/Container/Outputs/NodePoolNodeConfigSecondaryBootDisk.cs new file mode 100644 index 0000000000..91871651bc --- /dev/null +++ b/sdk/dotnet/Container/Outputs/NodePoolNodeConfigSecondaryBootDisk.cs @@ -0,0 +1,35 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Container.Outputs +{ + + [OutputType] + public sealed class NodePoolNodeConfigSecondaryBootDisk + { + /// + /// Disk image to create the secondary boot disk from + /// + public readonly string DiskImage; + /// + /// Mode for how the secondary boot disk is used. + /// + public readonly string? Mode; + + [OutputConstructor] + private NodePoolNodeConfigSecondaryBootDisk( + string diskImage, + + string? mode) + { + DiskImage = diskImage; + Mode = mode; + } + } +} diff --git a/sdk/dotnet/Dataflow/FlexTemplateJob.cs b/sdk/dotnet/Dataflow/FlexTemplateJob.cs index 1d1857d37a..06a25361b7 100644 --- a/sdk/dotnet/Dataflow/FlexTemplateJob.cs +++ b/sdk/dotnet/Dataflow/FlexTemplateJob.cs @@ -209,9 +209,9 @@ public partial class FlexTemplateJob : global::Pulumi.CustomResource public Output OnDelete { get; private set; } = null!; /// - /// Key/Value pairs to be passed to the Dataflow job (as - /// used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - /// such as `serviceAccount`, `workerMachineType`, etc can be specified here. + /// **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + /// case-sensitive based on the language on which the pipeline is coded, mostly Java. + /// **Note**: do not configure Dataflow options here in parameters. /// [Output("parameters")] public Output?> Parameters { get; private set; } = null!; @@ -447,9 +447,9 @@ public InputMap Labels private InputMap? _parameters; /// - /// Key/Value pairs to be passed to the Dataflow job (as - /// used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - /// such as `serviceAccount`, `workerMachineType`, etc can be specified here. + /// **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + /// case-sensitive based on the language on which the pipeline is coded, mostly Java. + /// **Note**: do not configure Dataflow options here in parameters. /// public InputMap Parameters { @@ -651,9 +651,9 @@ public InputMap Labels private InputMap? _parameters; /// - /// Key/Value pairs to be passed to the Dataflow job (as - /// used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - /// such as `serviceAccount`, `workerMachineType`, etc can be specified here. + /// **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + /// case-sensitive based on the language on which the pipeline is coded, mostly Java. + /// **Note**: do not configure Dataflow options here in parameters. /// public InputMap Parameters { diff --git a/sdk/dotnet/Dataflow/Job.cs b/sdk/dotnet/Dataflow/Job.cs index bdbe0d7aca..9899e0a7a2 100644 --- a/sdk/dotnet/Dataflow/Job.cs +++ b/sdk/dotnet/Dataflow/Job.cs @@ -226,7 +226,9 @@ public partial class Job : global::Pulumi.CustomResource public Output OnDelete { get; private set; } = null!; /// - /// Key/Value pairs to be passed to the Dataflow job (as used in the template). + /// **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + /// case-sensitive based on the language on which the pipeline is coded, mostly Java. + /// **Note**: do not configure Dataflow options here in parameters. /// [Output("parameters")] public Output?> Parameters { get; private set; } = null!; @@ -434,7 +436,9 @@ public InputMap Labels private InputMap? _parameters; /// - /// Key/Value pairs to be passed to the Dataflow job (as used in the template). + /// **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + /// case-sensitive based on the language on which the pipeline is coded, mostly Java. + /// **Note**: do not configure Dataflow options here in parameters. /// public InputMap Parameters { @@ -612,7 +616,9 @@ public InputMap Labels private InputMap? _parameters; /// - /// Key/Value pairs to be passed to the Dataflow job (as used in the template). + /// **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + /// case-sensitive based on the language on which the pipeline is coded, mostly Java. + /// **Note**: do not configure Dataflow options here in parameters. /// public InputMap Parameters { diff --git a/sdk/dotnet/EssentialContacts/DocumentAiWarehouseDocumentSchema.cs b/sdk/dotnet/EssentialContacts/DocumentAiWarehouseDocumentSchema.cs index d4161897bc..96d9dcf4cf 100644 --- a/sdk/dotnet/EssentialContacts/DocumentAiWarehouseDocumentSchema.cs +++ b/sdk/dotnet/EssentialContacts/DocumentAiWarehouseDocumentSchema.cs @@ -65,428 +65,6 @@ namespace Pulumi.Gcp.EssentialContacts /// /// }); /// ``` - /// ### Document Ai Warehouse Document Schema Integer - /// - /// ```csharp - /// using System.Collections.Generic; - /// using System.Linq; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = Gcp.Organizations.GetProject.Invoke(); - /// - /// var exampleInteger = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema("example_integer", new() - /// { - /// ProjectNumber = project.Apply(getProjectResult => getProjectResult.Number), - /// DisplayName = "test-property-integer", - /// Location = "us", - /// PropertyDefinitions = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs - /// { - /// Name = "prop1", - /// DisplayName = "propdisp1", - /// IsRepeatable = false, - /// IsFilterable = true, - /// IsSearchable = true, - /// IsMetadata = false, - /// IsRequired = false, - /// RetrievalImportance = "HIGHEST", - /// SchemaSources = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs - /// { - /// Name = "dummy_source", - /// ProcessorType = "dummy_processor", - /// }, - /// }, - /// IntegerTypeOptions = null, - /// }, - /// }, - /// }); - /// - /// }); - /// ``` - /// ### Document Ai Warehouse Document Schema Float - /// - /// ```csharp - /// using System.Collections.Generic; - /// using System.Linq; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = Gcp.Organizations.GetProject.Invoke(); - /// - /// var exampleFloat = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema("example_float", new() - /// { - /// ProjectNumber = project.Apply(getProjectResult => getProjectResult.Number), - /// DisplayName = "test-property-float", - /// Location = "us", - /// PropertyDefinitions = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs - /// { - /// Name = "prop2", - /// DisplayName = "propdisp2", - /// IsRepeatable = false, - /// IsFilterable = true, - /// IsSearchable = true, - /// IsMetadata = false, - /// IsRequired = false, - /// RetrievalImportance = "HIGHEST", - /// SchemaSources = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs - /// { - /// Name = "dummy_source", - /// ProcessorType = "dummy_processor", - /// }, - /// }, - /// FloatTypeOptions = null, - /// }, - /// }, - /// }); - /// - /// }); - /// ``` - /// ### Document Ai Warehouse Document Schema Property - /// - /// ```csharp - /// using System.Collections.Generic; - /// using System.Linq; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = Gcp.Organizations.GetProject.Invoke(); - /// - /// var exampleProperty = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema("example_property", new() - /// { - /// ProjectNumber = project.Apply(getProjectResult => getProjectResult.Number), - /// DisplayName = "test-property-property", - /// Location = "us", - /// DocumentIsFolder = false, - /// PropertyDefinitions = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs - /// { - /// Name = "prop8", - /// DisplayName = "propdisp8", - /// IsRepeatable = false, - /// IsFilterable = true, - /// IsSearchable = true, - /// IsMetadata = false, - /// IsRequired = false, - /// RetrievalImportance = "HIGHEST", - /// SchemaSources = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs - /// { - /// Name = "dummy_source", - /// ProcessorType = "dummy_processor", - /// }, - /// }, - /// PropertyTypeOptions = new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs - /// { - /// PropertyDefinitions = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs - /// { - /// Name = "prop8_nested", - /// DisplayName = "propdisp8_nested", - /// IsRepeatable = false, - /// IsFilterable = true, - /// IsSearchable = true, - /// IsMetadata = false, - /// IsRequired = false, - /// RetrievalImportance = "HIGHEST", - /// SchemaSources = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs - /// { - /// Name = "dummy_source_nested", - /// ProcessorType = "dummy_processor_nested", - /// }, - /// }, - /// TextTypeOptions = null, - /// }, - /// }, - /// }, - /// }, - /// }, - /// }); - /// - /// }); - /// ``` - /// ### Document Ai Warehouse Document Schema Property Enum - /// - /// ```csharp - /// using System.Collections.Generic; - /// using System.Linq; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = Gcp.Organizations.GetProject.Invoke(); - /// - /// var examplePropertyEnum = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema("example_property_enum", new() - /// { - /// ProjectNumber = project.Apply(getProjectResult => getProjectResult.Number), - /// DisplayName = "test-property-property", - /// Location = "us", - /// DocumentIsFolder = false, - /// PropertyDefinitions = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs - /// { - /// Name = "prop8", - /// DisplayName = "propdisp8", - /// IsRepeatable = false, - /// IsFilterable = true, - /// IsSearchable = true, - /// IsMetadata = false, - /// IsRequired = false, - /// RetrievalImportance = "HIGHEST", - /// SchemaSources = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs - /// { - /// Name = "dummy_source", - /// ProcessorType = "dummy_processor", - /// }, - /// }, - /// PropertyTypeOptions = new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs - /// { - /// PropertyDefinitions = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs - /// { - /// Name = "prop8_nested", - /// DisplayName = "propdisp8_nested", - /// IsRepeatable = false, - /// IsFilterable = true, - /// IsSearchable = true, - /// IsMetadata = false, - /// IsRequired = false, - /// RetrievalImportance = "HIGHEST", - /// SchemaSources = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs - /// { - /// Name = "dummy_source_nested", - /// ProcessorType = "dummy_processor_nested", - /// }, - /// }, - /// EnumTypeOptions = new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionEnumTypeOptionsArgs - /// { - /// PossibleValues = new[] - /// { - /// "M", - /// "F", - /// "X", - /// }, - /// ValidationCheckDisabled = false, - /// }, - /// }, - /// }, - /// }, - /// }, - /// }, - /// }); - /// - /// }); - /// ``` - /// ### Document Ai Warehouse Document Schema Enum - /// - /// ```csharp - /// using System.Collections.Generic; - /// using System.Linq; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = Gcp.Organizations.GetProject.Invoke(); - /// - /// var exampleEnum = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema("example_enum", new() - /// { - /// ProjectNumber = project.Apply(getProjectResult => getProjectResult.Number), - /// DisplayName = "test-property-enum", - /// Location = "us", - /// PropertyDefinitions = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs - /// { - /// Name = "prop6", - /// DisplayName = "propdisp6", - /// IsRepeatable = false, - /// IsFilterable = true, - /// IsSearchable = true, - /// IsMetadata = false, - /// IsRequired = false, - /// RetrievalImportance = "HIGHEST", - /// SchemaSources = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs - /// { - /// Name = "dummy_source", - /// ProcessorType = "dummy_processor", - /// }, - /// }, - /// EnumTypeOptions = new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionEnumTypeOptionsArgs - /// { - /// PossibleValues = new[] - /// { - /// "M", - /// "F", - /// "X", - /// }, - /// ValidationCheckDisabled = false, - /// }, - /// }, - /// }, - /// }); - /// - /// }); - /// ``` - /// ### Document Ai Warehouse Document Schema Map - /// - /// ```csharp - /// using System.Collections.Generic; - /// using System.Linq; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = Gcp.Organizations.GetProject.Invoke(); - /// - /// var exampleMap = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema("example_map", new() - /// { - /// ProjectNumber = project.Apply(getProjectResult => getProjectResult.Number), - /// DisplayName = "test-property-map", - /// Location = "us", - /// PropertyDefinitions = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs - /// { - /// Name = "prop4", - /// DisplayName = "propdisp4", - /// IsRepeatable = false, - /// IsFilterable = true, - /// IsSearchable = true, - /// IsMetadata = false, - /// IsRequired = false, - /// RetrievalImportance = "HIGHEST", - /// SchemaSources = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs - /// { - /// Name = "dummy_source", - /// ProcessorType = "dummy_processor", - /// }, - /// }, - /// MapTypeOptions = null, - /// }, - /// }, - /// }); - /// - /// }); - /// ``` - /// ### Document Ai Warehouse Document Schema Datetime - /// - /// ```csharp - /// using System.Collections.Generic; - /// using System.Linq; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = Gcp.Organizations.GetProject.Invoke(); - /// - /// var exampleDatetime = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema("example_datetime", new() - /// { - /// ProjectNumber = project.Apply(getProjectResult => getProjectResult.Number), - /// DisplayName = "test-property-date_time", - /// Location = "us", - /// PropertyDefinitions = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs - /// { - /// Name = "prop7", - /// DisplayName = "propdisp7", - /// IsRepeatable = false, - /// IsFilterable = true, - /// IsSearchable = true, - /// IsMetadata = false, - /// IsRequired = false, - /// RetrievalImportance = "HIGHEST", - /// SchemaSources = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs - /// { - /// Name = "dummy_source", - /// ProcessorType = "dummy_processor", - /// }, - /// }, - /// DateTimeTypeOptions = null, - /// }, - /// }, - /// }); - /// - /// }); - /// ``` - /// ### Document Ai Warehouse Document Schema Timestamp - /// - /// ```csharp - /// using System.Collections.Generic; - /// using System.Linq; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = Gcp.Organizations.GetProject.Invoke(); - /// - /// var exampleTimestamp = new Gcp.EssentialContacts.DocumentAiWarehouseDocumentSchema("example_timestamp", new() - /// { - /// ProjectNumber = project.Apply(getProjectResult => getProjectResult.Number), - /// DisplayName = "test-property-timestamp", - /// Location = "us", - /// PropertyDefinitions = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs - /// { - /// Name = "prop5", - /// DisplayName = "propdisp5", - /// IsRepeatable = false, - /// IsFilterable = true, - /// IsSearchable = true, - /// IsMetadata = false, - /// IsRequired = false, - /// RetrievalImportance = "HIGHEST", - /// SchemaSources = new[] - /// { - /// new Gcp.EssentialContacts.Inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs - /// { - /// Name = "dummy_source", - /// ProcessorType = "dummy_processor", - /// }, - /// }, - /// TimestampTypeOptions = null, - /// }, - /// }, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Firebaserules/Release.cs b/sdk/dotnet/Firebaserules/Release.cs index 37aee1db78..257e33abbb 100644 --- a/sdk/dotnet/Firebaserules/Release.cs +++ b/sdk/dotnet/Firebaserules/Release.cs @@ -42,7 +42,7 @@ namespace Pulumi.Gcp.Firebaserules /// /// var primary = new Gcp.Firebaserules.Release("primary", new() /// { - /// Name = "cloud.firestore", + /// Name = "cloud.firestore/database", /// RulesetName = firestore.Name.Apply(name => $"projects/my-project-name/rulesets/{name}"), /// Project = "my-project-name", /// }); diff --git a/sdk/dotnet/PrivilegedAccessManager/Entitlement.cs b/sdk/dotnet/PrivilegedAccessManager/Entitlement.cs new file mode 100644 index 0000000000..6f04b04916 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Entitlement.cs @@ -0,0 +1,440 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.PrivilegedAccessManager +{ + /// + /// ## Example Usage + /// + /// ### Privileged Access Manager Entitlement Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var tfentitlement = new Gcp.PrivilegedAccessManager.Entitlement("tfentitlement", new() + /// { + /// EntitlementId = "example-entitlement", + /// Location = "global", + /// MaxRequestDuration = "43200s", + /// Parent = "projects/my-project-name", + /// RequesterJustificationConfig = new Gcp.PrivilegedAccessManager.Inputs.EntitlementRequesterJustificationConfigArgs + /// { + /// Unstructured = null, + /// }, + /// EligibleUsers = new[] + /// { + /// new Gcp.PrivilegedAccessManager.Inputs.EntitlementEligibleUserArgs + /// { + /// Principals = new[] + /// { + /// "group:test@google.com", + /// }, + /// }, + /// }, + /// PrivilegedAccess = new Gcp.PrivilegedAccessManager.Inputs.EntitlementPrivilegedAccessArgs + /// { + /// GcpIamAccess = new Gcp.PrivilegedAccessManager.Inputs.EntitlementPrivilegedAccessGcpIamAccessArgs + /// { + /// RoleBindings = new[] + /// { + /// new Gcp.PrivilegedAccessManager.Inputs.EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs + /// { + /// Role = "roles/storage.admin", + /// ConditionExpression = "request.time < timestamp(\"2024-04-23T18:30:00.000Z\")", + /// }, + /// }, + /// Resource = "//cloudresourcemanager.googleapis.com/projects/my-project-name", + /// ResourceType = "cloudresourcemanager.googleapis.com/Project", + /// }, + /// }, + /// AdditionalNotificationTargets = new Gcp.PrivilegedAccessManager.Inputs.EntitlementAdditionalNotificationTargetsArgs + /// { + /// AdminEmailRecipients = new[] + /// { + /// "user@example.com", + /// }, + /// RequesterEmailRecipients = new[] + /// { + /// "user@example.com", + /// }, + /// }, + /// ApprovalWorkflow = new Gcp.PrivilegedAccessManager.Inputs.EntitlementApprovalWorkflowArgs + /// { + /// ManualApprovals = new Gcp.PrivilegedAccessManager.Inputs.EntitlementApprovalWorkflowManualApprovalsArgs + /// { + /// RequireApproverJustification = true, + /// Steps = new[] + /// { + /// new Gcp.PrivilegedAccessManager.Inputs.EntitlementApprovalWorkflowManualApprovalsStepArgs + /// { + /// ApprovalsNeeded = 1, + /// ApproverEmailRecipients = new[] + /// { + /// "user@example.com", + /// }, + /// Approvers = new Gcp.PrivilegedAccessManager.Inputs.EntitlementApprovalWorkflowManualApprovalsStepApproversArgs + /// { + /// Principals = new[] + /// { + /// "group:test@google.com", + /// }, + /// }, + /// }, + /// }, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// Entitlement can be imported using any of these accepted formats: + /// + /// * `{{parent}}/locations/{{location}}/entitlements/{{entitlement_id}}` + /// + /// When using the `pulumi import` command, Entitlement can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:privilegedaccessmanager/entitlement:entitlement default {{parent}}/locations/{{location}}/entitlements/{{entitlement_id}} + /// ``` + /// + [GcpResourceType("gcp:privilegedaccessmanager/entitlement:entitlement")] + public partial class Entitlement : global::Pulumi.CustomResource + { + /// + /// AdditionalNotificationTargets includes email addresses to be notified. + /// + [Output("additionalNotificationTargets")] + public Output AdditionalNotificationTargets { get; private set; } = null!; + + /// + /// The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + /// Different types of approval workflows that can be used to gate privileged access granting. + /// + [Output("approvalWorkflow")] + public Output ApprovalWorkflow { get; private set; } = null!; + + /// + /// Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + /// Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + /// + [Output("createTime")] + public Output CreateTime { get; private set; } = null!; + + /// + /// Who can create Grants using Entitlement. This list should contain at most one entry + /// Structure is documented below. + /// + [Output("eligibleUsers")] + public Output> EligibleUsers { get; private set; } = null!; + + /// + /// The ID to use for this Entitlement. This will become the last part of the resource name. + /// This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + /// This value should be unique among all other Entitlements under the specified `parent`. + /// + [Output("entitlementId")] + public Output EntitlementId { get; private set; } = null!; + + /// + /// For Resource freshness validation (https://google.aip.dev/154) + /// + [Output("etag")] + public Output Etag { get; private set; } = null!; + + /// + /// The region of the Entitlement resource. + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// The maximum amount of time for which access would be granted for a request. + /// A requester can choose to ask for access for less than this duration but never more. + /// Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + /// + [Output("maxRequestDuration")] + public Output MaxRequestDuration { get; private set; } = null!; + + /// + /// Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + /// Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + /// + [Output("parent")] + public Output Parent { get; private set; } = null!; + + /// + /// Privileged access that this service can be used to gate. + /// Structure is documented below. + /// + [Output("privilegedAccess")] + public Output PrivilegedAccess { get; private set; } = null!; + + /// + /// Defines the ways in which a requester should provide the justification while requesting for access. + /// Structure is documented below. + /// + [Output("requesterJustificationConfig")] + public Output RequesterJustificationConfig { get; private set; } = null!; + + /// + /// Output only. The current state of the Entitlement. + /// + [Output("state")] + public Output State { get; private set; } = null!; + + /// + /// Output only. Update time stamp. 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 Entitlement 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 Entitlement(string name, EntitlementArgs args, CustomResourceOptions? options = null) + : base("gcp:privilegedaccessmanager/entitlement:entitlement", name, args ?? new EntitlementArgs(), MakeResourceOptions(options, "")) + { + } + + private Entitlement(string name, Input id, EntitlementState? state = null, CustomResourceOptions? options = null) + : base("gcp:privilegedaccessmanager/entitlement:entitlement", 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 Entitlement 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 Entitlement Get(string name, Input id, EntitlementState? state = null, CustomResourceOptions? options = null) + { + return new Entitlement(name, id, state, options); + } + } + + public sealed class EntitlementArgs : global::Pulumi.ResourceArgs + { + /// + /// AdditionalNotificationTargets includes email addresses to be notified. + /// + [Input("additionalNotificationTargets")] + public Input? AdditionalNotificationTargets { get; set; } + + /// + /// The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + /// Different types of approval workflows that can be used to gate privileged access granting. + /// + [Input("approvalWorkflow")] + public Input? ApprovalWorkflow { get; set; } + + [Input("eligibleUsers", required: true)] + private InputList? _eligibleUsers; + + /// + /// Who can create Grants using Entitlement. This list should contain at most one entry + /// Structure is documented below. + /// + public InputList EligibleUsers + { + get => _eligibleUsers ?? (_eligibleUsers = new InputList()); + set => _eligibleUsers = value; + } + + /// + /// The ID to use for this Entitlement. This will become the last part of the resource name. + /// This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + /// This value should be unique among all other Entitlements under the specified `parent`. + /// + [Input("entitlementId", required: true)] + public Input EntitlementId { get; set; } = null!; + + /// + /// The region of the Entitlement resource. + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// The maximum amount of time for which access would be granted for a request. + /// A requester can choose to ask for access for less than this duration but never more. + /// Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + /// + [Input("maxRequestDuration", required: true)] + public Input MaxRequestDuration { get; set; } = null!; + + /// + /// Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + /// + [Input("parent", required: true)] + public Input Parent { get; set; } = null!; + + /// + /// Privileged access that this service can be used to gate. + /// Structure is documented below. + /// + [Input("privilegedAccess", required: true)] + public Input PrivilegedAccess { get; set; } = null!; + + /// + /// Defines the ways in which a requester should provide the justification while requesting for access. + /// Structure is documented below. + /// + [Input("requesterJustificationConfig", required: true)] + public Input RequesterJustificationConfig { get; set; } = null!; + + public EntitlementArgs() + { + } + public static new EntitlementArgs Empty => new EntitlementArgs(); + } + + public sealed class EntitlementState : global::Pulumi.ResourceArgs + { + /// + /// AdditionalNotificationTargets includes email addresses to be notified. + /// + [Input("additionalNotificationTargets")] + public Input? AdditionalNotificationTargets { get; set; } + + /// + /// The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + /// Different types of approval workflows that can be used to gate privileged access granting. + /// + [Input("approvalWorkflow")] + public Input? ApprovalWorkflow { get; set; } + + /// + /// Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + /// Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + /// + [Input("createTime")] + public Input? CreateTime { get; set; } + + [Input("eligibleUsers")] + private InputList? _eligibleUsers; + + /// + /// Who can create Grants using Entitlement. This list should contain at most one entry + /// Structure is documented below. + /// + public InputList EligibleUsers + { + get => _eligibleUsers ?? (_eligibleUsers = new InputList()); + set => _eligibleUsers = value; + } + + /// + /// The ID to use for this Entitlement. This will become the last part of the resource name. + /// This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + /// This value should be unique among all other Entitlements under the specified `parent`. + /// + [Input("entitlementId")] + public Input? EntitlementId { get; set; } + + /// + /// For Resource freshness validation (https://google.aip.dev/154) + /// + [Input("etag")] + public Input? Etag { get; set; } + + /// + /// The region of the Entitlement resource. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// The maximum amount of time for which access would be granted for a request. + /// A requester can choose to ask for access for less than this duration but never more. + /// Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + /// + [Input("maxRequestDuration")] + public Input? MaxRequestDuration { get; set; } + + /// + /// Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + /// Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + /// + [Input("parent")] + public Input? Parent { get; set; } + + /// + /// Privileged access that this service can be used to gate. + /// Structure is documented below. + /// + [Input("privilegedAccess")] + public Input? PrivilegedAccess { get; set; } + + /// + /// Defines the ways in which a requester should provide the justification while requesting for access. + /// Structure is documented below. + /// + [Input("requesterJustificationConfig")] + public Input? RequesterJustificationConfig { get; set; } + + /// + /// Output only. The current state of the Entitlement. + /// + [Input("state")] + public Input? State { get; set; } + + /// + /// Output only. Update time stamp. 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 EntitlementState() + { + } + public static new EntitlementState Empty => new EntitlementState(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementAdditionalNotificationTargetsArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementAdditionalNotificationTargetsArgs.cs new file mode 100644 index 0000000000..21206bb970 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementAdditionalNotificationTargetsArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementAdditionalNotificationTargetsArgs : global::Pulumi.ResourceArgs + { + [Input("adminEmailRecipients")] + private InputList? _adminEmailRecipients; + + /// + /// Optional. Additional email addresses to be notified when a principal(requester) is granted access. + /// + public InputList AdminEmailRecipients + { + get => _adminEmailRecipients ?? (_adminEmailRecipients = new InputList()); + set => _adminEmailRecipients = value; + } + + [Input("requesterEmailRecipients")] + private InputList? _requesterEmailRecipients; + + /// + /// Optional. Additional email address to be notified about an eligible entitlement. + /// + public InputList RequesterEmailRecipients + { + get => _requesterEmailRecipients ?? (_requesterEmailRecipients = new InputList()); + set => _requesterEmailRecipients = value; + } + + public EntitlementAdditionalNotificationTargetsArgs() + { + } + public static new EntitlementAdditionalNotificationTargetsArgs Empty => new EntitlementAdditionalNotificationTargetsArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementAdditionalNotificationTargetsGetArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementAdditionalNotificationTargetsGetArgs.cs new file mode 100644 index 0000000000..cb865ea488 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementAdditionalNotificationTargetsGetArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementAdditionalNotificationTargetsGetArgs : global::Pulumi.ResourceArgs + { + [Input("adminEmailRecipients")] + private InputList? _adminEmailRecipients; + + /// + /// Optional. Additional email addresses to be notified when a principal(requester) is granted access. + /// + public InputList AdminEmailRecipients + { + get => _adminEmailRecipients ?? (_adminEmailRecipients = new InputList()); + set => _adminEmailRecipients = value; + } + + [Input("requesterEmailRecipients")] + private InputList? _requesterEmailRecipients; + + /// + /// Optional. Additional email address to be notified about an eligible entitlement. + /// + public InputList RequesterEmailRecipients + { + get => _requesterEmailRecipients ?? (_requesterEmailRecipients = new InputList()); + set => _requesterEmailRecipients = value; + } + + public EntitlementAdditionalNotificationTargetsGetArgs() + { + } + public static new EntitlementAdditionalNotificationTargetsGetArgs Empty => new EntitlementAdditionalNotificationTargetsGetArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowArgs.cs new file mode 100644 index 0000000000..0b04c739ea --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementApprovalWorkflowArgs : global::Pulumi.ResourceArgs + { + /// + /// A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + /// The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + /// This can be used to create approval workflows such as + /// * Require an approval from any user in a group G. + /// * Require an approval from any k number of users from a Group G. + /// * Require an approval from any user in a group G and then from a user U. etc. + /// A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + /// Structure is documented below. + /// + [Input("manualApprovals", required: true)] + public Input ManualApprovals { get; set; } = null!; + + public EntitlementApprovalWorkflowArgs() + { + } + public static new EntitlementApprovalWorkflowArgs Empty => new EntitlementApprovalWorkflowArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowGetArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowGetArgs.cs new file mode 100644 index 0000000000..922da13efc --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowGetArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementApprovalWorkflowGetArgs : global::Pulumi.ResourceArgs + { + /// + /// A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + /// The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + /// This can be used to create approval workflows such as + /// * Require an approval from any user in a group G. + /// * Require an approval from any k number of users from a Group G. + /// * Require an approval from any user in a group G and then from a user U. etc. + /// A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + /// Structure is documented below. + /// + [Input("manualApprovals", required: true)] + public Input ManualApprovals { get; set; } = null!; + + public EntitlementApprovalWorkflowGetArgs() + { + } + public static new EntitlementApprovalWorkflowGetArgs Empty => new EntitlementApprovalWorkflowGetArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsArgs.cs new file mode 100644 index 0000000000..0d0bc6d025 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementApprovalWorkflowManualApprovalsArgs : global::Pulumi.ResourceArgs + { + /// + /// Optional. Do the approvers need to provide a justification for their actions? + /// + [Input("requireApproverJustification")] + public Input? RequireApproverJustification { get; set; } + + [Input("steps", required: true)] + private InputList? _steps; + + /// + /// List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + /// Structure is documented below. + /// + public InputList Steps + { + get => _steps ?? (_steps = new InputList()); + set => _steps = value; + } + + public EntitlementApprovalWorkflowManualApprovalsArgs() + { + } + public static new EntitlementApprovalWorkflowManualApprovalsArgs Empty => new EntitlementApprovalWorkflowManualApprovalsArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsGetArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsGetArgs.cs new file mode 100644 index 0000000000..85360c422c --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsGetArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementApprovalWorkflowManualApprovalsGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Optional. Do the approvers need to provide a justification for their actions? + /// + [Input("requireApproverJustification")] + public Input? RequireApproverJustification { get; set; } + + [Input("steps", required: true)] + private InputList? _steps; + + /// + /// List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + /// Structure is documented below. + /// + public InputList Steps + { + get => _steps ?? (_steps = new InputList()); + set => _steps = value; + } + + public EntitlementApprovalWorkflowManualApprovalsGetArgs() + { + } + public static new EntitlementApprovalWorkflowManualApprovalsGetArgs Empty => new EntitlementApprovalWorkflowManualApprovalsGetArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepApproversArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepApproversArgs.cs new file mode 100644 index 0000000000..a5a4831bec --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepApproversArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementApprovalWorkflowManualApprovalsStepApproversArgs : global::Pulumi.ResourceArgs + { + [Input("principals", required: true)] + private InputList? _principals; + + /// + /// Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + /// + public InputList Principals + { + get => _principals ?? (_principals = new InputList()); + set => _principals = value; + } + + public EntitlementApprovalWorkflowManualApprovalsStepApproversArgs() + { + } + public static new EntitlementApprovalWorkflowManualApprovalsStepApproversArgs Empty => new EntitlementApprovalWorkflowManualApprovalsStepApproversArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepApproversGetArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepApproversGetArgs.cs new file mode 100644 index 0000000000..c84c99b4ca --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepApproversGetArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementApprovalWorkflowManualApprovalsStepApproversGetArgs : global::Pulumi.ResourceArgs + { + [Input("principals", required: true)] + private InputList? _principals; + + /// + /// Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + /// + public InputList Principals + { + get => _principals ?? (_principals = new InputList()); + set => _principals = value; + } + + public EntitlementApprovalWorkflowManualApprovalsStepApproversGetArgs() + { + } + public static new EntitlementApprovalWorkflowManualApprovalsStepApproversGetArgs Empty => new EntitlementApprovalWorkflowManualApprovalsStepApproversGetArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepArgs.cs new file mode 100644 index 0000000000..609fcd73c1 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementApprovalWorkflowManualApprovalsStepArgs : global::Pulumi.ResourceArgs + { + /// + /// How many users from the above list need to approve. + /// If there are not enough distinct users in the list above then the workflow + /// will indefinitely block. Should always be greater than 0. Currently 1 is the only + /// supported value. + /// + [Input("approvalsNeeded")] + public Input? ApprovalsNeeded { get; set; } + + [Input("approverEmailRecipients")] + private InputList? _approverEmailRecipients; + + /// + /// Optional. Additional email addresses to be notified when a grant is pending approval. + /// + public InputList ApproverEmailRecipients + { + get => _approverEmailRecipients ?? (_approverEmailRecipients = new InputList()); + set => _approverEmailRecipients = value; + } + + /// + /// The potential set of approvers in this step. This list should contain at only one entry. + /// Structure is documented below. + /// + [Input("approvers", required: true)] + public Input Approvers { get; set; } = null!; + + public EntitlementApprovalWorkflowManualApprovalsStepArgs() + { + } + public static new EntitlementApprovalWorkflowManualApprovalsStepArgs Empty => new EntitlementApprovalWorkflowManualApprovalsStepArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepGetArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepGetArgs.cs new file mode 100644 index 0000000000..6cf94e92b2 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementApprovalWorkflowManualApprovalsStepGetArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementApprovalWorkflowManualApprovalsStepGetArgs : global::Pulumi.ResourceArgs + { + /// + /// How many users from the above list need to approve. + /// If there are not enough distinct users in the list above then the workflow + /// will indefinitely block. Should always be greater than 0. Currently 1 is the only + /// supported value. + /// + [Input("approvalsNeeded")] + public Input? ApprovalsNeeded { get; set; } + + [Input("approverEmailRecipients")] + private InputList? _approverEmailRecipients; + + /// + /// Optional. Additional email addresses to be notified when a grant is pending approval. + /// + public InputList ApproverEmailRecipients + { + get => _approverEmailRecipients ?? (_approverEmailRecipients = new InputList()); + set => _approverEmailRecipients = value; + } + + /// + /// The potential set of approvers in this step. This list should contain at only one entry. + /// Structure is documented below. + /// + [Input("approvers", required: true)] + public Input Approvers { get; set; } = null!; + + public EntitlementApprovalWorkflowManualApprovalsStepGetArgs() + { + } + public static new EntitlementApprovalWorkflowManualApprovalsStepGetArgs Empty => new EntitlementApprovalWorkflowManualApprovalsStepGetArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementEligibleUserArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementEligibleUserArgs.cs new file mode 100644 index 0000000000..71e3ae4a90 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementEligibleUserArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementEligibleUserArgs : global::Pulumi.ResourceArgs + { + [Input("principals", required: true)] + private InputList? _principals; + + /// + /// Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + /// + public InputList Principals + { + get => _principals ?? (_principals = new InputList()); + set => _principals = value; + } + + public EntitlementEligibleUserArgs() + { + } + public static new EntitlementEligibleUserArgs Empty => new EntitlementEligibleUserArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementEligibleUserGetArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementEligibleUserGetArgs.cs new file mode 100644 index 0000000000..1ce8532e78 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementEligibleUserGetArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementEligibleUserGetArgs : global::Pulumi.ResourceArgs + { + [Input("principals", required: true)] + private InputList? _principals; + + /// + /// Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + /// + public InputList Principals + { + get => _principals ?? (_principals = new InputList()); + set => _principals = value; + } + + public EntitlementEligibleUserGetArgs() + { + } + public static new EntitlementEligibleUserGetArgs Empty => new EntitlementEligibleUserGetArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessArgs.cs new file mode 100644 index 0000000000..f6036b8a6c --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementPrivilegedAccessArgs : global::Pulumi.ResourceArgs + { + /// + /// GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + /// Structure is documented below. + /// + [Input("gcpIamAccess", required: true)] + public Input GcpIamAccess { get; set; } = null!; + + public EntitlementPrivilegedAccessArgs() + { + } + public static new EntitlementPrivilegedAccessArgs Empty => new EntitlementPrivilegedAccessArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessArgs.cs new file mode 100644 index 0000000000..7501deb1be --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementPrivilegedAccessGcpIamAccessArgs : global::Pulumi.ResourceArgs + { + /// + /// Name of the resource. + /// + [Input("resource", required: true)] + public Input Resource { get; set; } = null!; + + /// + /// The type of this resource. + /// + [Input("resourceType", required: true)] + public Input ResourceType { get; set; } = null!; + + [Input("roleBindings", required: true)] + private InputList? _roleBindings; + + /// + /// Role bindings to be created on successful grant. + /// Structure is documented below. + /// + public InputList RoleBindings + { + get => _roleBindings ?? (_roleBindings = new InputList()); + set => _roleBindings = value; + } + + public EntitlementPrivilegedAccessGcpIamAccessArgs() + { + } + public static new EntitlementPrivilegedAccessGcpIamAccessArgs Empty => new EntitlementPrivilegedAccessGcpIamAccessArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessGetArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessGetArgs.cs new file mode 100644 index 0000000000..9eecd5e1e9 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessGetArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementPrivilegedAccessGcpIamAccessGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Name of the resource. + /// + [Input("resource", required: true)] + public Input Resource { get; set; } = null!; + + /// + /// The type of this resource. + /// + [Input("resourceType", required: true)] + public Input ResourceType { get; set; } = null!; + + [Input("roleBindings", required: true)] + private InputList? _roleBindings; + + /// + /// Role bindings to be created on successful grant. + /// Structure is documented below. + /// + public InputList RoleBindings + { + get => _roleBindings ?? (_roleBindings = new InputList()); + set => _roleBindings = value; + } + + public EntitlementPrivilegedAccessGcpIamAccessGetArgs() + { + } + public static new EntitlementPrivilegedAccessGcpIamAccessGetArgs Empty => new EntitlementPrivilegedAccessGcpIamAccessGetArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs.cs new file mode 100644 index 0000000000..4647268ed9 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs : global::Pulumi.ResourceArgs + { + /// + /// The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + /// https://cloud.google.com/iam/docs/conditions-overview#attributes. + /// + [Input("conditionExpression")] + public Input? ConditionExpression { get; set; } + + /// + /// IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + /// + [Input("role", required: true)] + public Input Role { get; set; } = null!; + + public EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs() + { + } + public static new EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs Empty => new EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessRoleBindingGetArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessRoleBindingGetArgs.cs new file mode 100644 index 0000000000..a49d81cef6 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGcpIamAccessRoleBindingGetArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementPrivilegedAccessGcpIamAccessRoleBindingGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + /// https://cloud.google.com/iam/docs/conditions-overview#attributes. + /// + [Input("conditionExpression")] + public Input? ConditionExpression { get; set; } + + /// + /// IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + /// + [Input("role", required: true)] + public Input Role { get; set; } = null!; + + public EntitlementPrivilegedAccessGcpIamAccessRoleBindingGetArgs() + { + } + public static new EntitlementPrivilegedAccessGcpIamAccessRoleBindingGetArgs Empty => new EntitlementPrivilegedAccessGcpIamAccessRoleBindingGetArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGetArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGetArgs.cs new file mode 100644 index 0000000000..e0f16cad13 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementPrivilegedAccessGetArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementPrivilegedAccessGetArgs : global::Pulumi.ResourceArgs + { + /// + /// GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + /// Structure is documented below. + /// + [Input("gcpIamAccess", required: true)] + public Input GcpIamAccess { get; set; } = null!; + + public EntitlementPrivilegedAccessGetArgs() + { + } + public static new EntitlementPrivilegedAccessGetArgs Empty => new EntitlementPrivilegedAccessGetArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigArgs.cs new file mode 100644 index 0000000000..b0f56c7379 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementRequesterJustificationConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// The justification is not mandatory but can be provided in any of the supported formats. + /// + [Input("notMandatory")] + public Input? NotMandatory { get; set; } + + /// + /// The requester has to provide a justification in the form of free flowing text. + /// + /// - - - + /// + [Input("unstructured")] + public Input? Unstructured { get; set; } + + public EntitlementRequesterJustificationConfigArgs() + { + } + public static new EntitlementRequesterJustificationConfigArgs Empty => new EntitlementRequesterJustificationConfigArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigGetArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigGetArgs.cs new file mode 100644 index 0000000000..246156d94c --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigGetArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementRequesterJustificationConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The justification is not mandatory but can be provided in any of the supported formats. + /// + [Input("notMandatory")] + public Input? NotMandatory { get; set; } + + /// + /// The requester has to provide a justification in the form of free flowing text. + /// + /// - - - + /// + [Input("unstructured")] + public Input? Unstructured { get; set; } + + public EntitlementRequesterJustificationConfigGetArgs() + { + } + public static new EntitlementRequesterJustificationConfigGetArgs Empty => new EntitlementRequesterJustificationConfigGetArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigNotMandatoryArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigNotMandatoryArgs.cs new file mode 100644 index 0000000000..c61ad17542 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigNotMandatoryArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementRequesterJustificationConfigNotMandatoryArgs : global::Pulumi.ResourceArgs + { + public EntitlementRequesterJustificationConfigNotMandatoryArgs() + { + } + public static new EntitlementRequesterJustificationConfigNotMandatoryArgs Empty => new EntitlementRequesterJustificationConfigNotMandatoryArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigNotMandatoryGetArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigNotMandatoryGetArgs.cs new file mode 100644 index 0000000000..56cafc35c1 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigNotMandatoryGetArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementRequesterJustificationConfigNotMandatoryGetArgs : global::Pulumi.ResourceArgs + { + public EntitlementRequesterJustificationConfigNotMandatoryGetArgs() + { + } + public static new EntitlementRequesterJustificationConfigNotMandatoryGetArgs Empty => new EntitlementRequesterJustificationConfigNotMandatoryGetArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigUnstructuredArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigUnstructuredArgs.cs new file mode 100644 index 0000000000..1484e2a2b0 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigUnstructuredArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementRequesterJustificationConfigUnstructuredArgs : global::Pulumi.ResourceArgs + { + public EntitlementRequesterJustificationConfigUnstructuredArgs() + { + } + public static new EntitlementRequesterJustificationConfigUnstructuredArgs Empty => new EntitlementRequesterJustificationConfigUnstructuredArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigUnstructuredGetArgs.cs b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigUnstructuredGetArgs.cs new file mode 100644 index 0000000000..7f4d466456 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Inputs/EntitlementRequesterJustificationConfigUnstructuredGetArgs.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.PrivilegedAccessManager.Inputs +{ + + public sealed class EntitlementRequesterJustificationConfigUnstructuredGetArgs : global::Pulumi.ResourceArgs + { + public EntitlementRequesterJustificationConfigUnstructuredGetArgs() + { + } + public static new EntitlementRequesterJustificationConfigUnstructuredGetArgs Empty => new EntitlementRequesterJustificationConfigUnstructuredGetArgs(); + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementAdditionalNotificationTargets.cs b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementAdditionalNotificationTargets.cs new file mode 100644 index 0000000000..e6a07ea0d4 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementAdditionalNotificationTargets.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.PrivilegedAccessManager.Outputs +{ + + [OutputType] + public sealed class EntitlementAdditionalNotificationTargets + { + /// + /// Optional. Additional email addresses to be notified when a principal(requester) is granted access. + /// + public readonly ImmutableArray AdminEmailRecipients; + /// + /// Optional. Additional email address to be notified about an eligible entitlement. + /// + public readonly ImmutableArray RequesterEmailRecipients; + + [OutputConstructor] + private EntitlementAdditionalNotificationTargets( + ImmutableArray adminEmailRecipients, + + ImmutableArray requesterEmailRecipients) + { + AdminEmailRecipients = adminEmailRecipients; + RequesterEmailRecipients = requesterEmailRecipients; + } + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflow.cs b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflow.cs new file mode 100644 index 0000000000..97c88a04bb --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflow.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.PrivilegedAccessManager.Outputs +{ + + [OutputType] + public sealed class EntitlementApprovalWorkflow + { + /// + /// A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + /// The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + /// This can be used to create approval workflows such as + /// * Require an approval from any user in a group G. + /// * Require an approval from any k number of users from a Group G. + /// * Require an approval from any user in a group G and then from a user U. etc. + /// A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + /// Structure is documented below. + /// + public readonly Outputs.EntitlementApprovalWorkflowManualApprovals ManualApprovals; + + [OutputConstructor] + private EntitlementApprovalWorkflow(Outputs.EntitlementApprovalWorkflowManualApprovals manualApprovals) + { + ManualApprovals = manualApprovals; + } + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflowManualApprovals.cs b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflowManualApprovals.cs new file mode 100644 index 0000000000..2a59adefb9 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflowManualApprovals.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.PrivilegedAccessManager.Outputs +{ + + [OutputType] + public sealed class EntitlementApprovalWorkflowManualApprovals + { + /// + /// Optional. Do the approvers need to provide a justification for their actions? + /// + public readonly bool? RequireApproverJustification; + /// + /// List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + /// Structure is documented below. + /// + public readonly ImmutableArray Steps; + + [OutputConstructor] + private EntitlementApprovalWorkflowManualApprovals( + bool? requireApproverJustification, + + ImmutableArray steps) + { + RequireApproverJustification = requireApproverJustification; + Steps = steps; + } + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflowManualApprovalsStep.cs b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflowManualApprovalsStep.cs new file mode 100644 index 0000000000..21833fa9ec --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflowManualApprovalsStep.cs @@ -0,0 +1,46 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.PrivilegedAccessManager.Outputs +{ + + [OutputType] + public sealed class EntitlementApprovalWorkflowManualApprovalsStep + { + /// + /// How many users from the above list need to approve. + /// If there are not enough distinct users in the list above then the workflow + /// will indefinitely block. Should always be greater than 0. Currently 1 is the only + /// supported value. + /// + public readonly int? ApprovalsNeeded; + /// + /// Optional. Additional email addresses to be notified when a grant is pending approval. + /// + public readonly ImmutableArray ApproverEmailRecipients; + /// + /// The potential set of approvers in this step. This list should contain at only one entry. + /// Structure is documented below. + /// + public readonly Outputs.EntitlementApprovalWorkflowManualApprovalsStepApprovers Approvers; + + [OutputConstructor] + private EntitlementApprovalWorkflowManualApprovalsStep( + int? approvalsNeeded, + + ImmutableArray approverEmailRecipients, + + Outputs.EntitlementApprovalWorkflowManualApprovalsStepApprovers approvers) + { + ApprovalsNeeded = approvalsNeeded; + ApproverEmailRecipients = approverEmailRecipients; + Approvers = approvers; + } + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflowManualApprovalsStepApprovers.cs b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflowManualApprovalsStepApprovers.cs new file mode 100644 index 0000000000..5ffaff22b5 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementApprovalWorkflowManualApprovalsStepApprovers.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.PrivilegedAccessManager.Outputs +{ + + [OutputType] + public sealed class EntitlementApprovalWorkflowManualApprovalsStepApprovers + { + /// + /// Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + /// + public readonly ImmutableArray Principals; + + [OutputConstructor] + private EntitlementApprovalWorkflowManualApprovalsStepApprovers(ImmutableArray principals) + { + Principals = principals; + } + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementEligibleUser.cs b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementEligibleUser.cs new file mode 100644 index 0000000000..cb2b3626ae --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementEligibleUser.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.PrivilegedAccessManager.Outputs +{ + + [OutputType] + public sealed class EntitlementEligibleUser + { + /// + /// Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + /// + public readonly ImmutableArray Principals; + + [OutputConstructor] + private EntitlementEligibleUser(ImmutableArray principals) + { + Principals = principals; + } + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementPrivilegedAccess.cs b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementPrivilegedAccess.cs new file mode 100644 index 0000000000..6c1b703eaa --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementPrivilegedAccess.cs @@ -0,0 +1,28 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.PrivilegedAccessManager.Outputs +{ + + [OutputType] + public sealed class EntitlementPrivilegedAccess + { + /// + /// GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + /// Structure is documented below. + /// + public readonly Outputs.EntitlementPrivilegedAccessGcpIamAccess GcpIamAccess; + + [OutputConstructor] + private EntitlementPrivilegedAccess(Outputs.EntitlementPrivilegedAccessGcpIamAccess gcpIamAccess) + { + GcpIamAccess = gcpIamAccess; + } + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementPrivilegedAccessGcpIamAccess.cs b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementPrivilegedAccessGcpIamAccess.cs new file mode 100644 index 0000000000..87768d1fd9 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementPrivilegedAccessGcpIamAccess.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.PrivilegedAccessManager.Outputs +{ + + [OutputType] + public sealed class EntitlementPrivilegedAccessGcpIamAccess + { + /// + /// Name of the resource. + /// + public readonly string Resource; + /// + /// The type of this resource. + /// + public readonly string ResourceType; + /// + /// Role bindings to be created on successful grant. + /// Structure is documented below. + /// + public readonly ImmutableArray RoleBindings; + + [OutputConstructor] + private EntitlementPrivilegedAccessGcpIamAccess( + string resource, + + string resourceType, + + ImmutableArray roleBindings) + { + Resource = resource; + ResourceType = resourceType; + RoleBindings = roleBindings; + } + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementPrivilegedAccessGcpIamAccessRoleBinding.cs b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementPrivilegedAccessGcpIamAccessRoleBinding.cs new file mode 100644 index 0000000000..856950f651 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementPrivilegedAccessGcpIamAccessRoleBinding.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.PrivilegedAccessManager.Outputs +{ + + [OutputType] + public sealed class EntitlementPrivilegedAccessGcpIamAccessRoleBinding + { + /// + /// The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + /// https://cloud.google.com/iam/docs/conditions-overview#attributes. + /// + public readonly string? ConditionExpression; + /// + /// IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + /// + public readonly string Role; + + [OutputConstructor] + private EntitlementPrivilegedAccessGcpIamAccessRoleBinding( + string? conditionExpression, + + string role) + { + ConditionExpression = conditionExpression; + Role = role; + } + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementRequesterJustificationConfig.cs b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementRequesterJustificationConfig.cs new file mode 100644 index 0000000000..d14a20be99 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementRequesterJustificationConfig.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.PrivilegedAccessManager.Outputs +{ + + [OutputType] + public sealed class EntitlementRequesterJustificationConfig + { + /// + /// The justification is not mandatory but can be provided in any of the supported formats. + /// + public readonly Outputs.EntitlementRequesterJustificationConfigNotMandatory? NotMandatory; + /// + /// The requester has to provide a justification in the form of free flowing text. + /// + /// - - - + /// + public readonly Outputs.EntitlementRequesterJustificationConfigUnstructured? Unstructured; + + [OutputConstructor] + private EntitlementRequesterJustificationConfig( + Outputs.EntitlementRequesterJustificationConfigNotMandatory? notMandatory, + + Outputs.EntitlementRequesterJustificationConfigUnstructured? unstructured) + { + NotMandatory = notMandatory; + Unstructured = unstructured; + } + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementRequesterJustificationConfigNotMandatory.cs b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementRequesterJustificationConfigNotMandatory.cs new file mode 100644 index 0000000000..96b6a0aefe --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementRequesterJustificationConfigNotMandatory.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.PrivilegedAccessManager.Outputs +{ + + [OutputType] + public sealed class EntitlementRequesterJustificationConfigNotMandatory + { + [OutputConstructor] + private EntitlementRequesterJustificationConfigNotMandatory() + { + } + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementRequesterJustificationConfigUnstructured.cs b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementRequesterJustificationConfigUnstructured.cs new file mode 100644 index 0000000000..9c64f5b933 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/Outputs/EntitlementRequesterJustificationConfigUnstructured.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.PrivilegedAccessManager.Outputs +{ + + [OutputType] + public sealed class EntitlementRequesterJustificationConfigUnstructured + { + [OutputConstructor] + private EntitlementRequesterJustificationConfigUnstructured() + { + } + } +} diff --git a/sdk/dotnet/PrivilegedAccessManager/README.md b/sdk/dotnet/PrivilegedAccessManager/README.md new file mode 100644 index 0000000000..061b113996 --- /dev/null +++ b/sdk/dotnet/PrivilegedAccessManager/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing Google Cloud Platform resources. diff --git a/sdk/dotnet/Provider.cs b/sdk/dotnet/Provider.cs index 2cc47021f4..e4214c47f3 100644 --- a/sdk/dotnet/Provider.cs +++ b/sdk/dotnet/Provider.cs @@ -378,6 +378,9 @@ public partial class Provider : global::Pulumi.ProviderResource [Output("privatecaCustomEndpoint")] public Output PrivatecaCustomEndpoint { get; private set; } = null!; + [Output("privilegedAccessManagerCustomEndpoint")] + public Output PrivilegedAccessManagerCustomEndpoint { get; private set; } = null!; + [Output("project")] public Output Project { get; private set; } = null!; @@ -927,6 +930,9 @@ public InputList ImpersonateServiceAccountDelegates [Input("privatecaCustomEndpoint")] public Input? PrivatecaCustomEndpoint { get; set; } + [Input("privilegedAccessManagerCustomEndpoint")] + public Input? PrivilegedAccessManagerCustomEndpoint { get; set; } + [Input("project")] public Input? Project { get; set; } diff --git a/sdk/dotnet/Redis/Cluster.cs b/sdk/dotnet/Redis/Cluster.cs index 921635caf4..91808372fe 100644 --- a/sdk/dotnet/Redis/Cluster.cs +++ b/sdk/dotnet/Redis/Cluster.cs @@ -52,6 +52,10 @@ namespace Pulumi.Gcp.Redis /// NodeType = "REDIS_SHARED_CORE_NANO", /// TransitEncryptionMode = "TRANSIT_ENCRYPTION_MODE_DISABLED", /// AuthorizationMode = "AUTH_MODE_DISABLED", + /// RedisConfigs = + /// { + /// { "maxmemory-policy", "volatile-ttl" }, + /// }, /// }); /// /// var producerSubnet = new Gcp.Compute.Subnetwork("producer_subnet", new() @@ -178,6 +182,14 @@ public partial class Cluster : global::Pulumi.CustomResource [Output("pscConnections")] public Output> PscConnections { get; private set; } = null!; + /// + /// Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + /// documentation for the list of supported parameters: + /// https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + /// + [Output("redisConfigs")] + public Output?> RedisConfigs { get; private set; } = null!; + /// /// The name of the region of the Redis cluster. /// @@ -315,6 +327,20 @@ public InputList PscConfigs set => _pscConfigs = value; } + [Input("redisConfigs")] + private InputMap? _redisConfigs; + + /// + /// Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + /// documentation for the list of supported parameters: + /// https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + /// + public InputMap RedisConfigs + { + get => _redisConfigs ?? (_redisConfigs = new InputMap()); + set => _redisConfigs = value; + } + /// /// The name of the region of the Redis cluster. /// @@ -431,6 +457,20 @@ public InputList PscConnections set => _pscConnections = value; } + [Input("redisConfigs")] + private InputMap? _redisConfigs; + + /// + /// Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + /// documentation for the list of supported parameters: + /// https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + /// + public InputMap RedisConfigs + { + get => _redisConfigs ?? (_redisConfigs = new InputMap()); + set => _redisConfigs = value; + } + /// /// The name of the region of the Redis cluster. /// diff --git a/sdk/dotnet/Storage/GetBuckets.cs b/sdk/dotnet/Storage/GetBuckets.cs new file mode 100644 index 0000000000..0db1db0cea --- /dev/null +++ b/sdk/dotnet/Storage/GetBuckets.cs @@ -0,0 +1,143 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Storage +{ + public static class GetBuckets + { + /// + /// Gets a list of existing GCS buckets. + /// See [the official documentation](https://cloud.google.com/storage/docs/introduction) + /// and [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list). + /// + /// ## Example Usage + /// + /// Example GCS buckets. + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var example = Gcp.Storage.GetBuckets.Invoke(new() + /// { + /// Project = "example-project", + /// }); + /// + /// }); + /// ``` + /// + public static Task InvokeAsync(GetBucketsArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:storage/getBuckets:getBuckets", args ?? new GetBucketsArgs(), options.WithDefaults()); + + /// + /// Gets a list of existing GCS buckets. + /// See [the official documentation](https://cloud.google.com/storage/docs/introduction) + /// and [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list). + /// + /// ## Example Usage + /// + /// Example GCS buckets. + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var example = Gcp.Storage.GetBuckets.Invoke(new() + /// { + /// Project = "example-project", + /// }); + /// + /// }); + /// ``` + /// + public static Output Invoke(GetBucketsInvokeArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("gcp:storage/getBuckets:getBuckets", args ?? new GetBucketsInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetBucketsArgs : global::Pulumi.InvokeArgs + { + /// + /// Filter results to buckets whose names begin with this prefix. + /// + [Input("prefix")] + public string? Prefix { get; set; } + + /// + /// The ID of the project. If it is not provided, the provider project is used. + /// + [Input("project")] + public string? Project { get; set; } + + public GetBucketsArgs() + { + } + public static new GetBucketsArgs Empty => new GetBucketsArgs(); + } + + public sealed class GetBucketsInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// Filter results to buckets whose names begin with this prefix. + /// + [Input("prefix")] + public Input? Prefix { get; set; } + + /// + /// The ID of the project. If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + public GetBucketsInvokeArgs() + { + } + public static new GetBucketsInvokeArgs Empty => new GetBucketsInvokeArgs(); + } + + + [OutputType] + public sealed class GetBucketsResult + { + /// + /// A list of all retrieved GCS buckets. Structure is defined below. + /// + public readonly ImmutableArray Buckets; + /// + /// The provider-assigned unique ID for this managed resource. + /// + public readonly string Id; + public readonly string? Prefix; + public readonly string? Project; + + [OutputConstructor] + private GetBucketsResult( + ImmutableArray buckets, + + string id, + + string? prefix, + + string? project) + { + Buckets = buckets; + Id = id; + Prefix = prefix; + Project = project; + } + } +} diff --git a/sdk/dotnet/Storage/Outputs/GetBucketsBucketResult.cs b/sdk/dotnet/Storage/Outputs/GetBucketsBucketResult.cs new file mode 100644 index 0000000000..d6971d47e7 --- /dev/null +++ b/sdk/dotnet/Storage/Outputs/GetBucketsBucketResult.cs @@ -0,0 +1,56 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Storage.Outputs +{ + + [OutputType] + public sealed class GetBucketsBucketResult + { + /// + /// User-provided bucket labels, in key/value pairs. + /// + public readonly ImmutableDictionary Labels; + /// + /// The location of the bucket. + /// + public readonly string Location; + /// + /// The name of the bucket. + /// + public readonly string Name; + /// + /// A url reference to the bucket. + /// + public readonly string SelfLink; + /// + /// The [StorageClass](https://cloud.google.com/storage/docs/storage-classes) of the bucket. + /// + public readonly string StorageClass; + + [OutputConstructor] + private GetBucketsBucketResult( + ImmutableDictionary labels, + + string location, + + string name, + + string selfLink, + + string storageClass) + { + Labels = labels; + Location = location; + Name = name; + SelfLink = selfLink; + StorageClass = storageClass; + } + } +} diff --git a/sdk/go/gcp/alloydb/cluster.go b/sdk/go/gcp/alloydb/cluster.go index 1ee64aa63a..d033098969 100644 --- a/sdk/go/gcp/alloydb/cluster.go +++ b/sdk/go/gcp/alloydb/cluster.go @@ -420,6 +420,9 @@ type Cluster struct { // // *** Location pulumi.StringOutput `pulumi:"location"` + // MaintenanceUpdatePolicy defines the policy for system updates. + // Structure is documented below. + MaintenanceUpdatePolicy ClusterMaintenanceUpdatePolicyPtrOutput `pulumi:"maintenanceUpdatePolicy"` // Cluster created via DMS migration. // Structure is documented below. MigrationSources ClusterMigrationSourceArrayOutput `pulumi:"migrationSources"` @@ -558,6 +561,9 @@ type clusterState struct { // // *** Location *string `pulumi:"location"` + // MaintenanceUpdatePolicy defines the policy for system updates. + // Structure is documented below. + MaintenanceUpdatePolicy *ClusterMaintenanceUpdatePolicy `pulumi:"maintenanceUpdatePolicy"` // Cluster created via DMS migration. // Structure is documented below. MigrationSources []ClusterMigrationSource `pulumi:"migrationSources"` @@ -656,6 +662,9 @@ type ClusterState struct { // // *** Location pulumi.StringPtrInput + // MaintenanceUpdatePolicy defines the policy for system updates. + // Structure is documented below. + MaintenanceUpdatePolicy ClusterMaintenanceUpdatePolicyPtrInput // Cluster created via DMS migration. // Structure is documented below. MigrationSources ClusterMigrationSourceArrayInput @@ -745,6 +754,9 @@ type clusterArgs struct { // // *** Location string `pulumi:"location"` + // MaintenanceUpdatePolicy defines the policy for system updates. + // Structure is documented below. + MaintenanceUpdatePolicy *ClusterMaintenanceUpdatePolicy `pulumi:"maintenanceUpdatePolicy"` // (Optional, Deprecated) // The relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form: // "projects/{projectNumber}/global/networks/{network_id}". @@ -815,6 +827,9 @@ type ClusterArgs struct { // // *** Location pulumi.StringInput + // MaintenanceUpdatePolicy defines the policy for system updates. + // Structure is documented below. + MaintenanceUpdatePolicy ClusterMaintenanceUpdatePolicyPtrInput // (Optional, Deprecated) // The relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form: // "projects/{projectNumber}/global/networks/{network_id}". @@ -1037,6 +1052,12 @@ func (o ClusterOutput) Location() pulumi.StringOutput { return o.ApplyT(func(v *Cluster) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) } +// MaintenanceUpdatePolicy defines the policy for system updates. +// Structure is documented below. +func (o ClusterOutput) MaintenanceUpdatePolicy() ClusterMaintenanceUpdatePolicyPtrOutput { + return o.ApplyT(func(v *Cluster) ClusterMaintenanceUpdatePolicyPtrOutput { return v.MaintenanceUpdatePolicy }).(ClusterMaintenanceUpdatePolicyPtrOutput) +} + // Cluster created via DMS migration. // Structure is documented below. func (o ClusterOutput) MigrationSources() ClusterMigrationSourceArrayOutput { diff --git a/sdk/go/gcp/alloydb/pulumiTypes.go b/sdk/go/gcp/alloydb/pulumiTypes.go index 41b504b506..c3135b65f1 100644 --- a/sdk/go/gcp/alloydb/pulumiTypes.go +++ b/sdk/go/gcp/alloydb/pulumiTypes.go @@ -2462,6 +2462,342 @@ func (o ClusterInitialUserPtrOutput) User() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } +type ClusterMaintenanceUpdatePolicy struct { + // Preferred windows to perform maintenance. Currently limited to 1. + // Structure is documented below. + MaintenanceWindows []ClusterMaintenanceUpdatePolicyMaintenanceWindow `pulumi:"maintenanceWindows"` +} + +// ClusterMaintenanceUpdatePolicyInput is an input type that accepts ClusterMaintenanceUpdatePolicyArgs and ClusterMaintenanceUpdatePolicyOutput values. +// You can construct a concrete instance of `ClusterMaintenanceUpdatePolicyInput` via: +// +// ClusterMaintenanceUpdatePolicyArgs{...} +type ClusterMaintenanceUpdatePolicyInput interface { + pulumi.Input + + ToClusterMaintenanceUpdatePolicyOutput() ClusterMaintenanceUpdatePolicyOutput + ToClusterMaintenanceUpdatePolicyOutputWithContext(context.Context) ClusterMaintenanceUpdatePolicyOutput +} + +type ClusterMaintenanceUpdatePolicyArgs struct { + // Preferred windows to perform maintenance. Currently limited to 1. + // Structure is documented below. + MaintenanceWindows ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayInput `pulumi:"maintenanceWindows"` +} + +func (ClusterMaintenanceUpdatePolicyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterMaintenanceUpdatePolicy)(nil)).Elem() +} + +func (i ClusterMaintenanceUpdatePolicyArgs) ToClusterMaintenanceUpdatePolicyOutput() ClusterMaintenanceUpdatePolicyOutput { + return i.ToClusterMaintenanceUpdatePolicyOutputWithContext(context.Background()) +} + +func (i ClusterMaintenanceUpdatePolicyArgs) ToClusterMaintenanceUpdatePolicyOutputWithContext(ctx context.Context) ClusterMaintenanceUpdatePolicyOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterMaintenanceUpdatePolicyOutput) +} + +func (i ClusterMaintenanceUpdatePolicyArgs) ToClusterMaintenanceUpdatePolicyPtrOutput() ClusterMaintenanceUpdatePolicyPtrOutput { + return i.ToClusterMaintenanceUpdatePolicyPtrOutputWithContext(context.Background()) +} + +func (i ClusterMaintenanceUpdatePolicyArgs) ToClusterMaintenanceUpdatePolicyPtrOutputWithContext(ctx context.Context) ClusterMaintenanceUpdatePolicyPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterMaintenanceUpdatePolicyOutput).ToClusterMaintenanceUpdatePolicyPtrOutputWithContext(ctx) +} + +// ClusterMaintenanceUpdatePolicyPtrInput is an input type that accepts ClusterMaintenanceUpdatePolicyArgs, ClusterMaintenanceUpdatePolicyPtr and ClusterMaintenanceUpdatePolicyPtrOutput values. +// You can construct a concrete instance of `ClusterMaintenanceUpdatePolicyPtrInput` via: +// +// ClusterMaintenanceUpdatePolicyArgs{...} +// +// or: +// +// nil +type ClusterMaintenanceUpdatePolicyPtrInput interface { + pulumi.Input + + ToClusterMaintenanceUpdatePolicyPtrOutput() ClusterMaintenanceUpdatePolicyPtrOutput + ToClusterMaintenanceUpdatePolicyPtrOutputWithContext(context.Context) ClusterMaintenanceUpdatePolicyPtrOutput +} + +type clusterMaintenanceUpdatePolicyPtrType ClusterMaintenanceUpdatePolicyArgs + +func ClusterMaintenanceUpdatePolicyPtr(v *ClusterMaintenanceUpdatePolicyArgs) ClusterMaintenanceUpdatePolicyPtrInput { + return (*clusterMaintenanceUpdatePolicyPtrType)(v) +} + +func (*clusterMaintenanceUpdatePolicyPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterMaintenanceUpdatePolicy)(nil)).Elem() +} + +func (i *clusterMaintenanceUpdatePolicyPtrType) ToClusterMaintenanceUpdatePolicyPtrOutput() ClusterMaintenanceUpdatePolicyPtrOutput { + return i.ToClusterMaintenanceUpdatePolicyPtrOutputWithContext(context.Background()) +} + +func (i *clusterMaintenanceUpdatePolicyPtrType) ToClusterMaintenanceUpdatePolicyPtrOutputWithContext(ctx context.Context) ClusterMaintenanceUpdatePolicyPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterMaintenanceUpdatePolicyPtrOutput) +} + +type ClusterMaintenanceUpdatePolicyOutput struct{ *pulumi.OutputState } + +func (ClusterMaintenanceUpdatePolicyOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterMaintenanceUpdatePolicy)(nil)).Elem() +} + +func (o ClusterMaintenanceUpdatePolicyOutput) ToClusterMaintenanceUpdatePolicyOutput() ClusterMaintenanceUpdatePolicyOutput { + return o +} + +func (o ClusterMaintenanceUpdatePolicyOutput) ToClusterMaintenanceUpdatePolicyOutputWithContext(ctx context.Context) ClusterMaintenanceUpdatePolicyOutput { + return o +} + +func (o ClusterMaintenanceUpdatePolicyOutput) ToClusterMaintenanceUpdatePolicyPtrOutput() ClusterMaintenanceUpdatePolicyPtrOutput { + return o.ToClusterMaintenanceUpdatePolicyPtrOutputWithContext(context.Background()) +} + +func (o ClusterMaintenanceUpdatePolicyOutput) ToClusterMaintenanceUpdatePolicyPtrOutputWithContext(ctx context.Context) ClusterMaintenanceUpdatePolicyPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClusterMaintenanceUpdatePolicy) *ClusterMaintenanceUpdatePolicy { + return &v + }).(ClusterMaintenanceUpdatePolicyPtrOutput) +} + +// Preferred windows to perform maintenance. Currently limited to 1. +// Structure is documented below. +func (o ClusterMaintenanceUpdatePolicyOutput) MaintenanceWindows() ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput { + return o.ApplyT(func(v ClusterMaintenanceUpdatePolicy) []ClusterMaintenanceUpdatePolicyMaintenanceWindow { + return v.MaintenanceWindows + }).(ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput) +} + +type ClusterMaintenanceUpdatePolicyPtrOutput struct{ *pulumi.OutputState } + +func (ClusterMaintenanceUpdatePolicyPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterMaintenanceUpdatePolicy)(nil)).Elem() +} + +func (o ClusterMaintenanceUpdatePolicyPtrOutput) ToClusterMaintenanceUpdatePolicyPtrOutput() ClusterMaintenanceUpdatePolicyPtrOutput { + return o +} + +func (o ClusterMaintenanceUpdatePolicyPtrOutput) ToClusterMaintenanceUpdatePolicyPtrOutputWithContext(ctx context.Context) ClusterMaintenanceUpdatePolicyPtrOutput { + return o +} + +func (o ClusterMaintenanceUpdatePolicyPtrOutput) Elem() ClusterMaintenanceUpdatePolicyOutput { + return o.ApplyT(func(v *ClusterMaintenanceUpdatePolicy) ClusterMaintenanceUpdatePolicy { + if v != nil { + return *v + } + var ret ClusterMaintenanceUpdatePolicy + return ret + }).(ClusterMaintenanceUpdatePolicyOutput) +} + +// Preferred windows to perform maintenance. Currently limited to 1. +// Structure is documented below. +func (o ClusterMaintenanceUpdatePolicyPtrOutput) MaintenanceWindows() ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput { + return o.ApplyT(func(v *ClusterMaintenanceUpdatePolicy) []ClusterMaintenanceUpdatePolicyMaintenanceWindow { + if v == nil { + return nil + } + return v.MaintenanceWindows + }).(ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput) +} + +type ClusterMaintenanceUpdatePolicyMaintenanceWindow struct { + // Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + // Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + Day string `pulumi:"day"` + // Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + // Structure is documented below. + StartTime ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime `pulumi:"startTime"` +} + +// ClusterMaintenanceUpdatePolicyMaintenanceWindowInput is an input type that accepts ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs and ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput values. +// You can construct a concrete instance of `ClusterMaintenanceUpdatePolicyMaintenanceWindowInput` via: +// +// ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs{...} +type ClusterMaintenanceUpdatePolicyMaintenanceWindowInput interface { + pulumi.Input + + ToClusterMaintenanceUpdatePolicyMaintenanceWindowOutput() ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput + ToClusterMaintenanceUpdatePolicyMaintenanceWindowOutputWithContext(context.Context) ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput +} + +type ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs struct { + // Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + // Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + Day pulumi.StringInput `pulumi:"day"` + // Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + // Structure is documented below. + StartTime ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeInput `pulumi:"startTime"` +} + +func (ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterMaintenanceUpdatePolicyMaintenanceWindow)(nil)).Elem() +} + +func (i ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs) ToClusterMaintenanceUpdatePolicyMaintenanceWindowOutput() ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput { + return i.ToClusterMaintenanceUpdatePolicyMaintenanceWindowOutputWithContext(context.Background()) +} + +func (i ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs) ToClusterMaintenanceUpdatePolicyMaintenanceWindowOutputWithContext(ctx context.Context) ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput) +} + +// ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayInput is an input type that accepts ClusterMaintenanceUpdatePolicyMaintenanceWindowArray and ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput values. +// You can construct a concrete instance of `ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayInput` via: +// +// ClusterMaintenanceUpdatePolicyMaintenanceWindowArray{ ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs{...} } +type ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayInput interface { + pulumi.Input + + ToClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput() ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput + ToClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutputWithContext(context.Context) ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput +} + +type ClusterMaintenanceUpdatePolicyMaintenanceWindowArray []ClusterMaintenanceUpdatePolicyMaintenanceWindowInput + +func (ClusterMaintenanceUpdatePolicyMaintenanceWindowArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterMaintenanceUpdatePolicyMaintenanceWindow)(nil)).Elem() +} + +func (i ClusterMaintenanceUpdatePolicyMaintenanceWindowArray) ToClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput() ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput { + return i.ToClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutputWithContext(context.Background()) +} + +func (i ClusterMaintenanceUpdatePolicyMaintenanceWindowArray) ToClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutputWithContext(ctx context.Context) ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput) +} + +type ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput struct{ *pulumi.OutputState } + +func (ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterMaintenanceUpdatePolicyMaintenanceWindow)(nil)).Elem() +} + +func (o ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput) ToClusterMaintenanceUpdatePolicyMaintenanceWindowOutput() ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput { + return o +} + +func (o ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput) ToClusterMaintenanceUpdatePolicyMaintenanceWindowOutputWithContext(ctx context.Context) ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput { + return o +} + +// Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. +// Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. +func (o ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput) Day() pulumi.StringOutput { + return o.ApplyT(func(v ClusterMaintenanceUpdatePolicyMaintenanceWindow) string { return v.Day }).(pulumi.StringOutput) +} + +// Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. +// Structure is documented below. +func (o ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput) StartTime() ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput { + return o.ApplyT(func(v ClusterMaintenanceUpdatePolicyMaintenanceWindow) ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime { + return v.StartTime + }).(ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput) +} + +type ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput struct{ *pulumi.OutputState } + +func (ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterMaintenanceUpdatePolicyMaintenanceWindow)(nil)).Elem() +} + +func (o ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput) ToClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput() ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput { + return o +} + +func (o ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput) ToClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutputWithContext(ctx context.Context) ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput { + return o +} + +func (o ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput) Index(i pulumi.IntInput) ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ClusterMaintenanceUpdatePolicyMaintenanceWindow { + return vs[0].([]ClusterMaintenanceUpdatePolicyMaintenanceWindow)[vs[1].(int)] + }).(ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput) +} + +type ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime struct { + // Hours of day in 24 hour format. Should be from 0 to 23. + Hours int `pulumi:"hours"` + // Minutes of hour of day. Currently, only the value 0 is supported. + Minutes *int `pulumi:"minutes"` + // Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + Nanos *int `pulumi:"nanos"` + // Seconds of minutes of the time. Currently, only the value 0 is supported. + Seconds *int `pulumi:"seconds"` +} + +// ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeInput is an input type that accepts ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs and ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput values. +// You can construct a concrete instance of `ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeInput` via: +// +// ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs{...} +type ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeInput interface { + pulumi.Input + + ToClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput() ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput + ToClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutputWithContext(context.Context) ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput +} + +type ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs struct { + // Hours of day in 24 hour format. Should be from 0 to 23. + Hours pulumi.IntInput `pulumi:"hours"` + // Minutes of hour of day. Currently, only the value 0 is supported. + Minutes pulumi.IntPtrInput `pulumi:"minutes"` + // Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + Nanos pulumi.IntPtrInput `pulumi:"nanos"` + // Seconds of minutes of the time. Currently, only the value 0 is supported. + Seconds pulumi.IntPtrInput `pulumi:"seconds"` +} + +func (ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime)(nil)).Elem() +} + +func (i ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs) ToClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput() ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput { + return i.ToClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutputWithContext(context.Background()) +} + +func (i ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs) ToClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutputWithContext(ctx context.Context) ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput) +} + +type ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput struct{ *pulumi.OutputState } + +func (ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime)(nil)).Elem() +} + +func (o ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput) ToClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput() ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput { + return o +} + +func (o ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput) ToClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutputWithContext(ctx context.Context) ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput { + return o +} + +// Hours of day in 24 hour format. Should be from 0 to 23. +func (o ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput) Hours() pulumi.IntOutput { + return o.ApplyT(func(v ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime) int { return v.Hours }).(pulumi.IntOutput) +} + +// Minutes of hour of day. Currently, only the value 0 is supported. +func (o ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput) Minutes() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime) *int { return v.Minutes }).(pulumi.IntPtrOutput) +} + +// Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. +func (o ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput) Nanos() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime) *int { return v.Nanos }).(pulumi.IntPtrOutput) +} + +// Seconds of minutes of the time. Currently, only the value 0 is supported. +func (o ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput) Seconds() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime) *int { return v.Seconds }).(pulumi.IntPtrOutput) +} + type ClusterMigrationSource struct { // The host and port of the on-premises instance in host:port format HostPort *string `pulumi:"hostPort"` @@ -4666,6 +5002,11 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ClusterEncryptionInfoArrayInput)(nil)).Elem(), ClusterEncryptionInfoArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterInitialUserInput)(nil)).Elem(), ClusterInitialUserArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterInitialUserPtrInput)(nil)).Elem(), ClusterInitialUserArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterMaintenanceUpdatePolicyInput)(nil)).Elem(), ClusterMaintenanceUpdatePolicyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterMaintenanceUpdatePolicyPtrInput)(nil)).Elem(), ClusterMaintenanceUpdatePolicyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterMaintenanceUpdatePolicyMaintenanceWindowInput)(nil)).Elem(), ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayInput)(nil)).Elem(), ClusterMaintenanceUpdatePolicyMaintenanceWindowArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeInput)(nil)).Elem(), ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterMigrationSourceInput)(nil)).Elem(), ClusterMigrationSourceArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterMigrationSourceArrayInput)(nil)).Elem(), ClusterMigrationSourceArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNetworkConfigInput)(nil)).Elem(), ClusterNetworkConfigArgs{}) @@ -4730,6 +5071,11 @@ func init() { pulumi.RegisterOutputType(ClusterEncryptionInfoArrayOutput{}) pulumi.RegisterOutputType(ClusterInitialUserOutput{}) pulumi.RegisterOutputType(ClusterInitialUserPtrOutput{}) + pulumi.RegisterOutputType(ClusterMaintenanceUpdatePolicyOutput{}) + pulumi.RegisterOutputType(ClusterMaintenanceUpdatePolicyPtrOutput{}) + pulumi.RegisterOutputType(ClusterMaintenanceUpdatePolicyMaintenanceWindowOutput{}) + pulumi.RegisterOutputType(ClusterMaintenanceUpdatePolicyMaintenanceWindowArrayOutput{}) + pulumi.RegisterOutputType(ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeOutput{}) pulumi.RegisterOutputType(ClusterMigrationSourceOutput{}) pulumi.RegisterOutputType(ClusterMigrationSourceArrayOutput{}) pulumi.RegisterOutputType(ClusterNetworkConfigOutput{}) diff --git a/sdk/go/gcp/applicationintegration/authConfig.go b/sdk/go/gcp/applicationintegration/authConfig.go index 4c490c9e85..dc1ed81463 100644 --- a/sdk/go/gcp/applicationintegration/authConfig.go +++ b/sdk/go/gcp/applicationintegration/authConfig.go @@ -38,8 +38,7 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := applicationintegration.NewClient(ctx, "client", &applicationintegration.ClientArgs{ -// Location: pulumi.String("us-west1"), -// ProvisionGmek: pulumi.Bool(true), +// Location: pulumi.String("us-west1"), // }) // if err != nil { // return err diff --git a/sdk/go/gcp/applicationintegration/client.go b/sdk/go/gcp/applicationintegration/client.go index a11acf0fb9..94559e29dd 100644 --- a/sdk/go/gcp/applicationintegration/client.go +++ b/sdk/go/gcp/applicationintegration/client.go @@ -38,8 +38,7 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := applicationintegration.NewClient(ctx, "example", &applicationintegration.ClientArgs{ -// Location: pulumi.String("us-central1"), -// ProvisionGmek: pulumi.Bool(true), +// Location: pulumi.String("us-central1"), // }) // if err != nil { // return err @@ -49,7 +48,7 @@ import ( // } // // ``` -// ### Integrations Client Advance +// ### Integrations Client Full // // ```go // package main @@ -99,9 +98,9 @@ import ( // return err // } // _, err = applicationintegration.NewClient(ctx, "example", &applicationintegration.ClientArgs{ -// Location: pulumi.String("us-east1"), -// CreateSampleWorkflows: pulumi.Bool(true), -// RunAsServiceAccount: serviceAccount.Email, +// Location: pulumi.String("us-east1"), +// CreateSampleIntegrations: pulumi.Bool(true), +// RunAsServiceAccount: serviceAccount.Email, // CloudKmsConfig: &applicationintegration.ClientCloudKmsConfigArgs{ // KmsLocation: pulumi.String("us-east1"), // KmsRing: keyring.ID(), @@ -148,7 +147,14 @@ type Client struct { // Cloud KMS config for AuthModule to encrypt/decrypt credentials. // Structure is documented below. CloudKmsConfig ClientCloudKmsConfigPtrOutput `pulumi:"cloudKmsConfig"` + // Indicates if sample integrations should be created along with provisioning. + CreateSampleIntegrations pulumi.BoolPtrOutput `pulumi:"createSampleIntegrations"` + // (Optional, Deprecated) // Indicates if sample workflow should be created along with provisioning. + // + // > **Warning:** `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. + // + // Deprecated: `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. CreateSampleWorkflows pulumi.BoolPtrOutput `pulumi:"createSampleWorkflows"` // Location in which client needs to be provisioned. // @@ -157,7 +163,12 @@ type Client struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringOutput `pulumi:"project"` + // (Optional, Deprecated) // Indicates provision with GMEK or CMEK. + // + // > **Warning:** `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. + // + // Deprecated: `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. ProvisionGmek pulumi.BoolPtrOutput `pulumi:"provisionGmek"` // User input run-as service account, if empty, will bring up a new default service account. RunAsServiceAccount pulumi.StringPtrOutput `pulumi:"runAsServiceAccount"` @@ -199,7 +210,14 @@ type clientState struct { // Cloud KMS config for AuthModule to encrypt/decrypt credentials. // Structure is documented below. CloudKmsConfig *ClientCloudKmsConfig `pulumi:"cloudKmsConfig"` + // Indicates if sample integrations should be created along with provisioning. + CreateSampleIntegrations *bool `pulumi:"createSampleIntegrations"` + // (Optional, Deprecated) // Indicates if sample workflow should be created along with provisioning. + // + // > **Warning:** `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. + // + // Deprecated: `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. CreateSampleWorkflows *bool `pulumi:"createSampleWorkflows"` // Location in which client needs to be provisioned. // @@ -208,7 +226,12 @@ type clientState 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"` + // (Optional, Deprecated) // Indicates provision with GMEK or CMEK. + // + // > **Warning:** `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. + // + // Deprecated: `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. ProvisionGmek *bool `pulumi:"provisionGmek"` // User input run-as service account, if empty, will bring up a new default service account. RunAsServiceAccount *string `pulumi:"runAsServiceAccount"` @@ -218,7 +241,14 @@ type ClientState struct { // Cloud KMS config for AuthModule to encrypt/decrypt credentials. // Structure is documented below. CloudKmsConfig ClientCloudKmsConfigPtrInput + // Indicates if sample integrations should be created along with provisioning. + CreateSampleIntegrations pulumi.BoolPtrInput + // (Optional, Deprecated) // Indicates if sample workflow should be created along with provisioning. + // + // > **Warning:** `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. + // + // Deprecated: `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. CreateSampleWorkflows pulumi.BoolPtrInput // Location in which client needs to be provisioned. // @@ -227,7 +257,12 @@ type ClientState struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringPtrInput + // (Optional, Deprecated) // Indicates provision with GMEK or CMEK. + // + // > **Warning:** `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. + // + // Deprecated: `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. ProvisionGmek pulumi.BoolPtrInput // User input run-as service account, if empty, will bring up a new default service account. RunAsServiceAccount pulumi.StringPtrInput @@ -241,7 +276,14 @@ type clientArgs struct { // Cloud KMS config for AuthModule to encrypt/decrypt credentials. // Structure is documented below. CloudKmsConfig *ClientCloudKmsConfig `pulumi:"cloudKmsConfig"` + // Indicates if sample integrations should be created along with provisioning. + CreateSampleIntegrations *bool `pulumi:"createSampleIntegrations"` + // (Optional, Deprecated) // Indicates if sample workflow should be created along with provisioning. + // + // > **Warning:** `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. + // + // Deprecated: `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. CreateSampleWorkflows *bool `pulumi:"createSampleWorkflows"` // Location in which client needs to be provisioned. // @@ -250,7 +292,12 @@ type clientArgs 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"` + // (Optional, Deprecated) // Indicates provision with GMEK or CMEK. + // + // > **Warning:** `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. + // + // Deprecated: `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. ProvisionGmek *bool `pulumi:"provisionGmek"` // User input run-as service account, if empty, will bring up a new default service account. RunAsServiceAccount *string `pulumi:"runAsServiceAccount"` @@ -261,7 +308,14 @@ type ClientArgs struct { // Cloud KMS config for AuthModule to encrypt/decrypt credentials. // Structure is documented below. CloudKmsConfig ClientCloudKmsConfigPtrInput + // Indicates if sample integrations should be created along with provisioning. + CreateSampleIntegrations pulumi.BoolPtrInput + // (Optional, Deprecated) // Indicates if sample workflow should be created along with provisioning. + // + // > **Warning:** `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. + // + // Deprecated: `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. CreateSampleWorkflows pulumi.BoolPtrInput // Location in which client needs to be provisioned. // @@ -270,7 +324,12 @@ type ClientArgs struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringPtrInput + // (Optional, Deprecated) // Indicates provision with GMEK or CMEK. + // + // > **Warning:** `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. + // + // Deprecated: `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. ProvisionGmek pulumi.BoolPtrInput // User input run-as service account, if empty, will bring up a new default service account. RunAsServiceAccount pulumi.StringPtrInput @@ -369,7 +428,17 @@ func (o ClientOutput) CloudKmsConfig() ClientCloudKmsConfigPtrOutput { return o.ApplyT(func(v *Client) ClientCloudKmsConfigPtrOutput { return v.CloudKmsConfig }).(ClientCloudKmsConfigPtrOutput) } +// Indicates if sample integrations should be created along with provisioning. +func (o ClientOutput) CreateSampleIntegrations() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *Client) pulumi.BoolPtrOutput { return v.CreateSampleIntegrations }).(pulumi.BoolPtrOutput) +} + +// (Optional, Deprecated) // Indicates if sample workflow should be created along with provisioning. +// +// > **Warning:** `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. +// +// Deprecated: `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. func (o ClientOutput) CreateSampleWorkflows() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Client) pulumi.BoolPtrOutput { return v.CreateSampleWorkflows }).(pulumi.BoolPtrOutput) } @@ -387,7 +456,12 @@ func (o ClientOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *Client) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } +// (Optional, Deprecated) // Indicates provision with GMEK or CMEK. +// +// > **Warning:** `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. +// +// Deprecated: `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. func (o ClientOutput) ProvisionGmek() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Client) pulumi.BoolPtrOutput { return v.ProvisionGmek }).(pulumi.BoolPtrOutput) } diff --git a/sdk/go/gcp/bigquery/dataset.go b/sdk/go/gcp/bigquery/dataset.go index d81bebdd0c..ef866771ed 100644 --- a/sdk/go/gcp/bigquery/dataset.go +++ b/sdk/go/gcp/bigquery/dataset.go @@ -280,7 +280,7 @@ import ( // } // // ``` -// ### Bigquery Dataset External Reference Aws Docs +// ### Bigquery Dataset External Reference Aws // // ```go // package main diff --git a/sdk/go/gcp/bigquery/job.go b/sdk/go/gcp/bigquery/job.go index 48194c108b..c0842f74d3 100644 --- a/sdk/go/gcp/bigquery/job.go +++ b/sdk/go/gcp/bigquery/job.go @@ -393,8 +393,9 @@ import ( // // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { +// count := 2 // var sourceDataset []*bigquery.Dataset -// for index := 0; index < 2; index++ { +// for index := 0; index < count; index++ { // key0 := index // val0 := index // __res, err := bigquery.NewDataset(ctx, fmt.Sprintf("source-%v", key0), &bigquery.DatasetArgs{ @@ -409,7 +410,7 @@ import ( // sourceDataset = append(sourceDataset, __res) // } // var source []*bigquery.Table -// for index := 0; index < len(sourceDataset); index++ { +// for index := 0; index < count; index++ { // key0 := index // val0 := index // __res, err := bigquery.NewTable(ctx, fmt.Sprintf("source-%v", key0), &bigquery.TableArgs{ diff --git a/sdk/go/gcp/cloudrunv2/job.go b/sdk/go/gcp/cloudrunv2/job.go index 6472943a41..45fbf19a5c 100644 --- a/sdk/go/gcp/cloudrunv2/job.go +++ b/sdk/go/gcp/cloudrunv2/job.go @@ -296,7 +296,7 @@ import ( // _, err := cloudrunv2.NewJob(ctx, "default", &cloudrunv2.JobArgs{ // Name: pulumi.String("cloudrun-job"), // Location: pulumi.String("us-central1"), -// LaunchStage: pulumi.String("BETA"), +// LaunchStage: pulumi.String("GA"), // Template: &cloudrunv2.JobTemplateArgs{ // Template: &cloudrunv2.JobTemplateTemplateArgs{ // Containers: cloudrunv2.JobTemplateTemplateContainerArray{ @@ -316,7 +316,6 @@ import ( // }, // }, // }, -// Egress: pulumi.String("ALL_TRAFFIC"), // }, // }, // }, diff --git a/sdk/go/gcp/cloudrunv2/service.go b/sdk/go/gcp/cloudrunv2/service.go index ead6b29ffe..dcebae9177 100644 --- a/sdk/go/gcp/cloudrunv2/service.go +++ b/sdk/go/gcp/cloudrunv2/service.go @@ -300,7 +300,7 @@ import ( // _, err := cloudrunv2.NewService(ctx, "default", &cloudrunv2.ServiceArgs{ // Name: pulumi.String("cloudrun-service"), // Location: pulumi.String("us-central1"), -// LaunchStage: pulumi.String("BETA"), +// LaunchStage: pulumi.String("GA"), // Template: &cloudrunv2.ServiceTemplateArgs{ // Containers: cloudrunv2.ServiceTemplateContainerArray{ // &cloudrunv2.ServiceTemplateContainerArgs{ @@ -319,7 +319,6 @@ import ( // }, // }, // }, -// Egress: pulumi.String("ALL_TRAFFIC"), // }, // }, // }) diff --git a/sdk/go/gcp/compute/pulumiTypes.go b/sdk/go/gcp/compute/pulumiTypes.go index 7b16d13c0b..3ad74bc337 100644 --- a/sdk/go/gcp/compute/pulumiTypes.go +++ b/sdk/go/gcp/compute/pulumiTypes.go @@ -70337,6 +70337,8 @@ type RouterPeerBfd struct { // The number of consecutive BFD packets that must be missed before // BFD declares that a peer is unavailable. If set, the value must // be a value between 5 and 16. + // + // The `md5AuthenticationKey` block supports: Multiplier *int `pulumi:"multiplier"` // The BFD session initialization mode for this BGP peer. // If set to `ACTIVE`, the Cloud Router will initiate the BFD session @@ -70374,6 +70376,8 @@ type RouterPeerBfdArgs struct { // The number of consecutive BFD packets that must be missed before // BFD declares that a peer is unavailable. If set, the value must // be a value between 5 and 16. + // + // The `md5AuthenticationKey` block supports: Multiplier pulumi.IntPtrInput `pulumi:"multiplier"` // The BFD session initialization mode for this BGP peer. // If set to `ACTIVE`, the Cloud Router will initiate the BFD session @@ -70482,6 +70486,8 @@ func (o RouterPeerBfdOutput) MinTransmitInterval() pulumi.IntPtrOutput { // The number of consecutive BFD packets that must be missed before // BFD declares that a peer is unavailable. If set, the value must // be a value between 5 and 16. +// +// The `md5AuthenticationKey` block supports: func (o RouterPeerBfdOutput) Multiplier() pulumi.IntPtrOutput { return o.ApplyT(func(v RouterPeerBfd) *int { return v.Multiplier }).(pulumi.IntPtrOutput) } @@ -70551,6 +70557,8 @@ func (o RouterPeerBfdPtrOutput) MinTransmitInterval() pulumi.IntPtrOutput { // The number of consecutive BFD packets that must be missed before // BFD declares that a peer is unavailable. If set, the value must // be a value between 5 and 16. +// +// The `md5AuthenticationKey` block supports: func (o RouterPeerBfdPtrOutput) Multiplier() pulumi.IntPtrOutput { return o.ApplyT(func(v *RouterPeerBfd) *int { if v == nil { diff --git a/sdk/go/gcp/compute/routerPeer.go b/sdk/go/gcp/compute/routerPeer.go index cac0cbfdc2..3994a745dc 100644 --- a/sdk/go/gcp/compute/routerPeer.go +++ b/sdk/go/gcp/compute/routerPeer.go @@ -273,6 +273,42 @@ import ( // } // ``` // +// ### Router Peer Md5 Authentication Key +// +// ```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.NewRouterPeer(ctx, "foobar", &compute.RouterPeerArgs{ +// Name: pulumi.String("%s-peer"), +// Router: pulumi.Any(foobarGoogleComputeRouter.Name), +// Region: pulumi.Any(foobarGoogleComputeRouter.Region), +// PeerAsn: pulumi.Int(65515), +// AdvertisedRoutePriority: pulumi.Int(100), +// Interface: pulumi.Any(foobarGoogleComputeRouterInterface.Name), +// PeerIpAddress: pulumi.String("169.254.3.2"), +// Md5AuthenticationKey: &compute.RouterPeerMd5AuthenticationKeyArgs{ +// Name: pulumi.String("%s-peer-key"), +// Key: pulumi.String("%s-peer-key-value"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// // ## Import // // RouterBgpPeer can be imported using any of these accepted formats: @@ -350,8 +386,8 @@ type RouterPeer struct { Ipv6NexthopAddress pulumi.StringOutput `pulumi:"ipv6NexthopAddress"` // The resource that configures and manages this BGP peer. ManagementType pulumi.StringOutput `pulumi:"managementType"` - // Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - // Router.md5_authentication_keys. The field must comply with RFC1035. + // Configuration for MD5 authentication on the BGP session. + // Structure is documented below. Md5AuthenticationKey RouterPeerMd5AuthenticationKeyPtrOutput `pulumi:"md5AuthenticationKey"` // Name of this BGP peer. The name must be 1-63 characters long, // and comply with RFC1035. Specifically, the name must be 1-63 characters @@ -474,8 +510,8 @@ type routerPeerState struct { Ipv6NexthopAddress *string `pulumi:"ipv6NexthopAddress"` // The resource that configures and manages this BGP peer. ManagementType *string `pulumi:"managementType"` - // Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - // Router.md5_authentication_keys. The field must comply with RFC1035. + // Configuration for MD5 authentication on the BGP session. + // Structure is documented below. Md5AuthenticationKey *RouterPeerMd5AuthenticationKey `pulumi:"md5AuthenticationKey"` // Name of this BGP peer. The name must be 1-63 characters long, // and comply with RFC1035. Specifically, the name must be 1-63 characters @@ -560,8 +596,8 @@ type RouterPeerState struct { Ipv6NexthopAddress pulumi.StringPtrInput // The resource that configures and manages this BGP peer. ManagementType pulumi.StringPtrInput - // Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - // Router.md5_authentication_keys. The field must comply with RFC1035. + // Configuration for MD5 authentication on the BGP session. + // Structure is documented below. Md5AuthenticationKey RouterPeerMd5AuthenticationKeyPtrInput // Name of this BGP peer. The name must be 1-63 characters long, // and comply with RFC1035. Specifically, the name must be 1-63 characters @@ -648,8 +684,8 @@ type routerPeerArgs struct { // If you do not specify the next hop addresses, Google Cloud automatically // assigns unused addresses from the 2600:2d00:0:2::/64 or 2600:2d00:0:3::/64 range for you. Ipv6NexthopAddress *string `pulumi:"ipv6NexthopAddress"` - // Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - // Router.md5_authentication_keys. The field must comply with RFC1035. + // Configuration for MD5 authentication on the BGP session. + // Structure is documented below. Md5AuthenticationKey *RouterPeerMd5AuthenticationKey `pulumi:"md5AuthenticationKey"` // Name of this BGP peer. The name must be 1-63 characters long, // and comply with RFC1035. Specifically, the name must be 1-63 characters @@ -733,8 +769,8 @@ type RouterPeerArgs struct { // If you do not specify the next hop addresses, Google Cloud automatically // assigns unused addresses from the 2600:2d00:0:2::/64 or 2600:2d00:0:3::/64 range for you. Ipv6NexthopAddress pulumi.StringPtrInput - // Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - // Router.md5_authentication_keys. The field must comply with RFC1035. + // Configuration for MD5 authentication on the BGP session. + // Structure is documented below. Md5AuthenticationKey RouterPeerMd5AuthenticationKeyPtrInput // Name of this BGP peer. The name must be 1-63 characters long, // and comply with RFC1035. Specifically, the name must be 1-63 characters @@ -944,8 +980,8 @@ func (o RouterPeerOutput) ManagementType() pulumi.StringOutput { return o.ApplyT(func(v *RouterPeer) pulumi.StringOutput { return v.ManagementType }).(pulumi.StringOutput) } -// Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the -// Router.md5_authentication_keys. The field must comply with RFC1035. +// Configuration for MD5 authentication on the BGP session. +// Structure is documented below. func (o RouterPeerOutput) Md5AuthenticationKey() RouterPeerMd5AuthenticationKeyPtrOutput { return o.ApplyT(func(v *RouterPeer) RouterPeerMd5AuthenticationKeyPtrOutput { return v.Md5AuthenticationKey }).(RouterPeerMd5AuthenticationKeyPtrOutput) } diff --git a/sdk/go/gcp/config/config.go b/sdk/go/gcp/config/config.go index 76d2eaa407..6820183548 100644 --- a/sdk/go/gcp/config/config.go +++ b/sdk/go/gcp/config/config.go @@ -386,6 +386,9 @@ func GetParallelstoreCustomEndpoint(ctx *pulumi.Context) string { func GetPrivatecaCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:privatecaCustomEndpoint") } +func GetPrivilegedAccessManagerCustomEndpoint(ctx *pulumi.Context) string { + return config.Get(ctx, "gcp:privilegedAccessManagerCustomEndpoint") +} func GetProject(ctx *pulumi.Context) string { v, err := config.Try(ctx, "gcp:project") if err == nil { diff --git a/sdk/go/gcp/container/pulumiTypes.go b/sdk/go/gcp/container/pulumiTypes.go index ca31fe9c2b..24ba1ad316 100644 --- a/sdk/go/gcp/container/pulumiTypes.go +++ b/sdk/go/gcp/container/pulumiTypes.go @@ -19297,6 +19297,8 @@ type ClusterNodeConfig struct { ResourceManagerTags map[string]interface{} `pulumi:"resourceManagerTags"` // Sandbox configuration for this node. SandboxConfig *ClusterNodeConfigSandboxConfig `pulumi:"sandboxConfig"` + // Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfsConfig` must be `enabled=true` for this feature to work. `minMasterVersion` must also be set to use GKE 1.28.3-gke.106700 or later versions. + SecondaryBootDisks []ClusterNodeConfigSecondaryBootDisk `pulumi:"secondaryBootDisks"` // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. ServiceAccount *string `pulumi:"serviceAccount"` @@ -19436,6 +19438,8 @@ type ClusterNodeConfigArgs struct { ResourceManagerTags pulumi.MapInput `pulumi:"resourceManagerTags"` // Sandbox configuration for this node. SandboxConfig ClusterNodeConfigSandboxConfigPtrInput `pulumi:"sandboxConfig"` + // Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfsConfig` must be `enabled=true` for this feature to work. `minMasterVersion` must also be set to use GKE 1.28.3-gke.106700 or later versions. + SecondaryBootDisks ClusterNodeConfigSecondaryBootDiskArrayInput `pulumi:"secondaryBootDisks"` // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. ServiceAccount pulumi.StringPtrInput `pulumi:"serviceAccount"` @@ -19735,6 +19739,11 @@ func (o ClusterNodeConfigOutput) SandboxConfig() ClusterNodeConfigSandboxConfigP return o.ApplyT(func(v ClusterNodeConfig) *ClusterNodeConfigSandboxConfig { return v.SandboxConfig }).(ClusterNodeConfigSandboxConfigPtrOutput) } +// Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfsConfig` must be `enabled=true` for this feature to work. `minMasterVersion` must also be set to use GKE 1.28.3-gke.106700 or later versions. +func (o ClusterNodeConfigOutput) SecondaryBootDisks() ClusterNodeConfigSecondaryBootDiskArrayOutput { + return o.ApplyT(func(v ClusterNodeConfig) []ClusterNodeConfigSecondaryBootDisk { return v.SecondaryBootDisks }).(ClusterNodeConfigSecondaryBootDiskArrayOutput) +} + // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. func (o ClusterNodeConfigOutput) ServiceAccount() pulumi.StringPtrOutput { @@ -20153,6 +20162,16 @@ func (o ClusterNodeConfigPtrOutput) SandboxConfig() ClusterNodeConfigSandboxConf }).(ClusterNodeConfigSandboxConfigPtrOutput) } +// Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfsConfig` must be `enabled=true` for this feature to work. `minMasterVersion` must also be set to use GKE 1.28.3-gke.106700 or later versions. +func (o ClusterNodeConfigPtrOutput) SecondaryBootDisks() ClusterNodeConfigSecondaryBootDiskArrayOutput { + return o.ApplyT(func(v *ClusterNodeConfig) []ClusterNodeConfigSecondaryBootDisk { + if v == nil { + return nil + } + return v.SecondaryBootDisks + }).(ClusterNodeConfigSecondaryBootDiskArrayOutput) +} + // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. func (o ClusterNodeConfigPtrOutput) ServiceAccount() pulumi.StringPtrOutput { @@ -21474,6 +21493,7 @@ type ClusterNodeConfigGuestAcceleratorGpuSharingConfig struct { // The type of GPU sharing strategy to enable on the GPU node. // Accepted values are: // * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + // * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) GpuSharingStrategy string `pulumi:"gpuSharingStrategy"` // The maximum number of containers that can share a GPU. MaxSharedClientsPerGpu int `pulumi:"maxSharedClientsPerGpu"` @@ -21494,6 +21514,7 @@ type ClusterNodeConfigGuestAcceleratorGpuSharingConfigArgs struct { // The type of GPU sharing strategy to enable on the GPU node. // Accepted values are: // * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + // * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) GpuSharingStrategy pulumi.StringInput `pulumi:"gpuSharingStrategy"` // The maximum number of containers that can share a GPU. MaxSharedClientsPerGpu pulumi.IntInput `pulumi:"maxSharedClientsPerGpu"` @@ -21579,6 +21600,7 @@ func (o ClusterNodeConfigGuestAcceleratorGpuSharingConfigOutput) ToClusterNodeCo // The type of GPU sharing strategy to enable on the GPU node. // Accepted values are: // * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. +// * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) func (o ClusterNodeConfigGuestAcceleratorGpuSharingConfigOutput) GpuSharingStrategy() pulumi.StringOutput { return o.ApplyT(func(v ClusterNodeConfigGuestAcceleratorGpuSharingConfig) string { return v.GpuSharingStrategy }).(pulumi.StringOutput) } @@ -21615,6 +21637,7 @@ func (o ClusterNodeConfigGuestAcceleratorGpuSharingConfigPtrOutput) Elem() Clust // The type of GPU sharing strategy to enable on the GPU node. // Accepted values are: // * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. +// * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) func (o ClusterNodeConfigGuestAcceleratorGpuSharingConfigPtrOutput) GpuSharingStrategy() pulumi.StringPtrOutput { return o.ApplyT(func(v *ClusterNodeConfigGuestAcceleratorGpuSharingConfig) *string { if v == nil { @@ -22807,6 +22830,112 @@ func (o ClusterNodeConfigSandboxConfigPtrOutput) SandboxType() pulumi.StringPtrO }).(pulumi.StringPtrOutput) } +type ClusterNodeConfigSecondaryBootDisk struct { + // Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + DiskImage string `pulumi:"diskImage"` + // Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + Mode *string `pulumi:"mode"` +} + +// ClusterNodeConfigSecondaryBootDiskInput is an input type that accepts ClusterNodeConfigSecondaryBootDiskArgs and ClusterNodeConfigSecondaryBootDiskOutput values. +// You can construct a concrete instance of `ClusterNodeConfigSecondaryBootDiskInput` via: +// +// ClusterNodeConfigSecondaryBootDiskArgs{...} +type ClusterNodeConfigSecondaryBootDiskInput interface { + pulumi.Input + + ToClusterNodeConfigSecondaryBootDiskOutput() ClusterNodeConfigSecondaryBootDiskOutput + ToClusterNodeConfigSecondaryBootDiskOutputWithContext(context.Context) ClusterNodeConfigSecondaryBootDiskOutput +} + +type ClusterNodeConfigSecondaryBootDiskArgs struct { + // Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + DiskImage pulumi.StringInput `pulumi:"diskImage"` + // Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + Mode pulumi.StringPtrInput `pulumi:"mode"` +} + +func (ClusterNodeConfigSecondaryBootDiskArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (i ClusterNodeConfigSecondaryBootDiskArgs) ToClusterNodeConfigSecondaryBootDiskOutput() ClusterNodeConfigSecondaryBootDiskOutput { + return i.ToClusterNodeConfigSecondaryBootDiskOutputWithContext(context.Background()) +} + +func (i ClusterNodeConfigSecondaryBootDiskArgs) ToClusterNodeConfigSecondaryBootDiskOutputWithContext(ctx context.Context) ClusterNodeConfigSecondaryBootDiskOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterNodeConfigSecondaryBootDiskOutput) +} + +// ClusterNodeConfigSecondaryBootDiskArrayInput is an input type that accepts ClusterNodeConfigSecondaryBootDiskArray and ClusterNodeConfigSecondaryBootDiskArrayOutput values. +// You can construct a concrete instance of `ClusterNodeConfigSecondaryBootDiskArrayInput` via: +// +// ClusterNodeConfigSecondaryBootDiskArray{ ClusterNodeConfigSecondaryBootDiskArgs{...} } +type ClusterNodeConfigSecondaryBootDiskArrayInput interface { + pulumi.Input + + ToClusterNodeConfigSecondaryBootDiskArrayOutput() ClusterNodeConfigSecondaryBootDiskArrayOutput + ToClusterNodeConfigSecondaryBootDiskArrayOutputWithContext(context.Context) ClusterNodeConfigSecondaryBootDiskArrayOutput +} + +type ClusterNodeConfigSecondaryBootDiskArray []ClusterNodeConfigSecondaryBootDiskInput + +func (ClusterNodeConfigSecondaryBootDiskArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (i ClusterNodeConfigSecondaryBootDiskArray) ToClusterNodeConfigSecondaryBootDiskArrayOutput() ClusterNodeConfigSecondaryBootDiskArrayOutput { + return i.ToClusterNodeConfigSecondaryBootDiskArrayOutputWithContext(context.Background()) +} + +func (i ClusterNodeConfigSecondaryBootDiskArray) ToClusterNodeConfigSecondaryBootDiskArrayOutputWithContext(ctx context.Context) ClusterNodeConfigSecondaryBootDiskArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterNodeConfigSecondaryBootDiskArrayOutput) +} + +type ClusterNodeConfigSecondaryBootDiskOutput struct{ *pulumi.OutputState } + +func (ClusterNodeConfigSecondaryBootDiskOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (o ClusterNodeConfigSecondaryBootDiskOutput) ToClusterNodeConfigSecondaryBootDiskOutput() ClusterNodeConfigSecondaryBootDiskOutput { + return o +} + +func (o ClusterNodeConfigSecondaryBootDiskOutput) ToClusterNodeConfigSecondaryBootDiskOutputWithContext(ctx context.Context) ClusterNodeConfigSecondaryBootDiskOutput { + return o +} + +// Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. +func (o ClusterNodeConfigSecondaryBootDiskOutput) DiskImage() pulumi.StringOutput { + return o.ApplyT(func(v ClusterNodeConfigSecondaryBootDisk) string { return v.DiskImage }).(pulumi.StringOutput) +} + +// Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. +func (o ClusterNodeConfigSecondaryBootDiskOutput) Mode() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterNodeConfigSecondaryBootDisk) *string { return v.Mode }).(pulumi.StringPtrOutput) +} + +type ClusterNodeConfigSecondaryBootDiskArrayOutput struct{ *pulumi.OutputState } + +func (ClusterNodeConfigSecondaryBootDiskArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (o ClusterNodeConfigSecondaryBootDiskArrayOutput) ToClusterNodeConfigSecondaryBootDiskArrayOutput() ClusterNodeConfigSecondaryBootDiskArrayOutput { + return o +} + +func (o ClusterNodeConfigSecondaryBootDiskArrayOutput) ToClusterNodeConfigSecondaryBootDiskArrayOutputWithContext(ctx context.Context) ClusterNodeConfigSecondaryBootDiskArrayOutput { + return o +} + +func (o ClusterNodeConfigSecondaryBootDiskArrayOutput) Index(i pulumi.IntInput) ClusterNodeConfigSecondaryBootDiskOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ClusterNodeConfigSecondaryBootDisk { + return vs[0].([]ClusterNodeConfigSecondaryBootDisk)[vs[1].(int)] + }).(ClusterNodeConfigSecondaryBootDiskOutput) +} + type ClusterNodeConfigShieldedInstanceConfig struct { // Defines if the instance has integrity monitoring enabled. // @@ -25796,6 +25925,8 @@ type ClusterNodePoolNodeConfig struct { ResourceManagerTags map[string]interface{} `pulumi:"resourceManagerTags"` // Sandbox configuration for this node. SandboxConfig *ClusterNodePoolNodeConfigSandboxConfig `pulumi:"sandboxConfig"` + // Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfsConfig` must be `enabled=true` for this feature to work. `minMasterVersion` must also be set to use GKE 1.28.3-gke.106700 or later versions. + SecondaryBootDisks []ClusterNodePoolNodeConfigSecondaryBootDisk `pulumi:"secondaryBootDisks"` // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. ServiceAccount *string `pulumi:"serviceAccount"` @@ -25935,6 +26066,8 @@ type ClusterNodePoolNodeConfigArgs struct { ResourceManagerTags pulumi.MapInput `pulumi:"resourceManagerTags"` // Sandbox configuration for this node. SandboxConfig ClusterNodePoolNodeConfigSandboxConfigPtrInput `pulumi:"sandboxConfig"` + // Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfsConfig` must be `enabled=true` for this feature to work. `minMasterVersion` must also be set to use GKE 1.28.3-gke.106700 or later versions. + SecondaryBootDisks ClusterNodePoolNodeConfigSecondaryBootDiskArrayInput `pulumi:"secondaryBootDisks"` // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. ServiceAccount pulumi.StringPtrInput `pulumi:"serviceAccount"` @@ -26248,6 +26381,13 @@ func (o ClusterNodePoolNodeConfigOutput) SandboxConfig() ClusterNodePoolNodeConf return o.ApplyT(func(v ClusterNodePoolNodeConfig) *ClusterNodePoolNodeConfigSandboxConfig { return v.SandboxConfig }).(ClusterNodePoolNodeConfigSandboxConfigPtrOutput) } +// Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfsConfig` must be `enabled=true` for this feature to work. `minMasterVersion` must also be set to use GKE 1.28.3-gke.106700 or later versions. +func (o ClusterNodePoolNodeConfigOutput) SecondaryBootDisks() ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput { + return o.ApplyT(func(v ClusterNodePoolNodeConfig) []ClusterNodePoolNodeConfigSecondaryBootDisk { + return v.SecondaryBootDisks + }).(ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput) +} + // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. func (o ClusterNodePoolNodeConfigOutput) ServiceAccount() pulumi.StringPtrOutput { @@ -26672,6 +26812,16 @@ func (o ClusterNodePoolNodeConfigPtrOutput) SandboxConfig() ClusterNodePoolNodeC }).(ClusterNodePoolNodeConfigSandboxConfigPtrOutput) } +// Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfsConfig` must be `enabled=true` for this feature to work. `minMasterVersion` must also be set to use GKE 1.28.3-gke.106700 or later versions. +func (o ClusterNodePoolNodeConfigPtrOutput) SecondaryBootDisks() ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput { + return o.ApplyT(func(v *ClusterNodePoolNodeConfig) []ClusterNodePoolNodeConfigSecondaryBootDisk { + if v == nil { + return nil + } + return v.SecondaryBootDisks + }).(ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput) +} + // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. func (o ClusterNodePoolNodeConfigPtrOutput) ServiceAccount() pulumi.StringPtrOutput { @@ -27995,6 +28145,7 @@ type ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig struct { // The type of GPU sharing strategy to enable on the GPU node. // Accepted values are: // * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + // * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) GpuSharingStrategy string `pulumi:"gpuSharingStrategy"` // The maximum number of containers that can share a GPU. MaxSharedClientsPerGpu int `pulumi:"maxSharedClientsPerGpu"` @@ -28015,6 +28166,7 @@ type ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigArgs struct { // The type of GPU sharing strategy to enable on the GPU node. // Accepted values are: // * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + // * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) GpuSharingStrategy pulumi.StringInput `pulumi:"gpuSharingStrategy"` // The maximum number of containers that can share a GPU. MaxSharedClientsPerGpu pulumi.IntInput `pulumi:"maxSharedClientsPerGpu"` @@ -28100,6 +28252,7 @@ func (o ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigOutput) ToClust // The type of GPU sharing strategy to enable on the GPU node. // Accepted values are: // * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. +// * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) func (o ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigOutput) GpuSharingStrategy() pulumi.StringOutput { return o.ApplyT(func(v ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig) string { return v.GpuSharingStrategy }).(pulumi.StringOutput) } @@ -28136,6 +28289,7 @@ func (o ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigPtrOutput) Elem // The type of GPU sharing strategy to enable on the GPU node. // Accepted values are: // * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. +// * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) func (o ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigPtrOutput) GpuSharingStrategy() pulumi.StringPtrOutput { return o.ApplyT(func(v *ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig) *string { if v == nil { @@ -29328,6 +29482,112 @@ func (o ClusterNodePoolNodeConfigSandboxConfigPtrOutput) SandboxType() pulumi.St }).(pulumi.StringPtrOutput) } +type ClusterNodePoolNodeConfigSecondaryBootDisk struct { + // Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + DiskImage string `pulumi:"diskImage"` + // Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + Mode *string `pulumi:"mode"` +} + +// ClusterNodePoolNodeConfigSecondaryBootDiskInput is an input type that accepts ClusterNodePoolNodeConfigSecondaryBootDiskArgs and ClusterNodePoolNodeConfigSecondaryBootDiskOutput values. +// You can construct a concrete instance of `ClusterNodePoolNodeConfigSecondaryBootDiskInput` via: +// +// ClusterNodePoolNodeConfigSecondaryBootDiskArgs{...} +type ClusterNodePoolNodeConfigSecondaryBootDiskInput interface { + pulumi.Input + + ToClusterNodePoolNodeConfigSecondaryBootDiskOutput() ClusterNodePoolNodeConfigSecondaryBootDiskOutput + ToClusterNodePoolNodeConfigSecondaryBootDiskOutputWithContext(context.Context) ClusterNodePoolNodeConfigSecondaryBootDiskOutput +} + +type ClusterNodePoolNodeConfigSecondaryBootDiskArgs struct { + // Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + DiskImage pulumi.StringInput `pulumi:"diskImage"` + // Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + Mode pulumi.StringPtrInput `pulumi:"mode"` +} + +func (ClusterNodePoolNodeConfigSecondaryBootDiskArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterNodePoolNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (i ClusterNodePoolNodeConfigSecondaryBootDiskArgs) ToClusterNodePoolNodeConfigSecondaryBootDiskOutput() ClusterNodePoolNodeConfigSecondaryBootDiskOutput { + return i.ToClusterNodePoolNodeConfigSecondaryBootDiskOutputWithContext(context.Background()) +} + +func (i ClusterNodePoolNodeConfigSecondaryBootDiskArgs) ToClusterNodePoolNodeConfigSecondaryBootDiskOutputWithContext(ctx context.Context) ClusterNodePoolNodeConfigSecondaryBootDiskOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterNodePoolNodeConfigSecondaryBootDiskOutput) +} + +// ClusterNodePoolNodeConfigSecondaryBootDiskArrayInput is an input type that accepts ClusterNodePoolNodeConfigSecondaryBootDiskArray and ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput values. +// You can construct a concrete instance of `ClusterNodePoolNodeConfigSecondaryBootDiskArrayInput` via: +// +// ClusterNodePoolNodeConfigSecondaryBootDiskArray{ ClusterNodePoolNodeConfigSecondaryBootDiskArgs{...} } +type ClusterNodePoolNodeConfigSecondaryBootDiskArrayInput interface { + pulumi.Input + + ToClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput() ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput + ToClusterNodePoolNodeConfigSecondaryBootDiskArrayOutputWithContext(context.Context) ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput +} + +type ClusterNodePoolNodeConfigSecondaryBootDiskArray []ClusterNodePoolNodeConfigSecondaryBootDiskInput + +func (ClusterNodePoolNodeConfigSecondaryBootDiskArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterNodePoolNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (i ClusterNodePoolNodeConfigSecondaryBootDiskArray) ToClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput() ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput { + return i.ToClusterNodePoolNodeConfigSecondaryBootDiskArrayOutputWithContext(context.Background()) +} + +func (i ClusterNodePoolNodeConfigSecondaryBootDiskArray) ToClusterNodePoolNodeConfigSecondaryBootDiskArrayOutputWithContext(ctx context.Context) ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput) +} + +type ClusterNodePoolNodeConfigSecondaryBootDiskOutput struct{ *pulumi.OutputState } + +func (ClusterNodePoolNodeConfigSecondaryBootDiskOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterNodePoolNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (o ClusterNodePoolNodeConfigSecondaryBootDiskOutput) ToClusterNodePoolNodeConfigSecondaryBootDiskOutput() ClusterNodePoolNodeConfigSecondaryBootDiskOutput { + return o +} + +func (o ClusterNodePoolNodeConfigSecondaryBootDiskOutput) ToClusterNodePoolNodeConfigSecondaryBootDiskOutputWithContext(ctx context.Context) ClusterNodePoolNodeConfigSecondaryBootDiskOutput { + return o +} + +// Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. +func (o ClusterNodePoolNodeConfigSecondaryBootDiskOutput) DiskImage() pulumi.StringOutput { + return o.ApplyT(func(v ClusterNodePoolNodeConfigSecondaryBootDisk) string { return v.DiskImage }).(pulumi.StringOutput) +} + +// Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. +func (o ClusterNodePoolNodeConfigSecondaryBootDiskOutput) Mode() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterNodePoolNodeConfigSecondaryBootDisk) *string { return v.Mode }).(pulumi.StringPtrOutput) +} + +type ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput struct{ *pulumi.OutputState } + +func (ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterNodePoolNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (o ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput) ToClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput() ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput { + return o +} + +func (o ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput) ToClusterNodePoolNodeConfigSecondaryBootDiskArrayOutputWithContext(ctx context.Context) ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput { + return o +} + +func (o ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput) Index(i pulumi.IntInput) ClusterNodePoolNodeConfigSecondaryBootDiskOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ClusterNodePoolNodeConfigSecondaryBootDisk { + return vs[0].([]ClusterNodePoolNodeConfigSecondaryBootDisk)[vs[1].(int)] + }).(ClusterNodePoolNodeConfigSecondaryBootDiskOutput) +} + type ClusterNodePoolNodeConfigShieldedInstanceConfig struct { // Defines if the instance has integrity monitoring enabled. // @@ -34868,6 +35128,8 @@ type NodePoolNodeConfig struct { ResourceManagerTags map[string]interface{} `pulumi:"resourceManagerTags"` // Sandbox configuration for this node. SandboxConfig *NodePoolNodeConfigSandboxConfig `pulumi:"sandboxConfig"` + // Secondary boot disks for preloading data or container images. + SecondaryBootDisks []NodePoolNodeConfigSecondaryBootDisk `pulumi:"secondaryBootDisks"` // The Google Cloud Platform Service Account to be used by the node VMs. ServiceAccount *string `pulumi:"serviceAccount"` // Shielded Instance options. @@ -34958,6 +35220,8 @@ type NodePoolNodeConfigArgs struct { ResourceManagerTags pulumi.MapInput `pulumi:"resourceManagerTags"` // Sandbox configuration for this node. SandboxConfig NodePoolNodeConfigSandboxConfigPtrInput `pulumi:"sandboxConfig"` + // Secondary boot disks for preloading data or container images. + SecondaryBootDisks NodePoolNodeConfigSecondaryBootDiskArrayInput `pulumi:"secondaryBootDisks"` // The Google Cloud Platform Service Account to be used by the node VMs. ServiceAccount pulumi.StringPtrInput `pulumi:"serviceAccount"` // Shielded Instance options. @@ -35212,6 +35476,11 @@ func (o NodePoolNodeConfigOutput) SandboxConfig() NodePoolNodeConfigSandboxConfi return o.ApplyT(func(v NodePoolNodeConfig) *NodePoolNodeConfigSandboxConfig { return v.SandboxConfig }).(NodePoolNodeConfigSandboxConfigPtrOutput) } +// Secondary boot disks for preloading data or container images. +func (o NodePoolNodeConfigOutput) SecondaryBootDisks() NodePoolNodeConfigSecondaryBootDiskArrayOutput { + return o.ApplyT(func(v NodePoolNodeConfig) []NodePoolNodeConfigSecondaryBootDisk { return v.SecondaryBootDisks }).(NodePoolNodeConfigSecondaryBootDiskArrayOutput) +} + // The Google Cloud Platform Service Account to be used by the node VMs. func (o NodePoolNodeConfigOutput) ServiceAccount() pulumi.StringPtrOutput { return o.ApplyT(func(v NodePoolNodeConfig) *string { return v.ServiceAccount }).(pulumi.StringPtrOutput) @@ -35581,6 +35850,16 @@ func (o NodePoolNodeConfigPtrOutput) SandboxConfig() NodePoolNodeConfigSandboxCo }).(NodePoolNodeConfigSandboxConfigPtrOutput) } +// Secondary boot disks for preloading data or container images. +func (o NodePoolNodeConfigPtrOutput) SecondaryBootDisks() NodePoolNodeConfigSecondaryBootDiskArrayOutput { + return o.ApplyT(func(v *NodePoolNodeConfig) []NodePoolNodeConfigSecondaryBootDisk { + if v == nil { + return nil + } + return v.SecondaryBootDisks + }).(NodePoolNodeConfigSecondaryBootDiskArrayOutput) +} + // The Google Cloud Platform Service Account to be used by the node VMs. func (o NodePoolNodeConfigPtrOutput) ServiceAccount() pulumi.StringPtrOutput { return o.ApplyT(func(v *NodePoolNodeConfig) *string { @@ -38097,6 +38376,112 @@ func (o NodePoolNodeConfigSandboxConfigPtrOutput) SandboxType() pulumi.StringPtr }).(pulumi.StringPtrOutput) } +type NodePoolNodeConfigSecondaryBootDisk struct { + // Disk image to create the secondary boot disk from + DiskImage string `pulumi:"diskImage"` + // Mode for how the secondary boot disk is used. + Mode *string `pulumi:"mode"` +} + +// NodePoolNodeConfigSecondaryBootDiskInput is an input type that accepts NodePoolNodeConfigSecondaryBootDiskArgs and NodePoolNodeConfigSecondaryBootDiskOutput values. +// You can construct a concrete instance of `NodePoolNodeConfigSecondaryBootDiskInput` via: +// +// NodePoolNodeConfigSecondaryBootDiskArgs{...} +type NodePoolNodeConfigSecondaryBootDiskInput interface { + pulumi.Input + + ToNodePoolNodeConfigSecondaryBootDiskOutput() NodePoolNodeConfigSecondaryBootDiskOutput + ToNodePoolNodeConfigSecondaryBootDiskOutputWithContext(context.Context) NodePoolNodeConfigSecondaryBootDiskOutput +} + +type NodePoolNodeConfigSecondaryBootDiskArgs struct { + // Disk image to create the secondary boot disk from + DiskImage pulumi.StringInput `pulumi:"diskImage"` + // Mode for how the secondary boot disk is used. + Mode pulumi.StringPtrInput `pulumi:"mode"` +} + +func (NodePoolNodeConfigSecondaryBootDiskArgs) ElementType() reflect.Type { + return reflect.TypeOf((*NodePoolNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (i NodePoolNodeConfigSecondaryBootDiskArgs) ToNodePoolNodeConfigSecondaryBootDiskOutput() NodePoolNodeConfigSecondaryBootDiskOutput { + return i.ToNodePoolNodeConfigSecondaryBootDiskOutputWithContext(context.Background()) +} + +func (i NodePoolNodeConfigSecondaryBootDiskArgs) ToNodePoolNodeConfigSecondaryBootDiskOutputWithContext(ctx context.Context) NodePoolNodeConfigSecondaryBootDiskOutput { + return pulumi.ToOutputWithContext(ctx, i).(NodePoolNodeConfigSecondaryBootDiskOutput) +} + +// NodePoolNodeConfigSecondaryBootDiskArrayInput is an input type that accepts NodePoolNodeConfigSecondaryBootDiskArray and NodePoolNodeConfigSecondaryBootDiskArrayOutput values. +// You can construct a concrete instance of `NodePoolNodeConfigSecondaryBootDiskArrayInput` via: +// +// NodePoolNodeConfigSecondaryBootDiskArray{ NodePoolNodeConfigSecondaryBootDiskArgs{...} } +type NodePoolNodeConfigSecondaryBootDiskArrayInput interface { + pulumi.Input + + ToNodePoolNodeConfigSecondaryBootDiskArrayOutput() NodePoolNodeConfigSecondaryBootDiskArrayOutput + ToNodePoolNodeConfigSecondaryBootDiskArrayOutputWithContext(context.Context) NodePoolNodeConfigSecondaryBootDiskArrayOutput +} + +type NodePoolNodeConfigSecondaryBootDiskArray []NodePoolNodeConfigSecondaryBootDiskInput + +func (NodePoolNodeConfigSecondaryBootDiskArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]NodePoolNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (i NodePoolNodeConfigSecondaryBootDiskArray) ToNodePoolNodeConfigSecondaryBootDiskArrayOutput() NodePoolNodeConfigSecondaryBootDiskArrayOutput { + return i.ToNodePoolNodeConfigSecondaryBootDiskArrayOutputWithContext(context.Background()) +} + +func (i NodePoolNodeConfigSecondaryBootDiskArray) ToNodePoolNodeConfigSecondaryBootDiskArrayOutputWithContext(ctx context.Context) NodePoolNodeConfigSecondaryBootDiskArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(NodePoolNodeConfigSecondaryBootDiskArrayOutput) +} + +type NodePoolNodeConfigSecondaryBootDiskOutput struct{ *pulumi.OutputState } + +func (NodePoolNodeConfigSecondaryBootDiskOutput) ElementType() reflect.Type { + return reflect.TypeOf((*NodePoolNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (o NodePoolNodeConfigSecondaryBootDiskOutput) ToNodePoolNodeConfigSecondaryBootDiskOutput() NodePoolNodeConfigSecondaryBootDiskOutput { + return o +} + +func (o NodePoolNodeConfigSecondaryBootDiskOutput) ToNodePoolNodeConfigSecondaryBootDiskOutputWithContext(ctx context.Context) NodePoolNodeConfigSecondaryBootDiskOutput { + return o +} + +// Disk image to create the secondary boot disk from +func (o NodePoolNodeConfigSecondaryBootDiskOutput) DiskImage() pulumi.StringOutput { + return o.ApplyT(func(v NodePoolNodeConfigSecondaryBootDisk) string { return v.DiskImage }).(pulumi.StringOutput) +} + +// Mode for how the secondary boot disk is used. +func (o NodePoolNodeConfigSecondaryBootDiskOutput) Mode() pulumi.StringPtrOutput { + return o.ApplyT(func(v NodePoolNodeConfigSecondaryBootDisk) *string { return v.Mode }).(pulumi.StringPtrOutput) +} + +type NodePoolNodeConfigSecondaryBootDiskArrayOutput struct{ *pulumi.OutputState } + +func (NodePoolNodeConfigSecondaryBootDiskArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]NodePoolNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (o NodePoolNodeConfigSecondaryBootDiskArrayOutput) ToNodePoolNodeConfigSecondaryBootDiskArrayOutput() NodePoolNodeConfigSecondaryBootDiskArrayOutput { + return o +} + +func (o NodePoolNodeConfigSecondaryBootDiskArrayOutput) ToNodePoolNodeConfigSecondaryBootDiskArrayOutputWithContext(ctx context.Context) NodePoolNodeConfigSecondaryBootDiskArrayOutput { + return o +} + +func (o NodePoolNodeConfigSecondaryBootDiskArrayOutput) Index(i pulumi.IntInput) NodePoolNodeConfigSecondaryBootDiskOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) NodePoolNodeConfigSecondaryBootDisk { + return vs[0].([]NodePoolNodeConfigSecondaryBootDisk)[vs[1].(int)] + }).(NodePoolNodeConfigSecondaryBootDiskOutput) +} + type NodePoolNodeConfigShieldedInstanceConfig struct { // Defines whether the instance has integrity monitoring enabled. EnableIntegrityMonitoring *bool `pulumi:"enableIntegrityMonitoring"` @@ -45499,6 +45884,8 @@ type GetClusterNodeConfig struct { ResourceManagerTags map[string]interface{} `pulumi:"resourceManagerTags"` // Sandbox configuration for this node. SandboxConfigs []GetClusterNodeConfigSandboxConfig `pulumi:"sandboxConfigs"` + // Secondary boot disks for preloading data or container images. + SecondaryBootDisks []GetClusterNodeConfigSecondaryBootDisk `pulumi:"secondaryBootDisks"` // The Google Cloud Platform Service Account to be used by the node VMs. ServiceAccount string `pulumi:"serviceAccount"` // Shielded Instance options. @@ -45589,6 +45976,8 @@ type GetClusterNodeConfigArgs struct { ResourceManagerTags pulumi.MapInput `pulumi:"resourceManagerTags"` // Sandbox configuration for this node. SandboxConfigs GetClusterNodeConfigSandboxConfigArrayInput `pulumi:"sandboxConfigs"` + // Secondary boot disks for preloading data or container images. + SecondaryBootDisks GetClusterNodeConfigSecondaryBootDiskArrayInput `pulumi:"secondaryBootDisks"` // The Google Cloud Platform Service Account to be used by the node VMs. ServiceAccount pulumi.StringInput `pulumi:"serviceAccount"` // Shielded Instance options. @@ -45821,6 +46210,11 @@ func (o GetClusterNodeConfigOutput) SandboxConfigs() GetClusterNodeConfigSandbox return o.ApplyT(func(v GetClusterNodeConfig) []GetClusterNodeConfigSandboxConfig { return v.SandboxConfigs }).(GetClusterNodeConfigSandboxConfigArrayOutput) } +// Secondary boot disks for preloading data or container images. +func (o GetClusterNodeConfigOutput) SecondaryBootDisks() GetClusterNodeConfigSecondaryBootDiskArrayOutput { + return o.ApplyT(func(v GetClusterNodeConfig) []GetClusterNodeConfigSecondaryBootDisk { return v.SecondaryBootDisks }).(GetClusterNodeConfigSecondaryBootDiskArrayOutput) +} + // The Google Cloud Platform Service Account to be used by the node VMs. func (o GetClusterNodeConfigOutput) ServiceAccount() pulumi.StringOutput { return o.ApplyT(func(v GetClusterNodeConfig) string { return v.ServiceAccount }).(pulumi.StringOutput) @@ -47652,6 +48046,112 @@ func (o GetClusterNodeConfigSandboxConfigArrayOutput) Index(i pulumi.IntInput) G }).(GetClusterNodeConfigSandboxConfigOutput) } +type GetClusterNodeConfigSecondaryBootDisk struct { + // Disk image to create the secondary boot disk from + DiskImage string `pulumi:"diskImage"` + // Mode for how the secondary boot disk is used. + Mode string `pulumi:"mode"` +} + +// GetClusterNodeConfigSecondaryBootDiskInput is an input type that accepts GetClusterNodeConfigSecondaryBootDiskArgs and GetClusterNodeConfigSecondaryBootDiskOutput values. +// You can construct a concrete instance of `GetClusterNodeConfigSecondaryBootDiskInput` via: +// +// GetClusterNodeConfigSecondaryBootDiskArgs{...} +type GetClusterNodeConfigSecondaryBootDiskInput interface { + pulumi.Input + + ToGetClusterNodeConfigSecondaryBootDiskOutput() GetClusterNodeConfigSecondaryBootDiskOutput + ToGetClusterNodeConfigSecondaryBootDiskOutputWithContext(context.Context) GetClusterNodeConfigSecondaryBootDiskOutput +} + +type GetClusterNodeConfigSecondaryBootDiskArgs struct { + // Disk image to create the secondary boot disk from + DiskImage pulumi.StringInput `pulumi:"diskImage"` + // Mode for how the secondary boot disk is used. + Mode pulumi.StringInput `pulumi:"mode"` +} + +func (GetClusterNodeConfigSecondaryBootDiskArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetClusterNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (i GetClusterNodeConfigSecondaryBootDiskArgs) ToGetClusterNodeConfigSecondaryBootDiskOutput() GetClusterNodeConfigSecondaryBootDiskOutput { + return i.ToGetClusterNodeConfigSecondaryBootDiskOutputWithContext(context.Background()) +} + +func (i GetClusterNodeConfigSecondaryBootDiskArgs) ToGetClusterNodeConfigSecondaryBootDiskOutputWithContext(ctx context.Context) GetClusterNodeConfigSecondaryBootDiskOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetClusterNodeConfigSecondaryBootDiskOutput) +} + +// GetClusterNodeConfigSecondaryBootDiskArrayInput is an input type that accepts GetClusterNodeConfigSecondaryBootDiskArray and GetClusterNodeConfigSecondaryBootDiskArrayOutput values. +// You can construct a concrete instance of `GetClusterNodeConfigSecondaryBootDiskArrayInput` via: +// +// GetClusterNodeConfigSecondaryBootDiskArray{ GetClusterNodeConfigSecondaryBootDiskArgs{...} } +type GetClusterNodeConfigSecondaryBootDiskArrayInput interface { + pulumi.Input + + ToGetClusterNodeConfigSecondaryBootDiskArrayOutput() GetClusterNodeConfigSecondaryBootDiskArrayOutput + ToGetClusterNodeConfigSecondaryBootDiskArrayOutputWithContext(context.Context) GetClusterNodeConfigSecondaryBootDiskArrayOutput +} + +type GetClusterNodeConfigSecondaryBootDiskArray []GetClusterNodeConfigSecondaryBootDiskInput + +func (GetClusterNodeConfigSecondaryBootDiskArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetClusterNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (i GetClusterNodeConfigSecondaryBootDiskArray) ToGetClusterNodeConfigSecondaryBootDiskArrayOutput() GetClusterNodeConfigSecondaryBootDiskArrayOutput { + return i.ToGetClusterNodeConfigSecondaryBootDiskArrayOutputWithContext(context.Background()) +} + +func (i GetClusterNodeConfigSecondaryBootDiskArray) ToGetClusterNodeConfigSecondaryBootDiskArrayOutputWithContext(ctx context.Context) GetClusterNodeConfigSecondaryBootDiskArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetClusterNodeConfigSecondaryBootDiskArrayOutput) +} + +type GetClusterNodeConfigSecondaryBootDiskOutput struct{ *pulumi.OutputState } + +func (GetClusterNodeConfigSecondaryBootDiskOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetClusterNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (o GetClusterNodeConfigSecondaryBootDiskOutput) ToGetClusterNodeConfigSecondaryBootDiskOutput() GetClusterNodeConfigSecondaryBootDiskOutput { + return o +} + +func (o GetClusterNodeConfigSecondaryBootDiskOutput) ToGetClusterNodeConfigSecondaryBootDiskOutputWithContext(ctx context.Context) GetClusterNodeConfigSecondaryBootDiskOutput { + return o +} + +// Disk image to create the secondary boot disk from +func (o GetClusterNodeConfigSecondaryBootDiskOutput) DiskImage() pulumi.StringOutput { + return o.ApplyT(func(v GetClusterNodeConfigSecondaryBootDisk) string { return v.DiskImage }).(pulumi.StringOutput) +} + +// Mode for how the secondary boot disk is used. +func (o GetClusterNodeConfigSecondaryBootDiskOutput) Mode() pulumi.StringOutput { + return o.ApplyT(func(v GetClusterNodeConfigSecondaryBootDisk) string { return v.Mode }).(pulumi.StringOutput) +} + +type GetClusterNodeConfigSecondaryBootDiskArrayOutput struct{ *pulumi.OutputState } + +func (GetClusterNodeConfigSecondaryBootDiskArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetClusterNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (o GetClusterNodeConfigSecondaryBootDiskArrayOutput) ToGetClusterNodeConfigSecondaryBootDiskArrayOutput() GetClusterNodeConfigSecondaryBootDiskArrayOutput { + return o +} + +func (o GetClusterNodeConfigSecondaryBootDiskArrayOutput) ToGetClusterNodeConfigSecondaryBootDiskArrayOutputWithContext(ctx context.Context) GetClusterNodeConfigSecondaryBootDiskArrayOutput { + return o +} + +func (o GetClusterNodeConfigSecondaryBootDiskArrayOutput) Index(i pulumi.IntInput) GetClusterNodeConfigSecondaryBootDiskOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetClusterNodeConfigSecondaryBootDisk { + return vs[0].([]GetClusterNodeConfigSecondaryBootDisk)[vs[1].(int)] + }).(GetClusterNodeConfigSecondaryBootDiskOutput) +} + type GetClusterNodeConfigShieldedInstanceConfig struct { // Defines whether the instance has integrity monitoring enabled. EnableIntegrityMonitoring bool `pulumi:"enableIntegrityMonitoring"` @@ -49804,6 +50304,8 @@ type GetClusterNodePoolNodeConfig struct { ResourceManagerTags map[string]interface{} `pulumi:"resourceManagerTags"` // Sandbox configuration for this node. SandboxConfigs []GetClusterNodePoolNodeConfigSandboxConfig `pulumi:"sandboxConfigs"` + // Secondary boot disks for preloading data or container images. + SecondaryBootDisks []GetClusterNodePoolNodeConfigSecondaryBootDisk `pulumi:"secondaryBootDisks"` // The Google Cloud Platform Service Account to be used by the node VMs. ServiceAccount string `pulumi:"serviceAccount"` // Shielded Instance options. @@ -49894,6 +50396,8 @@ type GetClusterNodePoolNodeConfigArgs struct { ResourceManagerTags pulumi.MapInput `pulumi:"resourceManagerTags"` // Sandbox configuration for this node. SandboxConfigs GetClusterNodePoolNodeConfigSandboxConfigArrayInput `pulumi:"sandboxConfigs"` + // Secondary boot disks for preloading data or container images. + SecondaryBootDisks GetClusterNodePoolNodeConfigSecondaryBootDiskArrayInput `pulumi:"secondaryBootDisks"` // The Google Cloud Platform Service Account to be used by the node VMs. ServiceAccount pulumi.StringInput `pulumi:"serviceAccount"` // Shielded Instance options. @@ -50140,6 +50644,13 @@ func (o GetClusterNodePoolNodeConfigOutput) SandboxConfigs() GetClusterNodePoolN }).(GetClusterNodePoolNodeConfigSandboxConfigArrayOutput) } +// Secondary boot disks for preloading data or container images. +func (o GetClusterNodePoolNodeConfigOutput) SecondaryBootDisks() GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput { + return o.ApplyT(func(v GetClusterNodePoolNodeConfig) []GetClusterNodePoolNodeConfigSecondaryBootDisk { + return v.SecondaryBootDisks + }).(GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput) +} + // The Google Cloud Platform Service Account to be used by the node VMs. func (o GetClusterNodePoolNodeConfigOutput) ServiceAccount() pulumi.StringOutput { return o.ApplyT(func(v GetClusterNodePoolNodeConfig) string { return v.ServiceAccount }).(pulumi.StringOutput) @@ -51977,6 +52488,112 @@ func (o GetClusterNodePoolNodeConfigSandboxConfigArrayOutput) Index(i pulumi.Int }).(GetClusterNodePoolNodeConfigSandboxConfigOutput) } +type GetClusterNodePoolNodeConfigSecondaryBootDisk struct { + // Disk image to create the secondary boot disk from + DiskImage string `pulumi:"diskImage"` + // Mode for how the secondary boot disk is used. + Mode string `pulumi:"mode"` +} + +// GetClusterNodePoolNodeConfigSecondaryBootDiskInput is an input type that accepts GetClusterNodePoolNodeConfigSecondaryBootDiskArgs and GetClusterNodePoolNodeConfigSecondaryBootDiskOutput values. +// You can construct a concrete instance of `GetClusterNodePoolNodeConfigSecondaryBootDiskInput` via: +// +// GetClusterNodePoolNodeConfigSecondaryBootDiskArgs{...} +type GetClusterNodePoolNodeConfigSecondaryBootDiskInput interface { + pulumi.Input + + ToGetClusterNodePoolNodeConfigSecondaryBootDiskOutput() GetClusterNodePoolNodeConfigSecondaryBootDiskOutput + ToGetClusterNodePoolNodeConfigSecondaryBootDiskOutputWithContext(context.Context) GetClusterNodePoolNodeConfigSecondaryBootDiskOutput +} + +type GetClusterNodePoolNodeConfigSecondaryBootDiskArgs struct { + // Disk image to create the secondary boot disk from + DiskImage pulumi.StringInput `pulumi:"diskImage"` + // Mode for how the secondary boot disk is used. + Mode pulumi.StringInput `pulumi:"mode"` +} + +func (GetClusterNodePoolNodeConfigSecondaryBootDiskArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetClusterNodePoolNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (i GetClusterNodePoolNodeConfigSecondaryBootDiskArgs) ToGetClusterNodePoolNodeConfigSecondaryBootDiskOutput() GetClusterNodePoolNodeConfigSecondaryBootDiskOutput { + return i.ToGetClusterNodePoolNodeConfigSecondaryBootDiskOutputWithContext(context.Background()) +} + +func (i GetClusterNodePoolNodeConfigSecondaryBootDiskArgs) ToGetClusterNodePoolNodeConfigSecondaryBootDiskOutputWithContext(ctx context.Context) GetClusterNodePoolNodeConfigSecondaryBootDiskOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetClusterNodePoolNodeConfigSecondaryBootDiskOutput) +} + +// GetClusterNodePoolNodeConfigSecondaryBootDiskArrayInput is an input type that accepts GetClusterNodePoolNodeConfigSecondaryBootDiskArray and GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput values. +// You can construct a concrete instance of `GetClusterNodePoolNodeConfigSecondaryBootDiskArrayInput` via: +// +// GetClusterNodePoolNodeConfigSecondaryBootDiskArray{ GetClusterNodePoolNodeConfigSecondaryBootDiskArgs{...} } +type GetClusterNodePoolNodeConfigSecondaryBootDiskArrayInput interface { + pulumi.Input + + ToGetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput() GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput + ToGetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutputWithContext(context.Context) GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput +} + +type GetClusterNodePoolNodeConfigSecondaryBootDiskArray []GetClusterNodePoolNodeConfigSecondaryBootDiskInput + +func (GetClusterNodePoolNodeConfigSecondaryBootDiskArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetClusterNodePoolNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (i GetClusterNodePoolNodeConfigSecondaryBootDiskArray) ToGetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput() GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput { + return i.ToGetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutputWithContext(context.Background()) +} + +func (i GetClusterNodePoolNodeConfigSecondaryBootDiskArray) ToGetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutputWithContext(ctx context.Context) GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput) +} + +type GetClusterNodePoolNodeConfigSecondaryBootDiskOutput struct{ *pulumi.OutputState } + +func (GetClusterNodePoolNodeConfigSecondaryBootDiskOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetClusterNodePoolNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (o GetClusterNodePoolNodeConfigSecondaryBootDiskOutput) ToGetClusterNodePoolNodeConfigSecondaryBootDiskOutput() GetClusterNodePoolNodeConfigSecondaryBootDiskOutput { + return o +} + +func (o GetClusterNodePoolNodeConfigSecondaryBootDiskOutput) ToGetClusterNodePoolNodeConfigSecondaryBootDiskOutputWithContext(ctx context.Context) GetClusterNodePoolNodeConfigSecondaryBootDiskOutput { + return o +} + +// Disk image to create the secondary boot disk from +func (o GetClusterNodePoolNodeConfigSecondaryBootDiskOutput) DiskImage() pulumi.StringOutput { + return o.ApplyT(func(v GetClusterNodePoolNodeConfigSecondaryBootDisk) string { return v.DiskImage }).(pulumi.StringOutput) +} + +// Mode for how the secondary boot disk is used. +func (o GetClusterNodePoolNodeConfigSecondaryBootDiskOutput) Mode() pulumi.StringOutput { + return o.ApplyT(func(v GetClusterNodePoolNodeConfigSecondaryBootDisk) string { return v.Mode }).(pulumi.StringOutput) +} + +type GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput struct{ *pulumi.OutputState } + +func (GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetClusterNodePoolNodeConfigSecondaryBootDisk)(nil)).Elem() +} + +func (o GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput) ToGetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput() GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput { + return o +} + +func (o GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput) ToGetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutputWithContext(ctx context.Context) GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput { + return o +} + +func (o GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput) Index(i pulumi.IntInput) GetClusterNodePoolNodeConfigSecondaryBootDiskOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetClusterNodePoolNodeConfigSecondaryBootDisk { + return vs[0].([]GetClusterNodePoolNodeConfigSecondaryBootDisk)[vs[1].(int)] + }).(GetClusterNodePoolNodeConfigSecondaryBootDiskOutput) +} + type GetClusterNodePoolNodeConfigShieldedInstanceConfig struct { // Defines whether the instance has integrity monitoring enabled. EnableIntegrityMonitoring bool `pulumi:"enableIntegrityMonitoring"` @@ -55155,6 +55772,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodeConfigReservationAffinityPtrInput)(nil)).Elem(), ClusterNodeConfigReservationAffinityArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodeConfigSandboxConfigInput)(nil)).Elem(), ClusterNodeConfigSandboxConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodeConfigSandboxConfigPtrInput)(nil)).Elem(), ClusterNodeConfigSandboxConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodeConfigSecondaryBootDiskInput)(nil)).Elem(), ClusterNodeConfigSecondaryBootDiskArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodeConfigSecondaryBootDiskArrayInput)(nil)).Elem(), ClusterNodeConfigSecondaryBootDiskArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodeConfigShieldedInstanceConfigInput)(nil)).Elem(), ClusterNodeConfigShieldedInstanceConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodeConfigShieldedInstanceConfigPtrInput)(nil)).Elem(), ClusterNodeConfigShieldedInstanceConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodeConfigSoleTenantConfigInput)(nil)).Elem(), ClusterNodeConfigSoleTenantConfigArgs{}) @@ -55227,6 +55846,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolNodeConfigReservationAffinityPtrInput)(nil)).Elem(), ClusterNodePoolNodeConfigReservationAffinityArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolNodeConfigSandboxConfigInput)(nil)).Elem(), ClusterNodePoolNodeConfigSandboxConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolNodeConfigSandboxConfigPtrInput)(nil)).Elem(), ClusterNodePoolNodeConfigSandboxConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolNodeConfigSecondaryBootDiskInput)(nil)).Elem(), ClusterNodePoolNodeConfigSecondaryBootDiskArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolNodeConfigSecondaryBootDiskArrayInput)(nil)).Elem(), ClusterNodePoolNodeConfigSecondaryBootDiskArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolNodeConfigShieldedInstanceConfigInput)(nil)).Elem(), ClusterNodePoolNodeConfigShieldedInstanceConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolNodeConfigShieldedInstanceConfigPtrInput)(nil)).Elem(), ClusterNodePoolNodeConfigShieldedInstanceConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolNodeConfigSoleTenantConfigInput)(nil)).Elem(), ClusterNodePoolNodeConfigSoleTenantConfigArgs{}) @@ -55331,6 +55952,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*NodePoolNodeConfigReservationAffinityPtrInput)(nil)).Elem(), NodePoolNodeConfigReservationAffinityArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*NodePoolNodeConfigSandboxConfigInput)(nil)).Elem(), NodePoolNodeConfigSandboxConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*NodePoolNodeConfigSandboxConfigPtrInput)(nil)).Elem(), NodePoolNodeConfigSandboxConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*NodePoolNodeConfigSecondaryBootDiskInput)(nil)).Elem(), NodePoolNodeConfigSecondaryBootDiskArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*NodePoolNodeConfigSecondaryBootDiskArrayInput)(nil)).Elem(), NodePoolNodeConfigSecondaryBootDiskArray{}) pulumi.RegisterInputType(reflect.TypeOf((*NodePoolNodeConfigShieldedInstanceConfigInput)(nil)).Elem(), NodePoolNodeConfigShieldedInstanceConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*NodePoolNodeConfigShieldedInstanceConfigPtrInput)(nil)).Elem(), NodePoolNodeConfigShieldedInstanceConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*NodePoolNodeConfigSoleTenantConfigInput)(nil)).Elem(), NodePoolNodeConfigSoleTenantConfigArgs{}) @@ -55493,6 +56116,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodeConfigReservationAffinityArrayInput)(nil)).Elem(), GetClusterNodeConfigReservationAffinityArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodeConfigSandboxConfigInput)(nil)).Elem(), GetClusterNodeConfigSandboxConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodeConfigSandboxConfigArrayInput)(nil)).Elem(), GetClusterNodeConfigSandboxConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodeConfigSecondaryBootDiskInput)(nil)).Elem(), GetClusterNodeConfigSecondaryBootDiskArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodeConfigSecondaryBootDiskArrayInput)(nil)).Elem(), GetClusterNodeConfigSecondaryBootDiskArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodeConfigShieldedInstanceConfigInput)(nil)).Elem(), GetClusterNodeConfigShieldedInstanceConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodeConfigShieldedInstanceConfigArrayInput)(nil)).Elem(), GetClusterNodeConfigShieldedInstanceConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodeConfigSoleTenantConfigInput)(nil)).Elem(), GetClusterNodeConfigSoleTenantConfigArgs{}) @@ -55565,6 +56190,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolNodeConfigReservationAffinityArrayInput)(nil)).Elem(), GetClusterNodePoolNodeConfigReservationAffinityArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolNodeConfigSandboxConfigInput)(nil)).Elem(), GetClusterNodePoolNodeConfigSandboxConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolNodeConfigSandboxConfigArrayInput)(nil)).Elem(), GetClusterNodePoolNodeConfigSandboxConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolNodeConfigSecondaryBootDiskInput)(nil)).Elem(), GetClusterNodePoolNodeConfigSecondaryBootDiskArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolNodeConfigSecondaryBootDiskArrayInput)(nil)).Elem(), GetClusterNodePoolNodeConfigSecondaryBootDiskArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolNodeConfigShieldedInstanceConfigInput)(nil)).Elem(), GetClusterNodePoolNodeConfigShieldedInstanceConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolNodeConfigShieldedInstanceConfigArrayInput)(nil)).Elem(), GetClusterNodePoolNodeConfigShieldedInstanceConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolNodeConfigSoleTenantConfigInput)(nil)).Elem(), GetClusterNodePoolNodeConfigSoleTenantConfigArgs{}) @@ -55895,6 +56522,8 @@ func init() { pulumi.RegisterOutputType(ClusterNodeConfigReservationAffinityPtrOutput{}) pulumi.RegisterOutputType(ClusterNodeConfigSandboxConfigOutput{}) pulumi.RegisterOutputType(ClusterNodeConfigSandboxConfigPtrOutput{}) + pulumi.RegisterOutputType(ClusterNodeConfigSecondaryBootDiskOutput{}) + pulumi.RegisterOutputType(ClusterNodeConfigSecondaryBootDiskArrayOutput{}) pulumi.RegisterOutputType(ClusterNodeConfigShieldedInstanceConfigOutput{}) pulumi.RegisterOutputType(ClusterNodeConfigShieldedInstanceConfigPtrOutput{}) pulumi.RegisterOutputType(ClusterNodeConfigSoleTenantConfigOutput{}) @@ -55967,6 +56596,8 @@ func init() { pulumi.RegisterOutputType(ClusterNodePoolNodeConfigReservationAffinityPtrOutput{}) pulumi.RegisterOutputType(ClusterNodePoolNodeConfigSandboxConfigOutput{}) pulumi.RegisterOutputType(ClusterNodePoolNodeConfigSandboxConfigPtrOutput{}) + pulumi.RegisterOutputType(ClusterNodePoolNodeConfigSecondaryBootDiskOutput{}) + pulumi.RegisterOutputType(ClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput{}) pulumi.RegisterOutputType(ClusterNodePoolNodeConfigShieldedInstanceConfigOutput{}) pulumi.RegisterOutputType(ClusterNodePoolNodeConfigShieldedInstanceConfigPtrOutput{}) pulumi.RegisterOutputType(ClusterNodePoolNodeConfigSoleTenantConfigOutput{}) @@ -56071,6 +56702,8 @@ func init() { pulumi.RegisterOutputType(NodePoolNodeConfigReservationAffinityPtrOutput{}) pulumi.RegisterOutputType(NodePoolNodeConfigSandboxConfigOutput{}) pulumi.RegisterOutputType(NodePoolNodeConfigSandboxConfigPtrOutput{}) + pulumi.RegisterOutputType(NodePoolNodeConfigSecondaryBootDiskOutput{}) + pulumi.RegisterOutputType(NodePoolNodeConfigSecondaryBootDiskArrayOutput{}) pulumi.RegisterOutputType(NodePoolNodeConfigShieldedInstanceConfigOutput{}) pulumi.RegisterOutputType(NodePoolNodeConfigShieldedInstanceConfigPtrOutput{}) pulumi.RegisterOutputType(NodePoolNodeConfigSoleTenantConfigOutput{}) @@ -56233,6 +56866,8 @@ func init() { pulumi.RegisterOutputType(GetClusterNodeConfigReservationAffinityArrayOutput{}) pulumi.RegisterOutputType(GetClusterNodeConfigSandboxConfigOutput{}) pulumi.RegisterOutputType(GetClusterNodeConfigSandboxConfigArrayOutput{}) + pulumi.RegisterOutputType(GetClusterNodeConfigSecondaryBootDiskOutput{}) + pulumi.RegisterOutputType(GetClusterNodeConfigSecondaryBootDiskArrayOutput{}) pulumi.RegisterOutputType(GetClusterNodeConfigShieldedInstanceConfigOutput{}) pulumi.RegisterOutputType(GetClusterNodeConfigShieldedInstanceConfigArrayOutput{}) pulumi.RegisterOutputType(GetClusterNodeConfigSoleTenantConfigOutput{}) @@ -56305,6 +56940,8 @@ func init() { pulumi.RegisterOutputType(GetClusterNodePoolNodeConfigReservationAffinityArrayOutput{}) pulumi.RegisterOutputType(GetClusterNodePoolNodeConfigSandboxConfigOutput{}) pulumi.RegisterOutputType(GetClusterNodePoolNodeConfigSandboxConfigArrayOutput{}) + pulumi.RegisterOutputType(GetClusterNodePoolNodeConfigSecondaryBootDiskOutput{}) + pulumi.RegisterOutputType(GetClusterNodePoolNodeConfigSecondaryBootDiskArrayOutput{}) pulumi.RegisterOutputType(GetClusterNodePoolNodeConfigShieldedInstanceConfigOutput{}) pulumi.RegisterOutputType(GetClusterNodePoolNodeConfigShieldedInstanceConfigArrayOutput{}) pulumi.RegisterOutputType(GetClusterNodePoolNodeConfigSoleTenantConfigOutput{}) diff --git a/sdk/go/gcp/dataflow/flexTemplateJob.go b/sdk/go/gcp/dataflow/flexTemplateJob.go index 4cb7f8df5e..2590082e59 100644 --- a/sdk/go/gcp/dataflow/flexTemplateJob.go +++ b/sdk/go/gcp/dataflow/flexTemplateJob.go @@ -169,9 +169,9 @@ type FlexTemplateJob struct { // One of "drain" or "cancel". Specifies behavior of // deletion during `pulumi destroy`. See above note. OnDelete pulumi.StringPtrOutput `pulumi:"onDelete"` - // Key/Value pairs to be passed to the Dataflow job (as - // used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - // such as `serviceAccount`, `workerMachineType`, etc can be specified here. + // **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + // case-sensitive based on the language on which the pipeline is coded, mostly Java. + // **Note**: do not configure Dataflow options here in parameters. Parameters pulumi.MapOutput `pulumi:"parameters"` // The project in which the resource belongs. If it is not // provided, the provider project is used. @@ -278,9 +278,9 @@ type flexTemplateJobState struct { // One of "drain" or "cancel". Specifies behavior of // deletion during `pulumi destroy`. See above note. OnDelete *string `pulumi:"onDelete"` - // Key/Value pairs to be passed to the Dataflow job (as - // used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - // such as `serviceAccount`, `workerMachineType`, etc can be specified here. + // **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + // case-sensitive based on the language on which the pipeline is coded, mostly Java. + // **Note**: do not configure Dataflow options here in parameters. Parameters map[string]interface{} `pulumi:"parameters"` // The project in which the resource belongs. If it is not // provided, the provider project is used. @@ -350,9 +350,9 @@ type FlexTemplateJobState struct { // One of "drain" or "cancel". Specifies behavior of // deletion during `pulumi destroy`. See above note. OnDelete pulumi.StringPtrInput - // Key/Value pairs to be passed to the Dataflow job (as - // used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - // such as `serviceAccount`, `workerMachineType`, etc can be specified here. + // **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + // case-sensitive based on the language on which the pipeline is coded, mostly Java. + // **Note**: do not configure Dataflow options here in parameters. Parameters pulumi.MapInput // The project in which the resource belongs. If it is not // provided, the provider project is used. @@ -423,9 +423,9 @@ type flexTemplateJobArgs struct { // One of "drain" or "cancel". Specifies behavior of // deletion during `pulumi destroy`. See above note. OnDelete *string `pulumi:"onDelete"` - // Key/Value pairs to be passed to the Dataflow job (as - // used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - // such as `serviceAccount`, `workerMachineType`, etc can be specified here. + // **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + // case-sensitive based on the language on which the pipeline is coded, mostly Java. + // **Note**: do not configure Dataflow options here in parameters. Parameters map[string]interface{} `pulumi:"parameters"` // The project in which the resource belongs. If it is not // provided, the provider project is used. @@ -487,9 +487,9 @@ type FlexTemplateJobArgs struct { // One of "drain" or "cancel". Specifies behavior of // deletion during `pulumi destroy`. See above note. OnDelete pulumi.StringPtrInput - // Key/Value pairs to be passed to the Dataflow job (as - // used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - // such as `serviceAccount`, `workerMachineType`, etc can be specified here. + // **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + // case-sensitive based on the language on which the pipeline is coded, mostly Java. + // **Note**: do not configure Dataflow options here in parameters. Parameters pulumi.MapInput // The project in which the resource belongs. If it is not // provided, the provider project is used. @@ -687,9 +687,9 @@ func (o FlexTemplateJobOutput) OnDelete() pulumi.StringPtrOutput { return o.ApplyT(func(v *FlexTemplateJob) pulumi.StringPtrOutput { return v.OnDelete }).(pulumi.StringPtrOutput) } -// Key/Value pairs to be passed to the Dataflow job (as -// used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) -// such as `serviceAccount`, `workerMachineType`, etc can be specified here. +// **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are +// case-sensitive based on the language on which the pipeline is coded, mostly Java. +// **Note**: do not configure Dataflow options here in parameters. func (o FlexTemplateJobOutput) Parameters() pulumi.MapOutput { return o.ApplyT(func(v *FlexTemplateJob) pulumi.MapOutput { return v.Parameters }).(pulumi.MapOutput) } diff --git a/sdk/go/gcp/dataflow/job.go b/sdk/go/gcp/dataflow/job.go index a6d8039562..7cfa6c93cf 100644 --- a/sdk/go/gcp/dataflow/job.go +++ b/sdk/go/gcp/dataflow/job.go @@ -215,7 +215,9 @@ type Job struct { Network pulumi.StringPtrOutput `pulumi:"network"` // One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. OnDelete pulumi.StringPtrOutput `pulumi:"onDelete"` - // Key/Value pairs to be passed to the Dataflow job (as used in the template). + // **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + // case-sensitive based on the language on which the pipeline is coded, mostly Java. + // **Note**: do not configure Dataflow options here in parameters. Parameters pulumi.MapOutput `pulumi:"parameters"` // The project in which the resource belongs. If it is not provided, the provider project is used. Project pulumi.StringOutput `pulumi:"project"` @@ -312,7 +314,9 @@ type jobState struct { Network *string `pulumi:"network"` // One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. OnDelete *string `pulumi:"onDelete"` - // Key/Value pairs to be passed to the Dataflow job (as used in the template). + // **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + // case-sensitive based on the language on which the pipeline is coded, mostly Java. + // **Note**: do not configure Dataflow options here in parameters. Parameters map[string]interface{} `pulumi:"parameters"` // The project in which the resource belongs. If it is not provided, the provider project is used. Project *string `pulumi:"project"` @@ -369,7 +373,9 @@ type JobState struct { Network pulumi.StringPtrInput // One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. OnDelete pulumi.StringPtrInput - // Key/Value pairs to be passed to the Dataflow job (as used in the template). + // **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + // case-sensitive based on the language on which the pipeline is coded, mostly Java. + // **Note**: do not configure Dataflow options here in parameters. Parameters pulumi.MapInput // The project in which the resource belongs. If it is not provided, the provider project is used. Project pulumi.StringPtrInput @@ -426,7 +432,9 @@ type jobArgs struct { Network *string `pulumi:"network"` // One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. OnDelete *string `pulumi:"onDelete"` - // Key/Value pairs to be passed to the Dataflow job (as used in the template). + // **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + // case-sensitive based on the language on which the pipeline is coded, mostly Java. + // **Note**: do not configure Dataflow options here in parameters. Parameters map[string]interface{} `pulumi:"parameters"` // The project in which the resource belongs. If it is not provided, the provider project is used. Project *string `pulumi:"project"` @@ -474,7 +482,9 @@ type JobArgs struct { Network pulumi.StringPtrInput // One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. OnDelete pulumi.StringPtrInput - // Key/Value pairs to be passed to the Dataflow job (as used in the template). + // **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + // case-sensitive based on the language on which the pipeline is coded, mostly Java. + // **Note**: do not configure Dataflow options here in parameters. Parameters pulumi.MapInput // The project in which the resource belongs. If it is not provided, the provider project is used. Project pulumi.StringPtrInput @@ -647,7 +657,9 @@ func (o JobOutput) OnDelete() pulumi.StringPtrOutput { return o.ApplyT(func(v *Job) pulumi.StringPtrOutput { return v.OnDelete }).(pulumi.StringPtrOutput) } -// Key/Value pairs to be passed to the Dataflow job (as used in the template). +// **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are +// case-sensitive based on the language on which the pipeline is coded, mostly Java. +// **Note**: do not configure Dataflow options here in parameters. func (o JobOutput) Parameters() pulumi.MapOutput { return o.ApplyT(func(v *Job) pulumi.MapOutput { return v.Parameters }).(pulumi.MapOutput) } diff --git a/sdk/go/gcp/essentialcontacts/documentAiWarehouseDocumentSchema.go b/sdk/go/gcp/essentialcontacts/documentAiWarehouseDocumentSchema.go index 52421725c9..6bb39b3980 100644 --- a/sdk/go/gcp/essentialcontacts/documentAiWarehouseDocumentSchema.go +++ b/sdk/go/gcp/essentialcontacts/documentAiWarehouseDocumentSchema.go @@ -74,470 +74,6 @@ import ( // } // // ``` -// ### Document Ai Warehouse Document Schema Integer -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts" -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// project, err := organizations.LookupProject(ctx, nil, nil) -// if err != nil { -// return err -// } -// _, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, "example_integer", &essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{ -// ProjectNumber: pulumi.String(project.Number), -// DisplayName: pulumi.String("test-property-integer"), -// Location: pulumi.String("us"), -// PropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{ -// Name: pulumi.String("prop1"), -// DisplayName: pulumi.String("propdisp1"), -// IsRepeatable: pulumi.Bool(false), -// IsFilterable: pulumi.Bool(true), -// IsSearchable: pulumi.Bool(true), -// IsMetadata: pulumi.Bool(false), -// IsRequired: pulumi.Bool(false), -// RetrievalImportance: pulumi.String("HIGHEST"), -// SchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{ -// Name: pulumi.String("dummy_source"), -// ProcessorType: pulumi.String("dummy_processor"), -// }, -// }, -// IntegerTypeOptions: nil, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ### Document Ai Warehouse Document Schema Float -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts" -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// project, err := organizations.LookupProject(ctx, nil, nil) -// if err != nil { -// return err -// } -// _, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, "example_float", &essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{ -// ProjectNumber: pulumi.String(project.Number), -// DisplayName: pulumi.String("test-property-float"), -// Location: pulumi.String("us"), -// PropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{ -// Name: pulumi.String("prop2"), -// DisplayName: pulumi.String("propdisp2"), -// IsRepeatable: pulumi.Bool(false), -// IsFilterable: pulumi.Bool(true), -// IsSearchable: pulumi.Bool(true), -// IsMetadata: pulumi.Bool(false), -// IsRequired: pulumi.Bool(false), -// RetrievalImportance: pulumi.String("HIGHEST"), -// SchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{ -// Name: pulumi.String("dummy_source"), -// ProcessorType: pulumi.String("dummy_processor"), -// }, -// }, -// FloatTypeOptions: nil, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ### Document Ai Warehouse Document Schema Property -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts" -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// project, err := organizations.LookupProject(ctx, nil, nil) -// if err != nil { -// return err -// } -// _, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, "example_property", &essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{ -// ProjectNumber: pulumi.String(project.Number), -// DisplayName: pulumi.String("test-property-property"), -// Location: pulumi.String("us"), -// DocumentIsFolder: pulumi.Bool(false), -// PropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{ -// Name: pulumi.String("prop8"), -// DisplayName: pulumi.String("propdisp8"), -// IsRepeatable: pulumi.Bool(false), -// IsFilterable: pulumi.Bool(true), -// IsSearchable: pulumi.Bool(true), -// IsMetadata: pulumi.Bool(false), -// IsRequired: pulumi.Bool(false), -// RetrievalImportance: pulumi.String("HIGHEST"), -// SchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{ -// Name: pulumi.String("dummy_source"), -// ProcessorType: pulumi.String("dummy_processor"), -// }, -// }, -// PropertyTypeOptions: &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs{ -// PropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs{ -// Name: pulumi.String("prop8_nested"), -// DisplayName: pulumi.String("propdisp8_nested"), -// IsRepeatable: pulumi.Bool(false), -// IsFilterable: pulumi.Bool(true), -// IsSearchable: pulumi.Bool(true), -// IsMetadata: pulumi.Bool(false), -// IsRequired: pulumi.Bool(false), -// RetrievalImportance: pulumi.String("HIGHEST"), -// SchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs{ -// Name: pulumi.String("dummy_source_nested"), -// ProcessorType: pulumi.String("dummy_processor_nested"), -// }, -// }, -// TextTypeOptions: nil, -// }, -// }, -// }, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ### Document Ai Warehouse Document Schema Property Enum -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts" -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// project, err := organizations.LookupProject(ctx, nil, nil) -// if err != nil { -// return err -// } -// _, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, "example_property_enum", &essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{ -// ProjectNumber: pulumi.String(project.Number), -// DisplayName: pulumi.String("test-property-property"), -// Location: pulumi.String("us"), -// DocumentIsFolder: pulumi.Bool(false), -// PropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{ -// Name: pulumi.String("prop8"), -// DisplayName: pulumi.String("propdisp8"), -// IsRepeatable: pulumi.Bool(false), -// IsFilterable: pulumi.Bool(true), -// IsSearchable: pulumi.Bool(true), -// IsMetadata: pulumi.Bool(false), -// IsRequired: pulumi.Bool(false), -// RetrievalImportance: pulumi.String("HIGHEST"), -// SchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{ -// Name: pulumi.String("dummy_source"), -// ProcessorType: pulumi.String("dummy_processor"), -// }, -// }, -// PropertyTypeOptions: &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs{ -// PropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs{ -// Name: pulumi.String("prop8_nested"), -// DisplayName: pulumi.String("propdisp8_nested"), -// IsRepeatable: pulumi.Bool(false), -// IsFilterable: pulumi.Bool(true), -// IsSearchable: pulumi.Bool(true), -// IsMetadata: pulumi.Bool(false), -// IsRequired: pulumi.Bool(false), -// RetrievalImportance: pulumi.String("HIGHEST"), -// SchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs{ -// Name: pulumi.String("dummy_source_nested"), -// ProcessorType: pulumi.String("dummy_processor_nested"), -// }, -// }, -// EnumTypeOptions: &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionEnumTypeOptionsArgs{ -// PossibleValues: pulumi.StringArray{ -// pulumi.String("M"), -// pulumi.String("F"), -// pulumi.String("X"), -// }, -// ValidationCheckDisabled: pulumi.Bool(false), -// }, -// }, -// }, -// }, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ### Document Ai Warehouse Document Schema Enum -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts" -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// project, err := organizations.LookupProject(ctx, nil, nil) -// if err != nil { -// return err -// } -// _, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, "example_enum", &essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{ -// ProjectNumber: pulumi.String(project.Number), -// DisplayName: pulumi.String("test-property-enum"), -// Location: pulumi.String("us"), -// PropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{ -// Name: pulumi.String("prop6"), -// DisplayName: pulumi.String("propdisp6"), -// IsRepeatable: pulumi.Bool(false), -// IsFilterable: pulumi.Bool(true), -// IsSearchable: pulumi.Bool(true), -// IsMetadata: pulumi.Bool(false), -// IsRequired: pulumi.Bool(false), -// RetrievalImportance: pulumi.String("HIGHEST"), -// SchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{ -// Name: pulumi.String("dummy_source"), -// ProcessorType: pulumi.String("dummy_processor"), -// }, -// }, -// EnumTypeOptions: &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionEnumTypeOptionsArgs{ -// PossibleValues: pulumi.StringArray{ -// pulumi.String("M"), -// pulumi.String("F"), -// pulumi.String("X"), -// }, -// ValidationCheckDisabled: pulumi.Bool(false), -// }, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ### Document Ai Warehouse Document Schema Map -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts" -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// project, err := organizations.LookupProject(ctx, nil, nil) -// if err != nil { -// return err -// } -// _, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, "example_map", &essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{ -// ProjectNumber: pulumi.String(project.Number), -// DisplayName: pulumi.String("test-property-map"), -// Location: pulumi.String("us"), -// PropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{ -// Name: pulumi.String("prop4"), -// DisplayName: pulumi.String("propdisp4"), -// IsRepeatable: pulumi.Bool(false), -// IsFilterable: pulumi.Bool(true), -// IsSearchable: pulumi.Bool(true), -// IsMetadata: pulumi.Bool(false), -// IsRequired: pulumi.Bool(false), -// RetrievalImportance: pulumi.String("HIGHEST"), -// SchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{ -// Name: pulumi.String("dummy_source"), -// ProcessorType: pulumi.String("dummy_processor"), -// }, -// }, -// MapTypeOptions: nil, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ### Document Ai Warehouse Document Schema Datetime -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts" -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// project, err := organizations.LookupProject(ctx, nil, nil) -// if err != nil { -// return err -// } -// _, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, "example_datetime", &essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{ -// ProjectNumber: pulumi.String(project.Number), -// DisplayName: pulumi.String("test-property-date_time"), -// Location: pulumi.String("us"), -// PropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{ -// Name: pulumi.String("prop7"), -// DisplayName: pulumi.String("propdisp7"), -// IsRepeatable: pulumi.Bool(false), -// IsFilterable: pulumi.Bool(true), -// IsSearchable: pulumi.Bool(true), -// IsMetadata: pulumi.Bool(false), -// IsRequired: pulumi.Bool(false), -// RetrievalImportance: pulumi.String("HIGHEST"), -// SchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{ -// Name: pulumi.String("dummy_source"), -// ProcessorType: pulumi.String("dummy_processor"), -// }, -// }, -// DateTimeTypeOptions: nil, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ### Document Ai Warehouse Document Schema Timestamp -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/essentialcontacts" -// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// project, err := organizations.LookupProject(ctx, nil, nil) -// if err != nil { -// return err -// } -// _, err = essentialcontacts.NewDocumentAiWarehouseDocumentSchema(ctx, "example_timestamp", &essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs{ -// ProjectNumber: pulumi.String(project.Number), -// DisplayName: pulumi.String("test-property-timestamp"), -// Location: pulumi.String("us"), -// PropertyDefinitions: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs{ -// Name: pulumi.String("prop5"), -// DisplayName: pulumi.String("propdisp5"), -// IsRepeatable: pulumi.Bool(false), -// IsFilterable: pulumi.Bool(true), -// IsSearchable: pulumi.Bool(true), -// IsMetadata: pulumi.Bool(false), -// IsRequired: pulumi.Bool(false), -// RetrievalImportance: pulumi.String("HIGHEST"), -// SchemaSources: essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArray{ -// &essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs{ -// Name: pulumi.String("dummy_source"), -// ProcessorType: pulumi.String("dummy_processor"), -// }, -// }, -// TimestampTypeOptions: nil, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/firebaserules/release.go b/sdk/go/gcp/firebaserules/release.go index ae044234f8..bf3949f291 100644 --- a/sdk/go/gcp/firebaserules/release.go +++ b/sdk/go/gcp/firebaserules/release.go @@ -47,7 +47,7 @@ import ( // return err // } // _, err = firebaserules.NewRelease(ctx, "primary", &firebaserules.ReleaseArgs{ -// Name: pulumi.String("cloud.firestore"), +// Name: pulumi.String("cloud.firestore/database"), // RulesetName: firestore.Name.ApplyT(func(name string) (string, error) { // return fmt.Sprintf("projects/my-project-name/rulesets/%v", name), nil // }).(pulumi.StringOutput), diff --git a/sdk/go/gcp/privilegedaccessmanager/entitlement.go b/sdk/go/gcp/privilegedaccessmanager/entitlement.go new file mode 100644 index 0000000000..12aad1b276 --- /dev/null +++ b/sdk/go/gcp/privilegedaccessmanager/entitlement.go @@ -0,0 +1,565 @@ +// 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 privilegedaccessmanager + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ### Privileged Access Manager Entitlement Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/privilegedaccessmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := privilegedaccessmanager.Newentitlement(ctx, "tfentitlement", &privilegedaccessmanager.entitlementArgs{ +// EntitlementId: pulumi.String("example-entitlement"), +// Location: pulumi.String("global"), +// MaxRequestDuration: pulumi.String("43200s"), +// Parent: pulumi.String("projects/my-project-name"), +// RequesterJustificationConfig: &privilegedaccessmanager.EntitlementRequesterJustificationConfigArgs{ +// Unstructured: nil, +// }, +// EligibleUsers: privilegedaccessmanager.EntitlementEligibleUserArray{ +// &privilegedaccessmanager.EntitlementEligibleUserArgs{ +// Principals: pulumi.StringArray{ +// pulumi.String("group:test@google.com"), +// }, +// }, +// }, +// PrivilegedAccess: &privilegedaccessmanager.EntitlementPrivilegedAccessArgs{ +// GcpIamAccess: &privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessArgs{ +// RoleBindings: privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessRoleBindingArray{ +// &privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs{ +// Role: pulumi.String("roles/storage.admin"), +// ConditionExpression: pulumi.String("request.time < timestamp(\"2024-04-23T18:30:00.000Z\")"), +// }, +// }, +// Resource: pulumi.String("//cloudresourcemanager.googleapis.com/projects/my-project-name"), +// ResourceType: pulumi.String("cloudresourcemanager.googleapis.com/Project"), +// }, +// }, +// AdditionalNotificationTargets: &privilegedaccessmanager.EntitlementAdditionalNotificationTargetsArgs{ +// AdminEmailRecipients: pulumi.StringArray{ +// pulumi.String("user@example.com"), +// }, +// RequesterEmailRecipients: pulumi.StringArray{ +// pulumi.String("user@example.com"), +// }, +// }, +// ApprovalWorkflow: &privilegedaccessmanager.EntitlementApprovalWorkflowArgs{ +// ManualApprovals: &privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsArgs{ +// RequireApproverJustification: pulumi.Bool(true), +// Steps: privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepArray{ +// &privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepArgs{ +// ApprovalsNeeded: pulumi.Int(1), +// ApproverEmailRecipients: pulumi.StringArray{ +// pulumi.String("user@example.com"), +// }, +// Approvers: &privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepApproversArgs{ +// Principals: pulumi.StringArray{ +// pulumi.String("group:test@google.com"), +// }, +// }, +// }, +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// Entitlement can be imported using any of these accepted formats: +// +// * `{{parent}}/locations/{{location}}/entitlements/{{entitlement_id}}` +// +// When using the `pulumi import` command, Entitlement can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:privilegedaccessmanager/entitlement:entitlement default {{parent}}/locations/{{location}}/entitlements/{{entitlement_id}} +// ``` +type Entitlement struct { + pulumi.CustomResourceState + + // AdditionalNotificationTargets includes email addresses to be notified. + AdditionalNotificationTargets EntitlementAdditionalNotificationTargetsPtrOutput `pulumi:"additionalNotificationTargets"` + // The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + // Different types of approval workflows that can be used to gate privileged access granting. + ApprovalWorkflow EntitlementApprovalWorkflowPtrOutput `pulumi:"approvalWorkflow"` + // Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + // Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // Who can create Grants using Entitlement. This list should contain at most one entry + // Structure is documented below. + EligibleUsers EntitlementEligibleUserArrayOutput `pulumi:"eligibleUsers"` + // The ID to use for this Entitlement. This will become the last part of the resource name. + // This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + // This value should be unique among all other Entitlements under the specified `parent`. + EntitlementId pulumi.StringOutput `pulumi:"entitlementId"` + // For Resource freshness validation (https://google.aip.dev/154) + Etag pulumi.StringOutput `pulumi:"etag"` + // The region of the Entitlement resource. + Location pulumi.StringOutput `pulumi:"location"` + // The maximum amount of time for which access would be granted for a request. + // A requester can choose to ask for access for less than this duration but never more. + // Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + MaxRequestDuration pulumi.StringOutput `pulumi:"maxRequestDuration"` + // Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + // Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + Name pulumi.StringOutput `pulumi:"name"` + // Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + Parent pulumi.StringOutput `pulumi:"parent"` + // Privileged access that this service can be used to gate. + // Structure is documented below. + PrivilegedAccess EntitlementPrivilegedAccessOutput `pulumi:"privilegedAccess"` + // Defines the ways in which a requester should provide the justification while requesting for access. + // Structure is documented below. + RequesterJustificationConfig EntitlementRequesterJustificationConfigOutput `pulumi:"requesterJustificationConfig"` + // Output only. The current state of the Entitlement. + State pulumi.StringOutput `pulumi:"state"` + // Output only. Update time stamp. 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"` +} + +// NewEntitlement registers a new resource with the given unique name, arguments, and options. +func NewEntitlement(ctx *pulumi.Context, + name string, args *EntitlementArgs, opts ...pulumi.ResourceOption) (*Entitlement, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.EligibleUsers == nil { + return nil, errors.New("invalid value for required argument 'EligibleUsers'") + } + if args.EntitlementId == nil { + return nil, errors.New("invalid value for required argument 'EntitlementId'") + } + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + if args.MaxRequestDuration == nil { + return nil, errors.New("invalid value for required argument 'MaxRequestDuration'") + } + if args.Parent == nil { + return nil, errors.New("invalid value for required argument 'Parent'") + } + if args.PrivilegedAccess == nil { + return nil, errors.New("invalid value for required argument 'PrivilegedAccess'") + } + if args.RequesterJustificationConfig == nil { + return nil, errors.New("invalid value for required argument 'RequesterJustificationConfig'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Entitlement + err := ctx.RegisterResource("gcp:privilegedaccessmanager/entitlement:entitlement", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetEntitlement gets an existing Entitlement 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 GetEntitlement(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *EntitlementState, opts ...pulumi.ResourceOption) (*Entitlement, error) { + var resource Entitlement + err := ctx.ReadResource("gcp:privilegedaccessmanager/entitlement:entitlement", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Entitlement resources. +type entitlementState struct { + // AdditionalNotificationTargets includes email addresses to be notified. + AdditionalNotificationTargets *EntitlementAdditionalNotificationTargets `pulumi:"additionalNotificationTargets"` + // The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + // Different types of approval workflows that can be used to gate privileged access granting. + ApprovalWorkflow *EntitlementApprovalWorkflow `pulumi:"approvalWorkflow"` + // Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + // Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + CreateTime *string `pulumi:"createTime"` + // Who can create Grants using Entitlement. This list should contain at most one entry + // Structure is documented below. + EligibleUsers []EntitlementEligibleUser `pulumi:"eligibleUsers"` + // The ID to use for this Entitlement. This will become the last part of the resource name. + // This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + // This value should be unique among all other Entitlements under the specified `parent`. + EntitlementId *string `pulumi:"entitlementId"` + // For Resource freshness validation (https://google.aip.dev/154) + Etag *string `pulumi:"etag"` + // The region of the Entitlement resource. + Location *string `pulumi:"location"` + // The maximum amount of time for which access would be granted for a request. + // A requester can choose to ask for access for less than this duration but never more. + // Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + MaxRequestDuration *string `pulumi:"maxRequestDuration"` + // Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + // Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + Name *string `pulumi:"name"` + // Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + Parent *string `pulumi:"parent"` + // Privileged access that this service can be used to gate. + // Structure is documented below. + PrivilegedAccess *EntitlementPrivilegedAccess `pulumi:"privilegedAccess"` + // Defines the ways in which a requester should provide the justification while requesting for access. + // Structure is documented below. + RequesterJustificationConfig *EntitlementRequesterJustificationConfig `pulumi:"requesterJustificationConfig"` + // Output only. The current state of the Entitlement. + State *string `pulumi:"state"` + // Output only. Update time stamp. 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 EntitlementState struct { + // AdditionalNotificationTargets includes email addresses to be notified. + AdditionalNotificationTargets EntitlementAdditionalNotificationTargetsPtrInput + // The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + // Different types of approval workflows that can be used to gate privileged access granting. + ApprovalWorkflow EntitlementApprovalWorkflowPtrInput + // Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + // Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + CreateTime pulumi.StringPtrInput + // Who can create Grants using Entitlement. This list should contain at most one entry + // Structure is documented below. + EligibleUsers EntitlementEligibleUserArrayInput + // The ID to use for this Entitlement. This will become the last part of the resource name. + // This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + // This value should be unique among all other Entitlements under the specified `parent`. + EntitlementId pulumi.StringPtrInput + // For Resource freshness validation (https://google.aip.dev/154) + Etag pulumi.StringPtrInput + // The region of the Entitlement resource. + Location pulumi.StringPtrInput + // The maximum amount of time for which access would be granted for a request. + // A requester can choose to ask for access for less than this duration but never more. + // Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + MaxRequestDuration pulumi.StringPtrInput + // Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + // Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + Name pulumi.StringPtrInput + // Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + Parent pulumi.StringPtrInput + // Privileged access that this service can be used to gate. + // Structure is documented below. + PrivilegedAccess EntitlementPrivilegedAccessPtrInput + // Defines the ways in which a requester should provide the justification while requesting for access. + // Structure is documented below. + RequesterJustificationConfig EntitlementRequesterJustificationConfigPtrInput + // Output only. The current state of the Entitlement. + State pulumi.StringPtrInput + // Output only. Update time stamp. 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 (EntitlementState) ElementType() reflect.Type { + return reflect.TypeOf((*entitlementState)(nil)).Elem() +} + +type entitlementArgs struct { + // AdditionalNotificationTargets includes email addresses to be notified. + AdditionalNotificationTargets *EntitlementAdditionalNotificationTargets `pulumi:"additionalNotificationTargets"` + // The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + // Different types of approval workflows that can be used to gate privileged access granting. + ApprovalWorkflow *EntitlementApprovalWorkflow `pulumi:"approvalWorkflow"` + // Who can create Grants using Entitlement. This list should contain at most one entry + // Structure is documented below. + EligibleUsers []EntitlementEligibleUser `pulumi:"eligibleUsers"` + // The ID to use for this Entitlement. This will become the last part of the resource name. + // This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + // This value should be unique among all other Entitlements under the specified `parent`. + EntitlementId string `pulumi:"entitlementId"` + // The region of the Entitlement resource. + Location string `pulumi:"location"` + // The maximum amount of time for which access would be granted for a request. + // A requester can choose to ask for access for less than this duration but never more. + // Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + MaxRequestDuration string `pulumi:"maxRequestDuration"` + // Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + Parent string `pulumi:"parent"` + // Privileged access that this service can be used to gate. + // Structure is documented below. + PrivilegedAccess EntitlementPrivilegedAccess `pulumi:"privilegedAccess"` + // Defines the ways in which a requester should provide the justification while requesting for access. + // Structure is documented below. + RequesterJustificationConfig EntitlementRequesterJustificationConfig `pulumi:"requesterJustificationConfig"` +} + +// The set of arguments for constructing a Entitlement resource. +type EntitlementArgs struct { + // AdditionalNotificationTargets includes email addresses to be notified. + AdditionalNotificationTargets EntitlementAdditionalNotificationTargetsPtrInput + // The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + // Different types of approval workflows that can be used to gate privileged access granting. + ApprovalWorkflow EntitlementApprovalWorkflowPtrInput + // Who can create Grants using Entitlement. This list should contain at most one entry + // Structure is documented below. + EligibleUsers EntitlementEligibleUserArrayInput + // The ID to use for this Entitlement. This will become the last part of the resource name. + // This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + // This value should be unique among all other Entitlements under the specified `parent`. + EntitlementId pulumi.StringInput + // The region of the Entitlement resource. + Location pulumi.StringInput + // The maximum amount of time for which access would be granted for a request. + // A requester can choose to ask for access for less than this duration but never more. + // Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + MaxRequestDuration pulumi.StringInput + // Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + Parent pulumi.StringInput + // Privileged access that this service can be used to gate. + // Structure is documented below. + PrivilegedAccess EntitlementPrivilegedAccessInput + // Defines the ways in which a requester should provide the justification while requesting for access. + // Structure is documented below. + RequesterJustificationConfig EntitlementRequesterJustificationConfigInput +} + +func (EntitlementArgs) ElementType() reflect.Type { + return reflect.TypeOf((*entitlementArgs)(nil)).Elem() +} + +type EntitlementInput interface { + pulumi.Input + + ToEntitlementOutput() EntitlementOutput + ToEntitlementOutputWithContext(ctx context.Context) EntitlementOutput +} + +func (*Entitlement) ElementType() reflect.Type { + return reflect.TypeOf((**Entitlement)(nil)).Elem() +} + +func (i *Entitlement) ToEntitlementOutput() EntitlementOutput { + return i.ToEntitlementOutputWithContext(context.Background()) +} + +func (i *Entitlement) ToEntitlementOutputWithContext(ctx context.Context) EntitlementOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementOutput) +} + +// EntitlementArrayInput is an input type that accepts EntitlementArray and EntitlementArrayOutput values. +// You can construct a concrete instance of `EntitlementArrayInput` via: +// +// EntitlementArray{ EntitlementArgs{...} } +type EntitlementArrayInput interface { + pulumi.Input + + ToEntitlementArrayOutput() EntitlementArrayOutput + ToEntitlementArrayOutputWithContext(context.Context) EntitlementArrayOutput +} + +type EntitlementArray []EntitlementInput + +func (EntitlementArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Entitlement)(nil)).Elem() +} + +func (i EntitlementArray) ToEntitlementArrayOutput() EntitlementArrayOutput { + return i.ToEntitlementArrayOutputWithContext(context.Background()) +} + +func (i EntitlementArray) ToEntitlementArrayOutputWithContext(ctx context.Context) EntitlementArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementArrayOutput) +} + +// EntitlementMapInput is an input type that accepts EntitlementMap and EntitlementMapOutput values. +// You can construct a concrete instance of `EntitlementMapInput` via: +// +// EntitlementMap{ "key": EntitlementArgs{...} } +type EntitlementMapInput interface { + pulumi.Input + + ToEntitlementMapOutput() EntitlementMapOutput + ToEntitlementMapOutputWithContext(context.Context) EntitlementMapOutput +} + +type EntitlementMap map[string]EntitlementInput + +func (EntitlementMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Entitlement)(nil)).Elem() +} + +func (i EntitlementMap) ToEntitlementMapOutput() EntitlementMapOutput { + return i.ToEntitlementMapOutputWithContext(context.Background()) +} + +func (i EntitlementMap) ToEntitlementMapOutputWithContext(ctx context.Context) EntitlementMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementMapOutput) +} + +type EntitlementOutput struct{ *pulumi.OutputState } + +func (EntitlementOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Entitlement)(nil)).Elem() +} + +func (o EntitlementOutput) ToEntitlementOutput() EntitlementOutput { + return o +} + +func (o EntitlementOutput) ToEntitlementOutputWithContext(ctx context.Context) EntitlementOutput { + return o +} + +// AdditionalNotificationTargets includes email addresses to be notified. +func (o EntitlementOutput) AdditionalNotificationTargets() EntitlementAdditionalNotificationTargetsPtrOutput { + return o.ApplyT(func(v *Entitlement) EntitlementAdditionalNotificationTargetsPtrOutput { + return v.AdditionalNotificationTargets + }).(EntitlementAdditionalNotificationTargetsPtrOutput) +} + +// The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. +// Different types of approval workflows that can be used to gate privileged access granting. +func (o EntitlementOutput) ApprovalWorkflow() EntitlementApprovalWorkflowPtrOutput { + return o.ApplyT(func(v *Entitlement) EntitlementApprovalWorkflowPtrOutput { return v.ApprovalWorkflow }).(EntitlementApprovalWorkflowPtrOutput) +} + +// Output only. Create time stamp. 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 EntitlementOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *Entitlement) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// Who can create Grants using Entitlement. This list should contain at most one entry +// Structure is documented below. +func (o EntitlementOutput) EligibleUsers() EntitlementEligibleUserArrayOutput { + return o.ApplyT(func(v *Entitlement) EntitlementEligibleUserArrayOutput { return v.EligibleUsers }).(EntitlementEligibleUserArrayOutput) +} + +// The ID to use for this Entitlement. This will become the last part of the resource name. +// This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. +// This value should be unique among all other Entitlements under the specified `parent`. +func (o EntitlementOutput) EntitlementId() pulumi.StringOutput { + return o.ApplyT(func(v *Entitlement) pulumi.StringOutput { return v.EntitlementId }).(pulumi.StringOutput) +} + +// For Resource freshness validation (https://google.aip.dev/154) +func (o EntitlementOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v *Entitlement) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) +} + +// The region of the Entitlement resource. +func (o EntitlementOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *Entitlement) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// The maximum amount of time for which access would be granted for a request. +// A requester can choose to ask for access for less than this duration but never more. +// Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" +func (o EntitlementOutput) MaxRequestDuration() pulumi.StringOutput { + return o.ApplyT(func(v *Entitlement) pulumi.StringOutput { return v.MaxRequestDuration }).(pulumi.StringOutput) +} + +// Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. +// Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. +func (o EntitlementOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Entitlement) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} +func (o EntitlementOutput) Parent() pulumi.StringOutput { + return o.ApplyT(func(v *Entitlement) pulumi.StringOutput { return v.Parent }).(pulumi.StringOutput) +} + +// Privileged access that this service can be used to gate. +// Structure is documented below. +func (o EntitlementOutput) PrivilegedAccess() EntitlementPrivilegedAccessOutput { + return o.ApplyT(func(v *Entitlement) EntitlementPrivilegedAccessOutput { return v.PrivilegedAccess }).(EntitlementPrivilegedAccessOutput) +} + +// Defines the ways in which a requester should provide the justification while requesting for access. +// Structure is documented below. +func (o EntitlementOutput) RequesterJustificationConfig() EntitlementRequesterJustificationConfigOutput { + return o.ApplyT(func(v *Entitlement) EntitlementRequesterJustificationConfigOutput { + return v.RequesterJustificationConfig + }).(EntitlementRequesterJustificationConfigOutput) +} + +// Output only. The current state of the Entitlement. +func (o EntitlementOutput) State() pulumi.StringOutput { + return o.ApplyT(func(v *Entitlement) pulumi.StringOutput { return v.State }).(pulumi.StringOutput) +} + +// Output only. Update time stamp. 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 EntitlementOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *Entitlement) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type EntitlementArrayOutput struct{ *pulumi.OutputState } + +func (EntitlementArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Entitlement)(nil)).Elem() +} + +func (o EntitlementArrayOutput) ToEntitlementArrayOutput() EntitlementArrayOutput { + return o +} + +func (o EntitlementArrayOutput) ToEntitlementArrayOutputWithContext(ctx context.Context) EntitlementArrayOutput { + return o +} + +func (o EntitlementArrayOutput) Index(i pulumi.IntInput) EntitlementOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Entitlement { + return vs[0].([]*Entitlement)[vs[1].(int)] + }).(EntitlementOutput) +} + +type EntitlementMapOutput struct{ *pulumi.OutputState } + +func (EntitlementMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Entitlement)(nil)).Elem() +} + +func (o EntitlementMapOutput) ToEntitlementMapOutput() EntitlementMapOutput { + return o +} + +func (o EntitlementMapOutput) ToEntitlementMapOutputWithContext(ctx context.Context) EntitlementMapOutput { + return o +} + +func (o EntitlementMapOutput) MapIndex(k pulumi.StringInput) EntitlementOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Entitlement { + return vs[0].(map[string]*Entitlement)[vs[1].(string)] + }).(EntitlementOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementInput)(nil)).Elem(), &Entitlement{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementArrayInput)(nil)).Elem(), EntitlementArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementMapInput)(nil)).Elem(), EntitlementMap{}) + pulumi.RegisterOutputType(EntitlementOutput{}) + pulumi.RegisterOutputType(EntitlementArrayOutput{}) + pulumi.RegisterOutputType(EntitlementMapOutput{}) +} diff --git a/sdk/go/gcp/privilegedaccessmanager/init.go b/sdk/go/gcp/privilegedaccessmanager/init.go new file mode 100644 index 0000000000..d7dff3b6b5 --- /dev/null +++ b/sdk/go/gcp/privilegedaccessmanager/init.go @@ -0,0 +1,44 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package privilegedaccessmanager + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type module struct { + version semver.Version +} + +func (m *module) Version() semver.Version { + return m.version +} + +func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { + switch typ { + case "gcp:privilegedaccessmanager/entitlement:entitlement": + r = &Entitlement{} + default: + return nil, fmt.Errorf("unknown resource type: %s", typ) + } + + err = ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return +} + +func init() { + version, err := internal.PkgVersion() + if err != nil { + version = semver.Version{Major: 1} + } + pulumi.RegisterResourceModule( + "gcp", + "privilegedaccessmanager/entitlement", + &module{version}, + ) +} diff --git a/sdk/go/gcp/privilegedaccessmanager/pulumiTypes.go b/sdk/go/gcp/privilegedaccessmanager/pulumiTypes.go new file mode 100644 index 0000000000..1007bbcdd8 --- /dev/null +++ b/sdk/go/gcp/privilegedaccessmanager/pulumiTypes.go @@ -0,0 +1,1661 @@ +// 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 privilegedaccessmanager + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +var _ = internal.GetEnvOrDefault + +type EntitlementAdditionalNotificationTargets struct { + // Optional. Additional email addresses to be notified when a principal(requester) is granted access. + AdminEmailRecipients []string `pulumi:"adminEmailRecipients"` + // Optional. Additional email address to be notified about an eligible entitlement. + RequesterEmailRecipients []string `pulumi:"requesterEmailRecipients"` +} + +// EntitlementAdditionalNotificationTargetsInput is an input type that accepts EntitlementAdditionalNotificationTargetsArgs and EntitlementAdditionalNotificationTargetsOutput values. +// You can construct a concrete instance of `EntitlementAdditionalNotificationTargetsInput` via: +// +// EntitlementAdditionalNotificationTargetsArgs{...} +type EntitlementAdditionalNotificationTargetsInput interface { + pulumi.Input + + ToEntitlementAdditionalNotificationTargetsOutput() EntitlementAdditionalNotificationTargetsOutput + ToEntitlementAdditionalNotificationTargetsOutputWithContext(context.Context) EntitlementAdditionalNotificationTargetsOutput +} + +type EntitlementAdditionalNotificationTargetsArgs struct { + // Optional. Additional email addresses to be notified when a principal(requester) is granted access. + AdminEmailRecipients pulumi.StringArrayInput `pulumi:"adminEmailRecipients"` + // Optional. Additional email address to be notified about an eligible entitlement. + RequesterEmailRecipients pulumi.StringArrayInput `pulumi:"requesterEmailRecipients"` +} + +func (EntitlementAdditionalNotificationTargetsArgs) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementAdditionalNotificationTargets)(nil)).Elem() +} + +func (i EntitlementAdditionalNotificationTargetsArgs) ToEntitlementAdditionalNotificationTargetsOutput() EntitlementAdditionalNotificationTargetsOutput { + return i.ToEntitlementAdditionalNotificationTargetsOutputWithContext(context.Background()) +} + +func (i EntitlementAdditionalNotificationTargetsArgs) ToEntitlementAdditionalNotificationTargetsOutputWithContext(ctx context.Context) EntitlementAdditionalNotificationTargetsOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementAdditionalNotificationTargetsOutput) +} + +func (i EntitlementAdditionalNotificationTargetsArgs) ToEntitlementAdditionalNotificationTargetsPtrOutput() EntitlementAdditionalNotificationTargetsPtrOutput { + return i.ToEntitlementAdditionalNotificationTargetsPtrOutputWithContext(context.Background()) +} + +func (i EntitlementAdditionalNotificationTargetsArgs) ToEntitlementAdditionalNotificationTargetsPtrOutputWithContext(ctx context.Context) EntitlementAdditionalNotificationTargetsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementAdditionalNotificationTargetsOutput).ToEntitlementAdditionalNotificationTargetsPtrOutputWithContext(ctx) +} + +// EntitlementAdditionalNotificationTargetsPtrInput is an input type that accepts EntitlementAdditionalNotificationTargetsArgs, EntitlementAdditionalNotificationTargetsPtr and EntitlementAdditionalNotificationTargetsPtrOutput values. +// You can construct a concrete instance of `EntitlementAdditionalNotificationTargetsPtrInput` via: +// +// EntitlementAdditionalNotificationTargetsArgs{...} +// +// or: +// +// nil +type EntitlementAdditionalNotificationTargetsPtrInput interface { + pulumi.Input + + ToEntitlementAdditionalNotificationTargetsPtrOutput() EntitlementAdditionalNotificationTargetsPtrOutput + ToEntitlementAdditionalNotificationTargetsPtrOutputWithContext(context.Context) EntitlementAdditionalNotificationTargetsPtrOutput +} + +type entitlementAdditionalNotificationTargetsPtrType EntitlementAdditionalNotificationTargetsArgs + +func EntitlementAdditionalNotificationTargetsPtr(v *EntitlementAdditionalNotificationTargetsArgs) EntitlementAdditionalNotificationTargetsPtrInput { + return (*entitlementAdditionalNotificationTargetsPtrType)(v) +} + +func (*entitlementAdditionalNotificationTargetsPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementAdditionalNotificationTargets)(nil)).Elem() +} + +func (i *entitlementAdditionalNotificationTargetsPtrType) ToEntitlementAdditionalNotificationTargetsPtrOutput() EntitlementAdditionalNotificationTargetsPtrOutput { + return i.ToEntitlementAdditionalNotificationTargetsPtrOutputWithContext(context.Background()) +} + +func (i *entitlementAdditionalNotificationTargetsPtrType) ToEntitlementAdditionalNotificationTargetsPtrOutputWithContext(ctx context.Context) EntitlementAdditionalNotificationTargetsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementAdditionalNotificationTargetsPtrOutput) +} + +type EntitlementAdditionalNotificationTargetsOutput struct{ *pulumi.OutputState } + +func (EntitlementAdditionalNotificationTargetsOutput) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementAdditionalNotificationTargets)(nil)).Elem() +} + +func (o EntitlementAdditionalNotificationTargetsOutput) ToEntitlementAdditionalNotificationTargetsOutput() EntitlementAdditionalNotificationTargetsOutput { + return o +} + +func (o EntitlementAdditionalNotificationTargetsOutput) ToEntitlementAdditionalNotificationTargetsOutputWithContext(ctx context.Context) EntitlementAdditionalNotificationTargetsOutput { + return o +} + +func (o EntitlementAdditionalNotificationTargetsOutput) ToEntitlementAdditionalNotificationTargetsPtrOutput() EntitlementAdditionalNotificationTargetsPtrOutput { + return o.ToEntitlementAdditionalNotificationTargetsPtrOutputWithContext(context.Background()) +} + +func (o EntitlementAdditionalNotificationTargetsOutput) ToEntitlementAdditionalNotificationTargetsPtrOutputWithContext(ctx context.Context) EntitlementAdditionalNotificationTargetsPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v EntitlementAdditionalNotificationTargets) *EntitlementAdditionalNotificationTargets { + return &v + }).(EntitlementAdditionalNotificationTargetsPtrOutput) +} + +// Optional. Additional email addresses to be notified when a principal(requester) is granted access. +func (o EntitlementAdditionalNotificationTargetsOutput) AdminEmailRecipients() pulumi.StringArrayOutput { + return o.ApplyT(func(v EntitlementAdditionalNotificationTargets) []string { return v.AdminEmailRecipients }).(pulumi.StringArrayOutput) +} + +// Optional. Additional email address to be notified about an eligible entitlement. +func (o EntitlementAdditionalNotificationTargetsOutput) RequesterEmailRecipients() pulumi.StringArrayOutput { + return o.ApplyT(func(v EntitlementAdditionalNotificationTargets) []string { return v.RequesterEmailRecipients }).(pulumi.StringArrayOutput) +} + +type EntitlementAdditionalNotificationTargetsPtrOutput struct{ *pulumi.OutputState } + +func (EntitlementAdditionalNotificationTargetsPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementAdditionalNotificationTargets)(nil)).Elem() +} + +func (o EntitlementAdditionalNotificationTargetsPtrOutput) ToEntitlementAdditionalNotificationTargetsPtrOutput() EntitlementAdditionalNotificationTargetsPtrOutput { + return o +} + +func (o EntitlementAdditionalNotificationTargetsPtrOutput) ToEntitlementAdditionalNotificationTargetsPtrOutputWithContext(ctx context.Context) EntitlementAdditionalNotificationTargetsPtrOutput { + return o +} + +func (o EntitlementAdditionalNotificationTargetsPtrOutput) Elem() EntitlementAdditionalNotificationTargetsOutput { + return o.ApplyT(func(v *EntitlementAdditionalNotificationTargets) EntitlementAdditionalNotificationTargets { + if v != nil { + return *v + } + var ret EntitlementAdditionalNotificationTargets + return ret + }).(EntitlementAdditionalNotificationTargetsOutput) +} + +// Optional. Additional email addresses to be notified when a principal(requester) is granted access. +func (o EntitlementAdditionalNotificationTargetsPtrOutput) AdminEmailRecipients() pulumi.StringArrayOutput { + return o.ApplyT(func(v *EntitlementAdditionalNotificationTargets) []string { + if v == nil { + return nil + } + return v.AdminEmailRecipients + }).(pulumi.StringArrayOutput) +} + +// Optional. Additional email address to be notified about an eligible entitlement. +func (o EntitlementAdditionalNotificationTargetsPtrOutput) RequesterEmailRecipients() pulumi.StringArrayOutput { + return o.ApplyT(func(v *EntitlementAdditionalNotificationTargets) []string { + if v == nil { + return nil + } + return v.RequesterEmailRecipients + }).(pulumi.StringArrayOutput) +} + +type EntitlementApprovalWorkflow struct { + // A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + // The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + // This can be used to create approval workflows such as + // * Require an approval from any user in a group G. + // * Require an approval from any k number of users from a Group G. + // * Require an approval from any user in a group G and then from a user U. etc. + // A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + // Structure is documented below. + ManualApprovals EntitlementApprovalWorkflowManualApprovals `pulumi:"manualApprovals"` +} + +// EntitlementApprovalWorkflowInput is an input type that accepts EntitlementApprovalWorkflowArgs and EntitlementApprovalWorkflowOutput values. +// You can construct a concrete instance of `EntitlementApprovalWorkflowInput` via: +// +// EntitlementApprovalWorkflowArgs{...} +type EntitlementApprovalWorkflowInput interface { + pulumi.Input + + ToEntitlementApprovalWorkflowOutput() EntitlementApprovalWorkflowOutput + ToEntitlementApprovalWorkflowOutputWithContext(context.Context) EntitlementApprovalWorkflowOutput +} + +type EntitlementApprovalWorkflowArgs struct { + // A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + // The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + // This can be used to create approval workflows such as + // * Require an approval from any user in a group G. + // * Require an approval from any k number of users from a Group G. + // * Require an approval from any user in a group G and then from a user U. etc. + // A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + // Structure is documented below. + ManualApprovals EntitlementApprovalWorkflowManualApprovalsInput `pulumi:"manualApprovals"` +} + +func (EntitlementApprovalWorkflowArgs) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementApprovalWorkflow)(nil)).Elem() +} + +func (i EntitlementApprovalWorkflowArgs) ToEntitlementApprovalWorkflowOutput() EntitlementApprovalWorkflowOutput { + return i.ToEntitlementApprovalWorkflowOutputWithContext(context.Background()) +} + +func (i EntitlementApprovalWorkflowArgs) ToEntitlementApprovalWorkflowOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementApprovalWorkflowOutput) +} + +func (i EntitlementApprovalWorkflowArgs) ToEntitlementApprovalWorkflowPtrOutput() EntitlementApprovalWorkflowPtrOutput { + return i.ToEntitlementApprovalWorkflowPtrOutputWithContext(context.Background()) +} + +func (i EntitlementApprovalWorkflowArgs) ToEntitlementApprovalWorkflowPtrOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementApprovalWorkflowOutput).ToEntitlementApprovalWorkflowPtrOutputWithContext(ctx) +} + +// EntitlementApprovalWorkflowPtrInput is an input type that accepts EntitlementApprovalWorkflowArgs, EntitlementApprovalWorkflowPtr and EntitlementApprovalWorkflowPtrOutput values. +// You can construct a concrete instance of `EntitlementApprovalWorkflowPtrInput` via: +// +// EntitlementApprovalWorkflowArgs{...} +// +// or: +// +// nil +type EntitlementApprovalWorkflowPtrInput interface { + pulumi.Input + + ToEntitlementApprovalWorkflowPtrOutput() EntitlementApprovalWorkflowPtrOutput + ToEntitlementApprovalWorkflowPtrOutputWithContext(context.Context) EntitlementApprovalWorkflowPtrOutput +} + +type entitlementApprovalWorkflowPtrType EntitlementApprovalWorkflowArgs + +func EntitlementApprovalWorkflowPtr(v *EntitlementApprovalWorkflowArgs) EntitlementApprovalWorkflowPtrInput { + return (*entitlementApprovalWorkflowPtrType)(v) +} + +func (*entitlementApprovalWorkflowPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementApprovalWorkflow)(nil)).Elem() +} + +func (i *entitlementApprovalWorkflowPtrType) ToEntitlementApprovalWorkflowPtrOutput() EntitlementApprovalWorkflowPtrOutput { + return i.ToEntitlementApprovalWorkflowPtrOutputWithContext(context.Background()) +} + +func (i *entitlementApprovalWorkflowPtrType) ToEntitlementApprovalWorkflowPtrOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementApprovalWorkflowPtrOutput) +} + +type EntitlementApprovalWorkflowOutput struct{ *pulumi.OutputState } + +func (EntitlementApprovalWorkflowOutput) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementApprovalWorkflow)(nil)).Elem() +} + +func (o EntitlementApprovalWorkflowOutput) ToEntitlementApprovalWorkflowOutput() EntitlementApprovalWorkflowOutput { + return o +} + +func (o EntitlementApprovalWorkflowOutput) ToEntitlementApprovalWorkflowOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowOutput { + return o +} + +func (o EntitlementApprovalWorkflowOutput) ToEntitlementApprovalWorkflowPtrOutput() EntitlementApprovalWorkflowPtrOutput { + return o.ToEntitlementApprovalWorkflowPtrOutputWithContext(context.Background()) +} + +func (o EntitlementApprovalWorkflowOutput) ToEntitlementApprovalWorkflowPtrOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v EntitlementApprovalWorkflow) *EntitlementApprovalWorkflow { + return &v + }).(EntitlementApprovalWorkflowPtrOutput) +} + +// A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. +// The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. +// This can be used to create approval workflows such as +// - Require an approval from any user in a group G. +// - Require an approval from any k number of users from a Group G. +// - Require an approval from any user in a group G and then from a user U. etc. +// A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. +// Structure is documented below. +func (o EntitlementApprovalWorkflowOutput) ManualApprovals() EntitlementApprovalWorkflowManualApprovalsOutput { + return o.ApplyT(func(v EntitlementApprovalWorkflow) EntitlementApprovalWorkflowManualApprovals { + return v.ManualApprovals + }).(EntitlementApprovalWorkflowManualApprovalsOutput) +} + +type EntitlementApprovalWorkflowPtrOutput struct{ *pulumi.OutputState } + +func (EntitlementApprovalWorkflowPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementApprovalWorkflow)(nil)).Elem() +} + +func (o EntitlementApprovalWorkflowPtrOutput) ToEntitlementApprovalWorkflowPtrOutput() EntitlementApprovalWorkflowPtrOutput { + return o +} + +func (o EntitlementApprovalWorkflowPtrOutput) ToEntitlementApprovalWorkflowPtrOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowPtrOutput { + return o +} + +func (o EntitlementApprovalWorkflowPtrOutput) Elem() EntitlementApprovalWorkflowOutput { + return o.ApplyT(func(v *EntitlementApprovalWorkflow) EntitlementApprovalWorkflow { + if v != nil { + return *v + } + var ret EntitlementApprovalWorkflow + return ret + }).(EntitlementApprovalWorkflowOutput) +} + +// A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. +// The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. +// This can be used to create approval workflows such as +// - Require an approval from any user in a group G. +// - Require an approval from any k number of users from a Group G. +// - Require an approval from any user in a group G and then from a user U. etc. +// A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. +// Structure is documented below. +func (o EntitlementApprovalWorkflowPtrOutput) ManualApprovals() EntitlementApprovalWorkflowManualApprovalsPtrOutput { + return o.ApplyT(func(v *EntitlementApprovalWorkflow) *EntitlementApprovalWorkflowManualApprovals { + if v == nil { + return nil + } + return &v.ManualApprovals + }).(EntitlementApprovalWorkflowManualApprovalsPtrOutput) +} + +type EntitlementApprovalWorkflowManualApprovals struct { + // Optional. Do the approvers need to provide a justification for their actions? + RequireApproverJustification *bool `pulumi:"requireApproverJustification"` + // List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + // Structure is documented below. + Steps []EntitlementApprovalWorkflowManualApprovalsStep `pulumi:"steps"` +} + +// EntitlementApprovalWorkflowManualApprovalsInput is an input type that accepts EntitlementApprovalWorkflowManualApprovalsArgs and EntitlementApprovalWorkflowManualApprovalsOutput values. +// You can construct a concrete instance of `EntitlementApprovalWorkflowManualApprovalsInput` via: +// +// EntitlementApprovalWorkflowManualApprovalsArgs{...} +type EntitlementApprovalWorkflowManualApprovalsInput interface { + pulumi.Input + + ToEntitlementApprovalWorkflowManualApprovalsOutput() EntitlementApprovalWorkflowManualApprovalsOutput + ToEntitlementApprovalWorkflowManualApprovalsOutputWithContext(context.Context) EntitlementApprovalWorkflowManualApprovalsOutput +} + +type EntitlementApprovalWorkflowManualApprovalsArgs struct { + // Optional. Do the approvers need to provide a justification for their actions? + RequireApproverJustification pulumi.BoolPtrInput `pulumi:"requireApproverJustification"` + // List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + // Structure is documented below. + Steps EntitlementApprovalWorkflowManualApprovalsStepArrayInput `pulumi:"steps"` +} + +func (EntitlementApprovalWorkflowManualApprovalsArgs) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementApprovalWorkflowManualApprovals)(nil)).Elem() +} + +func (i EntitlementApprovalWorkflowManualApprovalsArgs) ToEntitlementApprovalWorkflowManualApprovalsOutput() EntitlementApprovalWorkflowManualApprovalsOutput { + return i.ToEntitlementApprovalWorkflowManualApprovalsOutputWithContext(context.Background()) +} + +func (i EntitlementApprovalWorkflowManualApprovalsArgs) ToEntitlementApprovalWorkflowManualApprovalsOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowManualApprovalsOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementApprovalWorkflowManualApprovalsOutput) +} + +func (i EntitlementApprovalWorkflowManualApprovalsArgs) ToEntitlementApprovalWorkflowManualApprovalsPtrOutput() EntitlementApprovalWorkflowManualApprovalsPtrOutput { + return i.ToEntitlementApprovalWorkflowManualApprovalsPtrOutputWithContext(context.Background()) +} + +func (i EntitlementApprovalWorkflowManualApprovalsArgs) ToEntitlementApprovalWorkflowManualApprovalsPtrOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowManualApprovalsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementApprovalWorkflowManualApprovalsOutput).ToEntitlementApprovalWorkflowManualApprovalsPtrOutputWithContext(ctx) +} + +// EntitlementApprovalWorkflowManualApprovalsPtrInput is an input type that accepts EntitlementApprovalWorkflowManualApprovalsArgs, EntitlementApprovalWorkflowManualApprovalsPtr and EntitlementApprovalWorkflowManualApprovalsPtrOutput values. +// You can construct a concrete instance of `EntitlementApprovalWorkflowManualApprovalsPtrInput` via: +// +// EntitlementApprovalWorkflowManualApprovalsArgs{...} +// +// or: +// +// nil +type EntitlementApprovalWorkflowManualApprovalsPtrInput interface { + pulumi.Input + + ToEntitlementApprovalWorkflowManualApprovalsPtrOutput() EntitlementApprovalWorkflowManualApprovalsPtrOutput + ToEntitlementApprovalWorkflowManualApprovalsPtrOutputWithContext(context.Context) EntitlementApprovalWorkflowManualApprovalsPtrOutput +} + +type entitlementApprovalWorkflowManualApprovalsPtrType EntitlementApprovalWorkflowManualApprovalsArgs + +func EntitlementApprovalWorkflowManualApprovalsPtr(v *EntitlementApprovalWorkflowManualApprovalsArgs) EntitlementApprovalWorkflowManualApprovalsPtrInput { + return (*entitlementApprovalWorkflowManualApprovalsPtrType)(v) +} + +func (*entitlementApprovalWorkflowManualApprovalsPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementApprovalWorkflowManualApprovals)(nil)).Elem() +} + +func (i *entitlementApprovalWorkflowManualApprovalsPtrType) ToEntitlementApprovalWorkflowManualApprovalsPtrOutput() EntitlementApprovalWorkflowManualApprovalsPtrOutput { + return i.ToEntitlementApprovalWorkflowManualApprovalsPtrOutputWithContext(context.Background()) +} + +func (i *entitlementApprovalWorkflowManualApprovalsPtrType) ToEntitlementApprovalWorkflowManualApprovalsPtrOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowManualApprovalsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementApprovalWorkflowManualApprovalsPtrOutput) +} + +type EntitlementApprovalWorkflowManualApprovalsOutput struct{ *pulumi.OutputState } + +func (EntitlementApprovalWorkflowManualApprovalsOutput) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementApprovalWorkflowManualApprovals)(nil)).Elem() +} + +func (o EntitlementApprovalWorkflowManualApprovalsOutput) ToEntitlementApprovalWorkflowManualApprovalsOutput() EntitlementApprovalWorkflowManualApprovalsOutput { + return o +} + +func (o EntitlementApprovalWorkflowManualApprovalsOutput) ToEntitlementApprovalWorkflowManualApprovalsOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowManualApprovalsOutput { + return o +} + +func (o EntitlementApprovalWorkflowManualApprovalsOutput) ToEntitlementApprovalWorkflowManualApprovalsPtrOutput() EntitlementApprovalWorkflowManualApprovalsPtrOutput { + return o.ToEntitlementApprovalWorkflowManualApprovalsPtrOutputWithContext(context.Background()) +} + +func (o EntitlementApprovalWorkflowManualApprovalsOutput) ToEntitlementApprovalWorkflowManualApprovalsPtrOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowManualApprovalsPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v EntitlementApprovalWorkflowManualApprovals) *EntitlementApprovalWorkflowManualApprovals { + return &v + }).(EntitlementApprovalWorkflowManualApprovalsPtrOutput) +} + +// Optional. Do the approvers need to provide a justification for their actions? +func (o EntitlementApprovalWorkflowManualApprovalsOutput) RequireApproverJustification() pulumi.BoolPtrOutput { + return o.ApplyT(func(v EntitlementApprovalWorkflowManualApprovals) *bool { return v.RequireApproverJustification }).(pulumi.BoolPtrOutput) +} + +// List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. +// Structure is documented below. +func (o EntitlementApprovalWorkflowManualApprovalsOutput) Steps() EntitlementApprovalWorkflowManualApprovalsStepArrayOutput { + return o.ApplyT(func(v EntitlementApprovalWorkflowManualApprovals) []EntitlementApprovalWorkflowManualApprovalsStep { + return v.Steps + }).(EntitlementApprovalWorkflowManualApprovalsStepArrayOutput) +} + +type EntitlementApprovalWorkflowManualApprovalsPtrOutput struct{ *pulumi.OutputState } + +func (EntitlementApprovalWorkflowManualApprovalsPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementApprovalWorkflowManualApprovals)(nil)).Elem() +} + +func (o EntitlementApprovalWorkflowManualApprovalsPtrOutput) ToEntitlementApprovalWorkflowManualApprovalsPtrOutput() EntitlementApprovalWorkflowManualApprovalsPtrOutput { + return o +} + +func (o EntitlementApprovalWorkflowManualApprovalsPtrOutput) ToEntitlementApprovalWorkflowManualApprovalsPtrOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowManualApprovalsPtrOutput { + return o +} + +func (o EntitlementApprovalWorkflowManualApprovalsPtrOutput) Elem() EntitlementApprovalWorkflowManualApprovalsOutput { + return o.ApplyT(func(v *EntitlementApprovalWorkflowManualApprovals) EntitlementApprovalWorkflowManualApprovals { + if v != nil { + return *v + } + var ret EntitlementApprovalWorkflowManualApprovals + return ret + }).(EntitlementApprovalWorkflowManualApprovalsOutput) +} + +// Optional. Do the approvers need to provide a justification for their actions? +func (o EntitlementApprovalWorkflowManualApprovalsPtrOutput) RequireApproverJustification() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *EntitlementApprovalWorkflowManualApprovals) *bool { + if v == nil { + return nil + } + return v.RequireApproverJustification + }).(pulumi.BoolPtrOutput) +} + +// List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. +// Structure is documented below. +func (o EntitlementApprovalWorkflowManualApprovalsPtrOutput) Steps() EntitlementApprovalWorkflowManualApprovalsStepArrayOutput { + return o.ApplyT(func(v *EntitlementApprovalWorkflowManualApprovals) []EntitlementApprovalWorkflowManualApprovalsStep { + if v == nil { + return nil + } + return v.Steps + }).(EntitlementApprovalWorkflowManualApprovalsStepArrayOutput) +} + +type EntitlementApprovalWorkflowManualApprovalsStep struct { + // How many users from the above list need to approve. + // If there are not enough distinct users in the list above then the workflow + // will indefinitely block. Should always be greater than 0. Currently 1 is the only + // supported value. + ApprovalsNeeded *int `pulumi:"approvalsNeeded"` + // Optional. Additional email addresses to be notified when a grant is pending approval. + ApproverEmailRecipients []string `pulumi:"approverEmailRecipients"` + // The potential set of approvers in this step. This list should contain at only one entry. + // Structure is documented below. + Approvers EntitlementApprovalWorkflowManualApprovalsStepApprovers `pulumi:"approvers"` +} + +// EntitlementApprovalWorkflowManualApprovalsStepInput is an input type that accepts EntitlementApprovalWorkflowManualApprovalsStepArgs and EntitlementApprovalWorkflowManualApprovalsStepOutput values. +// You can construct a concrete instance of `EntitlementApprovalWorkflowManualApprovalsStepInput` via: +// +// EntitlementApprovalWorkflowManualApprovalsStepArgs{...} +type EntitlementApprovalWorkflowManualApprovalsStepInput interface { + pulumi.Input + + ToEntitlementApprovalWorkflowManualApprovalsStepOutput() EntitlementApprovalWorkflowManualApprovalsStepOutput + ToEntitlementApprovalWorkflowManualApprovalsStepOutputWithContext(context.Context) EntitlementApprovalWorkflowManualApprovalsStepOutput +} + +type EntitlementApprovalWorkflowManualApprovalsStepArgs struct { + // How many users from the above list need to approve. + // If there are not enough distinct users in the list above then the workflow + // will indefinitely block. Should always be greater than 0. Currently 1 is the only + // supported value. + ApprovalsNeeded pulumi.IntPtrInput `pulumi:"approvalsNeeded"` + // Optional. Additional email addresses to be notified when a grant is pending approval. + ApproverEmailRecipients pulumi.StringArrayInput `pulumi:"approverEmailRecipients"` + // The potential set of approvers in this step. This list should contain at only one entry. + // Structure is documented below. + Approvers EntitlementApprovalWorkflowManualApprovalsStepApproversInput `pulumi:"approvers"` +} + +func (EntitlementApprovalWorkflowManualApprovalsStepArgs) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementApprovalWorkflowManualApprovalsStep)(nil)).Elem() +} + +func (i EntitlementApprovalWorkflowManualApprovalsStepArgs) ToEntitlementApprovalWorkflowManualApprovalsStepOutput() EntitlementApprovalWorkflowManualApprovalsStepOutput { + return i.ToEntitlementApprovalWorkflowManualApprovalsStepOutputWithContext(context.Background()) +} + +func (i EntitlementApprovalWorkflowManualApprovalsStepArgs) ToEntitlementApprovalWorkflowManualApprovalsStepOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowManualApprovalsStepOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementApprovalWorkflowManualApprovalsStepOutput) +} + +// EntitlementApprovalWorkflowManualApprovalsStepArrayInput is an input type that accepts EntitlementApprovalWorkflowManualApprovalsStepArray and EntitlementApprovalWorkflowManualApprovalsStepArrayOutput values. +// You can construct a concrete instance of `EntitlementApprovalWorkflowManualApprovalsStepArrayInput` via: +// +// EntitlementApprovalWorkflowManualApprovalsStepArray{ EntitlementApprovalWorkflowManualApprovalsStepArgs{...} } +type EntitlementApprovalWorkflowManualApprovalsStepArrayInput interface { + pulumi.Input + + ToEntitlementApprovalWorkflowManualApprovalsStepArrayOutput() EntitlementApprovalWorkflowManualApprovalsStepArrayOutput + ToEntitlementApprovalWorkflowManualApprovalsStepArrayOutputWithContext(context.Context) EntitlementApprovalWorkflowManualApprovalsStepArrayOutput +} + +type EntitlementApprovalWorkflowManualApprovalsStepArray []EntitlementApprovalWorkflowManualApprovalsStepInput + +func (EntitlementApprovalWorkflowManualApprovalsStepArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]EntitlementApprovalWorkflowManualApprovalsStep)(nil)).Elem() +} + +func (i EntitlementApprovalWorkflowManualApprovalsStepArray) ToEntitlementApprovalWorkflowManualApprovalsStepArrayOutput() EntitlementApprovalWorkflowManualApprovalsStepArrayOutput { + return i.ToEntitlementApprovalWorkflowManualApprovalsStepArrayOutputWithContext(context.Background()) +} + +func (i EntitlementApprovalWorkflowManualApprovalsStepArray) ToEntitlementApprovalWorkflowManualApprovalsStepArrayOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowManualApprovalsStepArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementApprovalWorkflowManualApprovalsStepArrayOutput) +} + +type EntitlementApprovalWorkflowManualApprovalsStepOutput struct{ *pulumi.OutputState } + +func (EntitlementApprovalWorkflowManualApprovalsStepOutput) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementApprovalWorkflowManualApprovalsStep)(nil)).Elem() +} + +func (o EntitlementApprovalWorkflowManualApprovalsStepOutput) ToEntitlementApprovalWorkflowManualApprovalsStepOutput() EntitlementApprovalWorkflowManualApprovalsStepOutput { + return o +} + +func (o EntitlementApprovalWorkflowManualApprovalsStepOutput) ToEntitlementApprovalWorkflowManualApprovalsStepOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowManualApprovalsStepOutput { + return o +} + +// How many users from the above list need to approve. +// If there are not enough distinct users in the list above then the workflow +// will indefinitely block. Should always be greater than 0. Currently 1 is the only +// supported value. +func (o EntitlementApprovalWorkflowManualApprovalsStepOutput) ApprovalsNeeded() pulumi.IntPtrOutput { + return o.ApplyT(func(v EntitlementApprovalWorkflowManualApprovalsStep) *int { return v.ApprovalsNeeded }).(pulumi.IntPtrOutput) +} + +// Optional. Additional email addresses to be notified when a grant is pending approval. +func (o EntitlementApprovalWorkflowManualApprovalsStepOutput) ApproverEmailRecipients() pulumi.StringArrayOutput { + return o.ApplyT(func(v EntitlementApprovalWorkflowManualApprovalsStep) []string { return v.ApproverEmailRecipients }).(pulumi.StringArrayOutput) +} + +// The potential set of approvers in this step. This list should contain at only one entry. +// Structure is documented below. +func (o EntitlementApprovalWorkflowManualApprovalsStepOutput) Approvers() EntitlementApprovalWorkflowManualApprovalsStepApproversOutput { + return o.ApplyT(func(v EntitlementApprovalWorkflowManualApprovalsStep) EntitlementApprovalWorkflowManualApprovalsStepApprovers { + return v.Approvers + }).(EntitlementApprovalWorkflowManualApprovalsStepApproversOutput) +} + +type EntitlementApprovalWorkflowManualApprovalsStepArrayOutput struct{ *pulumi.OutputState } + +func (EntitlementApprovalWorkflowManualApprovalsStepArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]EntitlementApprovalWorkflowManualApprovalsStep)(nil)).Elem() +} + +func (o EntitlementApprovalWorkflowManualApprovalsStepArrayOutput) ToEntitlementApprovalWorkflowManualApprovalsStepArrayOutput() EntitlementApprovalWorkflowManualApprovalsStepArrayOutput { + return o +} + +func (o EntitlementApprovalWorkflowManualApprovalsStepArrayOutput) ToEntitlementApprovalWorkflowManualApprovalsStepArrayOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowManualApprovalsStepArrayOutput { + return o +} + +func (o EntitlementApprovalWorkflowManualApprovalsStepArrayOutput) Index(i pulumi.IntInput) EntitlementApprovalWorkflowManualApprovalsStepOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) EntitlementApprovalWorkflowManualApprovalsStep { + return vs[0].([]EntitlementApprovalWorkflowManualApprovalsStep)[vs[1].(int)] + }).(EntitlementApprovalWorkflowManualApprovalsStepOutput) +} + +type EntitlementApprovalWorkflowManualApprovalsStepApprovers struct { + // Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + Principals []string `pulumi:"principals"` +} + +// EntitlementApprovalWorkflowManualApprovalsStepApproversInput is an input type that accepts EntitlementApprovalWorkflowManualApprovalsStepApproversArgs and EntitlementApprovalWorkflowManualApprovalsStepApproversOutput values. +// You can construct a concrete instance of `EntitlementApprovalWorkflowManualApprovalsStepApproversInput` via: +// +// EntitlementApprovalWorkflowManualApprovalsStepApproversArgs{...} +type EntitlementApprovalWorkflowManualApprovalsStepApproversInput interface { + pulumi.Input + + ToEntitlementApprovalWorkflowManualApprovalsStepApproversOutput() EntitlementApprovalWorkflowManualApprovalsStepApproversOutput + ToEntitlementApprovalWorkflowManualApprovalsStepApproversOutputWithContext(context.Context) EntitlementApprovalWorkflowManualApprovalsStepApproversOutput +} + +type EntitlementApprovalWorkflowManualApprovalsStepApproversArgs struct { + // Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + Principals pulumi.StringArrayInput `pulumi:"principals"` +} + +func (EntitlementApprovalWorkflowManualApprovalsStepApproversArgs) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementApprovalWorkflowManualApprovalsStepApprovers)(nil)).Elem() +} + +func (i EntitlementApprovalWorkflowManualApprovalsStepApproversArgs) ToEntitlementApprovalWorkflowManualApprovalsStepApproversOutput() EntitlementApprovalWorkflowManualApprovalsStepApproversOutput { + return i.ToEntitlementApprovalWorkflowManualApprovalsStepApproversOutputWithContext(context.Background()) +} + +func (i EntitlementApprovalWorkflowManualApprovalsStepApproversArgs) ToEntitlementApprovalWorkflowManualApprovalsStepApproversOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowManualApprovalsStepApproversOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementApprovalWorkflowManualApprovalsStepApproversOutput) +} + +type EntitlementApprovalWorkflowManualApprovalsStepApproversOutput struct{ *pulumi.OutputState } + +func (EntitlementApprovalWorkflowManualApprovalsStepApproversOutput) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementApprovalWorkflowManualApprovalsStepApprovers)(nil)).Elem() +} + +func (o EntitlementApprovalWorkflowManualApprovalsStepApproversOutput) ToEntitlementApprovalWorkflowManualApprovalsStepApproversOutput() EntitlementApprovalWorkflowManualApprovalsStepApproversOutput { + return o +} + +func (o EntitlementApprovalWorkflowManualApprovalsStepApproversOutput) ToEntitlementApprovalWorkflowManualApprovalsStepApproversOutputWithContext(ctx context.Context) EntitlementApprovalWorkflowManualApprovalsStepApproversOutput { + return o +} + +// Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 +func (o EntitlementApprovalWorkflowManualApprovalsStepApproversOutput) Principals() pulumi.StringArrayOutput { + return o.ApplyT(func(v EntitlementApprovalWorkflowManualApprovalsStepApprovers) []string { return v.Principals }).(pulumi.StringArrayOutput) +} + +type EntitlementEligibleUser struct { + // Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + Principals []string `pulumi:"principals"` +} + +// EntitlementEligibleUserInput is an input type that accepts EntitlementEligibleUserArgs and EntitlementEligibleUserOutput values. +// You can construct a concrete instance of `EntitlementEligibleUserInput` via: +// +// EntitlementEligibleUserArgs{...} +type EntitlementEligibleUserInput interface { + pulumi.Input + + ToEntitlementEligibleUserOutput() EntitlementEligibleUserOutput + ToEntitlementEligibleUserOutputWithContext(context.Context) EntitlementEligibleUserOutput +} + +type EntitlementEligibleUserArgs struct { + // Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + Principals pulumi.StringArrayInput `pulumi:"principals"` +} + +func (EntitlementEligibleUserArgs) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementEligibleUser)(nil)).Elem() +} + +func (i EntitlementEligibleUserArgs) ToEntitlementEligibleUserOutput() EntitlementEligibleUserOutput { + return i.ToEntitlementEligibleUserOutputWithContext(context.Background()) +} + +func (i EntitlementEligibleUserArgs) ToEntitlementEligibleUserOutputWithContext(ctx context.Context) EntitlementEligibleUserOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementEligibleUserOutput) +} + +// EntitlementEligibleUserArrayInput is an input type that accepts EntitlementEligibleUserArray and EntitlementEligibleUserArrayOutput values. +// You can construct a concrete instance of `EntitlementEligibleUserArrayInput` via: +// +// EntitlementEligibleUserArray{ EntitlementEligibleUserArgs{...} } +type EntitlementEligibleUserArrayInput interface { + pulumi.Input + + ToEntitlementEligibleUserArrayOutput() EntitlementEligibleUserArrayOutput + ToEntitlementEligibleUserArrayOutputWithContext(context.Context) EntitlementEligibleUserArrayOutput +} + +type EntitlementEligibleUserArray []EntitlementEligibleUserInput + +func (EntitlementEligibleUserArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]EntitlementEligibleUser)(nil)).Elem() +} + +func (i EntitlementEligibleUserArray) ToEntitlementEligibleUserArrayOutput() EntitlementEligibleUserArrayOutput { + return i.ToEntitlementEligibleUserArrayOutputWithContext(context.Background()) +} + +func (i EntitlementEligibleUserArray) ToEntitlementEligibleUserArrayOutputWithContext(ctx context.Context) EntitlementEligibleUserArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementEligibleUserArrayOutput) +} + +type EntitlementEligibleUserOutput struct{ *pulumi.OutputState } + +func (EntitlementEligibleUserOutput) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementEligibleUser)(nil)).Elem() +} + +func (o EntitlementEligibleUserOutput) ToEntitlementEligibleUserOutput() EntitlementEligibleUserOutput { + return o +} + +func (o EntitlementEligibleUserOutput) ToEntitlementEligibleUserOutputWithContext(ctx context.Context) EntitlementEligibleUserOutput { + return o +} + +// Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" +func (o EntitlementEligibleUserOutput) Principals() pulumi.StringArrayOutput { + return o.ApplyT(func(v EntitlementEligibleUser) []string { return v.Principals }).(pulumi.StringArrayOutput) +} + +type EntitlementEligibleUserArrayOutput struct{ *pulumi.OutputState } + +func (EntitlementEligibleUserArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]EntitlementEligibleUser)(nil)).Elem() +} + +func (o EntitlementEligibleUserArrayOutput) ToEntitlementEligibleUserArrayOutput() EntitlementEligibleUserArrayOutput { + return o +} + +func (o EntitlementEligibleUserArrayOutput) ToEntitlementEligibleUserArrayOutputWithContext(ctx context.Context) EntitlementEligibleUserArrayOutput { + return o +} + +func (o EntitlementEligibleUserArrayOutput) Index(i pulumi.IntInput) EntitlementEligibleUserOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) EntitlementEligibleUser { + return vs[0].([]EntitlementEligibleUser)[vs[1].(int)] + }).(EntitlementEligibleUserOutput) +} + +type EntitlementPrivilegedAccess struct { + // GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + // Structure is documented below. + GcpIamAccess EntitlementPrivilegedAccessGcpIamAccess `pulumi:"gcpIamAccess"` +} + +// EntitlementPrivilegedAccessInput is an input type that accepts EntitlementPrivilegedAccessArgs and EntitlementPrivilegedAccessOutput values. +// You can construct a concrete instance of `EntitlementPrivilegedAccessInput` via: +// +// EntitlementPrivilegedAccessArgs{...} +type EntitlementPrivilegedAccessInput interface { + pulumi.Input + + ToEntitlementPrivilegedAccessOutput() EntitlementPrivilegedAccessOutput + ToEntitlementPrivilegedAccessOutputWithContext(context.Context) EntitlementPrivilegedAccessOutput +} + +type EntitlementPrivilegedAccessArgs struct { + // GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + // Structure is documented below. + GcpIamAccess EntitlementPrivilegedAccessGcpIamAccessInput `pulumi:"gcpIamAccess"` +} + +func (EntitlementPrivilegedAccessArgs) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementPrivilegedAccess)(nil)).Elem() +} + +func (i EntitlementPrivilegedAccessArgs) ToEntitlementPrivilegedAccessOutput() EntitlementPrivilegedAccessOutput { + return i.ToEntitlementPrivilegedAccessOutputWithContext(context.Background()) +} + +func (i EntitlementPrivilegedAccessArgs) ToEntitlementPrivilegedAccessOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementPrivilegedAccessOutput) +} + +func (i EntitlementPrivilegedAccessArgs) ToEntitlementPrivilegedAccessPtrOutput() EntitlementPrivilegedAccessPtrOutput { + return i.ToEntitlementPrivilegedAccessPtrOutputWithContext(context.Background()) +} + +func (i EntitlementPrivilegedAccessArgs) ToEntitlementPrivilegedAccessPtrOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementPrivilegedAccessOutput).ToEntitlementPrivilegedAccessPtrOutputWithContext(ctx) +} + +// EntitlementPrivilegedAccessPtrInput is an input type that accepts EntitlementPrivilegedAccessArgs, EntitlementPrivilegedAccessPtr and EntitlementPrivilegedAccessPtrOutput values. +// You can construct a concrete instance of `EntitlementPrivilegedAccessPtrInput` via: +// +// EntitlementPrivilegedAccessArgs{...} +// +// or: +// +// nil +type EntitlementPrivilegedAccessPtrInput interface { + pulumi.Input + + ToEntitlementPrivilegedAccessPtrOutput() EntitlementPrivilegedAccessPtrOutput + ToEntitlementPrivilegedAccessPtrOutputWithContext(context.Context) EntitlementPrivilegedAccessPtrOutput +} + +type entitlementPrivilegedAccessPtrType EntitlementPrivilegedAccessArgs + +func EntitlementPrivilegedAccessPtr(v *EntitlementPrivilegedAccessArgs) EntitlementPrivilegedAccessPtrInput { + return (*entitlementPrivilegedAccessPtrType)(v) +} + +func (*entitlementPrivilegedAccessPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementPrivilegedAccess)(nil)).Elem() +} + +func (i *entitlementPrivilegedAccessPtrType) ToEntitlementPrivilegedAccessPtrOutput() EntitlementPrivilegedAccessPtrOutput { + return i.ToEntitlementPrivilegedAccessPtrOutputWithContext(context.Background()) +} + +func (i *entitlementPrivilegedAccessPtrType) ToEntitlementPrivilegedAccessPtrOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementPrivilegedAccessPtrOutput) +} + +type EntitlementPrivilegedAccessOutput struct{ *pulumi.OutputState } + +func (EntitlementPrivilegedAccessOutput) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementPrivilegedAccess)(nil)).Elem() +} + +func (o EntitlementPrivilegedAccessOutput) ToEntitlementPrivilegedAccessOutput() EntitlementPrivilegedAccessOutput { + return o +} + +func (o EntitlementPrivilegedAccessOutput) ToEntitlementPrivilegedAccessOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessOutput { + return o +} + +func (o EntitlementPrivilegedAccessOutput) ToEntitlementPrivilegedAccessPtrOutput() EntitlementPrivilegedAccessPtrOutput { + return o.ToEntitlementPrivilegedAccessPtrOutputWithContext(context.Background()) +} + +func (o EntitlementPrivilegedAccessOutput) ToEntitlementPrivilegedAccessPtrOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v EntitlementPrivilegedAccess) *EntitlementPrivilegedAccess { + return &v + }).(EntitlementPrivilegedAccessPtrOutput) +} + +// GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. +// Structure is documented below. +func (o EntitlementPrivilegedAccessOutput) GcpIamAccess() EntitlementPrivilegedAccessGcpIamAccessOutput { + return o.ApplyT(func(v EntitlementPrivilegedAccess) EntitlementPrivilegedAccessGcpIamAccess { return v.GcpIamAccess }).(EntitlementPrivilegedAccessGcpIamAccessOutput) +} + +type EntitlementPrivilegedAccessPtrOutput struct{ *pulumi.OutputState } + +func (EntitlementPrivilegedAccessPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementPrivilegedAccess)(nil)).Elem() +} + +func (o EntitlementPrivilegedAccessPtrOutput) ToEntitlementPrivilegedAccessPtrOutput() EntitlementPrivilegedAccessPtrOutput { + return o +} + +func (o EntitlementPrivilegedAccessPtrOutput) ToEntitlementPrivilegedAccessPtrOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessPtrOutput { + return o +} + +func (o EntitlementPrivilegedAccessPtrOutput) Elem() EntitlementPrivilegedAccessOutput { + return o.ApplyT(func(v *EntitlementPrivilegedAccess) EntitlementPrivilegedAccess { + if v != nil { + return *v + } + var ret EntitlementPrivilegedAccess + return ret + }).(EntitlementPrivilegedAccessOutput) +} + +// GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. +// Structure is documented below. +func (o EntitlementPrivilegedAccessPtrOutput) GcpIamAccess() EntitlementPrivilegedAccessGcpIamAccessPtrOutput { + return o.ApplyT(func(v *EntitlementPrivilegedAccess) *EntitlementPrivilegedAccessGcpIamAccess { + if v == nil { + return nil + } + return &v.GcpIamAccess + }).(EntitlementPrivilegedAccessGcpIamAccessPtrOutput) +} + +type EntitlementPrivilegedAccessGcpIamAccess struct { + // Name of the resource. + Resource string `pulumi:"resource"` + // The type of this resource. + ResourceType string `pulumi:"resourceType"` + // Role bindings to be created on successful grant. + // Structure is documented below. + RoleBindings []EntitlementPrivilegedAccessGcpIamAccessRoleBinding `pulumi:"roleBindings"` +} + +// EntitlementPrivilegedAccessGcpIamAccessInput is an input type that accepts EntitlementPrivilegedAccessGcpIamAccessArgs and EntitlementPrivilegedAccessGcpIamAccessOutput values. +// You can construct a concrete instance of `EntitlementPrivilegedAccessGcpIamAccessInput` via: +// +// EntitlementPrivilegedAccessGcpIamAccessArgs{...} +type EntitlementPrivilegedAccessGcpIamAccessInput interface { + pulumi.Input + + ToEntitlementPrivilegedAccessGcpIamAccessOutput() EntitlementPrivilegedAccessGcpIamAccessOutput + ToEntitlementPrivilegedAccessGcpIamAccessOutputWithContext(context.Context) EntitlementPrivilegedAccessGcpIamAccessOutput +} + +type EntitlementPrivilegedAccessGcpIamAccessArgs struct { + // Name of the resource. + Resource pulumi.StringInput `pulumi:"resource"` + // The type of this resource. + ResourceType pulumi.StringInput `pulumi:"resourceType"` + // Role bindings to be created on successful grant. + // Structure is documented below. + RoleBindings EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayInput `pulumi:"roleBindings"` +} + +func (EntitlementPrivilegedAccessGcpIamAccessArgs) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementPrivilegedAccessGcpIamAccess)(nil)).Elem() +} + +func (i EntitlementPrivilegedAccessGcpIamAccessArgs) ToEntitlementPrivilegedAccessGcpIamAccessOutput() EntitlementPrivilegedAccessGcpIamAccessOutput { + return i.ToEntitlementPrivilegedAccessGcpIamAccessOutputWithContext(context.Background()) +} + +func (i EntitlementPrivilegedAccessGcpIamAccessArgs) ToEntitlementPrivilegedAccessGcpIamAccessOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessGcpIamAccessOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementPrivilegedAccessGcpIamAccessOutput) +} + +func (i EntitlementPrivilegedAccessGcpIamAccessArgs) ToEntitlementPrivilegedAccessGcpIamAccessPtrOutput() EntitlementPrivilegedAccessGcpIamAccessPtrOutput { + return i.ToEntitlementPrivilegedAccessGcpIamAccessPtrOutputWithContext(context.Background()) +} + +func (i EntitlementPrivilegedAccessGcpIamAccessArgs) ToEntitlementPrivilegedAccessGcpIamAccessPtrOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessGcpIamAccessPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementPrivilegedAccessGcpIamAccessOutput).ToEntitlementPrivilegedAccessGcpIamAccessPtrOutputWithContext(ctx) +} + +// EntitlementPrivilegedAccessGcpIamAccessPtrInput is an input type that accepts EntitlementPrivilegedAccessGcpIamAccessArgs, EntitlementPrivilegedAccessGcpIamAccessPtr and EntitlementPrivilegedAccessGcpIamAccessPtrOutput values. +// You can construct a concrete instance of `EntitlementPrivilegedAccessGcpIamAccessPtrInput` via: +// +// EntitlementPrivilegedAccessGcpIamAccessArgs{...} +// +// or: +// +// nil +type EntitlementPrivilegedAccessGcpIamAccessPtrInput interface { + pulumi.Input + + ToEntitlementPrivilegedAccessGcpIamAccessPtrOutput() EntitlementPrivilegedAccessGcpIamAccessPtrOutput + ToEntitlementPrivilegedAccessGcpIamAccessPtrOutputWithContext(context.Context) EntitlementPrivilegedAccessGcpIamAccessPtrOutput +} + +type entitlementPrivilegedAccessGcpIamAccessPtrType EntitlementPrivilegedAccessGcpIamAccessArgs + +func EntitlementPrivilegedAccessGcpIamAccessPtr(v *EntitlementPrivilegedAccessGcpIamAccessArgs) EntitlementPrivilegedAccessGcpIamAccessPtrInput { + return (*entitlementPrivilegedAccessGcpIamAccessPtrType)(v) +} + +func (*entitlementPrivilegedAccessGcpIamAccessPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementPrivilegedAccessGcpIamAccess)(nil)).Elem() +} + +func (i *entitlementPrivilegedAccessGcpIamAccessPtrType) ToEntitlementPrivilegedAccessGcpIamAccessPtrOutput() EntitlementPrivilegedAccessGcpIamAccessPtrOutput { + return i.ToEntitlementPrivilegedAccessGcpIamAccessPtrOutputWithContext(context.Background()) +} + +func (i *entitlementPrivilegedAccessGcpIamAccessPtrType) ToEntitlementPrivilegedAccessGcpIamAccessPtrOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessGcpIamAccessPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementPrivilegedAccessGcpIamAccessPtrOutput) +} + +type EntitlementPrivilegedAccessGcpIamAccessOutput struct{ *pulumi.OutputState } + +func (EntitlementPrivilegedAccessGcpIamAccessOutput) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementPrivilegedAccessGcpIamAccess)(nil)).Elem() +} + +func (o EntitlementPrivilegedAccessGcpIamAccessOutput) ToEntitlementPrivilegedAccessGcpIamAccessOutput() EntitlementPrivilegedAccessGcpIamAccessOutput { + return o +} + +func (o EntitlementPrivilegedAccessGcpIamAccessOutput) ToEntitlementPrivilegedAccessGcpIamAccessOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessGcpIamAccessOutput { + return o +} + +func (o EntitlementPrivilegedAccessGcpIamAccessOutput) ToEntitlementPrivilegedAccessGcpIamAccessPtrOutput() EntitlementPrivilegedAccessGcpIamAccessPtrOutput { + return o.ToEntitlementPrivilegedAccessGcpIamAccessPtrOutputWithContext(context.Background()) +} + +func (o EntitlementPrivilegedAccessGcpIamAccessOutput) ToEntitlementPrivilegedAccessGcpIamAccessPtrOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessGcpIamAccessPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v EntitlementPrivilegedAccessGcpIamAccess) *EntitlementPrivilegedAccessGcpIamAccess { + return &v + }).(EntitlementPrivilegedAccessGcpIamAccessPtrOutput) +} + +// Name of the resource. +func (o EntitlementPrivilegedAccessGcpIamAccessOutput) Resource() pulumi.StringOutput { + return o.ApplyT(func(v EntitlementPrivilegedAccessGcpIamAccess) string { return v.Resource }).(pulumi.StringOutput) +} + +// The type of this resource. +func (o EntitlementPrivilegedAccessGcpIamAccessOutput) ResourceType() pulumi.StringOutput { + return o.ApplyT(func(v EntitlementPrivilegedAccessGcpIamAccess) string { return v.ResourceType }).(pulumi.StringOutput) +} + +// Role bindings to be created on successful grant. +// Structure is documented below. +func (o EntitlementPrivilegedAccessGcpIamAccessOutput) RoleBindings() EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput { + return o.ApplyT(func(v EntitlementPrivilegedAccessGcpIamAccess) []EntitlementPrivilegedAccessGcpIamAccessRoleBinding { + return v.RoleBindings + }).(EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput) +} + +type EntitlementPrivilegedAccessGcpIamAccessPtrOutput struct{ *pulumi.OutputState } + +func (EntitlementPrivilegedAccessGcpIamAccessPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementPrivilegedAccessGcpIamAccess)(nil)).Elem() +} + +func (o EntitlementPrivilegedAccessGcpIamAccessPtrOutput) ToEntitlementPrivilegedAccessGcpIamAccessPtrOutput() EntitlementPrivilegedAccessGcpIamAccessPtrOutput { + return o +} + +func (o EntitlementPrivilegedAccessGcpIamAccessPtrOutput) ToEntitlementPrivilegedAccessGcpIamAccessPtrOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessGcpIamAccessPtrOutput { + return o +} + +func (o EntitlementPrivilegedAccessGcpIamAccessPtrOutput) Elem() EntitlementPrivilegedAccessGcpIamAccessOutput { + return o.ApplyT(func(v *EntitlementPrivilegedAccessGcpIamAccess) EntitlementPrivilegedAccessGcpIamAccess { + if v != nil { + return *v + } + var ret EntitlementPrivilegedAccessGcpIamAccess + return ret + }).(EntitlementPrivilegedAccessGcpIamAccessOutput) +} + +// Name of the resource. +func (o EntitlementPrivilegedAccessGcpIamAccessPtrOutput) Resource() pulumi.StringPtrOutput { + return o.ApplyT(func(v *EntitlementPrivilegedAccessGcpIamAccess) *string { + if v == nil { + return nil + } + return &v.Resource + }).(pulumi.StringPtrOutput) +} + +// The type of this resource. +func (o EntitlementPrivilegedAccessGcpIamAccessPtrOutput) ResourceType() pulumi.StringPtrOutput { + return o.ApplyT(func(v *EntitlementPrivilegedAccessGcpIamAccess) *string { + if v == nil { + return nil + } + return &v.ResourceType + }).(pulumi.StringPtrOutput) +} + +// Role bindings to be created on successful grant. +// Structure is documented below. +func (o EntitlementPrivilegedAccessGcpIamAccessPtrOutput) RoleBindings() EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput { + return o.ApplyT(func(v *EntitlementPrivilegedAccessGcpIamAccess) []EntitlementPrivilegedAccessGcpIamAccessRoleBinding { + if v == nil { + return nil + } + return v.RoleBindings + }).(EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput) +} + +type EntitlementPrivilegedAccessGcpIamAccessRoleBinding struct { + // The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + // https://cloud.google.com/iam/docs/conditions-overview#attributes. + ConditionExpression *string `pulumi:"conditionExpression"` + // IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + Role string `pulumi:"role"` +} + +// EntitlementPrivilegedAccessGcpIamAccessRoleBindingInput is an input type that accepts EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs and EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput values. +// You can construct a concrete instance of `EntitlementPrivilegedAccessGcpIamAccessRoleBindingInput` via: +// +// EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs{...} +type EntitlementPrivilegedAccessGcpIamAccessRoleBindingInput interface { + pulumi.Input + + ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput() EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput + ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingOutputWithContext(context.Context) EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput +} + +type EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs struct { + // The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + // https://cloud.google.com/iam/docs/conditions-overview#attributes. + ConditionExpression pulumi.StringPtrInput `pulumi:"conditionExpression"` + // IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + Role pulumi.StringInput `pulumi:"role"` +} + +func (EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementPrivilegedAccessGcpIamAccessRoleBinding)(nil)).Elem() +} + +func (i EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs) ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput() EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput { + return i.ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingOutputWithContext(context.Background()) +} + +func (i EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs) ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput) +} + +// EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayInput is an input type that accepts EntitlementPrivilegedAccessGcpIamAccessRoleBindingArray and EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput values. +// You can construct a concrete instance of `EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayInput` via: +// +// EntitlementPrivilegedAccessGcpIamAccessRoleBindingArray{ EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs{...} } +type EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayInput interface { + pulumi.Input + + ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput() EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput + ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutputWithContext(context.Context) EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput +} + +type EntitlementPrivilegedAccessGcpIamAccessRoleBindingArray []EntitlementPrivilegedAccessGcpIamAccessRoleBindingInput + +func (EntitlementPrivilegedAccessGcpIamAccessRoleBindingArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]EntitlementPrivilegedAccessGcpIamAccessRoleBinding)(nil)).Elem() +} + +func (i EntitlementPrivilegedAccessGcpIamAccessRoleBindingArray) ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput() EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput { + return i.ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutputWithContext(context.Background()) +} + +func (i EntitlementPrivilegedAccessGcpIamAccessRoleBindingArray) ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput) +} + +type EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput struct{ *pulumi.OutputState } + +func (EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementPrivilegedAccessGcpIamAccessRoleBinding)(nil)).Elem() +} + +func (o EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput) ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput() EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput { + return o +} + +func (o EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput) ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput { + return o +} + +// The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. +// https://cloud.google.com/iam/docs/conditions-overview#attributes. +func (o EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput) ConditionExpression() pulumi.StringPtrOutput { + return o.ApplyT(func(v EntitlementPrivilegedAccessGcpIamAccessRoleBinding) *string { return v.ConditionExpression }).(pulumi.StringPtrOutput) +} + +// IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. +func (o EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput) Role() pulumi.StringOutput { + return o.ApplyT(func(v EntitlementPrivilegedAccessGcpIamAccessRoleBinding) string { return v.Role }).(pulumi.StringOutput) +} + +type EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput struct{ *pulumi.OutputState } + +func (EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]EntitlementPrivilegedAccessGcpIamAccessRoleBinding)(nil)).Elem() +} + +func (o EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput) ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput() EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput { + return o +} + +func (o EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput) ToEntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutputWithContext(ctx context.Context) EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput { + return o +} + +func (o EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput) Index(i pulumi.IntInput) EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) EntitlementPrivilegedAccessGcpIamAccessRoleBinding { + return vs[0].([]EntitlementPrivilegedAccessGcpIamAccessRoleBinding)[vs[1].(int)] + }).(EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput) +} + +type EntitlementRequesterJustificationConfig struct { + // The justification is not mandatory but can be provided in any of the supported formats. + NotMandatory *EntitlementRequesterJustificationConfigNotMandatory `pulumi:"notMandatory"` + // The requester has to provide a justification in the form of free flowing text. + // + // *** + Unstructured *EntitlementRequesterJustificationConfigUnstructured `pulumi:"unstructured"` +} + +// EntitlementRequesterJustificationConfigInput is an input type that accepts EntitlementRequesterJustificationConfigArgs and EntitlementRequesterJustificationConfigOutput values. +// You can construct a concrete instance of `EntitlementRequesterJustificationConfigInput` via: +// +// EntitlementRequesterJustificationConfigArgs{...} +type EntitlementRequesterJustificationConfigInput interface { + pulumi.Input + + ToEntitlementRequesterJustificationConfigOutput() EntitlementRequesterJustificationConfigOutput + ToEntitlementRequesterJustificationConfigOutputWithContext(context.Context) EntitlementRequesterJustificationConfigOutput +} + +type EntitlementRequesterJustificationConfigArgs struct { + // The justification is not mandatory but can be provided in any of the supported formats. + NotMandatory EntitlementRequesterJustificationConfigNotMandatoryPtrInput `pulumi:"notMandatory"` + // The requester has to provide a justification in the form of free flowing text. + // + // *** + Unstructured EntitlementRequesterJustificationConfigUnstructuredPtrInput `pulumi:"unstructured"` +} + +func (EntitlementRequesterJustificationConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementRequesterJustificationConfig)(nil)).Elem() +} + +func (i EntitlementRequesterJustificationConfigArgs) ToEntitlementRequesterJustificationConfigOutput() EntitlementRequesterJustificationConfigOutput { + return i.ToEntitlementRequesterJustificationConfigOutputWithContext(context.Background()) +} + +func (i EntitlementRequesterJustificationConfigArgs) ToEntitlementRequesterJustificationConfigOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementRequesterJustificationConfigOutput) +} + +func (i EntitlementRequesterJustificationConfigArgs) ToEntitlementRequesterJustificationConfigPtrOutput() EntitlementRequesterJustificationConfigPtrOutput { + return i.ToEntitlementRequesterJustificationConfigPtrOutputWithContext(context.Background()) +} + +func (i EntitlementRequesterJustificationConfigArgs) ToEntitlementRequesterJustificationConfigPtrOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementRequesterJustificationConfigOutput).ToEntitlementRequesterJustificationConfigPtrOutputWithContext(ctx) +} + +// EntitlementRequesterJustificationConfigPtrInput is an input type that accepts EntitlementRequesterJustificationConfigArgs, EntitlementRequesterJustificationConfigPtr and EntitlementRequesterJustificationConfigPtrOutput values. +// You can construct a concrete instance of `EntitlementRequesterJustificationConfigPtrInput` via: +// +// EntitlementRequesterJustificationConfigArgs{...} +// +// or: +// +// nil +type EntitlementRequesterJustificationConfigPtrInput interface { + pulumi.Input + + ToEntitlementRequesterJustificationConfigPtrOutput() EntitlementRequesterJustificationConfigPtrOutput + ToEntitlementRequesterJustificationConfigPtrOutputWithContext(context.Context) EntitlementRequesterJustificationConfigPtrOutput +} + +type entitlementRequesterJustificationConfigPtrType EntitlementRequesterJustificationConfigArgs + +func EntitlementRequesterJustificationConfigPtr(v *EntitlementRequesterJustificationConfigArgs) EntitlementRequesterJustificationConfigPtrInput { + return (*entitlementRequesterJustificationConfigPtrType)(v) +} + +func (*entitlementRequesterJustificationConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementRequesterJustificationConfig)(nil)).Elem() +} + +func (i *entitlementRequesterJustificationConfigPtrType) ToEntitlementRequesterJustificationConfigPtrOutput() EntitlementRequesterJustificationConfigPtrOutput { + return i.ToEntitlementRequesterJustificationConfigPtrOutputWithContext(context.Background()) +} + +func (i *entitlementRequesterJustificationConfigPtrType) ToEntitlementRequesterJustificationConfigPtrOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementRequesterJustificationConfigPtrOutput) +} + +type EntitlementRequesterJustificationConfigOutput struct{ *pulumi.OutputState } + +func (EntitlementRequesterJustificationConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementRequesterJustificationConfig)(nil)).Elem() +} + +func (o EntitlementRequesterJustificationConfigOutput) ToEntitlementRequesterJustificationConfigOutput() EntitlementRequesterJustificationConfigOutput { + return o +} + +func (o EntitlementRequesterJustificationConfigOutput) ToEntitlementRequesterJustificationConfigOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigOutput { + return o +} + +func (o EntitlementRequesterJustificationConfigOutput) ToEntitlementRequesterJustificationConfigPtrOutput() EntitlementRequesterJustificationConfigPtrOutput { + return o.ToEntitlementRequesterJustificationConfigPtrOutputWithContext(context.Background()) +} + +func (o EntitlementRequesterJustificationConfigOutput) ToEntitlementRequesterJustificationConfigPtrOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v EntitlementRequesterJustificationConfig) *EntitlementRequesterJustificationConfig { + return &v + }).(EntitlementRequesterJustificationConfigPtrOutput) +} + +// The justification is not mandatory but can be provided in any of the supported formats. +func (o EntitlementRequesterJustificationConfigOutput) NotMandatory() EntitlementRequesterJustificationConfigNotMandatoryPtrOutput { + return o.ApplyT(func(v EntitlementRequesterJustificationConfig) *EntitlementRequesterJustificationConfigNotMandatory { + return v.NotMandatory + }).(EntitlementRequesterJustificationConfigNotMandatoryPtrOutput) +} + +// The requester has to provide a justification in the form of free flowing text. +// +// *** +func (o EntitlementRequesterJustificationConfigOutput) Unstructured() EntitlementRequesterJustificationConfigUnstructuredPtrOutput { + return o.ApplyT(func(v EntitlementRequesterJustificationConfig) *EntitlementRequesterJustificationConfigUnstructured { + return v.Unstructured + }).(EntitlementRequesterJustificationConfigUnstructuredPtrOutput) +} + +type EntitlementRequesterJustificationConfigPtrOutput struct{ *pulumi.OutputState } + +func (EntitlementRequesterJustificationConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementRequesterJustificationConfig)(nil)).Elem() +} + +func (o EntitlementRequesterJustificationConfigPtrOutput) ToEntitlementRequesterJustificationConfigPtrOutput() EntitlementRequesterJustificationConfigPtrOutput { + return o +} + +func (o EntitlementRequesterJustificationConfigPtrOutput) ToEntitlementRequesterJustificationConfigPtrOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigPtrOutput { + return o +} + +func (o EntitlementRequesterJustificationConfigPtrOutput) Elem() EntitlementRequesterJustificationConfigOutput { + return o.ApplyT(func(v *EntitlementRequesterJustificationConfig) EntitlementRequesterJustificationConfig { + if v != nil { + return *v + } + var ret EntitlementRequesterJustificationConfig + return ret + }).(EntitlementRequesterJustificationConfigOutput) +} + +// The justification is not mandatory but can be provided in any of the supported formats. +func (o EntitlementRequesterJustificationConfigPtrOutput) NotMandatory() EntitlementRequesterJustificationConfigNotMandatoryPtrOutput { + return o.ApplyT(func(v *EntitlementRequesterJustificationConfig) *EntitlementRequesterJustificationConfigNotMandatory { + if v == nil { + return nil + } + return v.NotMandatory + }).(EntitlementRequesterJustificationConfigNotMandatoryPtrOutput) +} + +// The requester has to provide a justification in the form of free flowing text. +// +// *** +func (o EntitlementRequesterJustificationConfigPtrOutput) Unstructured() EntitlementRequesterJustificationConfigUnstructuredPtrOutput { + return o.ApplyT(func(v *EntitlementRequesterJustificationConfig) *EntitlementRequesterJustificationConfigUnstructured { + if v == nil { + return nil + } + return v.Unstructured + }).(EntitlementRequesterJustificationConfigUnstructuredPtrOutput) +} + +type EntitlementRequesterJustificationConfigNotMandatory struct { +} + +// EntitlementRequesterJustificationConfigNotMandatoryInput is an input type that accepts EntitlementRequesterJustificationConfigNotMandatoryArgs and EntitlementRequesterJustificationConfigNotMandatoryOutput values. +// You can construct a concrete instance of `EntitlementRequesterJustificationConfigNotMandatoryInput` via: +// +// EntitlementRequesterJustificationConfigNotMandatoryArgs{...} +type EntitlementRequesterJustificationConfigNotMandatoryInput interface { + pulumi.Input + + ToEntitlementRequesterJustificationConfigNotMandatoryOutput() EntitlementRequesterJustificationConfigNotMandatoryOutput + ToEntitlementRequesterJustificationConfigNotMandatoryOutputWithContext(context.Context) EntitlementRequesterJustificationConfigNotMandatoryOutput +} + +type EntitlementRequesterJustificationConfigNotMandatoryArgs struct { +} + +func (EntitlementRequesterJustificationConfigNotMandatoryArgs) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementRequesterJustificationConfigNotMandatory)(nil)).Elem() +} + +func (i EntitlementRequesterJustificationConfigNotMandatoryArgs) ToEntitlementRequesterJustificationConfigNotMandatoryOutput() EntitlementRequesterJustificationConfigNotMandatoryOutput { + return i.ToEntitlementRequesterJustificationConfigNotMandatoryOutputWithContext(context.Background()) +} + +func (i EntitlementRequesterJustificationConfigNotMandatoryArgs) ToEntitlementRequesterJustificationConfigNotMandatoryOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigNotMandatoryOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementRequesterJustificationConfigNotMandatoryOutput) +} + +func (i EntitlementRequesterJustificationConfigNotMandatoryArgs) ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutput() EntitlementRequesterJustificationConfigNotMandatoryPtrOutput { + return i.ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutputWithContext(context.Background()) +} + +func (i EntitlementRequesterJustificationConfigNotMandatoryArgs) ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigNotMandatoryPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementRequesterJustificationConfigNotMandatoryOutput).ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutputWithContext(ctx) +} + +// EntitlementRequesterJustificationConfigNotMandatoryPtrInput is an input type that accepts EntitlementRequesterJustificationConfigNotMandatoryArgs, EntitlementRequesterJustificationConfigNotMandatoryPtr and EntitlementRequesterJustificationConfigNotMandatoryPtrOutput values. +// You can construct a concrete instance of `EntitlementRequesterJustificationConfigNotMandatoryPtrInput` via: +// +// EntitlementRequesterJustificationConfigNotMandatoryArgs{...} +// +// or: +// +// nil +type EntitlementRequesterJustificationConfigNotMandatoryPtrInput interface { + pulumi.Input + + ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutput() EntitlementRequesterJustificationConfigNotMandatoryPtrOutput + ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutputWithContext(context.Context) EntitlementRequesterJustificationConfigNotMandatoryPtrOutput +} + +type entitlementRequesterJustificationConfigNotMandatoryPtrType EntitlementRequesterJustificationConfigNotMandatoryArgs + +func EntitlementRequesterJustificationConfigNotMandatoryPtr(v *EntitlementRequesterJustificationConfigNotMandatoryArgs) EntitlementRequesterJustificationConfigNotMandatoryPtrInput { + return (*entitlementRequesterJustificationConfigNotMandatoryPtrType)(v) +} + +func (*entitlementRequesterJustificationConfigNotMandatoryPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementRequesterJustificationConfigNotMandatory)(nil)).Elem() +} + +func (i *entitlementRequesterJustificationConfigNotMandatoryPtrType) ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutput() EntitlementRequesterJustificationConfigNotMandatoryPtrOutput { + return i.ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutputWithContext(context.Background()) +} + +func (i *entitlementRequesterJustificationConfigNotMandatoryPtrType) ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigNotMandatoryPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementRequesterJustificationConfigNotMandatoryPtrOutput) +} + +type EntitlementRequesterJustificationConfigNotMandatoryOutput struct{ *pulumi.OutputState } + +func (EntitlementRequesterJustificationConfigNotMandatoryOutput) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementRequesterJustificationConfigNotMandatory)(nil)).Elem() +} + +func (o EntitlementRequesterJustificationConfigNotMandatoryOutput) ToEntitlementRequesterJustificationConfigNotMandatoryOutput() EntitlementRequesterJustificationConfigNotMandatoryOutput { + return o +} + +func (o EntitlementRequesterJustificationConfigNotMandatoryOutput) ToEntitlementRequesterJustificationConfigNotMandatoryOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigNotMandatoryOutput { + return o +} + +func (o EntitlementRequesterJustificationConfigNotMandatoryOutput) ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutput() EntitlementRequesterJustificationConfigNotMandatoryPtrOutput { + return o.ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutputWithContext(context.Background()) +} + +func (o EntitlementRequesterJustificationConfigNotMandatoryOutput) ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigNotMandatoryPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v EntitlementRequesterJustificationConfigNotMandatory) *EntitlementRequesterJustificationConfigNotMandatory { + return &v + }).(EntitlementRequesterJustificationConfigNotMandatoryPtrOutput) +} + +type EntitlementRequesterJustificationConfigNotMandatoryPtrOutput struct{ *pulumi.OutputState } + +func (EntitlementRequesterJustificationConfigNotMandatoryPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementRequesterJustificationConfigNotMandatory)(nil)).Elem() +} + +func (o EntitlementRequesterJustificationConfigNotMandatoryPtrOutput) ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutput() EntitlementRequesterJustificationConfigNotMandatoryPtrOutput { + return o +} + +func (o EntitlementRequesterJustificationConfigNotMandatoryPtrOutput) ToEntitlementRequesterJustificationConfigNotMandatoryPtrOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigNotMandatoryPtrOutput { + return o +} + +func (o EntitlementRequesterJustificationConfigNotMandatoryPtrOutput) Elem() EntitlementRequesterJustificationConfigNotMandatoryOutput { + return o.ApplyT(func(v *EntitlementRequesterJustificationConfigNotMandatory) EntitlementRequesterJustificationConfigNotMandatory { + if v != nil { + return *v + } + var ret EntitlementRequesterJustificationConfigNotMandatory + return ret + }).(EntitlementRequesterJustificationConfigNotMandatoryOutput) +} + +type EntitlementRequesterJustificationConfigUnstructured struct { +} + +// EntitlementRequesterJustificationConfigUnstructuredInput is an input type that accepts EntitlementRequesterJustificationConfigUnstructuredArgs and EntitlementRequesterJustificationConfigUnstructuredOutput values. +// You can construct a concrete instance of `EntitlementRequesterJustificationConfigUnstructuredInput` via: +// +// EntitlementRequesterJustificationConfigUnstructuredArgs{...} +type EntitlementRequesterJustificationConfigUnstructuredInput interface { + pulumi.Input + + ToEntitlementRequesterJustificationConfigUnstructuredOutput() EntitlementRequesterJustificationConfigUnstructuredOutput + ToEntitlementRequesterJustificationConfigUnstructuredOutputWithContext(context.Context) EntitlementRequesterJustificationConfigUnstructuredOutput +} + +type EntitlementRequesterJustificationConfigUnstructuredArgs struct { +} + +func (EntitlementRequesterJustificationConfigUnstructuredArgs) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementRequesterJustificationConfigUnstructured)(nil)).Elem() +} + +func (i EntitlementRequesterJustificationConfigUnstructuredArgs) ToEntitlementRequesterJustificationConfigUnstructuredOutput() EntitlementRequesterJustificationConfigUnstructuredOutput { + return i.ToEntitlementRequesterJustificationConfigUnstructuredOutputWithContext(context.Background()) +} + +func (i EntitlementRequesterJustificationConfigUnstructuredArgs) ToEntitlementRequesterJustificationConfigUnstructuredOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigUnstructuredOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementRequesterJustificationConfigUnstructuredOutput) +} + +func (i EntitlementRequesterJustificationConfigUnstructuredArgs) ToEntitlementRequesterJustificationConfigUnstructuredPtrOutput() EntitlementRequesterJustificationConfigUnstructuredPtrOutput { + return i.ToEntitlementRequesterJustificationConfigUnstructuredPtrOutputWithContext(context.Background()) +} + +func (i EntitlementRequesterJustificationConfigUnstructuredArgs) ToEntitlementRequesterJustificationConfigUnstructuredPtrOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigUnstructuredPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementRequesterJustificationConfigUnstructuredOutput).ToEntitlementRequesterJustificationConfigUnstructuredPtrOutputWithContext(ctx) +} + +// EntitlementRequesterJustificationConfigUnstructuredPtrInput is an input type that accepts EntitlementRequesterJustificationConfigUnstructuredArgs, EntitlementRequesterJustificationConfigUnstructuredPtr and EntitlementRequesterJustificationConfigUnstructuredPtrOutput values. +// You can construct a concrete instance of `EntitlementRequesterJustificationConfigUnstructuredPtrInput` via: +// +// EntitlementRequesterJustificationConfigUnstructuredArgs{...} +// +// or: +// +// nil +type EntitlementRequesterJustificationConfigUnstructuredPtrInput interface { + pulumi.Input + + ToEntitlementRequesterJustificationConfigUnstructuredPtrOutput() EntitlementRequesterJustificationConfigUnstructuredPtrOutput + ToEntitlementRequesterJustificationConfigUnstructuredPtrOutputWithContext(context.Context) EntitlementRequesterJustificationConfigUnstructuredPtrOutput +} + +type entitlementRequesterJustificationConfigUnstructuredPtrType EntitlementRequesterJustificationConfigUnstructuredArgs + +func EntitlementRequesterJustificationConfigUnstructuredPtr(v *EntitlementRequesterJustificationConfigUnstructuredArgs) EntitlementRequesterJustificationConfigUnstructuredPtrInput { + return (*entitlementRequesterJustificationConfigUnstructuredPtrType)(v) +} + +func (*entitlementRequesterJustificationConfigUnstructuredPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementRequesterJustificationConfigUnstructured)(nil)).Elem() +} + +func (i *entitlementRequesterJustificationConfigUnstructuredPtrType) ToEntitlementRequesterJustificationConfigUnstructuredPtrOutput() EntitlementRequesterJustificationConfigUnstructuredPtrOutput { + return i.ToEntitlementRequesterJustificationConfigUnstructuredPtrOutputWithContext(context.Background()) +} + +func (i *entitlementRequesterJustificationConfigUnstructuredPtrType) ToEntitlementRequesterJustificationConfigUnstructuredPtrOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigUnstructuredPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EntitlementRequesterJustificationConfigUnstructuredPtrOutput) +} + +type EntitlementRequesterJustificationConfigUnstructuredOutput struct{ *pulumi.OutputState } + +func (EntitlementRequesterJustificationConfigUnstructuredOutput) ElementType() reflect.Type { + return reflect.TypeOf((*EntitlementRequesterJustificationConfigUnstructured)(nil)).Elem() +} + +func (o EntitlementRequesterJustificationConfigUnstructuredOutput) ToEntitlementRequesterJustificationConfigUnstructuredOutput() EntitlementRequesterJustificationConfigUnstructuredOutput { + return o +} + +func (o EntitlementRequesterJustificationConfigUnstructuredOutput) ToEntitlementRequesterJustificationConfigUnstructuredOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigUnstructuredOutput { + return o +} + +func (o EntitlementRequesterJustificationConfigUnstructuredOutput) ToEntitlementRequesterJustificationConfigUnstructuredPtrOutput() EntitlementRequesterJustificationConfigUnstructuredPtrOutput { + return o.ToEntitlementRequesterJustificationConfigUnstructuredPtrOutputWithContext(context.Background()) +} + +func (o EntitlementRequesterJustificationConfigUnstructuredOutput) ToEntitlementRequesterJustificationConfigUnstructuredPtrOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigUnstructuredPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v EntitlementRequesterJustificationConfigUnstructured) *EntitlementRequesterJustificationConfigUnstructured { + return &v + }).(EntitlementRequesterJustificationConfigUnstructuredPtrOutput) +} + +type EntitlementRequesterJustificationConfigUnstructuredPtrOutput struct{ *pulumi.OutputState } + +func (EntitlementRequesterJustificationConfigUnstructuredPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**EntitlementRequesterJustificationConfigUnstructured)(nil)).Elem() +} + +func (o EntitlementRequesterJustificationConfigUnstructuredPtrOutput) ToEntitlementRequesterJustificationConfigUnstructuredPtrOutput() EntitlementRequesterJustificationConfigUnstructuredPtrOutput { + return o +} + +func (o EntitlementRequesterJustificationConfigUnstructuredPtrOutput) ToEntitlementRequesterJustificationConfigUnstructuredPtrOutputWithContext(ctx context.Context) EntitlementRequesterJustificationConfigUnstructuredPtrOutput { + return o +} + +func (o EntitlementRequesterJustificationConfigUnstructuredPtrOutput) Elem() EntitlementRequesterJustificationConfigUnstructuredOutput { + return o.ApplyT(func(v *EntitlementRequesterJustificationConfigUnstructured) EntitlementRequesterJustificationConfigUnstructured { + if v != nil { + return *v + } + var ret EntitlementRequesterJustificationConfigUnstructured + return ret + }).(EntitlementRequesterJustificationConfigUnstructuredOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementAdditionalNotificationTargetsInput)(nil)).Elem(), EntitlementAdditionalNotificationTargetsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementAdditionalNotificationTargetsPtrInput)(nil)).Elem(), EntitlementAdditionalNotificationTargetsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementApprovalWorkflowInput)(nil)).Elem(), EntitlementApprovalWorkflowArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementApprovalWorkflowPtrInput)(nil)).Elem(), EntitlementApprovalWorkflowArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementApprovalWorkflowManualApprovalsInput)(nil)).Elem(), EntitlementApprovalWorkflowManualApprovalsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementApprovalWorkflowManualApprovalsPtrInput)(nil)).Elem(), EntitlementApprovalWorkflowManualApprovalsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementApprovalWorkflowManualApprovalsStepInput)(nil)).Elem(), EntitlementApprovalWorkflowManualApprovalsStepArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementApprovalWorkflowManualApprovalsStepArrayInput)(nil)).Elem(), EntitlementApprovalWorkflowManualApprovalsStepArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementApprovalWorkflowManualApprovalsStepApproversInput)(nil)).Elem(), EntitlementApprovalWorkflowManualApprovalsStepApproversArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementEligibleUserInput)(nil)).Elem(), EntitlementEligibleUserArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementEligibleUserArrayInput)(nil)).Elem(), EntitlementEligibleUserArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementPrivilegedAccessInput)(nil)).Elem(), EntitlementPrivilegedAccessArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementPrivilegedAccessPtrInput)(nil)).Elem(), EntitlementPrivilegedAccessArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementPrivilegedAccessGcpIamAccessInput)(nil)).Elem(), EntitlementPrivilegedAccessGcpIamAccessArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementPrivilegedAccessGcpIamAccessPtrInput)(nil)).Elem(), EntitlementPrivilegedAccessGcpIamAccessArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementPrivilegedAccessGcpIamAccessRoleBindingInput)(nil)).Elem(), EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayInput)(nil)).Elem(), EntitlementPrivilegedAccessGcpIamAccessRoleBindingArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementRequesterJustificationConfigInput)(nil)).Elem(), EntitlementRequesterJustificationConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementRequesterJustificationConfigPtrInput)(nil)).Elem(), EntitlementRequesterJustificationConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementRequesterJustificationConfigNotMandatoryInput)(nil)).Elem(), EntitlementRequesterJustificationConfigNotMandatoryArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementRequesterJustificationConfigNotMandatoryPtrInput)(nil)).Elem(), EntitlementRequesterJustificationConfigNotMandatoryArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementRequesterJustificationConfigUnstructuredInput)(nil)).Elem(), EntitlementRequesterJustificationConfigUnstructuredArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EntitlementRequesterJustificationConfigUnstructuredPtrInput)(nil)).Elem(), EntitlementRequesterJustificationConfigUnstructuredArgs{}) + pulumi.RegisterOutputType(EntitlementAdditionalNotificationTargetsOutput{}) + pulumi.RegisterOutputType(EntitlementAdditionalNotificationTargetsPtrOutput{}) + pulumi.RegisterOutputType(EntitlementApprovalWorkflowOutput{}) + pulumi.RegisterOutputType(EntitlementApprovalWorkflowPtrOutput{}) + pulumi.RegisterOutputType(EntitlementApprovalWorkflowManualApprovalsOutput{}) + pulumi.RegisterOutputType(EntitlementApprovalWorkflowManualApprovalsPtrOutput{}) + pulumi.RegisterOutputType(EntitlementApprovalWorkflowManualApprovalsStepOutput{}) + pulumi.RegisterOutputType(EntitlementApprovalWorkflowManualApprovalsStepArrayOutput{}) + pulumi.RegisterOutputType(EntitlementApprovalWorkflowManualApprovalsStepApproversOutput{}) + pulumi.RegisterOutputType(EntitlementEligibleUserOutput{}) + pulumi.RegisterOutputType(EntitlementEligibleUserArrayOutput{}) + pulumi.RegisterOutputType(EntitlementPrivilegedAccessOutput{}) + pulumi.RegisterOutputType(EntitlementPrivilegedAccessPtrOutput{}) + pulumi.RegisterOutputType(EntitlementPrivilegedAccessGcpIamAccessOutput{}) + pulumi.RegisterOutputType(EntitlementPrivilegedAccessGcpIamAccessPtrOutput{}) + pulumi.RegisterOutputType(EntitlementPrivilegedAccessGcpIamAccessRoleBindingOutput{}) + pulumi.RegisterOutputType(EntitlementPrivilegedAccessGcpIamAccessRoleBindingArrayOutput{}) + pulumi.RegisterOutputType(EntitlementRequesterJustificationConfigOutput{}) + pulumi.RegisterOutputType(EntitlementRequesterJustificationConfigPtrOutput{}) + pulumi.RegisterOutputType(EntitlementRequesterJustificationConfigNotMandatoryOutput{}) + pulumi.RegisterOutputType(EntitlementRequesterJustificationConfigNotMandatoryPtrOutput{}) + pulumi.RegisterOutputType(EntitlementRequesterJustificationConfigUnstructuredOutput{}) + pulumi.RegisterOutputType(EntitlementRequesterJustificationConfigUnstructuredPtrOutput{}) +} diff --git a/sdk/go/gcp/provider.go b/sdk/go/gcp/provider.go index 32da12029f..29c04ddd92 100644 --- a/sdk/go/gcp/provider.go +++ b/sdk/go/gcp/provider.go @@ -138,6 +138,7 @@ type Provider struct { OsLoginCustomEndpoint pulumi.StringPtrOutput `pulumi:"osLoginCustomEndpoint"` ParallelstoreCustomEndpoint pulumi.StringPtrOutput `pulumi:"parallelstoreCustomEndpoint"` PrivatecaCustomEndpoint pulumi.StringPtrOutput `pulumi:"privatecaCustomEndpoint"` + PrivilegedAccessManagerCustomEndpoint pulumi.StringPtrOutput `pulumi:"privilegedAccessManagerCustomEndpoint"` Project pulumi.StringPtrOutput `pulumi:"project"` PublicCaCustomEndpoint pulumi.StringPtrOutput `pulumi:"publicCaCustomEndpoint"` PubsubCustomEndpoint pulumi.StringPtrOutput `pulumi:"pubsubCustomEndpoint"` @@ -345,6 +346,7 @@ type providerArgs struct { OsLoginCustomEndpoint *string `pulumi:"osLoginCustomEndpoint"` ParallelstoreCustomEndpoint *string `pulumi:"parallelstoreCustomEndpoint"` PrivatecaCustomEndpoint *string `pulumi:"privatecaCustomEndpoint"` + PrivilegedAccessManagerCustomEndpoint *string `pulumi:"privilegedAccessManagerCustomEndpoint"` Project *string `pulumi:"project"` PublicCaCustomEndpoint *string `pulumi:"publicCaCustomEndpoint"` PubsubCustomEndpoint *string `pulumi:"pubsubCustomEndpoint"` @@ -517,6 +519,7 @@ type ProviderArgs struct { OsLoginCustomEndpoint pulumi.StringPtrInput ParallelstoreCustomEndpoint pulumi.StringPtrInput PrivatecaCustomEndpoint pulumi.StringPtrInput + PrivilegedAccessManagerCustomEndpoint pulumi.StringPtrInput Project pulumi.StringPtrInput PublicCaCustomEndpoint pulumi.StringPtrInput PubsubCustomEndpoint pulumi.StringPtrInput @@ -1079,6 +1082,10 @@ func (o ProviderOutput) PrivatecaCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.PrivatecaCustomEndpoint }).(pulumi.StringPtrOutput) } +func (o ProviderOutput) PrivilegedAccessManagerCustomEndpoint() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.PrivilegedAccessManagerCustomEndpoint }).(pulumi.StringPtrOutput) +} + func (o ProviderOutput) Project() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.Project }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/redis/cluster.go b/sdk/go/gcp/redis/cluster.go index c20ae27239..520c429a68 100644 --- a/sdk/go/gcp/redis/cluster.go +++ b/sdk/go/gcp/redis/cluster.go @@ -58,6 +58,9 @@ import ( // NodeType: pulumi.String("REDIS_SHARED_CORE_NANO"), // TransitEncryptionMode: pulumi.String("TRANSIT_ENCRYPTION_MODE_DISABLED"), // AuthorizationMode: pulumi.String("AUTH_MODE_DISABLED"), +// RedisConfigs: pulumi.StringMap{ +// "maxmemory-policy": pulumi.String("volatile-ttl"), +// }, // }) // if err != nil { // return err @@ -154,6 +157,10 @@ type Cluster struct { // Output only. PSC connections for discovery of the cluster topology and accessing the cluster. // Structure is documented below. PscConnections ClusterPscConnectionArrayOutput `pulumi:"pscConnections"` + // Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + // documentation for the list of supported parameters: + // https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + RedisConfigs pulumi.StringMapOutput `pulumi:"redisConfigs"` // The name of the region of the Redis cluster. Region pulumi.StringOutput `pulumi:"region"` // Optional. The number of replica nodes per shard. @@ -241,6 +248,10 @@ type clusterState struct { // Output only. PSC connections for discovery of the cluster topology and accessing the cluster. // Structure is documented below. PscConnections []ClusterPscConnection `pulumi:"pscConnections"` + // Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + // documentation for the list of supported parameters: + // https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + RedisConfigs map[string]string `pulumi:"redisConfigs"` // The name of the region of the Redis cluster. Region *string `pulumi:"region"` // Optional. The number of replica nodes per shard. @@ -293,6 +304,10 @@ type ClusterState struct { // Output only. PSC connections for discovery of the cluster topology and accessing the cluster. // Structure is documented below. PscConnections ClusterPscConnectionArrayInput + // Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + // documentation for the list of supported parameters: + // https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + RedisConfigs pulumi.StringMapInput // The name of the region of the Redis cluster. Region pulumi.StringPtrInput // Optional. The number of replica nodes per shard. @@ -335,6 +350,10 @@ type clusterArgs struct { // Currently, only one PscConfig is supported. // Structure is documented below. PscConfigs []ClusterPscConfig `pulumi:"pscConfigs"` + // Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + // documentation for the list of supported parameters: + // https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + RedisConfigs map[string]string `pulumi:"redisConfigs"` // The name of the region of the Redis cluster. Region *string `pulumi:"region"` // Optional. The number of replica nodes per shard. @@ -365,6 +384,10 @@ type ClusterArgs struct { // Currently, only one PscConfig is supported. // Structure is documented below. PscConfigs ClusterPscConfigArrayInput + // Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + // documentation for the list of supported parameters: + // https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + RedisConfigs pulumi.StringMapInput // The name of the region of the Redis cluster. Region pulumi.StringPtrInput // Optional. The number of replica nodes per shard. @@ -521,6 +544,13 @@ func (o ClusterOutput) PscConnections() ClusterPscConnectionArrayOutput { return o.ApplyT(func(v *Cluster) ClusterPscConnectionArrayOutput { return v.PscConnections }).(ClusterPscConnectionArrayOutput) } +// Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore +// documentation for the list of supported parameters: +// https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations +func (o ClusterOutput) RedisConfigs() pulumi.StringMapOutput { + return o.ApplyT(func(v *Cluster) pulumi.StringMapOutput { return v.RedisConfigs }).(pulumi.StringMapOutput) +} + // The name of the region of the Redis cluster. func (o ClusterOutput) Region() pulumi.StringOutput { return o.ApplyT(func(v *Cluster) pulumi.StringOutput { return v.Region }).(pulumi.StringOutput) diff --git a/sdk/go/gcp/storage/getBuckets.go b/sdk/go/gcp/storage/getBuckets.go new file mode 100644 index 0000000000..1e498d544b --- /dev/null +++ b/sdk/go/gcp/storage/getBuckets.go @@ -0,0 +1,133 @@ +// 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 storage + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Gets a list of existing GCS buckets. +// See [the official documentation](https://cloud.google.com/storage/docs/introduction) +// and [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list). +// +// ## Example Usage +// +// Example GCS buckets. +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/storage" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := storage.GetBuckets(ctx, &storage.GetBucketsArgs{ +// Project: pulumi.StringRef("example-project"), +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func GetBuckets(ctx *pulumi.Context, args *GetBucketsArgs, opts ...pulumi.InvokeOption) (*GetBucketsResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetBucketsResult + err := ctx.Invoke("gcp:storage/getBuckets:getBuckets", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getBuckets. +type GetBucketsArgs struct { + // Filter results to buckets whose names begin with this prefix. + Prefix *string `pulumi:"prefix"` + // The ID of the project. If it is not provided, the provider project is used. + Project *string `pulumi:"project"` +} + +// A collection of values returned by getBuckets. +type GetBucketsResult struct { + // A list of all retrieved GCS buckets. Structure is defined below. + Buckets []GetBucketsBucket `pulumi:"buckets"` + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + Prefix *string `pulumi:"prefix"` + Project *string `pulumi:"project"` +} + +func GetBucketsOutput(ctx *pulumi.Context, args GetBucketsOutputArgs, opts ...pulumi.InvokeOption) GetBucketsResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (GetBucketsResult, error) { + args := v.(GetBucketsArgs) + r, err := GetBuckets(ctx, &args, opts...) + var s GetBucketsResult + if r != nil { + s = *r + } + return s, err + }).(GetBucketsResultOutput) +} + +// A collection of arguments for invoking getBuckets. +type GetBucketsOutputArgs struct { + // Filter results to buckets whose names begin with this prefix. + Prefix pulumi.StringPtrInput `pulumi:"prefix"` + // The ID of the project. If it is not provided, the provider project is used. + Project pulumi.StringPtrInput `pulumi:"project"` +} + +func (GetBucketsOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetBucketsArgs)(nil)).Elem() +} + +// A collection of values returned by getBuckets. +type GetBucketsResultOutput struct{ *pulumi.OutputState } + +func (GetBucketsResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetBucketsResult)(nil)).Elem() +} + +func (o GetBucketsResultOutput) ToGetBucketsResultOutput() GetBucketsResultOutput { + return o +} + +func (o GetBucketsResultOutput) ToGetBucketsResultOutputWithContext(ctx context.Context) GetBucketsResultOutput { + return o +} + +// A list of all retrieved GCS buckets. Structure is defined below. +func (o GetBucketsResultOutput) Buckets() GetBucketsBucketArrayOutput { + return o.ApplyT(func(v GetBucketsResult) []GetBucketsBucket { return v.Buckets }).(GetBucketsBucketArrayOutput) +} + +// The provider-assigned unique ID for this managed resource. +func (o GetBucketsResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetBucketsResult) string { return v.Id }).(pulumi.StringOutput) +} + +func (o GetBucketsResultOutput) Prefix() pulumi.StringPtrOutput { + return o.ApplyT(func(v GetBucketsResult) *string { return v.Prefix }).(pulumi.StringPtrOutput) +} + +func (o GetBucketsResultOutput) Project() pulumi.StringPtrOutput { + return o.ApplyT(func(v GetBucketsResult) *string { return v.Project }).(pulumi.StringPtrOutput) +} + +func init() { + pulumi.RegisterOutputType(GetBucketsResultOutput{}) +} diff --git a/sdk/go/gcp/storage/pulumiTypes.go b/sdk/go/gcp/storage/pulumiTypes.go index cda88cf0c6..dfeb6c69ea 100644 --- a/sdk/go/gcp/storage/pulumiTypes.go +++ b/sdk/go/gcp/storage/pulumiTypes.go @@ -9179,6 +9179,139 @@ func (o GetBucketWebsiteArrayOutput) Index(i pulumi.IntInput) GetBucketWebsiteOu }).(GetBucketWebsiteOutput) } +type GetBucketsBucket struct { + // User-provided bucket labels, in key/value pairs. + Labels map[string]string `pulumi:"labels"` + // The location of the bucket. + Location string `pulumi:"location"` + // The name of the bucket. + Name string `pulumi:"name"` + // A url reference to the bucket. + SelfLink string `pulumi:"selfLink"` + // The [StorageClass](https://cloud.google.com/storage/docs/storage-classes) of the bucket. + StorageClass string `pulumi:"storageClass"` +} + +// GetBucketsBucketInput is an input type that accepts GetBucketsBucketArgs and GetBucketsBucketOutput values. +// You can construct a concrete instance of `GetBucketsBucketInput` via: +// +// GetBucketsBucketArgs{...} +type GetBucketsBucketInput interface { + pulumi.Input + + ToGetBucketsBucketOutput() GetBucketsBucketOutput + ToGetBucketsBucketOutputWithContext(context.Context) GetBucketsBucketOutput +} + +type GetBucketsBucketArgs struct { + // User-provided bucket labels, in key/value pairs. + Labels pulumi.StringMapInput `pulumi:"labels"` + // The location of the bucket. + Location pulumi.StringInput `pulumi:"location"` + // The name of the bucket. + Name pulumi.StringInput `pulumi:"name"` + // A url reference to the bucket. + SelfLink pulumi.StringInput `pulumi:"selfLink"` + // The [StorageClass](https://cloud.google.com/storage/docs/storage-classes) of the bucket. + StorageClass pulumi.StringInput `pulumi:"storageClass"` +} + +func (GetBucketsBucketArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetBucketsBucket)(nil)).Elem() +} + +func (i GetBucketsBucketArgs) ToGetBucketsBucketOutput() GetBucketsBucketOutput { + return i.ToGetBucketsBucketOutputWithContext(context.Background()) +} + +func (i GetBucketsBucketArgs) ToGetBucketsBucketOutputWithContext(ctx context.Context) GetBucketsBucketOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetBucketsBucketOutput) +} + +// GetBucketsBucketArrayInput is an input type that accepts GetBucketsBucketArray and GetBucketsBucketArrayOutput values. +// You can construct a concrete instance of `GetBucketsBucketArrayInput` via: +// +// GetBucketsBucketArray{ GetBucketsBucketArgs{...} } +type GetBucketsBucketArrayInput interface { + pulumi.Input + + ToGetBucketsBucketArrayOutput() GetBucketsBucketArrayOutput + ToGetBucketsBucketArrayOutputWithContext(context.Context) GetBucketsBucketArrayOutput +} + +type GetBucketsBucketArray []GetBucketsBucketInput + +func (GetBucketsBucketArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetBucketsBucket)(nil)).Elem() +} + +func (i GetBucketsBucketArray) ToGetBucketsBucketArrayOutput() GetBucketsBucketArrayOutput { + return i.ToGetBucketsBucketArrayOutputWithContext(context.Background()) +} + +func (i GetBucketsBucketArray) ToGetBucketsBucketArrayOutputWithContext(ctx context.Context) GetBucketsBucketArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetBucketsBucketArrayOutput) +} + +type GetBucketsBucketOutput struct{ *pulumi.OutputState } + +func (GetBucketsBucketOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetBucketsBucket)(nil)).Elem() +} + +func (o GetBucketsBucketOutput) ToGetBucketsBucketOutput() GetBucketsBucketOutput { + return o +} + +func (o GetBucketsBucketOutput) ToGetBucketsBucketOutputWithContext(ctx context.Context) GetBucketsBucketOutput { + return o +} + +// User-provided bucket labels, in key/value pairs. +func (o GetBucketsBucketOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v GetBucketsBucket) map[string]string { return v.Labels }).(pulumi.StringMapOutput) +} + +// The location of the bucket. +func (o GetBucketsBucketOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v GetBucketsBucket) string { return v.Location }).(pulumi.StringOutput) +} + +// The name of the bucket. +func (o GetBucketsBucketOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetBucketsBucket) string { return v.Name }).(pulumi.StringOutput) +} + +// A url reference to the bucket. +func (o GetBucketsBucketOutput) SelfLink() pulumi.StringOutput { + return o.ApplyT(func(v GetBucketsBucket) string { return v.SelfLink }).(pulumi.StringOutput) +} + +// The [StorageClass](https://cloud.google.com/storage/docs/storage-classes) of the bucket. +func (o GetBucketsBucketOutput) StorageClass() pulumi.StringOutput { + return o.ApplyT(func(v GetBucketsBucket) string { return v.StorageClass }).(pulumi.StringOutput) +} + +type GetBucketsBucketArrayOutput struct{ *pulumi.OutputState } + +func (GetBucketsBucketArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetBucketsBucket)(nil)).Elem() +} + +func (o GetBucketsBucketArrayOutput) ToGetBucketsBucketArrayOutput() GetBucketsBucketArrayOutput { + return o +} + +func (o GetBucketsBucketArrayOutput) ToGetBucketsBucketArrayOutputWithContext(ctx context.Context) GetBucketsBucketArrayOutput { + return o +} + +func (o GetBucketsBucketArrayOutput) Index(i pulumi.IntInput) GetBucketsBucketOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetBucketsBucket { + return vs[0].([]GetBucketsBucket)[vs[1].(int)] + }).(GetBucketsBucketOutput) +} + func init() { pulumi.RegisterInputType(reflect.TypeOf((*BucketAutoclassInput)(nil)).Elem(), BucketAutoclassArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*BucketAutoclassPtrInput)(nil)).Elem(), BucketAutoclassArgs{}) @@ -9300,6 +9433,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetBucketVersioningArrayInput)(nil)).Elem(), GetBucketVersioningArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetBucketWebsiteInput)(nil)).Elem(), GetBucketWebsiteArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetBucketWebsiteArrayInput)(nil)).Elem(), GetBucketWebsiteArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetBucketsBucketInput)(nil)).Elem(), GetBucketsBucketArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetBucketsBucketArrayInput)(nil)).Elem(), GetBucketsBucketArray{}) pulumi.RegisterOutputType(BucketAutoclassOutput{}) pulumi.RegisterOutputType(BucketAutoclassPtrOutput{}) pulumi.RegisterOutputType(BucketCorOutput{}) @@ -9420,4 +9555,6 @@ func init() { pulumi.RegisterOutputType(GetBucketVersioningArrayOutput{}) pulumi.RegisterOutputType(GetBucketWebsiteOutput{}) pulumi.RegisterOutputType(GetBucketWebsiteArrayOutput{}) + pulumi.RegisterOutputType(GetBucketsBucketOutput{}) + pulumi.RegisterOutputType(GetBucketsBucketArrayOutput{}) } 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 a0bf7e3a90..33c472e36d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/Config.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/Config.java @@ -390,6 +390,9 @@ public Optional parallelstoreCustomEndpoint() { public Optional privatecaCustomEndpoint() { return Codegen.stringProp("privatecaCustomEndpoint").config(config).get(); } + public Optional privilegedAccessManagerCustomEndpoint() { + return Codegen.stringProp("privilegedAccessManagerCustomEndpoint").config(config).get(); + } public Optional project() { return Codegen.stringProp("project").config(config).env("GOOGLE_PROJECT", "GOOGLE_CLOUD_PROJECT", "GCLOUD_PROJECT", "CLOUDSDK_CORE_PROJECT").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 493b8bc780..f05b6c5a22 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/Provider.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/Provider.java @@ -743,6 +743,12 @@ public Output> parallelstoreCustomEndpoint() { public Output> privatecaCustomEndpoint() { return Codegen.optional(this.privatecaCustomEndpoint); } + @Export(name="privilegedAccessManagerCustomEndpoint", refs={String.class}, tree="[0]") + private Output privilegedAccessManagerCustomEndpoint; + + public Output> privilegedAccessManagerCustomEndpoint() { + return Codegen.optional(this.privilegedAccessManagerCustomEndpoint); + } @Export(name="project", refs={String.class}, tree="[0]") private Output project; 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 13dd1c8212..108c2dbe74 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java @@ -895,6 +895,13 @@ public Optional> privatecaCustomEndpoint() { return Optional.ofNullable(this.privatecaCustomEndpoint); } + @Import(name="privilegedAccessManagerCustomEndpoint") + private @Nullable Output privilegedAccessManagerCustomEndpoint; + + public Optional> privilegedAccessManagerCustomEndpoint() { + return Optional.ofNullable(this.privilegedAccessManagerCustomEndpoint); + } + @Import(name="project") private @Nullable Output project; @@ -1324,6 +1331,7 @@ private ProviderArgs(ProviderArgs $) { this.osLoginCustomEndpoint = $.osLoginCustomEndpoint; this.parallelstoreCustomEndpoint = $.parallelstoreCustomEndpoint; this.privatecaCustomEndpoint = $.privatecaCustomEndpoint; + this.privilegedAccessManagerCustomEndpoint = $.privilegedAccessManagerCustomEndpoint; this.project = $.project; this.publicCaCustomEndpoint = $.publicCaCustomEndpoint; this.pubsubCustomEndpoint = $.pubsubCustomEndpoint; @@ -2516,6 +2524,15 @@ public Builder privatecaCustomEndpoint(String privatecaCustomEndpoint) { return privatecaCustomEndpoint(Output.of(privatecaCustomEndpoint)); } + public Builder privilegedAccessManagerCustomEndpoint(@Nullable Output privilegedAccessManagerCustomEndpoint) { + $.privilegedAccessManagerCustomEndpoint = privilegedAccessManagerCustomEndpoint; + return this; + } + + public Builder privilegedAccessManagerCustomEndpoint(String privilegedAccessManagerCustomEndpoint) { + return privilegedAccessManagerCustomEndpoint(Output.of(privilegedAccessManagerCustomEndpoint)); + } + public Builder project(@Nullable Output project) { $.project = project; return this; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/alloydb/Cluster.java b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/Cluster.java index 341451b7f3..9ae1b34ecf 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/alloydb/Cluster.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/Cluster.java @@ -17,6 +17,7 @@ import com.pulumi.gcp.alloydb.outputs.ClusterEncryptionConfig; import com.pulumi.gcp.alloydb.outputs.ClusterEncryptionInfo; import com.pulumi.gcp.alloydb.outputs.ClusterInitialUser; +import com.pulumi.gcp.alloydb.outputs.ClusterMaintenanceUpdatePolicy; import com.pulumi.gcp.alloydb.outputs.ClusterMigrationSource; import com.pulumi.gcp.alloydb.outputs.ClusterNetworkConfig; import com.pulumi.gcp.alloydb.outputs.ClusterRestoreBackupSource; @@ -689,6 +690,22 @@ public Output>> labels() { public Output location() { return this.location; } + /** + * MaintenanceUpdatePolicy defines the policy for system updates. + * Structure is documented below. + * + */ + @Export(name="maintenanceUpdatePolicy", refs={ClusterMaintenanceUpdatePolicy.class}, tree="[0]") + private Output maintenanceUpdatePolicy; + + /** + * @return MaintenanceUpdatePolicy defines the policy for system updates. + * Structure is documented below. + * + */ + public Output> maintenanceUpdatePolicy() { + return Codegen.optional(this.maintenanceUpdatePolicy); + } /** * Cluster created via DMS migration. * Structure is documented below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/alloydb/ClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/ClusterArgs.java index 90783c62c4..13be4a7ce7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/alloydb/ClusterArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/ClusterArgs.java @@ -10,6 +10,7 @@ import com.pulumi.gcp.alloydb.inputs.ClusterContinuousBackupConfigArgs; import com.pulumi.gcp.alloydb.inputs.ClusterEncryptionConfigArgs; import com.pulumi.gcp.alloydb.inputs.ClusterInitialUserArgs; +import com.pulumi.gcp.alloydb.inputs.ClusterMaintenanceUpdatePolicyArgs; import com.pulumi.gcp.alloydb.inputs.ClusterNetworkConfigArgs; import com.pulumi.gcp.alloydb.inputs.ClusterRestoreBackupSourceArgs; import com.pulumi.gcp.alloydb.inputs.ClusterRestoreContinuousBackupSourceArgs; @@ -254,6 +255,23 @@ public Output location() { return this.location; } + /** + * MaintenanceUpdatePolicy defines the policy for system updates. + * Structure is documented below. + * + */ + @Import(name="maintenanceUpdatePolicy") + private @Nullable Output maintenanceUpdatePolicy; + + /** + * @return MaintenanceUpdatePolicy defines the policy for system updates. + * Structure is documented below. + * + */ + public Optional> maintenanceUpdatePolicy() { + return Optional.ofNullable(this.maintenanceUpdatePolicy); + } + /** * (Optional, Deprecated) * The relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form: @@ -386,6 +404,7 @@ private ClusterArgs(ClusterArgs $) { this.initialUser = $.initialUser; this.labels = $.labels; this.location = $.location; + this.maintenanceUpdatePolicy = $.maintenanceUpdatePolicy; this.network = $.network; this.networkConfig = $.networkConfig; this.project = $.project; @@ -719,6 +738,29 @@ public Builder location(String location) { return location(Output.of(location)); } + /** + * @param maintenanceUpdatePolicy MaintenanceUpdatePolicy defines the policy for system updates. + * Structure is documented below. + * + * @return builder + * + */ + public Builder maintenanceUpdatePolicy(@Nullable Output maintenanceUpdatePolicy) { + $.maintenanceUpdatePolicy = maintenanceUpdatePolicy; + return this; + } + + /** + * @param maintenanceUpdatePolicy MaintenanceUpdatePolicy defines the policy for system updates. + * Structure is documented below. + * + * @return builder + * + */ + public Builder maintenanceUpdatePolicy(ClusterMaintenanceUpdatePolicyArgs maintenanceUpdatePolicy) { + return maintenanceUpdatePolicy(Output.of(maintenanceUpdatePolicy)); + } + /** * @param network (Optional, Deprecated) * The relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form: diff --git a/sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterMaintenanceUpdatePolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterMaintenanceUpdatePolicyArgs.java new file mode 100644 index 0000000000..8e717c8a28 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterMaintenanceUpdatePolicyArgs.java @@ -0,0 +1,99 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.alloydb.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.alloydb.inputs.ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterMaintenanceUpdatePolicyArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterMaintenanceUpdatePolicyArgs Empty = new ClusterMaintenanceUpdatePolicyArgs(); + + /** + * Preferred windows to perform maintenance. Currently limited to 1. + * Structure is documented below. + * + */ + @Import(name="maintenanceWindows") + private @Nullable Output> maintenanceWindows; + + /** + * @return Preferred windows to perform maintenance. Currently limited to 1. + * Structure is documented below. + * + */ + public Optional>> maintenanceWindows() { + return Optional.ofNullable(this.maintenanceWindows); + } + + private ClusterMaintenanceUpdatePolicyArgs() {} + + private ClusterMaintenanceUpdatePolicyArgs(ClusterMaintenanceUpdatePolicyArgs $) { + this.maintenanceWindows = $.maintenanceWindows; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterMaintenanceUpdatePolicyArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterMaintenanceUpdatePolicyArgs $; + + public Builder() { + $ = new ClusterMaintenanceUpdatePolicyArgs(); + } + + public Builder(ClusterMaintenanceUpdatePolicyArgs defaults) { + $ = new ClusterMaintenanceUpdatePolicyArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param maintenanceWindows Preferred windows to perform maintenance. Currently limited to 1. + * Structure is documented below. + * + * @return builder + * + */ + public Builder maintenanceWindows(@Nullable Output> maintenanceWindows) { + $.maintenanceWindows = maintenanceWindows; + return this; + } + + /** + * @param maintenanceWindows Preferred windows to perform maintenance. Currently limited to 1. + * Structure is documented below. + * + * @return builder + * + */ + public Builder maintenanceWindows(List maintenanceWindows) { + return maintenanceWindows(Output.of(maintenanceWindows)); + } + + /** + * @param maintenanceWindows Preferred windows to perform maintenance. Currently limited to 1. + * Structure is documented below. + * + * @return builder + * + */ + public Builder maintenanceWindows(ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs... maintenanceWindows) { + return maintenanceWindows(List.of(maintenanceWindows)); + } + + public ClusterMaintenanceUpdatePolicyArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs.java new file mode 100644 index 0000000000..073819014d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs.java @@ -0,0 +1,134 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.alloydb.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.alloydb.inputs.ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs; +import java.lang.String; +import java.util.Objects; + + +public final class ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs Empty = new ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs(); + + /** + * Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + * Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + * + */ + @Import(name="day", required=true) + private Output day; + + /** + * @return Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + * Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + * + */ + public Output day() { + return this.day; + } + + /** + * Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + * Structure is documented below. + * + */ + @Import(name="startTime", required=true) + private Output startTime; + + /** + * @return Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + * Structure is documented below. + * + */ + public Output startTime() { + return this.startTime; + } + + private ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs() {} + + private ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs(ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs $) { + this.day = $.day; + this.startTime = $.startTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs $; + + public Builder() { + $ = new ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs(); + } + + public Builder(ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs defaults) { + $ = new ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param day Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + * Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + * + * @return builder + * + */ + public Builder day(Output day) { + $.day = day; + return this; + } + + /** + * @param day Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + * Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + * + * @return builder + * + */ + public Builder day(String day) { + return day(Output.of(day)); + } + + /** + * @param startTime Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + * Structure is documented below. + * + * @return builder + * + */ + public Builder startTime(Output startTime) { + $.startTime = startTime; + return this; + } + + /** + * @param startTime Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + * Structure is documented below. + * + * @return builder + * + */ + public Builder startTime(ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs startTime) { + return startTime(Output.of(startTime)); + } + + public ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs build() { + if ($.day == null) { + throw new MissingRequiredPropertyException("ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs", "day"); + } + if ($.startTime == null) { + throw new MissingRequiredPropertyException("ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs", "startTime"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs.java new file mode 100644 index 0000000000..f594ee1ba9 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs.java @@ -0,0 +1,198 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.alloydb.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; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs Empty = new ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs(); + + /** + * Hours of day in 24 hour format. Should be from 0 to 23. + * + */ + @Import(name="hours", required=true) + private Output hours; + + /** + * @return Hours of day in 24 hour format. Should be from 0 to 23. + * + */ + public Output hours() { + return this.hours; + } + + /** + * Minutes of hour of day. Currently, only the value 0 is supported. + * + */ + @Import(name="minutes") + private @Nullable Output minutes; + + /** + * @return Minutes of hour of day. Currently, only the value 0 is supported. + * + */ + public Optional> minutes() { + return Optional.ofNullable(this.minutes); + } + + /** + * Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + * + */ + @Import(name="nanos") + private @Nullable Output nanos; + + /** + * @return Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + * + */ + public Optional> nanos() { + return Optional.ofNullable(this.nanos); + } + + /** + * Seconds of minutes of the time. Currently, only the value 0 is supported. + * + */ + @Import(name="seconds") + private @Nullable Output seconds; + + /** + * @return Seconds of minutes of the time. Currently, only the value 0 is supported. + * + */ + public Optional> seconds() { + return Optional.ofNullable(this.seconds); + } + + private ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs() {} + + private ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs(ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs $) { + this.hours = $.hours; + this.minutes = $.minutes; + this.nanos = $.nanos; + this.seconds = $.seconds; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs $; + + public Builder() { + $ = new ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs(); + } + + public Builder(ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs defaults) { + $ = new ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param hours Hours of day in 24 hour format. Should be from 0 to 23. + * + * @return builder + * + */ + public Builder hours(Output hours) { + $.hours = hours; + return this; + } + + /** + * @param hours Hours of day in 24 hour format. Should be from 0 to 23. + * + * @return builder + * + */ + public Builder hours(Integer hours) { + return hours(Output.of(hours)); + } + + /** + * @param minutes Minutes of hour of day. Currently, only the value 0 is supported. + * + * @return builder + * + */ + public Builder minutes(@Nullable Output minutes) { + $.minutes = minutes; + return this; + } + + /** + * @param minutes Minutes of hour of day. Currently, only the value 0 is supported. + * + * @return builder + * + */ + public Builder minutes(Integer minutes) { + return minutes(Output.of(minutes)); + } + + /** + * @param nanos Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + * + * @return builder + * + */ + public Builder nanos(@Nullable Output nanos) { + $.nanos = nanos; + return this; + } + + /** + * @param nanos Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + * + * @return builder + * + */ + public Builder nanos(Integer nanos) { + return nanos(Output.of(nanos)); + } + + /** + * @param seconds Seconds of minutes of the time. Currently, only the value 0 is supported. + * + * @return builder + * + */ + public Builder seconds(@Nullable Output seconds) { + $.seconds = seconds; + return this; + } + + /** + * @param seconds Seconds of minutes of the time. Currently, only the value 0 is supported. + * + * @return builder + * + */ + public Builder seconds(Integer seconds) { + return seconds(Output.of(seconds)); + } + + public ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs build() { + if ($.hours == null) { + throw new MissingRequiredPropertyException("ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs", "hours"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterState.java b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterState.java index ea66d18c4d..deae6640f0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/inputs/ClusterState.java @@ -12,6 +12,7 @@ import com.pulumi.gcp.alloydb.inputs.ClusterEncryptionConfigArgs; import com.pulumi.gcp.alloydb.inputs.ClusterEncryptionInfoArgs; import com.pulumi.gcp.alloydb.inputs.ClusterInitialUserArgs; +import com.pulumi.gcp.alloydb.inputs.ClusterMaintenanceUpdatePolicyArgs; import com.pulumi.gcp.alloydb.inputs.ClusterMigrationSourceArgs; import com.pulumi.gcp.alloydb.inputs.ClusterNetworkConfigArgs; import com.pulumi.gcp.alloydb.inputs.ClusterRestoreBackupSourceArgs; @@ -334,6 +335,23 @@ public Optional> location() { return Optional.ofNullable(this.location); } + /** + * MaintenanceUpdatePolicy defines the policy for system updates. + * Structure is documented below. + * + */ + @Import(name="maintenanceUpdatePolicy") + private @Nullable Output maintenanceUpdatePolicy; + + /** + * @return MaintenanceUpdatePolicy defines the policy for system updates. + * Structure is documented below. + * + */ + public Optional> maintenanceUpdatePolicy() { + return Optional.ofNullable(this.maintenanceUpdatePolicy); + } + /** * Cluster created via DMS migration. * Structure is documented below. @@ -569,6 +587,7 @@ private ClusterState(ClusterState $) { this.initialUser = $.initialUser; this.labels = $.labels; this.location = $.location; + this.maintenanceUpdatePolicy = $.maintenanceUpdatePolicy; this.migrationSources = $.migrationSources; this.name = $.name; this.network = $.network; @@ -1043,6 +1062,29 @@ public Builder location(String location) { return location(Output.of(location)); } + /** + * @param maintenanceUpdatePolicy MaintenanceUpdatePolicy defines the policy for system updates. + * Structure is documented below. + * + * @return builder + * + */ + public Builder maintenanceUpdatePolicy(@Nullable Output maintenanceUpdatePolicy) { + $.maintenanceUpdatePolicy = maintenanceUpdatePolicy; + return this; + } + + /** + * @param maintenanceUpdatePolicy MaintenanceUpdatePolicy defines the policy for system updates. + * Structure is documented below. + * + * @return builder + * + */ + public Builder maintenanceUpdatePolicy(ClusterMaintenanceUpdatePolicyArgs maintenanceUpdatePolicy) { + return maintenanceUpdatePolicy(Output.of(maintenanceUpdatePolicy)); + } + /** * @param migrationSources Cluster created via DMS migration. * Structure is documented below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/alloydb/outputs/ClusterMaintenanceUpdatePolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/outputs/ClusterMaintenanceUpdatePolicy.java new file mode 100644 index 0000000000..7c86c6bddd --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/outputs/ClusterMaintenanceUpdatePolicy.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.alloydb.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.alloydb.outputs.ClusterMaintenanceUpdatePolicyMaintenanceWindow; +import java.util.List; +import java.util.Objects; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterMaintenanceUpdatePolicy { + /** + * @return Preferred windows to perform maintenance. Currently limited to 1. + * Structure is documented below. + * + */ + private @Nullable List maintenanceWindows; + + private ClusterMaintenanceUpdatePolicy() {} + /** + * @return Preferred windows to perform maintenance. Currently limited to 1. + * Structure is documented below. + * + */ + public List maintenanceWindows() { + return this.maintenanceWindows == null ? List.of() : this.maintenanceWindows; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterMaintenanceUpdatePolicy defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable List maintenanceWindows; + public Builder() {} + public Builder(ClusterMaintenanceUpdatePolicy defaults) { + Objects.requireNonNull(defaults); + this.maintenanceWindows = defaults.maintenanceWindows; + } + + @CustomType.Setter + public Builder maintenanceWindows(@Nullable List maintenanceWindows) { + + this.maintenanceWindows = maintenanceWindows; + return this; + } + public Builder maintenanceWindows(ClusterMaintenanceUpdatePolicyMaintenanceWindow... maintenanceWindows) { + return maintenanceWindows(List.of(maintenanceWindows)); + } + public ClusterMaintenanceUpdatePolicy build() { + final var _resultValue = new ClusterMaintenanceUpdatePolicy(); + _resultValue.maintenanceWindows = maintenanceWindows; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/alloydb/outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindow.java b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindow.java new file mode 100644 index 0000000000..26d9427fc2 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindow.java @@ -0,0 +1,86 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.alloydb.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.alloydb.outputs.ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class ClusterMaintenanceUpdatePolicyMaintenanceWindow { + /** + * @return Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + * Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + * + */ + private String day; + /** + * @return Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + * Structure is documented below. + * + */ + private ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime startTime; + + private ClusterMaintenanceUpdatePolicyMaintenanceWindow() {} + /** + * @return Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + * Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + * + */ + public String day() { + return this.day; + } + /** + * @return Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + * Structure is documented below. + * + */ + public ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime startTime() { + return this.startTime; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterMaintenanceUpdatePolicyMaintenanceWindow defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String day; + private ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime startTime; + public Builder() {} + public Builder(ClusterMaintenanceUpdatePolicyMaintenanceWindow defaults) { + Objects.requireNonNull(defaults); + this.day = defaults.day; + this.startTime = defaults.startTime; + } + + @CustomType.Setter + public Builder day(String day) { + if (day == null) { + throw new MissingRequiredPropertyException("ClusterMaintenanceUpdatePolicyMaintenanceWindow", "day"); + } + this.day = day; + return this; + } + @CustomType.Setter + public Builder startTime(ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime startTime) { + if (startTime == null) { + throw new MissingRequiredPropertyException("ClusterMaintenanceUpdatePolicyMaintenanceWindow", "startTime"); + } + this.startTime = startTime; + return this; + } + public ClusterMaintenanceUpdatePolicyMaintenanceWindow build() { + final var _resultValue = new ClusterMaintenanceUpdatePolicyMaintenanceWindow(); + _resultValue.day = day; + _resultValue.startTime = startTime; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/alloydb/outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime.java b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime.java new file mode 100644 index 0000000000..a564691c77 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/alloydb/outputs/ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime.java @@ -0,0 +1,123 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.alloydb.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime { + /** + * @return Hours of day in 24 hour format. Should be from 0 to 23. + * + */ + private Integer hours; + /** + * @return Minutes of hour of day. Currently, only the value 0 is supported. + * + */ + private @Nullable Integer minutes; + /** + * @return Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + * + */ + private @Nullable Integer nanos; + /** + * @return Seconds of minutes of the time. Currently, only the value 0 is supported. + * + */ + private @Nullable Integer seconds; + + private ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime() {} + /** + * @return Hours of day in 24 hour format. Should be from 0 to 23. + * + */ + public Integer hours() { + return this.hours; + } + /** + * @return Minutes of hour of day. Currently, only the value 0 is supported. + * + */ + public Optional minutes() { + return Optional.ofNullable(this.minutes); + } + /** + * @return Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + * + */ + public Optional nanos() { + return Optional.ofNullable(this.nanos); + } + /** + * @return Seconds of minutes of the time. Currently, only the value 0 is supported. + * + */ + public Optional seconds() { + return Optional.ofNullable(this.seconds); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Integer hours; + private @Nullable Integer minutes; + private @Nullable Integer nanos; + private @Nullable Integer seconds; + public Builder() {} + public Builder(ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime defaults) { + Objects.requireNonNull(defaults); + this.hours = defaults.hours; + this.minutes = defaults.minutes; + this.nanos = defaults.nanos; + this.seconds = defaults.seconds; + } + + @CustomType.Setter + public Builder hours(Integer hours) { + if (hours == null) { + throw new MissingRequiredPropertyException("ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime", "hours"); + } + this.hours = hours; + return this; + } + @CustomType.Setter + public Builder minutes(@Nullable Integer minutes) { + + this.minutes = minutes; + return this; + } + @CustomType.Setter + public Builder nanos(@Nullable Integer nanos) { + + this.nanos = nanos; + return this; + } + @CustomType.Setter + public Builder seconds(@Nullable Integer seconds) { + + this.seconds = seconds; + return this; + } + public ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime build() { + final var _resultValue = new ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime(); + _resultValue.hours = hours; + _resultValue.minutes = minutes; + _resultValue.nanos = nanos; + _resultValue.seconds = seconds; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/AuthConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/AuthConfig.java index 3bd9071166..4a746128e0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/AuthConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/AuthConfig.java @@ -60,7 +60,6 @@ * public static void stack(Context ctx) { * var client = new Client("client", ClientArgs.builder() * .location("us-west1") - * .provisionGmek(true) * .build()); * * var basicExample = new AuthConfig("basicExample", AuthConfigArgs.builder() diff --git a/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/Client.java b/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/Client.java index 58a6b3412e..6fccfc5b30 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/Client.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/Client.java @@ -55,7 +55,6 @@ * public static void stack(Context ctx) { * var example = new Client("example", ClientArgs.builder() * .location("us-central1") - * .provisionGmek(true) * .build()); * * } @@ -63,7 +62,7 @@ * } * * <!--End PulumiCodeChooser --> - * ### Integrations Client Advance + * ### Integrations Client Full * * <!--Start PulumiCodeChooser --> *
@@ -123,7 +122,7 @@
  * 
  *         var example = new Client("example", ClientArgs.builder()        
  *             .location("us-east1")
- *             .createSampleWorkflows(true)
+ *             .createSampleIntegrations(true)
  *             .runAsServiceAccount(serviceAccount.email())
  *             .cloudKmsConfig(ClientCloudKmsConfigArgs.builder()
  *                 .kmsLocation("us-east1")
@@ -184,14 +183,38 @@ public Output> cloudKmsConfig() {
         return Codegen.optional(this.cloudKmsConfig);
     }
     /**
+     * Indicates if sample integrations should be created along with provisioning.
+     * 
+     */
+    @Export(name="createSampleIntegrations", refs={Boolean.class}, tree="[0]")
+    private Output createSampleIntegrations;
+
+    /**
+     * @return Indicates if sample integrations should be created along with provisioning.
+     * 
+     */
+    public Output> createSampleIntegrations() {
+        return Codegen.optional(this.createSampleIntegrations);
+    }
+    /**
+     * (Optional, Deprecated)
      * Indicates if sample workflow should be created along with provisioning.
      * 
+     * > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+     * 
+     * @deprecated
+     * `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+     * 
      */
+    @Deprecated /* `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. */
     @Export(name="createSampleWorkflows", refs={Boolean.class}, tree="[0]")
     private Output createSampleWorkflows;
 
     /**
-     * @return Indicates if sample workflow should be created along with provisioning.
+     * @return (Optional, Deprecated)
+     * Indicates if sample workflow should be created along with provisioning.
+     * 
+     * > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
      * 
      */
     public Output> createSampleWorkflows() {
@@ -232,14 +255,24 @@ public Output project() {
         return this.project;
     }
     /**
+     * (Optional, Deprecated)
      * Indicates provision with GMEK or CMEK.
      * 
+     * > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
+     * 
+     * @deprecated
+     * `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
+     * 
      */
+    @Deprecated /* `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. */
     @Export(name="provisionGmek", refs={Boolean.class}, tree="[0]")
     private Output provisionGmek;
 
     /**
-     * @return Indicates provision with GMEK or CMEK.
+     * @return (Optional, Deprecated)
+     * Indicates provision with GMEK or CMEK.
+     * 
+     * > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
      * 
      */
     public Output> provisionGmek() {
diff --git a/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/ClientArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/ClientArgs.java
index e4b2f85be8..5661ff4ea7 100644
--- a/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/ClientArgs.java
+++ b/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/ClientArgs.java
@@ -36,16 +36,45 @@ public Optional> cloudKmsConfig() {
     }
 
     /**
+     * Indicates if sample integrations should be created along with provisioning.
+     * 
+     */
+    @Import(name="createSampleIntegrations")
+    private @Nullable Output createSampleIntegrations;
+
+    /**
+     * @return Indicates if sample integrations should be created along with provisioning.
+     * 
+     */
+    public Optional> createSampleIntegrations() {
+        return Optional.ofNullable(this.createSampleIntegrations);
+    }
+
+    /**
+     * (Optional, Deprecated)
      * Indicates if sample workflow should be created along with provisioning.
      * 
+     * > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+     * 
+     * @deprecated
+     * `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+     * 
      */
+    @Deprecated /* `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. */
     @Import(name="createSampleWorkflows")
     private @Nullable Output createSampleWorkflows;
 
     /**
-     * @return Indicates if sample workflow should be created along with provisioning.
+     * @return (Optional, Deprecated)
+     * Indicates if sample workflow should be created along with provisioning.
+     * 
+     * > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+     * 
+     * @deprecated
+     * `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
      * 
      */
+    @Deprecated /* `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. */
     public Optional> createSampleWorkflows() {
         return Optional.ofNullable(this.createSampleWorkflows);
     }
@@ -87,16 +116,30 @@ public Optional> project() {
     }
 
     /**
+     * (Optional, Deprecated)
      * Indicates provision with GMEK or CMEK.
      * 
+     * > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
+     * 
+     * @deprecated
+     * `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
+     * 
      */
+    @Deprecated /* `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. */
     @Import(name="provisionGmek")
     private @Nullable Output provisionGmek;
 
     /**
-     * @return Indicates provision with GMEK or CMEK.
+     * @return (Optional, Deprecated)
+     * Indicates provision with GMEK or CMEK.
+     * 
+     * > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
+     * 
+     * @deprecated
+     * `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
      * 
      */
+    @Deprecated /* `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. */
     public Optional> provisionGmek() {
         return Optional.ofNullable(this.provisionGmek);
     }
@@ -120,6 +163,7 @@ private ClientArgs() {}
 
     private ClientArgs(ClientArgs $) {
         this.cloudKmsConfig = $.cloudKmsConfig;
+        this.createSampleIntegrations = $.createSampleIntegrations;
         this.createSampleWorkflows = $.createSampleWorkflows;
         this.location = $.location;
         this.project = $.project;
@@ -169,22 +213,57 @@ public Builder cloudKmsConfig(ClientCloudKmsConfigArgs cloudKmsConfig) {
         }
 
         /**
-         * @param createSampleWorkflows Indicates if sample workflow should be created along with provisioning.
+         * @param createSampleIntegrations Indicates if sample integrations should be created along with provisioning.
+         * 
+         * @return builder
+         * 
+         */
+        public Builder createSampleIntegrations(@Nullable Output createSampleIntegrations) {
+            $.createSampleIntegrations = createSampleIntegrations;
+            return this;
+        }
+
+        /**
+         * @param createSampleIntegrations Indicates if sample integrations should be created along with provisioning.
          * 
          * @return builder
          * 
          */
+        public Builder createSampleIntegrations(Boolean createSampleIntegrations) {
+            return createSampleIntegrations(Output.of(createSampleIntegrations));
+        }
+
+        /**
+         * @param createSampleWorkflows (Optional, Deprecated)
+         * Indicates if sample workflow should be created along with provisioning.
+         * 
+         * > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+         * 
+         * @return builder
+         * 
+         * @deprecated
+         * `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+         * 
+         */
+        @Deprecated /* `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. */
         public Builder createSampleWorkflows(@Nullable Output createSampleWorkflows) {
             $.createSampleWorkflows = createSampleWorkflows;
             return this;
         }
 
         /**
-         * @param createSampleWorkflows Indicates if sample workflow should be created along with provisioning.
+         * @param createSampleWorkflows (Optional, Deprecated)
+         * Indicates if sample workflow should be created along with provisioning.
+         * 
+         * > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
          * 
          * @return builder
          * 
+         * @deprecated
+         * `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+         * 
          */
+        @Deprecated /* `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. */
         public Builder createSampleWorkflows(Boolean createSampleWorkflows) {
             return createSampleWorkflows(Output.of(createSampleWorkflows));
         }
@@ -238,22 +317,36 @@ public Builder project(String project) {
         }
 
         /**
-         * @param provisionGmek Indicates provision with GMEK or CMEK.
+         * @param provisionGmek (Optional, Deprecated)
+         * Indicates provision with GMEK or CMEK.
+         * 
+         * > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
          * 
          * @return builder
          * 
+         * @deprecated
+         * `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
+         * 
          */
+        @Deprecated /* `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. */
         public Builder provisionGmek(@Nullable Output provisionGmek) {
             $.provisionGmek = provisionGmek;
             return this;
         }
 
         /**
-         * @param provisionGmek Indicates provision with GMEK or CMEK.
+         * @param provisionGmek (Optional, Deprecated)
+         * Indicates provision with GMEK or CMEK.
+         * 
+         * > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
          * 
          * @return builder
          * 
+         * @deprecated
+         * `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
+         * 
          */
+        @Deprecated /* `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. */
         public Builder provisionGmek(Boolean provisionGmek) {
             return provisionGmek(Output.of(provisionGmek));
         }
diff --git a/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/inputs/ClientState.java b/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/inputs/ClientState.java
index 98acee8534..b134f2c43c 100644
--- a/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/inputs/ClientState.java
+++ b/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/inputs/ClientState.java
@@ -35,16 +35,45 @@ public Optional> cloudKmsConfig() {
     }
 
     /**
+     * Indicates if sample integrations should be created along with provisioning.
+     * 
+     */
+    @Import(name="createSampleIntegrations")
+    private @Nullable Output createSampleIntegrations;
+
+    /**
+     * @return Indicates if sample integrations should be created along with provisioning.
+     * 
+     */
+    public Optional> createSampleIntegrations() {
+        return Optional.ofNullable(this.createSampleIntegrations);
+    }
+
+    /**
+     * (Optional, Deprecated)
      * Indicates if sample workflow should be created along with provisioning.
      * 
+     * > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+     * 
+     * @deprecated
+     * `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+     * 
      */
+    @Deprecated /* `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. */
     @Import(name="createSampleWorkflows")
     private @Nullable Output createSampleWorkflows;
 
     /**
-     * @return Indicates if sample workflow should be created along with provisioning.
+     * @return (Optional, Deprecated)
+     * Indicates if sample workflow should be created along with provisioning.
+     * 
+     * > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+     * 
+     * @deprecated
+     * `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
      * 
      */
+    @Deprecated /* `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. */
     public Optional> createSampleWorkflows() {
         return Optional.ofNullable(this.createSampleWorkflows);
     }
@@ -86,16 +115,30 @@ public Optional> project() {
     }
 
     /**
+     * (Optional, Deprecated)
      * Indicates provision with GMEK or CMEK.
      * 
+     * > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
+     * 
+     * @deprecated
+     * `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
+     * 
      */
+    @Deprecated /* `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. */
     @Import(name="provisionGmek")
     private @Nullable Output provisionGmek;
 
     /**
-     * @return Indicates provision with GMEK or CMEK.
+     * @return (Optional, Deprecated)
+     * Indicates provision with GMEK or CMEK.
+     * 
+     * > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
+     * 
+     * @deprecated
+     * `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
      * 
      */
+    @Deprecated /* `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. */
     public Optional> provisionGmek() {
         return Optional.ofNullable(this.provisionGmek);
     }
@@ -119,6 +162,7 @@ private ClientState() {}
 
     private ClientState(ClientState $) {
         this.cloudKmsConfig = $.cloudKmsConfig;
+        this.createSampleIntegrations = $.createSampleIntegrations;
         this.createSampleWorkflows = $.createSampleWorkflows;
         this.location = $.location;
         this.project = $.project;
@@ -168,22 +212,57 @@ public Builder cloudKmsConfig(ClientCloudKmsConfigArgs cloudKmsConfig) {
         }
 
         /**
-         * @param createSampleWorkflows Indicates if sample workflow should be created along with provisioning.
+         * @param createSampleIntegrations Indicates if sample integrations should be created along with provisioning.
+         * 
+         * @return builder
+         * 
+         */
+        public Builder createSampleIntegrations(@Nullable Output createSampleIntegrations) {
+            $.createSampleIntegrations = createSampleIntegrations;
+            return this;
+        }
+
+        /**
+         * @param createSampleIntegrations Indicates if sample integrations should be created along with provisioning.
          * 
          * @return builder
          * 
          */
+        public Builder createSampleIntegrations(Boolean createSampleIntegrations) {
+            return createSampleIntegrations(Output.of(createSampleIntegrations));
+        }
+
+        /**
+         * @param createSampleWorkflows (Optional, Deprecated)
+         * Indicates if sample workflow should be created along with provisioning.
+         * 
+         * > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+         * 
+         * @return builder
+         * 
+         * @deprecated
+         * `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+         * 
+         */
+        @Deprecated /* `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. */
         public Builder createSampleWorkflows(@Nullable Output createSampleWorkflows) {
             $.createSampleWorkflows = createSampleWorkflows;
             return this;
         }
 
         /**
-         * @param createSampleWorkflows Indicates if sample workflow should be created along with provisioning.
+         * @param createSampleWorkflows (Optional, Deprecated)
+         * Indicates if sample workflow should be created along with provisioning.
+         * 
+         * > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
          * 
          * @return builder
          * 
+         * @deprecated
+         * `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.
+         * 
          */
+        @Deprecated /* `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. */
         public Builder createSampleWorkflows(Boolean createSampleWorkflows) {
             return createSampleWorkflows(Output.of(createSampleWorkflows));
         }
@@ -237,22 +316,36 @@ public Builder project(String project) {
         }
 
         /**
-         * @param provisionGmek Indicates provision with GMEK or CMEK.
+         * @param provisionGmek (Optional, Deprecated)
+         * Indicates provision with GMEK or CMEK.
+         * 
+         * > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
          * 
          * @return builder
          * 
+         * @deprecated
+         * `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
+         * 
          */
+        @Deprecated /* `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. */
         public Builder provisionGmek(@Nullable Output provisionGmek) {
             $.provisionGmek = provisionGmek;
             return this;
         }
 
         /**
-         * @param provisionGmek Indicates provision with GMEK or CMEK.
+         * @param provisionGmek (Optional, Deprecated)
+         * Indicates provision with GMEK or CMEK.
+         * 
+         * > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
          * 
          * @return builder
          * 
+         * @deprecated
+         * `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.
+         * 
          */
+        @Deprecated /* `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. */
         public Builder provisionGmek(Boolean provisionGmek) {
             return provisionGmek(Output.of(provisionGmek));
         }
diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Dataset.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Dataset.java
index 1a6e372ab1..97194af3bd 100644
--- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Dataset.java
+++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Dataset.java
@@ -304,7 +304,7 @@
  * }
  * 
* <!--End PulumiCodeChooser --> - * ### Bigquery Dataset External Reference Aws Docs + * ### Bigquery Dataset External Reference Aws * * <!--Start PulumiCodeChooser --> *
diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Job.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Job.java
index 13a3b0edca..b4601d36c6 100644
--- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Job.java
+++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Job.java
@@ -466,7 +466,9 @@
  *     }
  * 
  *     public static void stack(Context ctx) {
- *         for (var i = 0; i < 2; i++) {
+ *         final var count = 2;
+ * 
+ *         for (var i = 0; i < count; i++) {
  *             new Dataset("sourceDataset-" + i, DatasetArgs.builder()            
  *                 .datasetId(String.format("job_copy_%s_dataset", range.value()))
  *                 .friendlyName("test")
@@ -476,7 +478,7 @@
  * 
  *         
  * }
- *         for (var i = 0; i < sourceDataset.length(); i++) {
+ *         for (var i = 0; i < count; i++) {
  *             new Table("source-" + i, TableArgs.builder()            
  *                 .deletionProtection(false)
  *                 .datasetId(sourceDataset[range.value()].datasetId())
diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Job.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Job.java
index f317e301a6..711d374d04 100644
--- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Job.java
+++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Job.java
@@ -349,7 +349,7 @@
  *         var default_ = new Job("default", JobArgs.builder()        
  *             .name("cloudrun-job")
  *             .location("us-central1")
- *             .launchStage("BETA")
+ *             .launchStage("GA")
  *             .template(JobTemplateArgs.builder()
  *                 .template(JobTemplateTemplateArgs.builder()
  *                     .containers(JobTemplateTemplateContainerArgs.builder()
@@ -364,7 +364,6 @@
  *                                 "tag2",
  *                                 "tag3")
  *                             .build())
- *                         .egress("ALL_TRAFFIC")
  *                         .build())
  *                     .build())
  *                 .build())
diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Service.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Service.java
index dcc31d6d14..3f3e5bf269 100644
--- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Service.java
+++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Service.java
@@ -349,7 +349,7 @@
  *         var default_ = new Service("default", ServiceArgs.builder()        
  *             .name("cloudrun-service")
  *             .location("us-central1")
- *             .launchStage("BETA")
+ *             .launchStage("GA")
  *             .template(ServiceTemplateArgs.builder()
  *                 .containers(ServiceTemplateContainerArgs.builder()
  *                     .image("us-docker.pkg.dev/cloudrun/container/hello")
@@ -363,7 +363,6 @@
  *                             "tag2",
  *                             "tag3")
  *                         .build())
- *                     .egress("ALL_TRAFFIC")
  *                     .build())
  *                 .build())
  *             .build());
diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterPeer.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterPeer.java
index 2d9de9f27b..45a329e023 100644
--- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterPeer.java
+++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterPeer.java
@@ -315,6 +315,52 @@
  * 
* <!--End PulumiCodeChooser --> * + * ### Router Peer Md5 Authentication Key + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.compute.RouterPeer;
+ * import com.pulumi.gcp.compute.RouterPeerArgs;
+ * import com.pulumi.gcp.compute.inputs.RouterPeerMd5AuthenticationKeyArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 foobar = new RouterPeer("foobar", RouterPeerArgs.builder()        
+ *             .name("%s-peer")
+ *             .router(foobarGoogleComputeRouter.name())
+ *             .region(foobarGoogleComputeRouter.region())
+ *             .peerAsn(65515)
+ *             .advertisedRoutePriority(100)
+ *             .interface_(foobarGoogleComputeRouterInterface.name())
+ *             .peerIpAddress("169.254.3.2")
+ *             .md5AuthenticationKey(RouterPeerMd5AuthenticationKeyArgs.builder()
+ *                 .name("%s-peer-key")
+ *                 .key("%s-peer-key-value")
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * * ## Import * * RouterBgpPeer can be imported using any of these accepted formats: @@ -569,16 +615,16 @@ public Output managementType() { return this.managementType; } /** - * Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - * Router.md5_authentication_keys. The field must comply with RFC1035. + * Configuration for MD5 authentication on the BGP session. + * Structure is documented below. * */ @Export(name="md5AuthenticationKey", refs={RouterPeerMd5AuthenticationKey.class}, tree="[0]") private Output md5AuthenticationKey; /** - * @return Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - * Router.md5_authentication_keys. The field must comply with RFC1035. + * @return Configuration for MD5 authentication on the BGP session. + * Structure is documented below. * */ public Output> md5AuthenticationKey() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterPeerArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterPeerArgs.java index 6d2a37ae68..252be6d1c3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterPeerArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterPeerArgs.java @@ -241,16 +241,16 @@ public Optional> ipv6NexthopAddress() { } /** - * Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - * Router.md5_authentication_keys. The field must comply with RFC1035. + * Configuration for MD5 authentication on the BGP session. + * Structure is documented below. * */ @Import(name="md5AuthenticationKey") private @Nullable Output md5AuthenticationKey; /** - * @return Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - * Router.md5_authentication_keys. The field must comply with RFC1035. + * @return Configuration for MD5 authentication on the BGP session. + * Structure is documented below. * */ public Optional> md5AuthenticationKey() { @@ -788,8 +788,8 @@ public Builder ipv6NexthopAddress(String ipv6NexthopAddress) { } /** - * @param md5AuthenticationKey Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - * Router.md5_authentication_keys. The field must comply with RFC1035. + * @param md5AuthenticationKey Configuration for MD5 authentication on the BGP session. + * Structure is documented below. * * @return builder * @@ -800,8 +800,8 @@ public Builder md5AuthenticationKey(@Nullable Output> minTransmitInterval() { * BFD declares that a peer is unavailable. If set, the value must * be a value between 5 and 16. * + * <a name="nested_md5_authentication_key"></a>The `md5_authentication_key` block supports: + * */ @Import(name="multiplier") private @Nullable Output multiplier; @@ -77,6 +79,8 @@ public Optional> minTransmitInterval() { * BFD declares that a peer is unavailable. If set, the value must * be a value between 5 and 16. * + * <a name="nested_md5_authentication_key"></a>The `md5_authentication_key` block supports: + * */ public Optional> multiplier() { return Optional.ofNullable(this.multiplier); @@ -197,6 +201,8 @@ public Builder minTransmitInterval(Integer minTransmitInterval) { * BFD declares that a peer is unavailable. If set, the value must * be a value between 5 and 16. * + * <a name="nested_md5_authentication_key"></a>The `md5_authentication_key` block supports: + * * @return builder * */ @@ -210,6 +216,8 @@ public Builder multiplier(@Nullable Output multiplier) { * BFD declares that a peer is unavailable. If set, the value must * be a value between 5 and 16. * + * <a name="nested_md5_authentication_key"></a>The `md5_authentication_key` block supports: + * * @return builder * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RouterPeerState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RouterPeerState.java index 136f243c4d..461fdac480 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RouterPeerState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RouterPeerState.java @@ -255,16 +255,16 @@ public Optional> managementType() { } /** - * Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - * Router.md5_authentication_keys. The field must comply with RFC1035. + * Configuration for MD5 authentication on the BGP session. + * Structure is documented below. * */ @Import(name="md5AuthenticationKey") private @Nullable Output md5AuthenticationKey; /** - * @return Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - * Router.md5_authentication_keys. The field must comply with RFC1035. + * @return Configuration for MD5 authentication on the BGP session. + * Structure is documented below. * */ public Optional> md5AuthenticationKey() { @@ -824,8 +824,8 @@ public Builder managementType(String managementType) { } /** - * @param md5AuthenticationKey Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - * Router.md5_authentication_keys. The field must comply with RFC1035. + * @param md5AuthenticationKey Configuration for MD5 authentication on the BGP session. + * Structure is documented below. * * @return builder * @@ -836,8 +836,8 @@ public Builder md5AuthenticationKey(@Nullable Output minTransmitInterval() { * BFD declares that a peer is unavailable. If set, the value must * be a value between 5 and 16. * + * <a name="nested_md5_authentication_key"></a>The `md5_authentication_key` block supports: + * */ public Optional multiplier() { return Optional.ofNullable(this.multiplier); diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigArgs.java index 5957ff5c69..e1f5690333 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigArgs.java @@ -20,6 +20,7 @@ import com.pulumi.gcp.container.inputs.ClusterNodeConfigLocalNvmeSsdBlockConfigArgs; import com.pulumi.gcp.container.inputs.ClusterNodeConfigReservationAffinityArgs; import com.pulumi.gcp.container.inputs.ClusterNodeConfigSandboxConfigArgs; +import com.pulumi.gcp.container.inputs.ClusterNodeConfigSecondaryBootDiskArgs; import com.pulumi.gcp.container.inputs.ClusterNodeConfigShieldedInstanceConfigArgs; import com.pulumi.gcp.container.inputs.ClusterNodeConfigSoleTenantConfigArgs; import com.pulumi.gcp.container.inputs.ClusterNodeConfigTaintArgs; @@ -578,6 +579,21 @@ public Optional> sandboxConfig() { return Optional.ofNullable(this.sandboxConfig); } + /** + * Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + */ + @Import(name="secondaryBootDisks") + private @Nullable Output> secondaryBootDisks; + + /** + * @return Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + */ + public Optional>> secondaryBootDisks() { + return Optional.ofNullable(this.secondaryBootDisks); + } + /** * The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -741,6 +757,7 @@ private ClusterNodeConfigArgs(ClusterNodeConfigArgs $) { this.resourceLabels = $.resourceLabels; this.resourceManagerTags = $.resourceManagerTags; this.sandboxConfig = $.sandboxConfig; + this.secondaryBootDisks = $.secondaryBootDisks; this.serviceAccount = $.serviceAccount; this.shieldedInstanceConfig = $.shieldedInstanceConfig; this.soleTenantConfig = $.soleTenantConfig; @@ -1528,6 +1545,37 @@ public Builder sandboxConfig(ClusterNodeConfigSandboxConfigArgs sandboxConfig) { return sandboxConfig(Output.of(sandboxConfig)); } + /** + * @param secondaryBootDisks Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + * @return builder + * + */ + public Builder secondaryBootDisks(@Nullable Output> secondaryBootDisks) { + $.secondaryBootDisks = secondaryBootDisks; + return this; + } + + /** + * @param secondaryBootDisks Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + * @return builder + * + */ + public Builder secondaryBootDisks(List secondaryBootDisks) { + return secondaryBootDisks(Output.of(secondaryBootDisks)); + } + + /** + * @param secondaryBootDisks Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + * @return builder + * + */ + public Builder secondaryBootDisks(ClusterNodeConfigSecondaryBootDiskArgs... secondaryBootDisks) { + return secondaryBootDisks(List.of(secondaryBootDisks)); + } + /** * @param serviceAccount The service account to be used by the Node VMs. * If not specified, the "default" service account is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfigArgs.java index c9b5b116b4..99ec0d2287 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfigArgs.java @@ -19,6 +19,7 @@ public final class ClusterNodeConfigGuestAcceleratorGpuSharingConfigArgs extends * The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) * */ @Import(name="gpuSharingStrategy", required=true) @@ -28,6 +29,7 @@ public final class ClusterNodeConfigGuestAcceleratorGpuSharingConfigArgs extends * @return The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) * */ public Output gpuSharingStrategy() { @@ -78,6 +80,7 @@ public Builder(ClusterNodeConfigGuestAcceleratorGpuSharingConfigArgs defaults) { * @param gpuSharingStrategy The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) * * @return builder * @@ -91,6 +94,7 @@ public Builder gpuSharingStrategy(Output gpuSharingStrategy) { * @param gpuSharingStrategy The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigSecondaryBootDiskArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigSecondaryBootDiskArgs.java new file mode 100644 index 0000000000..d600e63eb5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigSecondaryBootDiskArgs.java @@ -0,0 +1,124 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterNodeConfigSecondaryBootDiskArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterNodeConfigSecondaryBootDiskArgs Empty = new ClusterNodeConfigSecondaryBootDiskArgs(); + + /** + * Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + * + */ + @Import(name="diskImage", required=true) + private Output diskImage; + + /** + * @return Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + * + */ + public Output diskImage() { + return this.diskImage; + } + + /** + * Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + * + */ + @Import(name="mode") + private @Nullable Output mode; + + /** + * @return Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + * + */ + public Optional> mode() { + return Optional.ofNullable(this.mode); + } + + private ClusterNodeConfigSecondaryBootDiskArgs() {} + + private ClusterNodeConfigSecondaryBootDiskArgs(ClusterNodeConfigSecondaryBootDiskArgs $) { + this.diskImage = $.diskImage; + this.mode = $.mode; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterNodeConfigSecondaryBootDiskArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterNodeConfigSecondaryBootDiskArgs $; + + public Builder() { + $ = new ClusterNodeConfigSecondaryBootDiskArgs(); + } + + public Builder(ClusterNodeConfigSecondaryBootDiskArgs defaults) { + $ = new ClusterNodeConfigSecondaryBootDiskArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param diskImage Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + * + * @return builder + * + */ + public Builder diskImage(Output diskImage) { + $.diskImage = diskImage; + return this; + } + + /** + * @param diskImage Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + * + * @return builder + * + */ + public Builder diskImage(String diskImage) { + return diskImage(Output.of(diskImage)); + } + + /** + * @param mode Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + * + * @return builder + * + */ + public Builder mode(@Nullable Output mode) { + $.mode = mode; + return this; + } + + /** + * @param mode Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + * + * @return builder + * + */ + public Builder mode(String mode) { + return mode(Output.of(mode)); + } + + public ClusterNodeConfigSecondaryBootDiskArgs build() { + if ($.diskImage == null) { + throw new MissingRequiredPropertyException("ClusterNodeConfigSecondaryBootDiskArgs", "diskImage"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigArgs.java index 63643e7023..dfd0431479 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigArgs.java @@ -20,6 +20,7 @@ import com.pulumi.gcp.container.inputs.ClusterNodePoolNodeConfigLocalNvmeSsdBlockConfigArgs; import com.pulumi.gcp.container.inputs.ClusterNodePoolNodeConfigReservationAffinityArgs; import com.pulumi.gcp.container.inputs.ClusterNodePoolNodeConfigSandboxConfigArgs; +import com.pulumi.gcp.container.inputs.ClusterNodePoolNodeConfigSecondaryBootDiskArgs; import com.pulumi.gcp.container.inputs.ClusterNodePoolNodeConfigShieldedInstanceConfigArgs; import com.pulumi.gcp.container.inputs.ClusterNodePoolNodeConfigSoleTenantConfigArgs; import com.pulumi.gcp.container.inputs.ClusterNodePoolNodeConfigTaintArgs; @@ -578,6 +579,21 @@ public Optional> sandboxConfi return Optional.ofNullable(this.sandboxConfig); } + /** + * Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + */ + @Import(name="secondaryBootDisks") + private @Nullable Output> secondaryBootDisks; + + /** + * @return Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + */ + public Optional>> secondaryBootDisks() { + return Optional.ofNullable(this.secondaryBootDisks); + } + /** * The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -741,6 +757,7 @@ private ClusterNodePoolNodeConfigArgs(ClusterNodePoolNodeConfigArgs $) { this.resourceLabels = $.resourceLabels; this.resourceManagerTags = $.resourceManagerTags; this.sandboxConfig = $.sandboxConfig; + this.secondaryBootDisks = $.secondaryBootDisks; this.serviceAccount = $.serviceAccount; this.shieldedInstanceConfig = $.shieldedInstanceConfig; this.soleTenantConfig = $.soleTenantConfig; @@ -1528,6 +1545,37 @@ public Builder sandboxConfig(ClusterNodePoolNodeConfigSandboxConfigArgs sandboxC return sandboxConfig(Output.of(sandboxConfig)); } + /** + * @param secondaryBootDisks Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + * @return builder + * + */ + public Builder secondaryBootDisks(@Nullable Output> secondaryBootDisks) { + $.secondaryBootDisks = secondaryBootDisks; + return this; + } + + /** + * @param secondaryBootDisks Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + * @return builder + * + */ + public Builder secondaryBootDisks(List secondaryBootDisks) { + return secondaryBootDisks(Output.of(secondaryBootDisks)); + } + + /** + * @param secondaryBootDisks Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + * @return builder + * + */ + public Builder secondaryBootDisks(ClusterNodePoolNodeConfigSecondaryBootDiskArgs... secondaryBootDisks) { + return secondaryBootDisks(List.of(secondaryBootDisks)); + } + /** * @param serviceAccount The service account to be used by the Node VMs. * If not specified, the "default" service account is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigArgs.java index 45c080cda1..7c7df9ce9e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigArgs.java @@ -19,6 +19,7 @@ public final class ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigArgs * The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) * */ @Import(name="gpuSharingStrategy", required=true) @@ -28,6 +29,7 @@ public final class ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigArgs * @return The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) * */ public Output gpuSharingStrategy() { @@ -78,6 +80,7 @@ public Builder(ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfigArgs def * @param gpuSharingStrategy The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) * * @return builder * @@ -91,6 +94,7 @@ public Builder gpuSharingStrategy(Output gpuSharingStrategy) { * @param gpuSharingStrategy The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigSecondaryBootDiskArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigSecondaryBootDiskArgs.java new file mode 100644 index 0000000000..a1e025dac3 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigSecondaryBootDiskArgs.java @@ -0,0 +1,124 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterNodePoolNodeConfigSecondaryBootDiskArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterNodePoolNodeConfigSecondaryBootDiskArgs Empty = new ClusterNodePoolNodeConfigSecondaryBootDiskArgs(); + + /** + * Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + * + */ + @Import(name="diskImage", required=true) + private Output diskImage; + + /** + * @return Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + * + */ + public Output diskImage() { + return this.diskImage; + } + + /** + * Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + * + */ + @Import(name="mode") + private @Nullable Output mode; + + /** + * @return Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + * + */ + public Optional> mode() { + return Optional.ofNullable(this.mode); + } + + private ClusterNodePoolNodeConfigSecondaryBootDiskArgs() {} + + private ClusterNodePoolNodeConfigSecondaryBootDiskArgs(ClusterNodePoolNodeConfigSecondaryBootDiskArgs $) { + this.diskImage = $.diskImage; + this.mode = $.mode; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterNodePoolNodeConfigSecondaryBootDiskArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterNodePoolNodeConfigSecondaryBootDiskArgs $; + + public Builder() { + $ = new ClusterNodePoolNodeConfigSecondaryBootDiskArgs(); + } + + public Builder(ClusterNodePoolNodeConfigSecondaryBootDiskArgs defaults) { + $ = new ClusterNodePoolNodeConfigSecondaryBootDiskArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param diskImage Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + * + * @return builder + * + */ + public Builder diskImage(Output diskImage) { + $.diskImage = diskImage; + return this; + } + + /** + * @param diskImage Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + * + * @return builder + * + */ + public Builder diskImage(String diskImage) { + return diskImage(Output.of(diskImage)); + } + + /** + * @param mode Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + * + * @return builder + * + */ + public Builder mode(@Nullable Output mode) { + $.mode = mode; + return this; + } + + /** + * @param mode Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + * + * @return builder + * + */ + public Builder mode(String mode) { + return mode(Output.of(mode)); + } + + public ClusterNodePoolNodeConfigSecondaryBootDiskArgs build() { + if ($.diskImage == null) { + throw new MissingRequiredPropertyException("ClusterNodePoolNodeConfigSecondaryBootDiskArgs", "diskImage"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolNodeConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolNodeConfigArgs.java index a41f92df18..f689734c57 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolNodeConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolNodeConfigArgs.java @@ -20,6 +20,7 @@ import com.pulumi.gcp.container.inputs.NodePoolNodeConfigLocalNvmeSsdBlockConfigArgs; import com.pulumi.gcp.container.inputs.NodePoolNodeConfigReservationAffinityArgs; import com.pulumi.gcp.container.inputs.NodePoolNodeConfigSandboxConfigArgs; +import com.pulumi.gcp.container.inputs.NodePoolNodeConfigSecondaryBootDiskArgs; import com.pulumi.gcp.container.inputs.NodePoolNodeConfigShieldedInstanceConfigArgs; import com.pulumi.gcp.container.inputs.NodePoolNodeConfigSoleTenantConfigArgs; import com.pulumi.gcp.container.inputs.NodePoolNodeConfigTaintArgs; @@ -504,6 +505,21 @@ public Optional> sandboxConfig() { return Optional.ofNullable(this.sandboxConfig); } + /** + * Secondary boot disks for preloading data or container images. + * + */ + @Import(name="secondaryBootDisks") + private @Nullable Output> secondaryBootDisks; + + /** + * @return Secondary boot disks for preloading data or container images. + * + */ + public Optional>> secondaryBootDisks() { + return Optional.ofNullable(this.secondaryBootDisks); + } + /** * The Google Cloud Platform Service Account to be used by the node VMs. * @@ -643,6 +659,7 @@ private NodePoolNodeConfigArgs(NodePoolNodeConfigArgs $) { this.resourceLabels = $.resourceLabels; this.resourceManagerTags = $.resourceManagerTags; this.sandboxConfig = $.sandboxConfig; + this.secondaryBootDisks = $.secondaryBootDisks; this.serviceAccount = $.serviceAccount; this.shieldedInstanceConfig = $.shieldedInstanceConfig; this.soleTenantConfig = $.soleTenantConfig; @@ -1351,6 +1368,37 @@ public Builder sandboxConfig(NodePoolNodeConfigSandboxConfigArgs sandboxConfig) return sandboxConfig(Output.of(sandboxConfig)); } + /** + * @param secondaryBootDisks Secondary boot disks for preloading data or container images. + * + * @return builder + * + */ + public Builder secondaryBootDisks(@Nullable Output> secondaryBootDisks) { + $.secondaryBootDisks = secondaryBootDisks; + return this; + } + + /** + * @param secondaryBootDisks Secondary boot disks for preloading data or container images. + * + * @return builder + * + */ + public Builder secondaryBootDisks(List secondaryBootDisks) { + return secondaryBootDisks(Output.of(secondaryBootDisks)); + } + + /** + * @param secondaryBootDisks Secondary boot disks for preloading data or container images. + * + * @return builder + * + */ + public Builder secondaryBootDisks(NodePoolNodeConfigSecondaryBootDiskArgs... secondaryBootDisks) { + return secondaryBootDisks(List.of(secondaryBootDisks)); + } + /** * @param serviceAccount The Google Cloud Platform Service Account to be used by the node VMs. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolNodeConfigSecondaryBootDiskArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolNodeConfigSecondaryBootDiskArgs.java new file mode 100644 index 0000000000..ec255222e4 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolNodeConfigSecondaryBootDiskArgs.java @@ -0,0 +1,124 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class NodePoolNodeConfigSecondaryBootDiskArgs extends com.pulumi.resources.ResourceArgs { + + public static final NodePoolNodeConfigSecondaryBootDiskArgs Empty = new NodePoolNodeConfigSecondaryBootDiskArgs(); + + /** + * Disk image to create the secondary boot disk from + * + */ + @Import(name="diskImage", required=true) + private Output diskImage; + + /** + * @return Disk image to create the secondary boot disk from + * + */ + public Output diskImage() { + return this.diskImage; + } + + /** + * Mode for how the secondary boot disk is used. + * + */ + @Import(name="mode") + private @Nullable Output mode; + + /** + * @return Mode for how the secondary boot disk is used. + * + */ + public Optional> mode() { + return Optional.ofNullable(this.mode); + } + + private NodePoolNodeConfigSecondaryBootDiskArgs() {} + + private NodePoolNodeConfigSecondaryBootDiskArgs(NodePoolNodeConfigSecondaryBootDiskArgs $) { + this.diskImage = $.diskImage; + this.mode = $.mode; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(NodePoolNodeConfigSecondaryBootDiskArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private NodePoolNodeConfigSecondaryBootDiskArgs $; + + public Builder() { + $ = new NodePoolNodeConfigSecondaryBootDiskArgs(); + } + + public Builder(NodePoolNodeConfigSecondaryBootDiskArgs defaults) { + $ = new NodePoolNodeConfigSecondaryBootDiskArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param diskImage Disk image to create the secondary boot disk from + * + * @return builder + * + */ + public Builder diskImage(Output diskImage) { + $.diskImage = diskImage; + return this; + } + + /** + * @param diskImage Disk image to create the secondary boot disk from + * + * @return builder + * + */ + public Builder diskImage(String diskImage) { + return diskImage(Output.of(diskImage)); + } + + /** + * @param mode Mode for how the secondary boot disk is used. + * + * @return builder + * + */ + public Builder mode(@Nullable Output mode) { + $.mode = mode; + return this; + } + + /** + * @param mode Mode for how the secondary boot disk is used. + * + * @return builder + * + */ + public Builder mode(String mode) { + return mode(Output.of(mode)); + } + + public NodePoolNodeConfigSecondaryBootDiskArgs build() { + if ($.diskImage == null) { + throw new MissingRequiredPropertyException("NodePoolNodeConfigSecondaryBootDiskArgs", "diskImage"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfig.java index 3629212175..6a6ed6b8f2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfig.java @@ -19,6 +19,7 @@ import com.pulumi.gcp.container.outputs.ClusterNodeConfigLocalNvmeSsdBlockConfig; import com.pulumi.gcp.container.outputs.ClusterNodeConfigReservationAffinity; import com.pulumi.gcp.container.outputs.ClusterNodeConfigSandboxConfig; +import com.pulumi.gcp.container.outputs.ClusterNodeConfigSecondaryBootDisk; import com.pulumi.gcp.container.outputs.ClusterNodeConfigShieldedInstanceConfig; import com.pulumi.gcp.container.outputs.ClusterNodeConfigSoleTenantConfig; import com.pulumi.gcp.container.outputs.ClusterNodeConfigTaint; @@ -227,6 +228,11 @@ public final class ClusterNodeConfig { * */ private @Nullable ClusterNodeConfigSandboxConfig sandboxConfig; + /** + * @return Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + */ + private @Nullable List secondaryBootDisks; /** * @return The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -530,6 +536,13 @@ public Map resourceManagerTags() { public Optional sandboxConfig() { return Optional.ofNullable(this.sandboxConfig); } + /** + * @return Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + */ + public List secondaryBootDisks() { + return this.secondaryBootDisks == null ? List.of() : this.secondaryBootDisks; + } /** * @return The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -632,6 +645,7 @@ public static final class Builder { private @Nullable Map resourceLabels; private @Nullable Map resourceManagerTags; private @Nullable ClusterNodeConfigSandboxConfig sandboxConfig; + private @Nullable List secondaryBootDisks; private @Nullable String serviceAccount; private @Nullable ClusterNodeConfigShieldedInstanceConfig shieldedInstanceConfig; private @Nullable ClusterNodeConfigSoleTenantConfig soleTenantConfig; @@ -673,6 +687,7 @@ public Builder(ClusterNodeConfig defaults) { this.resourceLabels = defaults.resourceLabels; this.resourceManagerTags = defaults.resourceManagerTags; this.sandboxConfig = defaults.sandboxConfig; + this.secondaryBootDisks = defaults.secondaryBootDisks; this.serviceAccount = defaults.serviceAccount; this.shieldedInstanceConfig = defaults.shieldedInstanceConfig; this.soleTenantConfig = defaults.soleTenantConfig; @@ -878,6 +893,15 @@ public Builder sandboxConfig(@Nullable ClusterNodeConfigSandboxConfig sandboxCon return this; } @CustomType.Setter + public Builder secondaryBootDisks(@Nullable List secondaryBootDisks) { + + this.secondaryBootDisks = secondaryBootDisks; + return this; + } + public Builder secondaryBootDisks(ClusterNodeConfigSecondaryBootDisk... secondaryBootDisks) { + return secondaryBootDisks(List.of(secondaryBootDisks)); + } + @CustomType.Setter public Builder serviceAccount(@Nullable String serviceAccount) { this.serviceAccount = serviceAccount; @@ -958,6 +982,7 @@ public ClusterNodeConfig build() { _resultValue.resourceLabels = resourceLabels; _resultValue.resourceManagerTags = resourceManagerTags; _resultValue.sandboxConfig = sandboxConfig; + _resultValue.secondaryBootDisks = secondaryBootDisks; _resultValue.serviceAccount = serviceAccount; _resultValue.shieldedInstanceConfig = shieldedInstanceConfig; _resultValue.soleTenantConfig = soleTenantConfig; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfig.java index fa9073a70c..1b1a73d4a9 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfigGuestAcceleratorGpuSharingConfig.java @@ -15,6 +15,7 @@ public final class ClusterNodeConfigGuestAcceleratorGpuSharingConfig { * @return The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) * */ private String gpuSharingStrategy; @@ -29,6 +30,7 @@ private ClusterNodeConfigGuestAcceleratorGpuSharingConfig() {} * @return The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) * */ public String gpuSharingStrategy() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfigSecondaryBootDisk.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfigSecondaryBootDisk.java new file mode 100644 index 0000000000..dde835efcf --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfigSecondaryBootDisk.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterNodeConfigSecondaryBootDisk { + /** + * @return Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + * + */ + private String diskImage; + /** + * @return Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + * + */ + private @Nullable String mode; + + private ClusterNodeConfigSecondaryBootDisk() {} + /** + * @return Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + * + */ + public String diskImage() { + return this.diskImage; + } + /** + * @return Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + * + */ + public Optional mode() { + return Optional.ofNullable(this.mode); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterNodeConfigSecondaryBootDisk defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String diskImage; + private @Nullable String mode; + public Builder() {} + public Builder(ClusterNodeConfigSecondaryBootDisk defaults) { + Objects.requireNonNull(defaults); + this.diskImage = defaults.diskImage; + this.mode = defaults.mode; + } + + @CustomType.Setter + public Builder diskImage(String diskImage) { + if (diskImage == null) { + throw new MissingRequiredPropertyException("ClusterNodeConfigSecondaryBootDisk", "diskImage"); + } + this.diskImage = diskImage; + return this; + } + @CustomType.Setter + public Builder mode(@Nullable String mode) { + + this.mode = mode; + return this; + } + public ClusterNodeConfigSecondaryBootDisk build() { + final var _resultValue = new ClusterNodeConfigSecondaryBootDisk(); + _resultValue.diskImage = diskImage; + _resultValue.mode = mode; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfig.java index e95b7f87ae..bfc6a416ce 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfig.java @@ -19,6 +19,7 @@ import com.pulumi.gcp.container.outputs.ClusterNodePoolNodeConfigLocalNvmeSsdBlockConfig; import com.pulumi.gcp.container.outputs.ClusterNodePoolNodeConfigReservationAffinity; import com.pulumi.gcp.container.outputs.ClusterNodePoolNodeConfigSandboxConfig; +import com.pulumi.gcp.container.outputs.ClusterNodePoolNodeConfigSecondaryBootDisk; import com.pulumi.gcp.container.outputs.ClusterNodePoolNodeConfigShieldedInstanceConfig; import com.pulumi.gcp.container.outputs.ClusterNodePoolNodeConfigSoleTenantConfig; import com.pulumi.gcp.container.outputs.ClusterNodePoolNodeConfigTaint; @@ -227,6 +228,11 @@ public final class ClusterNodePoolNodeConfig { * */ private @Nullable ClusterNodePoolNodeConfigSandboxConfig sandboxConfig; + /** + * @return Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + */ + private @Nullable List secondaryBootDisks; /** * @return The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -530,6 +536,13 @@ public Map resourceManagerTags() { public Optional sandboxConfig() { return Optional.ofNullable(this.sandboxConfig); } + /** + * @return Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + * + */ + public List secondaryBootDisks() { + return this.secondaryBootDisks == null ? List.of() : this.secondaryBootDisks; + } /** * @return The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -632,6 +645,7 @@ public static final class Builder { private @Nullable Map resourceLabels; private @Nullable Map resourceManagerTags; private @Nullable ClusterNodePoolNodeConfigSandboxConfig sandboxConfig; + private @Nullable List secondaryBootDisks; private @Nullable String serviceAccount; private @Nullable ClusterNodePoolNodeConfigShieldedInstanceConfig shieldedInstanceConfig; private @Nullable ClusterNodePoolNodeConfigSoleTenantConfig soleTenantConfig; @@ -673,6 +687,7 @@ public Builder(ClusterNodePoolNodeConfig defaults) { this.resourceLabels = defaults.resourceLabels; this.resourceManagerTags = defaults.resourceManagerTags; this.sandboxConfig = defaults.sandboxConfig; + this.secondaryBootDisks = defaults.secondaryBootDisks; this.serviceAccount = defaults.serviceAccount; this.shieldedInstanceConfig = defaults.shieldedInstanceConfig; this.soleTenantConfig = defaults.soleTenantConfig; @@ -878,6 +893,15 @@ public Builder sandboxConfig(@Nullable ClusterNodePoolNodeConfigSandboxConfig sa return this; } @CustomType.Setter + public Builder secondaryBootDisks(@Nullable List secondaryBootDisks) { + + this.secondaryBootDisks = secondaryBootDisks; + return this; + } + public Builder secondaryBootDisks(ClusterNodePoolNodeConfigSecondaryBootDisk... secondaryBootDisks) { + return secondaryBootDisks(List.of(secondaryBootDisks)); + } + @CustomType.Setter public Builder serviceAccount(@Nullable String serviceAccount) { this.serviceAccount = serviceAccount; @@ -958,6 +982,7 @@ public ClusterNodePoolNodeConfig build() { _resultValue.resourceLabels = resourceLabels; _resultValue.resourceManagerTags = resourceManagerTags; _resultValue.sandboxConfig = sandboxConfig; + _resultValue.secondaryBootDisks = secondaryBootDisks; _resultValue.serviceAccount = serviceAccount; _resultValue.shieldedInstanceConfig = shieldedInstanceConfig; _resultValue.soleTenantConfig = soleTenantConfig; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig.java index 860dbf4f8a..ea159dfc4b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig.java @@ -15,6 +15,7 @@ public final class ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig { * @return The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) * */ private String gpuSharingStrategy; @@ -29,6 +30,7 @@ private ClusterNodePoolNodeConfigGuestAcceleratorGpuSharingConfig() {} * @return The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) * */ public String gpuSharingStrategy() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfigSecondaryBootDisk.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfigSecondaryBootDisk.java new file mode 100644 index 0000000000..22e8c8e9c3 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfigSecondaryBootDisk.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterNodePoolNodeConfigSecondaryBootDisk { + /** + * @return Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + * + */ + private String diskImage; + /** + * @return Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + * + */ + private @Nullable String mode; + + private ClusterNodePoolNodeConfigSecondaryBootDisk() {} + /** + * @return Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + * + */ + public String diskImage() { + return this.diskImage; + } + /** + * @return Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + * + */ + public Optional mode() { + return Optional.ofNullable(this.mode); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterNodePoolNodeConfigSecondaryBootDisk defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String diskImage; + private @Nullable String mode; + public Builder() {} + public Builder(ClusterNodePoolNodeConfigSecondaryBootDisk defaults) { + Objects.requireNonNull(defaults); + this.diskImage = defaults.diskImage; + this.mode = defaults.mode; + } + + @CustomType.Setter + public Builder diskImage(String diskImage) { + if (diskImage == null) { + throw new MissingRequiredPropertyException("ClusterNodePoolNodeConfigSecondaryBootDisk", "diskImage"); + } + this.diskImage = diskImage; + return this; + } + @CustomType.Setter + public Builder mode(@Nullable String mode) { + + this.mode = mode; + return this; + } + public ClusterNodePoolNodeConfigSecondaryBootDisk build() { + final var _resultValue = new ClusterNodePoolNodeConfigSecondaryBootDisk(); + _resultValue.diskImage = diskImage; + _resultValue.mode = mode; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodeConfig.java index db6e12bdd0..c1dda7b3b2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodeConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodeConfig.java @@ -20,6 +20,7 @@ import com.pulumi.gcp.container.outputs.GetClusterNodeConfigLocalNvmeSsdBlockConfig; import com.pulumi.gcp.container.outputs.GetClusterNodeConfigReservationAffinity; import com.pulumi.gcp.container.outputs.GetClusterNodeConfigSandboxConfig; +import com.pulumi.gcp.container.outputs.GetClusterNodeConfigSecondaryBootDisk; import com.pulumi.gcp.container.outputs.GetClusterNodeConfigShieldedInstanceConfig; import com.pulumi.gcp.container.outputs.GetClusterNodeConfigSoleTenantConfig; import com.pulumi.gcp.container.outputs.GetClusterNodeConfigTaint; @@ -189,6 +190,11 @@ public final class GetClusterNodeConfig { * */ private List sandboxConfigs; + /** + * @return Secondary boot disks for preloading data or container images. + * + */ + private List secondaryBootDisks; /** * @return The Google Cloud Platform Service Account to be used by the node VMs. * @@ -443,6 +449,13 @@ public Map resourceManagerTags() { public List sandboxConfigs() { return this.sandboxConfigs; } + /** + * @return Secondary boot disks for preloading data or container images. + * + */ + public List secondaryBootDisks() { + return this.secondaryBootDisks; + } /** * @return The Google Cloud Platform Service Account to be used by the node VMs. * @@ -533,6 +546,7 @@ public static final class Builder { private Map resourceLabels; private Map resourceManagerTags; private List sandboxConfigs; + private List secondaryBootDisks; private String serviceAccount; private List shieldedInstanceConfigs; private List soleTenantConfigs; @@ -574,6 +588,7 @@ public Builder(GetClusterNodeConfig defaults) { this.resourceLabels = defaults.resourceLabels; this.resourceManagerTags = defaults.resourceManagerTags; this.sandboxConfigs = defaults.sandboxConfigs; + this.secondaryBootDisks = defaults.secondaryBootDisks; this.serviceAccount = defaults.serviceAccount; this.shieldedInstanceConfigs = defaults.shieldedInstanceConfigs; this.soleTenantConfigs = defaults.soleTenantConfigs; @@ -880,6 +895,17 @@ public Builder sandboxConfigs(GetClusterNodeConfigSandboxConfig... sandboxConfig return sandboxConfigs(List.of(sandboxConfigs)); } @CustomType.Setter + public Builder secondaryBootDisks(List secondaryBootDisks) { + if (secondaryBootDisks == null) { + throw new MissingRequiredPropertyException("GetClusterNodeConfig", "secondaryBootDisks"); + } + this.secondaryBootDisks = secondaryBootDisks; + return this; + } + public Builder secondaryBootDisks(GetClusterNodeConfigSecondaryBootDisk... secondaryBootDisks) { + return secondaryBootDisks(List.of(secondaryBootDisks)); + } + @CustomType.Setter public Builder serviceAccount(String serviceAccount) { if (serviceAccount == null) { throw new MissingRequiredPropertyException("GetClusterNodeConfig", "serviceAccount"); @@ -983,6 +1009,7 @@ public GetClusterNodeConfig build() { _resultValue.resourceLabels = resourceLabels; _resultValue.resourceManagerTags = resourceManagerTags; _resultValue.sandboxConfigs = sandboxConfigs; + _resultValue.secondaryBootDisks = secondaryBootDisks; _resultValue.serviceAccount = serviceAccount; _resultValue.shieldedInstanceConfigs = shieldedInstanceConfigs; _resultValue.soleTenantConfigs = soleTenantConfigs; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodeConfigSecondaryBootDisk.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodeConfigSecondaryBootDisk.java new file mode 100644 index 0000000000..c2bc386d8e --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodeConfigSecondaryBootDisk.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetClusterNodeConfigSecondaryBootDisk { + /** + * @return Disk image to create the secondary boot disk from + * + */ + private String diskImage; + /** + * @return Mode for how the secondary boot disk is used. + * + */ + private String mode; + + private GetClusterNodeConfigSecondaryBootDisk() {} + /** + * @return Disk image to create the secondary boot disk from + * + */ + public String diskImage() { + return this.diskImage; + } + /** + * @return Mode for how the secondary boot disk is used. + * + */ + public String mode() { + return this.mode; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetClusterNodeConfigSecondaryBootDisk defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String diskImage; + private String mode; + public Builder() {} + public Builder(GetClusterNodeConfigSecondaryBootDisk defaults) { + Objects.requireNonNull(defaults); + this.diskImage = defaults.diskImage; + this.mode = defaults.mode; + } + + @CustomType.Setter + public Builder diskImage(String diskImage) { + if (diskImage == null) { + throw new MissingRequiredPropertyException("GetClusterNodeConfigSecondaryBootDisk", "diskImage"); + } + this.diskImage = diskImage; + return this; + } + @CustomType.Setter + public Builder mode(String mode) { + if (mode == null) { + throw new MissingRequiredPropertyException("GetClusterNodeConfigSecondaryBootDisk", "mode"); + } + this.mode = mode; + return this; + } + public GetClusterNodeConfigSecondaryBootDisk build() { + final var _resultValue = new GetClusterNodeConfigSecondaryBootDisk(); + _resultValue.diskImage = diskImage; + _resultValue.mode = mode; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolNodeConfig.java index 9eaf6074f9..8d8306a773 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolNodeConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolNodeConfig.java @@ -20,6 +20,7 @@ import com.pulumi.gcp.container.outputs.GetClusterNodePoolNodeConfigLocalNvmeSsdBlockConfig; import com.pulumi.gcp.container.outputs.GetClusterNodePoolNodeConfigReservationAffinity; import com.pulumi.gcp.container.outputs.GetClusterNodePoolNodeConfigSandboxConfig; +import com.pulumi.gcp.container.outputs.GetClusterNodePoolNodeConfigSecondaryBootDisk; import com.pulumi.gcp.container.outputs.GetClusterNodePoolNodeConfigShieldedInstanceConfig; import com.pulumi.gcp.container.outputs.GetClusterNodePoolNodeConfigSoleTenantConfig; import com.pulumi.gcp.container.outputs.GetClusterNodePoolNodeConfigTaint; @@ -189,6 +190,11 @@ public final class GetClusterNodePoolNodeConfig { * */ private List sandboxConfigs; + /** + * @return Secondary boot disks for preloading data or container images. + * + */ + private List secondaryBootDisks; /** * @return The Google Cloud Platform Service Account to be used by the node VMs. * @@ -443,6 +449,13 @@ public Map resourceManagerTags() { public List sandboxConfigs() { return this.sandboxConfigs; } + /** + * @return Secondary boot disks for preloading data or container images. + * + */ + public List secondaryBootDisks() { + return this.secondaryBootDisks; + } /** * @return The Google Cloud Platform Service Account to be used by the node VMs. * @@ -533,6 +546,7 @@ public static final class Builder { private Map resourceLabels; private Map resourceManagerTags; private List sandboxConfigs; + private List secondaryBootDisks; private String serviceAccount; private List shieldedInstanceConfigs; private List soleTenantConfigs; @@ -574,6 +588,7 @@ public Builder(GetClusterNodePoolNodeConfig defaults) { this.resourceLabels = defaults.resourceLabels; this.resourceManagerTags = defaults.resourceManagerTags; this.sandboxConfigs = defaults.sandboxConfigs; + this.secondaryBootDisks = defaults.secondaryBootDisks; this.serviceAccount = defaults.serviceAccount; this.shieldedInstanceConfigs = defaults.shieldedInstanceConfigs; this.soleTenantConfigs = defaults.soleTenantConfigs; @@ -880,6 +895,17 @@ public Builder sandboxConfigs(GetClusterNodePoolNodeConfigSandboxConfig... sandb return sandboxConfigs(List.of(sandboxConfigs)); } @CustomType.Setter + public Builder secondaryBootDisks(List secondaryBootDisks) { + if (secondaryBootDisks == null) { + throw new MissingRequiredPropertyException("GetClusterNodePoolNodeConfig", "secondaryBootDisks"); + } + this.secondaryBootDisks = secondaryBootDisks; + return this; + } + public Builder secondaryBootDisks(GetClusterNodePoolNodeConfigSecondaryBootDisk... secondaryBootDisks) { + return secondaryBootDisks(List.of(secondaryBootDisks)); + } + @CustomType.Setter public Builder serviceAccount(String serviceAccount) { if (serviceAccount == null) { throw new MissingRequiredPropertyException("GetClusterNodePoolNodeConfig", "serviceAccount"); @@ -983,6 +1009,7 @@ public GetClusterNodePoolNodeConfig build() { _resultValue.resourceLabels = resourceLabels; _resultValue.resourceManagerTags = resourceManagerTags; _resultValue.sandboxConfigs = sandboxConfigs; + _resultValue.secondaryBootDisks = secondaryBootDisks; _resultValue.serviceAccount = serviceAccount; _resultValue.shieldedInstanceConfigs = shieldedInstanceConfigs; _resultValue.soleTenantConfigs = soleTenantConfigs; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolNodeConfigSecondaryBootDisk.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolNodeConfigSecondaryBootDisk.java new file mode 100644 index 0000000000..1430359bf2 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolNodeConfigSecondaryBootDisk.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetClusterNodePoolNodeConfigSecondaryBootDisk { + /** + * @return Disk image to create the secondary boot disk from + * + */ + private String diskImage; + /** + * @return Mode for how the secondary boot disk is used. + * + */ + private String mode; + + private GetClusterNodePoolNodeConfigSecondaryBootDisk() {} + /** + * @return Disk image to create the secondary boot disk from + * + */ + public String diskImage() { + return this.diskImage; + } + /** + * @return Mode for how the secondary boot disk is used. + * + */ + public String mode() { + return this.mode; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetClusterNodePoolNodeConfigSecondaryBootDisk defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String diskImage; + private String mode; + public Builder() {} + public Builder(GetClusterNodePoolNodeConfigSecondaryBootDisk defaults) { + Objects.requireNonNull(defaults); + this.diskImage = defaults.diskImage; + this.mode = defaults.mode; + } + + @CustomType.Setter + public Builder diskImage(String diskImage) { + if (diskImage == null) { + throw new MissingRequiredPropertyException("GetClusterNodePoolNodeConfigSecondaryBootDisk", "diskImage"); + } + this.diskImage = diskImage; + return this; + } + @CustomType.Setter + public Builder mode(String mode) { + if (mode == null) { + throw new MissingRequiredPropertyException("GetClusterNodePoolNodeConfigSecondaryBootDisk", "mode"); + } + this.mode = mode; + return this; + } + public GetClusterNodePoolNodeConfigSecondaryBootDisk build() { + final var _resultValue = new GetClusterNodePoolNodeConfigSecondaryBootDisk(); + _resultValue.diskImage = diskImage; + _resultValue.mode = mode; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNodeConfig.java index ff9cb9cbb5..4fd636a110 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNodeConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNodeConfig.java @@ -19,6 +19,7 @@ import com.pulumi.gcp.container.outputs.NodePoolNodeConfigLocalNvmeSsdBlockConfig; import com.pulumi.gcp.container.outputs.NodePoolNodeConfigReservationAffinity; import com.pulumi.gcp.container.outputs.NodePoolNodeConfigSandboxConfig; +import com.pulumi.gcp.container.outputs.NodePoolNodeConfigSecondaryBootDisk; import com.pulumi.gcp.container.outputs.NodePoolNodeConfigShieldedInstanceConfig; import com.pulumi.gcp.container.outputs.NodePoolNodeConfigSoleTenantConfig; import com.pulumi.gcp.container.outputs.NodePoolNodeConfigTaint; @@ -190,6 +191,11 @@ public final class NodePoolNodeConfig { * */ private @Nullable NodePoolNodeConfigSandboxConfig sandboxConfig; + /** + * @return Secondary boot disks for preloading data or container images. + * + */ + private @Nullable List secondaryBootDisks; /** * @return The Google Cloud Platform Service Account to be used by the node VMs. * @@ -444,6 +450,13 @@ public Map resourceManagerTags() { public Optional sandboxConfig() { return Optional.ofNullable(this.sandboxConfig); } + /** + * @return Secondary boot disks for preloading data or container images. + * + */ + public List secondaryBootDisks() { + return this.secondaryBootDisks == null ? List.of() : this.secondaryBootDisks; + } /** * @return The Google Cloud Platform Service Account to be used by the node VMs. * @@ -534,6 +547,7 @@ public static final class Builder { private @Nullable Map resourceLabels; private @Nullable Map resourceManagerTags; private @Nullable NodePoolNodeConfigSandboxConfig sandboxConfig; + private @Nullable List secondaryBootDisks; private @Nullable String serviceAccount; private @Nullable NodePoolNodeConfigShieldedInstanceConfig shieldedInstanceConfig; private @Nullable NodePoolNodeConfigSoleTenantConfig soleTenantConfig; @@ -575,6 +589,7 @@ public Builder(NodePoolNodeConfig defaults) { this.resourceLabels = defaults.resourceLabels; this.resourceManagerTags = defaults.resourceManagerTags; this.sandboxConfig = defaults.sandboxConfig; + this.secondaryBootDisks = defaults.secondaryBootDisks; this.serviceAccount = defaults.serviceAccount; this.shieldedInstanceConfig = defaults.shieldedInstanceConfig; this.soleTenantConfig = defaults.soleTenantConfig; @@ -780,6 +795,15 @@ public Builder sandboxConfig(@Nullable NodePoolNodeConfigSandboxConfig sandboxCo return this; } @CustomType.Setter + public Builder secondaryBootDisks(@Nullable List secondaryBootDisks) { + + this.secondaryBootDisks = secondaryBootDisks; + return this; + } + public Builder secondaryBootDisks(NodePoolNodeConfigSecondaryBootDisk... secondaryBootDisks) { + return secondaryBootDisks(List.of(secondaryBootDisks)); + } + @CustomType.Setter public Builder serviceAccount(@Nullable String serviceAccount) { this.serviceAccount = serviceAccount; @@ -860,6 +884,7 @@ public NodePoolNodeConfig build() { _resultValue.resourceLabels = resourceLabels; _resultValue.resourceManagerTags = resourceManagerTags; _resultValue.sandboxConfig = sandboxConfig; + _resultValue.secondaryBootDisks = secondaryBootDisks; _resultValue.serviceAccount = serviceAccount; _resultValue.shieldedInstanceConfig = shieldedInstanceConfig; _resultValue.soleTenantConfig = soleTenantConfig; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNodeConfigSecondaryBootDisk.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNodeConfigSecondaryBootDisk.java new file mode 100644 index 0000000000..9e4be0cf9f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNodeConfigSecondaryBootDisk.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class NodePoolNodeConfigSecondaryBootDisk { + /** + * @return Disk image to create the secondary boot disk from + * + */ + private String diskImage; + /** + * @return Mode for how the secondary boot disk is used. + * + */ + private @Nullable String mode; + + private NodePoolNodeConfigSecondaryBootDisk() {} + /** + * @return Disk image to create the secondary boot disk from + * + */ + public String diskImage() { + return this.diskImage; + } + /** + * @return Mode for how the secondary boot disk is used. + * + */ + public Optional mode() { + return Optional.ofNullable(this.mode); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(NodePoolNodeConfigSecondaryBootDisk defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String diskImage; + private @Nullable String mode; + public Builder() {} + public Builder(NodePoolNodeConfigSecondaryBootDisk defaults) { + Objects.requireNonNull(defaults); + this.diskImage = defaults.diskImage; + this.mode = defaults.mode; + } + + @CustomType.Setter + public Builder diskImage(String diskImage) { + if (diskImage == null) { + throw new MissingRequiredPropertyException("NodePoolNodeConfigSecondaryBootDisk", "diskImage"); + } + this.diskImage = diskImage; + return this; + } + @CustomType.Setter + public Builder mode(@Nullable String mode) { + + this.mode = mode; + return this; + } + public NodePoolNodeConfigSecondaryBootDisk build() { + final var _resultValue = new NodePoolNodeConfigSecondaryBootDisk(); + _resultValue.diskImage = diskImage; + _resultValue.mode = mode; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJob.java b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJob.java index 0caf7cdce6..b362b41e20 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJob.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJob.java @@ -379,18 +379,18 @@ public Output> onDelete() { return Codegen.optional(this.onDelete); } /** - * Key/Value pairs to be passed to the Dataflow job (as - * used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - * such as `serviceAccount`, `workerMachineType`, etc can be specified here. + * **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * */ @Export(name="parameters", refs={Map.class,String.class,Object.class}, tree="[0,1,2]") private Output> parameters; /** - * @return Key/Value pairs to be passed to the Dataflow job (as - * used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - * such as `serviceAccount`, `workerMachineType`, etc can be specified here. + * @return **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * */ public Output>> parameters() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJobArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJobArgs.java index da8c02b3a0..fe48175f26 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJobArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJobArgs.java @@ -252,18 +252,18 @@ public Optional> onDelete() { } /** - * Key/Value pairs to be passed to the Dataflow job (as - * used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - * such as `serviceAccount`, `workerMachineType`, etc can be specified here. + * **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * */ @Import(name="parameters") private @Nullable Output> parameters; /** - * @return Key/Value pairs to be passed to the Dataflow job (as - * used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - * such as `serviceAccount`, `workerMachineType`, etc can be specified here. + * @return **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * */ public Optional>> parameters() { @@ -771,9 +771,9 @@ public Builder onDelete(String onDelete) { } /** - * @param parameters Key/Value pairs to be passed to the Dataflow job (as - * used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - * such as `serviceAccount`, `workerMachineType`, etc can be specified here. + * @param parameters **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * * @return builder * @@ -784,9 +784,9 @@ public Builder parameters(@Nullable Output> parameters) { } /** - * @param parameters Key/Value pairs to be passed to the Dataflow job (as - * used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - * such as `serviceAccount`, `workerMachineType`, etc can be specified here. + * @param parameters **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/Job.java b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/Job.java index 274833470e..368ff8bd9d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/Job.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/Job.java @@ -379,14 +379,18 @@ public Output> onDelete() { return Codegen.optional(this.onDelete); } /** - * Key/Value pairs to be passed to the Dataflow job (as used in the template). + * **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * */ @Export(name="parameters", refs={Map.class,String.class,Object.class}, tree="[0,1,2]") private Output> parameters; /** - * @return Key/Value pairs to be passed to the Dataflow job (as used in the template). + * @return **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * */ public Output>> parameters() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/JobArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/JobArgs.java index a625497ebe..95706f0688 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/JobArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/JobArgs.java @@ -176,14 +176,18 @@ public Optional> onDelete() { } /** - * Key/Value pairs to be passed to the Dataflow job (as used in the template). + * **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * */ @Import(name="parameters") private @Nullable Output> parameters; /** - * @return Key/Value pairs to be passed to the Dataflow job (as used in the template). + * @return **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * */ public Optional>> parameters() { @@ -597,7 +601,9 @@ public Builder onDelete(String onDelete) { } /** - * @param parameters Key/Value pairs to be passed to the Dataflow job (as used in the template). + * @param parameters **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * * @return builder * @@ -608,7 +614,9 @@ public Builder parameters(@Nullable Output> parameters) { } /** - * @param parameters Key/Value pairs to be passed to the Dataflow job (as used in the template). + * @param parameters **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/FlexTemplateJobState.java b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/FlexTemplateJobState.java index 47f1319c43..71faf52220 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/FlexTemplateJobState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/FlexTemplateJobState.java @@ -273,18 +273,18 @@ public Optional> onDelete() { } /** - * Key/Value pairs to be passed to the Dataflow job (as - * used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - * such as `serviceAccount`, `workerMachineType`, etc can be specified here. + * **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * */ @Import(name="parameters") private @Nullable Output> parameters; /** - * @return Key/Value pairs to be passed to the Dataflow job (as - * used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - * such as `serviceAccount`, `workerMachineType`, etc can be specified here. + * @return **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * */ public Optional>> parameters() { @@ -872,9 +872,9 @@ public Builder onDelete(String onDelete) { } /** - * @param parameters Key/Value pairs to be passed to the Dataflow job (as - * used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - * such as `serviceAccount`, `workerMachineType`, etc can be specified here. + * @param parameters **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * * @return builder * @@ -885,9 +885,9 @@ public Builder parameters(@Nullable Output> parameters) { } /** - * @param parameters Key/Value pairs to be passed to the Dataflow job (as - * used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - * such as `serviceAccount`, `workerMachineType`, etc can be specified here. + * @param parameters **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/JobState.java b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/JobState.java index 02874b06ae..70f97702c6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/JobState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/JobState.java @@ -205,14 +205,18 @@ public Optional> onDelete() { } /** - * Key/Value pairs to be passed to the Dataflow job (as used in the template). + * **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * */ @Import(name="parameters") private @Nullable Output> parameters; /** - * @return Key/Value pairs to be passed to the Dataflow job (as used in the template). + * @return **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * */ public Optional>> parameters() { @@ -718,7 +722,9 @@ public Builder onDelete(String onDelete) { } /** - * @param parameters Key/Value pairs to be passed to the Dataflow job (as used in the template). + * @param parameters **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * * @return builder * @@ -729,7 +735,9 @@ public Builder parameters(@Nullable Output> parameters) { } /** - * @param parameters Key/Value pairs to be passed to the Dataflow job (as used in the template). + * @param parameters **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/essentialcontacts/DocumentAiWarehouseDocumentSchema.java b/sdk/java/src/main/java/com/pulumi/gcp/essentialcontacts/DocumentAiWarehouseDocumentSchema.java index 41e98197a5..e860157798 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/essentialcontacts/DocumentAiWarehouseDocumentSchema.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/essentialcontacts/DocumentAiWarehouseDocumentSchema.java @@ -86,508 +86,6 @@ * } * * <!--End PulumiCodeChooser --> - * ### Document Ai Warehouse Document Schema Integer - * - * <!--Start PulumiCodeChooser --> - *
- * {@code
- * package generated_program;
- * 
- * import com.pulumi.Context;
- * import com.pulumi.Pulumi;
- * import com.pulumi.core.Output;
- * import com.pulumi.gcp.organizations.OrganizationsFunctions;
- * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionIntegerTypeOptionsArgs;
- * import java.util.List;
- * import java.util.ArrayList;
- * import java.util.Map;
- * import java.io.File;
- * import java.nio.file.Files;
- * import java.nio.file.Paths;
- * 
- * public class App {
- *     public static void main(String[] args) {
- *         Pulumi.run(App::stack);
- *     }
- * 
- *     public static void stack(Context ctx) {
- *         final var project = OrganizationsFunctions.getProject();
- * 
- *         var exampleInteger = new DocumentAiWarehouseDocumentSchema("exampleInteger", DocumentAiWarehouseDocumentSchemaArgs.builder()        
- *             .projectNumber(project.applyValue(getProjectResult -> getProjectResult.number()))
- *             .displayName("test-property-integer")
- *             .location("us")
- *             .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()
- *                 .name("prop1")
- *                 .displayName("propdisp1")
- *                 .isRepeatable(false)
- *                 .isFilterable(true)
- *                 .isSearchable(true)
- *                 .isMetadata(false)
- *                 .isRequired(false)
- *                 .retrievalImportance("HIGHEST")
- *                 .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()
- *                     .name("dummy_source")
- *                     .processorType("dummy_processor")
- *                     .build())
- *                 .integerTypeOptions()
- *                 .build())
- *             .build());
- * 
- *     }
- * }
- * }
- * 
- * <!--End PulumiCodeChooser --> - * ### Document Ai Warehouse Document Schema Float - * - * <!--Start PulumiCodeChooser --> - *
- * {@code
- * package generated_program;
- * 
- * import com.pulumi.Context;
- * import com.pulumi.Pulumi;
- * import com.pulumi.core.Output;
- * import com.pulumi.gcp.organizations.OrganizationsFunctions;
- * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionFloatTypeOptionsArgs;
- * import java.util.List;
- * import java.util.ArrayList;
- * import java.util.Map;
- * import java.io.File;
- * import java.nio.file.Files;
- * import java.nio.file.Paths;
- * 
- * public class App {
- *     public static void main(String[] args) {
- *         Pulumi.run(App::stack);
- *     }
- * 
- *     public static void stack(Context ctx) {
- *         final var project = OrganizationsFunctions.getProject();
- * 
- *         var exampleFloat = new DocumentAiWarehouseDocumentSchema("exampleFloat", DocumentAiWarehouseDocumentSchemaArgs.builder()        
- *             .projectNumber(project.applyValue(getProjectResult -> getProjectResult.number()))
- *             .displayName("test-property-float")
- *             .location("us")
- *             .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()
- *                 .name("prop2")
- *                 .displayName("propdisp2")
- *                 .isRepeatable(false)
- *                 .isFilterable(true)
- *                 .isSearchable(true)
- *                 .isMetadata(false)
- *                 .isRequired(false)
- *                 .retrievalImportance("HIGHEST")
- *                 .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()
- *                     .name("dummy_source")
- *                     .processorType("dummy_processor")
- *                     .build())
- *                 .floatTypeOptions()
- *                 .build())
- *             .build());
- * 
- *     }
- * }
- * }
- * 
- * <!--End PulumiCodeChooser --> - * ### Document Ai Warehouse Document Schema Property - * - * <!--Start PulumiCodeChooser --> - *
- * {@code
- * package generated_program;
- * 
- * import com.pulumi.Context;
- * import com.pulumi.Pulumi;
- * import com.pulumi.core.Output;
- * import com.pulumi.gcp.organizations.OrganizationsFunctions;
- * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs;
- * import java.util.List;
- * import java.util.ArrayList;
- * import java.util.Map;
- * import java.io.File;
- * import java.nio.file.Files;
- * import java.nio.file.Paths;
- * 
- * public class App {
- *     public static void main(String[] args) {
- *         Pulumi.run(App::stack);
- *     }
- * 
- *     public static void stack(Context ctx) {
- *         final var project = OrganizationsFunctions.getProject();
- * 
- *         var exampleProperty = new DocumentAiWarehouseDocumentSchema("exampleProperty", DocumentAiWarehouseDocumentSchemaArgs.builder()        
- *             .projectNumber(project.applyValue(getProjectResult -> getProjectResult.number()))
- *             .displayName("test-property-property")
- *             .location("us")
- *             .documentIsFolder(false)
- *             .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()
- *                 .name("prop8")
- *                 .displayName("propdisp8")
- *                 .isRepeatable(false)
- *                 .isFilterable(true)
- *                 .isSearchable(true)
- *                 .isMetadata(false)
- *                 .isRequired(false)
- *                 .retrievalImportance("HIGHEST")
- *                 .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()
- *                     .name("dummy_source")
- *                     .processorType("dummy_processor")
- *                     .build())
- *                 .propertyTypeOptions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs.builder()
- *                     .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs.builder()
- *                         .name("prop8_nested")
- *                         .displayName("propdisp8_nested")
- *                         .isRepeatable(false)
- *                         .isFilterable(true)
- *                         .isSearchable(true)
- *                         .isMetadata(false)
- *                         .isRequired(false)
- *                         .retrievalImportance("HIGHEST")
- *                         .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs.builder()
- *                             .name("dummy_source_nested")
- *                             .processorType("dummy_processor_nested")
- *                             .build())
- *                         .textTypeOptions()
- *                         .build())
- *                     .build())
- *                 .build())
- *             .build());
- * 
- *     }
- * }
- * }
- * 
- * <!--End PulumiCodeChooser --> - * ### Document Ai Warehouse Document Schema Property Enum - * - * <!--Start PulumiCodeChooser --> - *
- * {@code
- * package generated_program;
- * 
- * import com.pulumi.Context;
- * import com.pulumi.Pulumi;
- * import com.pulumi.core.Output;
- * import com.pulumi.gcp.organizations.OrganizationsFunctions;
- * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs;
- * import java.util.List;
- * import java.util.ArrayList;
- * import java.util.Map;
- * import java.io.File;
- * import java.nio.file.Files;
- * import java.nio.file.Paths;
- * 
- * public class App {
- *     public static void main(String[] args) {
- *         Pulumi.run(App::stack);
- *     }
- * 
- *     public static void stack(Context ctx) {
- *         final var project = OrganizationsFunctions.getProject();
- * 
- *         var examplePropertyEnum = new DocumentAiWarehouseDocumentSchema("examplePropertyEnum", DocumentAiWarehouseDocumentSchemaArgs.builder()        
- *             .projectNumber(project.applyValue(getProjectResult -> getProjectResult.number()))
- *             .displayName("test-property-property")
- *             .location("us")
- *             .documentIsFolder(false)
- *             .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()
- *                 .name("prop8")
- *                 .displayName("propdisp8")
- *                 .isRepeatable(false)
- *                 .isFilterable(true)
- *                 .isSearchable(true)
- *                 .isMetadata(false)
- *                 .isRequired(false)
- *                 .retrievalImportance("HIGHEST")
- *                 .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()
- *                     .name("dummy_source")
- *                     .processorType("dummy_processor")
- *                     .build())
- *                 .propertyTypeOptions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs.builder()
- *                     .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs.builder()
- *                         .name("prop8_nested")
- *                         .displayName("propdisp8_nested")
- *                         .isRepeatable(false)
- *                         .isFilterable(true)
- *                         .isSearchable(true)
- *                         .isMetadata(false)
- *                         .isRequired(false)
- *                         .retrievalImportance("HIGHEST")
- *                         .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs.builder()
- *                             .name("dummy_source_nested")
- *                             .processorType("dummy_processor_nested")
- *                             .build())
- *                         .enumTypeOptions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionEnumTypeOptionsArgs.builder()
- *                             .possibleValues(                            
- *                                 "M",
- *                                 "F",
- *                                 "X")
- *                             .validationCheckDisabled(false)
- *                             .build())
- *                         .build())
- *                     .build())
- *                 .build())
- *             .build());
- * 
- *     }
- * }
- * }
- * 
- * <!--End PulumiCodeChooser --> - * ### Document Ai Warehouse Document Schema Enum - * - * <!--Start PulumiCodeChooser --> - *
- * {@code
- * package generated_program;
- * 
- * import com.pulumi.Context;
- * import com.pulumi.Pulumi;
- * import com.pulumi.core.Output;
- * import com.pulumi.gcp.organizations.OrganizationsFunctions;
- * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionEnumTypeOptionsArgs;
- * import java.util.List;
- * import java.util.ArrayList;
- * import java.util.Map;
- * import java.io.File;
- * import java.nio.file.Files;
- * import java.nio.file.Paths;
- * 
- * public class App {
- *     public static void main(String[] args) {
- *         Pulumi.run(App::stack);
- *     }
- * 
- *     public static void stack(Context ctx) {
- *         final var project = OrganizationsFunctions.getProject();
- * 
- *         var exampleEnum = new DocumentAiWarehouseDocumentSchema("exampleEnum", DocumentAiWarehouseDocumentSchemaArgs.builder()        
- *             .projectNumber(project.applyValue(getProjectResult -> getProjectResult.number()))
- *             .displayName("test-property-enum")
- *             .location("us")
- *             .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()
- *                 .name("prop6")
- *                 .displayName("propdisp6")
- *                 .isRepeatable(false)
- *                 .isFilterable(true)
- *                 .isSearchable(true)
- *                 .isMetadata(false)
- *                 .isRequired(false)
- *                 .retrievalImportance("HIGHEST")
- *                 .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()
- *                     .name("dummy_source")
- *                     .processorType("dummy_processor")
- *                     .build())
- *                 .enumTypeOptions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionEnumTypeOptionsArgs.builder()
- *                     .possibleValues(                    
- *                         "M",
- *                         "F",
- *                         "X")
- *                     .validationCheckDisabled(false)
- *                     .build())
- *                 .build())
- *             .build());
- * 
- *     }
- * }
- * }
- * 
- * <!--End PulumiCodeChooser --> - * ### Document Ai Warehouse Document Schema Map - * - * <!--Start PulumiCodeChooser --> - *
- * {@code
- * package generated_program;
- * 
- * import com.pulumi.Context;
- * import com.pulumi.Pulumi;
- * import com.pulumi.core.Output;
- * import com.pulumi.gcp.organizations.OrganizationsFunctions;
- * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionMapTypeOptionsArgs;
- * import java.util.List;
- * import java.util.ArrayList;
- * import java.util.Map;
- * import java.io.File;
- * import java.nio.file.Files;
- * import java.nio.file.Paths;
- * 
- * public class App {
- *     public static void main(String[] args) {
- *         Pulumi.run(App::stack);
- *     }
- * 
- *     public static void stack(Context ctx) {
- *         final var project = OrganizationsFunctions.getProject();
- * 
- *         var exampleMap = new DocumentAiWarehouseDocumentSchema("exampleMap", DocumentAiWarehouseDocumentSchemaArgs.builder()        
- *             .projectNumber(project.applyValue(getProjectResult -> getProjectResult.number()))
- *             .displayName("test-property-map")
- *             .location("us")
- *             .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()
- *                 .name("prop4")
- *                 .displayName("propdisp4")
- *                 .isRepeatable(false)
- *                 .isFilterable(true)
- *                 .isSearchable(true)
- *                 .isMetadata(false)
- *                 .isRequired(false)
- *                 .retrievalImportance("HIGHEST")
- *                 .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()
- *                     .name("dummy_source")
- *                     .processorType("dummy_processor")
- *                     .build())
- *                 .mapTypeOptions()
- *                 .build())
- *             .build());
- * 
- *     }
- * }
- * }
- * 
- * <!--End PulumiCodeChooser --> - * ### Document Ai Warehouse Document Schema Datetime - * - * <!--Start PulumiCodeChooser --> - *
- * {@code
- * package generated_program;
- * 
- * import com.pulumi.Context;
- * import com.pulumi.Pulumi;
- * import com.pulumi.core.Output;
- * import com.pulumi.gcp.organizations.OrganizationsFunctions;
- * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionDateTimeTypeOptionsArgs;
- * import java.util.List;
- * import java.util.ArrayList;
- * import java.util.Map;
- * import java.io.File;
- * import java.nio.file.Files;
- * import java.nio.file.Paths;
- * 
- * public class App {
- *     public static void main(String[] args) {
- *         Pulumi.run(App::stack);
- *     }
- * 
- *     public static void stack(Context ctx) {
- *         final var project = OrganizationsFunctions.getProject();
- * 
- *         var exampleDatetime = new DocumentAiWarehouseDocumentSchema("exampleDatetime", DocumentAiWarehouseDocumentSchemaArgs.builder()        
- *             .projectNumber(project.applyValue(getProjectResult -> getProjectResult.number()))
- *             .displayName("test-property-date_time")
- *             .location("us")
- *             .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()
- *                 .name("prop7")
- *                 .displayName("propdisp7")
- *                 .isRepeatable(false)
- *                 .isFilterable(true)
- *                 .isSearchable(true)
- *                 .isMetadata(false)
- *                 .isRequired(false)
- *                 .retrievalImportance("HIGHEST")
- *                 .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()
- *                     .name("dummy_source")
- *                     .processorType("dummy_processor")
- *                     .build())
- *                 .dateTimeTypeOptions()
- *                 .build())
- *             .build());
- * 
- *     }
- * }
- * }
- * 
- * <!--End PulumiCodeChooser --> - * ### Document Ai Warehouse Document Schema Timestamp - * - * <!--Start PulumiCodeChooser --> - *
- * {@code
- * package generated_program;
- * 
- * import com.pulumi.Context;
- * import com.pulumi.Pulumi;
- * import com.pulumi.core.Output;
- * import com.pulumi.gcp.organizations.OrganizationsFunctions;
- * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema;
- * import com.pulumi.gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs;
- * import com.pulumi.gcp.essentialcontacts.inputs.DocumentAiWarehouseDocumentSchemaPropertyDefinitionTimestampTypeOptionsArgs;
- * import java.util.List;
- * import java.util.ArrayList;
- * import java.util.Map;
- * import java.io.File;
- * import java.nio.file.Files;
- * import java.nio.file.Paths;
- * 
- * public class App {
- *     public static void main(String[] args) {
- *         Pulumi.run(App::stack);
- *     }
- * 
- *     public static void stack(Context ctx) {
- *         final var project = OrganizationsFunctions.getProject();
- * 
- *         var exampleTimestamp = new DocumentAiWarehouseDocumentSchema("exampleTimestamp", DocumentAiWarehouseDocumentSchemaArgs.builder()        
- *             .projectNumber(project.applyValue(getProjectResult -> getProjectResult.number()))
- *             .displayName("test-property-timestamp")
- *             .location("us")
- *             .propertyDefinitions(DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs.builder()
- *                 .name("prop5")
- *                 .displayName("propdisp5")
- *                 .isRepeatable(false)
- *                 .isFilterable(true)
- *                 .isSearchable(true)
- *                 .isMetadata(false)
- *                 .isRequired(false)
- *                 .retrievalImportance("HIGHEST")
- *                 .schemaSources(DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs.builder()
- *                     .name("dummy_source")
- *                     .processorType("dummy_processor")
- *                     .build())
- *                 .timestampTypeOptions()
- *                 .build())
- *             .build());
- * 
- *     }
- * }
- * }
- * 
- * <!--End PulumiCodeChooser --> * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/firebaserules/Release.java b/sdk/java/src/main/java/com/pulumi/gcp/firebaserules/Release.java index 7663a47261..fb2e7c7c0d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/firebaserules/Release.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/firebaserules/Release.java @@ -58,7 +58,7 @@ * .build()); * * var primary = new Release("primary", ReleaseArgs.builder() - * .name("cloud.firestore") + * .name("cloud.firestore/database") * .rulesetName(firestore.name().applyValue(name -> String.format("projects/my-project-name/rulesets/%s", name))) * .project("my-project-name") * .build()); diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/Entitlement.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/Entitlement.java new file mode 100644 index 0000000000..a133f591fd --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/Entitlement.java @@ -0,0 +1,386 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.privilegedaccessmanager; + +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.privilegedaccessmanager.EntitlementArgs; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementState; +import com.pulumi.gcp.privilegedaccessmanager.outputs.EntitlementAdditionalNotificationTargets; +import com.pulumi.gcp.privilegedaccessmanager.outputs.EntitlementApprovalWorkflow; +import com.pulumi.gcp.privilegedaccessmanager.outputs.EntitlementEligibleUser; +import com.pulumi.gcp.privilegedaccessmanager.outputs.EntitlementPrivilegedAccess; +import com.pulumi.gcp.privilegedaccessmanager.outputs.EntitlementRequesterJustificationConfig; +import java.lang.String; +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ### Privileged Access Manager Entitlement Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.privilegedaccessmanager.entitlement;
+ * import com.pulumi.gcp.privilegedaccessmanager.EntitlementArgs;
+ * import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementRequesterJustificationConfigArgs;
+ * import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementRequesterJustificationConfigUnstructuredArgs;
+ * import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementEligibleUserArgs;
+ * import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementPrivilegedAccessArgs;
+ * import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementPrivilegedAccessGcpIamAccessArgs;
+ * import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementAdditionalNotificationTargetsArgs;
+ * import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementApprovalWorkflowArgs;
+ * import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementApprovalWorkflowManualApprovalsArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * 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 tfentitlement = new Entitlement("tfentitlement", EntitlementArgs.builder()        
+ *             .entitlementId("example-entitlement")
+ *             .location("global")
+ *             .maxRequestDuration("43200s")
+ *             .parent("projects/my-project-name")
+ *             .requesterJustificationConfig(EntitlementRequesterJustificationConfigArgs.builder()
+ *                 .unstructured()
+ *                 .build())
+ *             .eligibleUsers(EntitlementEligibleUserArgs.builder()
+ *                 .principals("group:test{@literal @}google.com")
+ *                 .build())
+ *             .privilegedAccess(EntitlementPrivilegedAccessArgs.builder()
+ *                 .gcpIamAccess(EntitlementPrivilegedAccessGcpIamAccessArgs.builder()
+ *                     .roleBindings(EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs.builder()
+ *                         .role("roles/storage.admin")
+ *                         .conditionExpression("request.time < timestamp(\"2024-04-23T18:30:00.000Z\")")
+ *                         .build())
+ *                     .resource("//cloudresourcemanager.googleapis.com/projects/my-project-name")
+ *                     .resourceType("cloudresourcemanager.googleapis.com/Project")
+ *                     .build())
+ *                 .build())
+ *             .additionalNotificationTargets(EntitlementAdditionalNotificationTargetsArgs.builder()
+ *                 .adminEmailRecipients("user{@literal @}example.com")
+ *                 .requesterEmailRecipients("user{@literal @}example.com")
+ *                 .build())
+ *             .approvalWorkflow(EntitlementApprovalWorkflowArgs.builder()
+ *                 .manualApprovals(EntitlementApprovalWorkflowManualApprovalsArgs.builder()
+ *                     .requireApproverJustification(true)
+ *                     .steps(EntitlementApprovalWorkflowManualApprovalsStepArgs.builder()
+ *                         .approvalsNeeded(1)
+ *                         .approverEmailRecipients("user{@literal @}example.com")
+ *                         .approvers(EntitlementApprovalWorkflowManualApprovalsStepApproversArgs.builder()
+ *                             .principals("group:test{@literal @}google.com")
+ *                             .build())
+ *                         .build())
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * Entitlement can be imported using any of these accepted formats: + * + * * `{{parent}}/locations/{{location}}/entitlements/{{entitlement_id}}` + * + * When using the `pulumi import` command, Entitlement can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:privilegedaccessmanager/entitlement:entitlement default {{parent}}/locations/{{location}}/entitlements/{{entitlement_id}} + * ``` + * + */ +@ResourceType(type="gcp:privilegedaccessmanager/entitlement:entitlement") +public class Entitlement extends com.pulumi.resources.CustomResource { + /** + * AdditionalNotificationTargets includes email addresses to be notified. + * + */ + @Export(name="additionalNotificationTargets", refs={EntitlementAdditionalNotificationTargets.class}, tree="[0]") + private Output additionalNotificationTargets; + + /** + * @return AdditionalNotificationTargets includes email addresses to be notified. + * + */ + public Output> additionalNotificationTargets() { + return Codegen.optional(this.additionalNotificationTargets); + } + /** + * The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + * Different types of approval workflows that can be used to gate privileged access granting. + * + */ + @Export(name="approvalWorkflow", refs={EntitlementApprovalWorkflow.class}, tree="[0]") + private Output approvalWorkflow; + + /** + * @return The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + * Different types of approval workflows that can be used to gate privileged access granting. + * + */ + public Output> approvalWorkflow() { + return Codegen.optional(this.approvalWorkflow); + } + /** + * Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + * Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + * Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + * + */ + public Output createTime() { + return this.createTime; + } + /** + * Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + * + */ + @Export(name="eligibleUsers", refs={List.class,EntitlementEligibleUser.class}, tree="[0,1]") + private Output> eligibleUsers; + + /** + * @return Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + * + */ + public Output> eligibleUsers() { + return this.eligibleUsers; + } + /** + * The ID to use for this Entitlement. This will become the last part of the resource name. + * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + * This value should be unique among all other Entitlements under the specified `parent`. + * + */ + @Export(name="entitlementId", refs={String.class}, tree="[0]") + private Output entitlementId; + + /** + * @return The ID to use for this Entitlement. This will become the last part of the resource name. + * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + * This value should be unique among all other Entitlements under the specified `parent`. + * + */ + public Output entitlementId() { + return this.entitlementId; + } + /** + * For Resource freshness validation (https://google.aip.dev/154) + * + */ + @Export(name="etag", refs={String.class}, tree="[0]") + private Output etag; + + /** + * @return For Resource freshness validation (https://google.aip.dev/154) + * + */ + public Output etag() { + return this.etag; + } + /** + * The region of the Entitlement resource. + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return The region of the Entitlement resource. + * + */ + public Output location() { + return this.location; + } + /** + * The maximum amount of time for which access would be granted for a request. + * A requester can choose to ask for access for less than this duration but never more. + * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + * + */ + @Export(name="maxRequestDuration", refs={String.class}, tree="[0]") + private Output maxRequestDuration; + + /** + * @return The maximum amount of time for which access would be granted for a request. + * A requester can choose to ask for access for less than this duration but never more. + * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + * + */ + public Output maxRequestDuration() { + return this.maxRequestDuration; + } + /** + * Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + * Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + * Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + * + */ + public Output name() { + return this.name; + } + /** + * Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + * + */ + @Export(name="parent", refs={String.class}, tree="[0]") + private Output parent; + + /** + * @return Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + * + */ + public Output parent() { + return this.parent; + } + /** + * Privileged access that this service can be used to gate. + * Structure is documented below. + * + */ + @Export(name="privilegedAccess", refs={EntitlementPrivilegedAccess.class}, tree="[0]") + private Output privilegedAccess; + + /** + * @return Privileged access that this service can be used to gate. + * Structure is documented below. + * + */ + public Output privilegedAccess() { + return this.privilegedAccess; + } + /** + * Defines the ways in which a requester should provide the justification while requesting for access. + * Structure is documented below. + * + */ + @Export(name="requesterJustificationConfig", refs={EntitlementRequesterJustificationConfig.class}, tree="[0]") + private Output requesterJustificationConfig; + + /** + * @return Defines the ways in which a requester should provide the justification while requesting for access. + * Structure is documented below. + * + */ + public Output requesterJustificationConfig() { + return this.requesterJustificationConfig; + } + /** + * Output only. The current state of the Entitlement. + * + */ + @Export(name="state", refs={String.class}, tree="[0]") + private Output state; + + /** + * @return Output only. The current state of the Entitlement. + * + */ + public Output state() { + return this.state; + } + /** + * Output only. Update time stamp. 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 Output only. Update time stamp. 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 Entitlement(String name) { + this(name, EntitlementArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Entitlement(String name, EntitlementArgs 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 Entitlement(String name, EntitlementArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:privilegedaccessmanager/entitlement:entitlement", name, args == null ? EntitlementArgs.Empty : args, makeResourceOptions(options, Codegen.empty())); + } + + private Entitlement(String name, Output id, @Nullable EntitlementState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:privilegedaccessmanager/entitlement:entitlement", 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 Entitlement get(String name, Output id, @Nullable EntitlementState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new Entitlement(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/EntitlementArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/EntitlementArgs.java new file mode 100644 index 0000000000..d5c377be15 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/EntitlementArgs.java @@ -0,0 +1,450 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.privilegedaccessmanager; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementAdditionalNotificationTargetsArgs; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementApprovalWorkflowArgs; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementEligibleUserArgs; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementPrivilegedAccessArgs; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementRequesterJustificationConfigArgs; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class EntitlementArgs extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementArgs Empty = new EntitlementArgs(); + + /** + * AdditionalNotificationTargets includes email addresses to be notified. + * + */ + @Import(name="additionalNotificationTargets") + private @Nullable Output additionalNotificationTargets; + + /** + * @return AdditionalNotificationTargets includes email addresses to be notified. + * + */ + public Optional> additionalNotificationTargets() { + return Optional.ofNullable(this.additionalNotificationTargets); + } + + /** + * The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + * Different types of approval workflows that can be used to gate privileged access granting. + * + */ + @Import(name="approvalWorkflow") + private @Nullable Output approvalWorkflow; + + /** + * @return The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + * Different types of approval workflows that can be used to gate privileged access granting. + * + */ + public Optional> approvalWorkflow() { + return Optional.ofNullable(this.approvalWorkflow); + } + + /** + * Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + * + */ + @Import(name="eligibleUsers", required=true) + private Output> eligibleUsers; + + /** + * @return Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + * + */ + public Output> eligibleUsers() { + return this.eligibleUsers; + } + + /** + * The ID to use for this Entitlement. This will become the last part of the resource name. + * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + * This value should be unique among all other Entitlements under the specified `parent`. + * + */ + @Import(name="entitlementId", required=true) + private Output entitlementId; + + /** + * @return The ID to use for this Entitlement. This will become the last part of the resource name. + * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + * This value should be unique among all other Entitlements under the specified `parent`. + * + */ + public Output entitlementId() { + return this.entitlementId; + } + + /** + * The region of the Entitlement resource. + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The region of the Entitlement resource. + * + */ + public Output location() { + return this.location; + } + + /** + * The maximum amount of time for which access would be granted for a request. + * A requester can choose to ask for access for less than this duration but never more. + * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + * + */ + @Import(name="maxRequestDuration", required=true) + private Output maxRequestDuration; + + /** + * @return The maximum amount of time for which access would be granted for a request. + * A requester can choose to ask for access for less than this duration but never more. + * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + * + */ + public Output maxRequestDuration() { + return this.maxRequestDuration; + } + + /** + * Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + * + */ + @Import(name="parent", required=true) + private Output parent; + + /** + * @return Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + * + */ + public Output parent() { + return this.parent; + } + + /** + * Privileged access that this service can be used to gate. + * Structure is documented below. + * + */ + @Import(name="privilegedAccess", required=true) + private Output privilegedAccess; + + /** + * @return Privileged access that this service can be used to gate. + * Structure is documented below. + * + */ + public Output privilegedAccess() { + return this.privilegedAccess; + } + + /** + * Defines the ways in which a requester should provide the justification while requesting for access. + * Structure is documented below. + * + */ + @Import(name="requesterJustificationConfig", required=true) + private Output requesterJustificationConfig; + + /** + * @return Defines the ways in which a requester should provide the justification while requesting for access. + * Structure is documented below. + * + */ + public Output requesterJustificationConfig() { + return this.requesterJustificationConfig; + } + + private EntitlementArgs() {} + + private EntitlementArgs(EntitlementArgs $) { + this.additionalNotificationTargets = $.additionalNotificationTargets; + this.approvalWorkflow = $.approvalWorkflow; + this.eligibleUsers = $.eligibleUsers; + this.entitlementId = $.entitlementId; + this.location = $.location; + this.maxRequestDuration = $.maxRequestDuration; + this.parent = $.parent; + this.privilegedAccess = $.privilegedAccess; + this.requesterJustificationConfig = $.requesterJustificationConfig; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EntitlementArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EntitlementArgs $; + + public Builder() { + $ = new EntitlementArgs(); + } + + public Builder(EntitlementArgs defaults) { + $ = new EntitlementArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param additionalNotificationTargets AdditionalNotificationTargets includes email addresses to be notified. + * + * @return builder + * + */ + public Builder additionalNotificationTargets(@Nullable Output additionalNotificationTargets) { + $.additionalNotificationTargets = additionalNotificationTargets; + return this; + } + + /** + * @param additionalNotificationTargets AdditionalNotificationTargets includes email addresses to be notified. + * + * @return builder + * + */ + public Builder additionalNotificationTargets(EntitlementAdditionalNotificationTargetsArgs additionalNotificationTargets) { + return additionalNotificationTargets(Output.of(additionalNotificationTargets)); + } + + /** + * @param approvalWorkflow The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + * Different types of approval workflows that can be used to gate privileged access granting. + * + * @return builder + * + */ + public Builder approvalWorkflow(@Nullable Output approvalWorkflow) { + $.approvalWorkflow = approvalWorkflow; + return this; + } + + /** + * @param approvalWorkflow The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + * Different types of approval workflows that can be used to gate privileged access granting. + * + * @return builder + * + */ + public Builder approvalWorkflow(EntitlementApprovalWorkflowArgs approvalWorkflow) { + return approvalWorkflow(Output.of(approvalWorkflow)); + } + + /** + * @param eligibleUsers Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + * + * @return builder + * + */ + public Builder eligibleUsers(Output> eligibleUsers) { + $.eligibleUsers = eligibleUsers; + return this; + } + + /** + * @param eligibleUsers Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + * + * @return builder + * + */ + public Builder eligibleUsers(List eligibleUsers) { + return eligibleUsers(Output.of(eligibleUsers)); + } + + /** + * @param eligibleUsers Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + * + * @return builder + * + */ + public Builder eligibleUsers(EntitlementEligibleUserArgs... eligibleUsers) { + return eligibleUsers(List.of(eligibleUsers)); + } + + /** + * @param entitlementId The ID to use for this Entitlement. This will become the last part of the resource name. + * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + * This value should be unique among all other Entitlements under the specified `parent`. + * + * @return builder + * + */ + public Builder entitlementId(Output entitlementId) { + $.entitlementId = entitlementId; + return this; + } + + /** + * @param entitlementId The ID to use for this Entitlement. This will become the last part of the resource name. + * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + * This value should be unique among all other Entitlements under the specified `parent`. + * + * @return builder + * + */ + public Builder entitlementId(String entitlementId) { + return entitlementId(Output.of(entitlementId)); + } + + /** + * @param location The region of the Entitlement resource. + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The region of the Entitlement resource. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param maxRequestDuration The maximum amount of time for which access would be granted for a request. + * A requester can choose to ask for access for less than this duration but never more. + * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + * + * @return builder + * + */ + public Builder maxRequestDuration(Output maxRequestDuration) { + $.maxRequestDuration = maxRequestDuration; + return this; + } + + /** + * @param maxRequestDuration The maximum amount of time for which access would be granted for a request. + * A requester can choose to ask for access for less than this duration but never more. + * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + * + * @return builder + * + */ + public Builder maxRequestDuration(String maxRequestDuration) { + return maxRequestDuration(Output.of(maxRequestDuration)); + } + + /** + * @param parent Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + * + * @return builder + * + */ + public Builder parent(Output parent) { + $.parent = parent; + return this; + } + + /** + * @param parent Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + * + * @return builder + * + */ + public Builder parent(String parent) { + return parent(Output.of(parent)); + } + + /** + * @param privilegedAccess Privileged access that this service can be used to gate. + * Structure is documented below. + * + * @return builder + * + */ + public Builder privilegedAccess(Output privilegedAccess) { + $.privilegedAccess = privilegedAccess; + return this; + } + + /** + * @param privilegedAccess Privileged access that this service can be used to gate. + * Structure is documented below. + * + * @return builder + * + */ + public Builder privilegedAccess(EntitlementPrivilegedAccessArgs privilegedAccess) { + return privilegedAccess(Output.of(privilegedAccess)); + } + + /** + * @param requesterJustificationConfig Defines the ways in which a requester should provide the justification while requesting for access. + * Structure is documented below. + * + * @return builder + * + */ + public Builder requesterJustificationConfig(Output requesterJustificationConfig) { + $.requesterJustificationConfig = requesterJustificationConfig; + return this; + } + + /** + * @param requesterJustificationConfig Defines the ways in which a requester should provide the justification while requesting for access. + * Structure is documented below. + * + * @return builder + * + */ + public Builder requesterJustificationConfig(EntitlementRequesterJustificationConfigArgs requesterJustificationConfig) { + return requesterJustificationConfig(Output.of(requesterJustificationConfig)); + } + + public EntitlementArgs build() { + if ($.eligibleUsers == null) { + throw new MissingRequiredPropertyException("EntitlementArgs", "eligibleUsers"); + } + if ($.entitlementId == null) { + throw new MissingRequiredPropertyException("EntitlementArgs", "entitlementId"); + } + if ($.location == null) { + throw new MissingRequiredPropertyException("EntitlementArgs", "location"); + } + if ($.maxRequestDuration == null) { + throw new MissingRequiredPropertyException("EntitlementArgs", "maxRequestDuration"); + } + if ($.parent == null) { + throw new MissingRequiredPropertyException("EntitlementArgs", "parent"); + } + if ($.privilegedAccess == null) { + throw new MissingRequiredPropertyException("EntitlementArgs", "privilegedAccess"); + } + if ($.requesterJustificationConfig == null) { + throw new MissingRequiredPropertyException("EntitlementArgs", "requesterJustificationConfig"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementAdditionalNotificationTargetsArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementAdditionalNotificationTargetsArgs.java new file mode 100644 index 0000000000..ec67b189ad --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementAdditionalNotificationTargetsArgs.java @@ -0,0 +1,141 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.privilegedaccessmanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class EntitlementAdditionalNotificationTargetsArgs extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementAdditionalNotificationTargetsArgs Empty = new EntitlementAdditionalNotificationTargetsArgs(); + + /** + * Optional. Additional email addresses to be notified when a principal(requester) is granted access. + * + */ + @Import(name="adminEmailRecipients") + private @Nullable Output> adminEmailRecipients; + + /** + * @return Optional. Additional email addresses to be notified when a principal(requester) is granted access. + * + */ + public Optional>> adminEmailRecipients() { + return Optional.ofNullable(this.adminEmailRecipients); + } + + /** + * Optional. Additional email address to be notified about an eligible entitlement. + * + */ + @Import(name="requesterEmailRecipients") + private @Nullable Output> requesterEmailRecipients; + + /** + * @return Optional. Additional email address to be notified about an eligible entitlement. + * + */ + public Optional>> requesterEmailRecipients() { + return Optional.ofNullable(this.requesterEmailRecipients); + } + + private EntitlementAdditionalNotificationTargetsArgs() {} + + private EntitlementAdditionalNotificationTargetsArgs(EntitlementAdditionalNotificationTargetsArgs $) { + this.adminEmailRecipients = $.adminEmailRecipients; + this.requesterEmailRecipients = $.requesterEmailRecipients; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EntitlementAdditionalNotificationTargetsArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EntitlementAdditionalNotificationTargetsArgs $; + + public Builder() { + $ = new EntitlementAdditionalNotificationTargetsArgs(); + } + + public Builder(EntitlementAdditionalNotificationTargetsArgs defaults) { + $ = new EntitlementAdditionalNotificationTargetsArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param adminEmailRecipients Optional. Additional email addresses to be notified when a principal(requester) is granted access. + * + * @return builder + * + */ + public Builder adminEmailRecipients(@Nullable Output> adminEmailRecipients) { + $.adminEmailRecipients = adminEmailRecipients; + return this; + } + + /** + * @param adminEmailRecipients Optional. Additional email addresses to be notified when a principal(requester) is granted access. + * + * @return builder + * + */ + public Builder adminEmailRecipients(List adminEmailRecipients) { + return adminEmailRecipients(Output.of(adminEmailRecipients)); + } + + /** + * @param adminEmailRecipients Optional. Additional email addresses to be notified when a principal(requester) is granted access. + * + * @return builder + * + */ + public Builder adminEmailRecipients(String... adminEmailRecipients) { + return adminEmailRecipients(List.of(adminEmailRecipients)); + } + + /** + * @param requesterEmailRecipients Optional. Additional email address to be notified about an eligible entitlement. + * + * @return builder + * + */ + public Builder requesterEmailRecipients(@Nullable Output> requesterEmailRecipients) { + $.requesterEmailRecipients = requesterEmailRecipients; + return this; + } + + /** + * @param requesterEmailRecipients Optional. Additional email address to be notified about an eligible entitlement. + * + * @return builder + * + */ + public Builder requesterEmailRecipients(List requesterEmailRecipients) { + return requesterEmailRecipients(Output.of(requesterEmailRecipients)); + } + + /** + * @param requesterEmailRecipients Optional. Additional email address to be notified about an eligible entitlement. + * + * @return builder + * + */ + public Builder requesterEmailRecipients(String... requesterEmailRecipients) { + return requesterEmailRecipients(List.of(requesterEmailRecipients)); + } + + public EntitlementAdditionalNotificationTargetsArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowArgs.java new file mode 100644 index 0000000000..301e56350f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowArgs.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.privilegedaccessmanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementApprovalWorkflowManualApprovalsArgs; +import java.util.Objects; + + +public final class EntitlementApprovalWorkflowArgs extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementApprovalWorkflowArgs Empty = new EntitlementApprovalWorkflowArgs(); + + /** + * A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + * The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + * This can be used to create approval workflows such as + * * Require an approval from any user in a group G. + * * Require an approval from any k number of users from a Group G. + * * Require an approval from any user in a group G and then from a user U. etc. + * A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + * Structure is documented below. + * + */ + @Import(name="manualApprovals", required=true) + private Output manualApprovals; + + /** + * @return A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + * The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + * This can be used to create approval workflows such as + * * Require an approval from any user in a group G. + * * Require an approval from any k number of users from a Group G. + * * Require an approval from any user in a group G and then from a user U. etc. + * A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + * Structure is documented below. + * + */ + public Output manualApprovals() { + return this.manualApprovals; + } + + private EntitlementApprovalWorkflowArgs() {} + + private EntitlementApprovalWorkflowArgs(EntitlementApprovalWorkflowArgs $) { + this.manualApprovals = $.manualApprovals; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EntitlementApprovalWorkflowArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EntitlementApprovalWorkflowArgs $; + + public Builder() { + $ = new EntitlementApprovalWorkflowArgs(); + } + + public Builder(EntitlementApprovalWorkflowArgs defaults) { + $ = new EntitlementApprovalWorkflowArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param manualApprovals A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + * The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + * This can be used to create approval workflows such as + * * Require an approval from any user in a group G. + * * Require an approval from any k number of users from a Group G. + * * Require an approval from any user in a group G and then from a user U. etc. + * A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + * Structure is documented below. + * + * @return builder + * + */ + public Builder manualApprovals(Output manualApprovals) { + $.manualApprovals = manualApprovals; + return this; + } + + /** + * @param manualApprovals A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + * The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + * This can be used to create approval workflows such as + * * Require an approval from any user in a group G. + * * Require an approval from any k number of users from a Group G. + * * Require an approval from any user in a group G and then from a user U. etc. + * A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + * Structure is documented below. + * + * @return builder + * + */ + public Builder manualApprovals(EntitlementApprovalWorkflowManualApprovalsArgs manualApprovals) { + return manualApprovals(Output.of(manualApprovals)); + } + + public EntitlementApprovalWorkflowArgs build() { + if ($.manualApprovals == null) { + throw new MissingRequiredPropertyException("EntitlementApprovalWorkflowArgs", "manualApprovals"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowManualApprovalsArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowManualApprovalsArgs.java new file mode 100644 index 0000000000..fb4d2f391a --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowManualApprovalsArgs.java @@ -0,0 +1,141 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.privilegedaccessmanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementApprovalWorkflowManualApprovalsStepArgs; +import java.lang.Boolean; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class EntitlementApprovalWorkflowManualApprovalsArgs extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementApprovalWorkflowManualApprovalsArgs Empty = new EntitlementApprovalWorkflowManualApprovalsArgs(); + + /** + * Optional. Do the approvers need to provide a justification for their actions? + * + */ + @Import(name="requireApproverJustification") + private @Nullable Output requireApproverJustification; + + /** + * @return Optional. Do the approvers need to provide a justification for their actions? + * + */ + public Optional> requireApproverJustification() { + return Optional.ofNullable(this.requireApproverJustification); + } + + /** + * List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + * Structure is documented below. + * + */ + @Import(name="steps", required=true) + private Output> steps; + + /** + * @return List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + * Structure is documented below. + * + */ + public Output> steps() { + return this.steps; + } + + private EntitlementApprovalWorkflowManualApprovalsArgs() {} + + private EntitlementApprovalWorkflowManualApprovalsArgs(EntitlementApprovalWorkflowManualApprovalsArgs $) { + this.requireApproverJustification = $.requireApproverJustification; + this.steps = $.steps; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EntitlementApprovalWorkflowManualApprovalsArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EntitlementApprovalWorkflowManualApprovalsArgs $; + + public Builder() { + $ = new EntitlementApprovalWorkflowManualApprovalsArgs(); + } + + public Builder(EntitlementApprovalWorkflowManualApprovalsArgs defaults) { + $ = new EntitlementApprovalWorkflowManualApprovalsArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param requireApproverJustification Optional. Do the approvers need to provide a justification for their actions? + * + * @return builder + * + */ + public Builder requireApproverJustification(@Nullable Output requireApproverJustification) { + $.requireApproverJustification = requireApproverJustification; + return this; + } + + /** + * @param requireApproverJustification Optional. Do the approvers need to provide a justification for their actions? + * + * @return builder + * + */ + public Builder requireApproverJustification(Boolean requireApproverJustification) { + return requireApproverJustification(Output.of(requireApproverJustification)); + } + + /** + * @param steps List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + * Structure is documented below. + * + * @return builder + * + */ + public Builder steps(Output> steps) { + $.steps = steps; + return this; + } + + /** + * @param steps List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + * Structure is documented below. + * + * @return builder + * + */ + public Builder steps(List steps) { + return steps(Output.of(steps)); + } + + /** + * @param steps List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + * Structure is documented below. + * + * @return builder + * + */ + public Builder steps(EntitlementApprovalWorkflowManualApprovalsStepArgs... steps) { + return steps(List.of(steps)); + } + + public EntitlementApprovalWorkflowManualApprovalsArgs build() { + if ($.steps == null) { + throw new MissingRequiredPropertyException("EntitlementApprovalWorkflowManualApprovalsArgs", "steps"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowManualApprovalsStepApproversArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowManualApprovalsStepApproversArgs.java new file mode 100644 index 0000000000..f9a5f27b0b --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowManualApprovalsStepApproversArgs.java @@ -0,0 +1,96 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.privilegedaccessmanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.List; +import java.util.Objects; + + +public final class EntitlementApprovalWorkflowManualApprovalsStepApproversArgs extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementApprovalWorkflowManualApprovalsStepApproversArgs Empty = new EntitlementApprovalWorkflowManualApprovalsStepApproversArgs(); + + /** + * Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + * + */ + @Import(name="principals", required=true) + private Output> principals; + + /** + * @return Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + * + */ + public Output> principals() { + return this.principals; + } + + private EntitlementApprovalWorkflowManualApprovalsStepApproversArgs() {} + + private EntitlementApprovalWorkflowManualApprovalsStepApproversArgs(EntitlementApprovalWorkflowManualApprovalsStepApproversArgs $) { + this.principals = $.principals; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EntitlementApprovalWorkflowManualApprovalsStepApproversArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EntitlementApprovalWorkflowManualApprovalsStepApproversArgs $; + + public Builder() { + $ = new EntitlementApprovalWorkflowManualApprovalsStepApproversArgs(); + } + + public Builder(EntitlementApprovalWorkflowManualApprovalsStepApproversArgs defaults) { + $ = new EntitlementApprovalWorkflowManualApprovalsStepApproversArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param principals Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + * + * @return builder + * + */ + public Builder principals(Output> principals) { + $.principals = principals; + return this; + } + + /** + * @param principals Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + * + * @return builder + * + */ + public Builder principals(List principals) { + return principals(Output.of(principals)); + } + + /** + * @param principals Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + * + * @return builder + * + */ + public Builder principals(String... principals) { + return principals(List.of(principals)); + } + + public EntitlementApprovalWorkflowManualApprovalsStepApproversArgs build() { + if ($.principals == null) { + throw new MissingRequiredPropertyException("EntitlementApprovalWorkflowManualApprovalsStepApproversArgs", "principals"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowManualApprovalsStepArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowManualApprovalsStepArgs.java new file mode 100644 index 0000000000..3de1ceddca --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementApprovalWorkflowManualApprovalsStepArgs.java @@ -0,0 +1,190 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.privilegedaccessmanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementApprovalWorkflowManualApprovalsStepApproversArgs; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class EntitlementApprovalWorkflowManualApprovalsStepArgs extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementApprovalWorkflowManualApprovalsStepArgs Empty = new EntitlementApprovalWorkflowManualApprovalsStepArgs(); + + /** + * How many users from the above list need to approve. + * If there are not enough distinct users in the list above then the workflow + * will indefinitely block. Should always be greater than 0. Currently 1 is the only + * supported value. + * + */ + @Import(name="approvalsNeeded") + private @Nullable Output approvalsNeeded; + + /** + * @return How many users from the above list need to approve. + * If there are not enough distinct users in the list above then the workflow + * will indefinitely block. Should always be greater than 0. Currently 1 is the only + * supported value. + * + */ + public Optional> approvalsNeeded() { + return Optional.ofNullable(this.approvalsNeeded); + } + + /** + * Optional. Additional email addresses to be notified when a grant is pending approval. + * + */ + @Import(name="approverEmailRecipients") + private @Nullable Output> approverEmailRecipients; + + /** + * @return Optional. Additional email addresses to be notified when a grant is pending approval. + * + */ + public Optional>> approverEmailRecipients() { + return Optional.ofNullable(this.approverEmailRecipients); + } + + /** + * The potential set of approvers in this step. This list should contain at only one entry. + * Structure is documented below. + * + */ + @Import(name="approvers", required=true) + private Output approvers; + + /** + * @return The potential set of approvers in this step. This list should contain at only one entry. + * Structure is documented below. + * + */ + public Output approvers() { + return this.approvers; + } + + private EntitlementApprovalWorkflowManualApprovalsStepArgs() {} + + private EntitlementApprovalWorkflowManualApprovalsStepArgs(EntitlementApprovalWorkflowManualApprovalsStepArgs $) { + this.approvalsNeeded = $.approvalsNeeded; + this.approverEmailRecipients = $.approverEmailRecipients; + this.approvers = $.approvers; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EntitlementApprovalWorkflowManualApprovalsStepArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EntitlementApprovalWorkflowManualApprovalsStepArgs $; + + public Builder() { + $ = new EntitlementApprovalWorkflowManualApprovalsStepArgs(); + } + + public Builder(EntitlementApprovalWorkflowManualApprovalsStepArgs defaults) { + $ = new EntitlementApprovalWorkflowManualApprovalsStepArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param approvalsNeeded How many users from the above list need to approve. + * If there are not enough distinct users in the list above then the workflow + * will indefinitely block. Should always be greater than 0. Currently 1 is the only + * supported value. + * + * @return builder + * + */ + public Builder approvalsNeeded(@Nullable Output approvalsNeeded) { + $.approvalsNeeded = approvalsNeeded; + return this; + } + + /** + * @param approvalsNeeded How many users from the above list need to approve. + * If there are not enough distinct users in the list above then the workflow + * will indefinitely block. Should always be greater than 0. Currently 1 is the only + * supported value. + * + * @return builder + * + */ + public Builder approvalsNeeded(Integer approvalsNeeded) { + return approvalsNeeded(Output.of(approvalsNeeded)); + } + + /** + * @param approverEmailRecipients Optional. Additional email addresses to be notified when a grant is pending approval. + * + * @return builder + * + */ + public Builder approverEmailRecipients(@Nullable Output> approverEmailRecipients) { + $.approverEmailRecipients = approverEmailRecipients; + return this; + } + + /** + * @param approverEmailRecipients Optional. Additional email addresses to be notified when a grant is pending approval. + * + * @return builder + * + */ + public Builder approverEmailRecipients(List approverEmailRecipients) { + return approverEmailRecipients(Output.of(approverEmailRecipients)); + } + + /** + * @param approverEmailRecipients Optional. Additional email addresses to be notified when a grant is pending approval. + * + * @return builder + * + */ + public Builder approverEmailRecipients(String... approverEmailRecipients) { + return approverEmailRecipients(List.of(approverEmailRecipients)); + } + + /** + * @param approvers The potential set of approvers in this step. This list should contain at only one entry. + * Structure is documented below. + * + * @return builder + * + */ + public Builder approvers(Output approvers) { + $.approvers = approvers; + return this; + } + + /** + * @param approvers The potential set of approvers in this step. This list should contain at only one entry. + * Structure is documented below. + * + * @return builder + * + */ + public Builder approvers(EntitlementApprovalWorkflowManualApprovalsStepApproversArgs approvers) { + return approvers(Output.of(approvers)); + } + + public EntitlementApprovalWorkflowManualApprovalsStepArgs build() { + if ($.approvers == null) { + throw new MissingRequiredPropertyException("EntitlementApprovalWorkflowManualApprovalsStepArgs", "approvers"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementEligibleUserArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementEligibleUserArgs.java new file mode 100644 index 0000000000..d7b944c5db --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementEligibleUserArgs.java @@ -0,0 +1,96 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.privilegedaccessmanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.List; +import java.util.Objects; + + +public final class EntitlementEligibleUserArgs extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementEligibleUserArgs Empty = new EntitlementEligibleUserArgs(); + + /** + * Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + * + */ + @Import(name="principals", required=true) + private Output> principals; + + /** + * @return Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + * + */ + public Output> principals() { + return this.principals; + } + + private EntitlementEligibleUserArgs() {} + + private EntitlementEligibleUserArgs(EntitlementEligibleUserArgs $) { + this.principals = $.principals; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EntitlementEligibleUserArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EntitlementEligibleUserArgs $; + + public Builder() { + $ = new EntitlementEligibleUserArgs(); + } + + public Builder(EntitlementEligibleUserArgs defaults) { + $ = new EntitlementEligibleUserArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param principals Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + * + * @return builder + * + */ + public Builder principals(Output> principals) { + $.principals = principals; + return this; + } + + /** + * @param principals Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + * + * @return builder + * + */ + public Builder principals(List principals) { + return principals(Output.of(principals)); + } + + /** + * @param principals Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + * + * @return builder + * + */ + public Builder principals(String... principals) { + return principals(List.of(principals)); + } + + public EntitlementEligibleUserArgs build() { + if ($.principals == null) { + throw new MissingRequiredPropertyException("EntitlementEligibleUserArgs", "principals"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementPrivilegedAccessArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementPrivilegedAccessArgs.java new file mode 100644 index 0000000000..f51d0b24ae --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementPrivilegedAccessArgs.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.privilegedaccessmanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementPrivilegedAccessGcpIamAccessArgs; +import java.util.Objects; + + +public final class EntitlementPrivilegedAccessArgs extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementPrivilegedAccessArgs Empty = new EntitlementPrivilegedAccessArgs(); + + /** + * GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + * Structure is documented below. + * + */ + @Import(name="gcpIamAccess", required=true) + private Output gcpIamAccess; + + /** + * @return GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + * Structure is documented below. + * + */ + public Output gcpIamAccess() { + return this.gcpIamAccess; + } + + private EntitlementPrivilegedAccessArgs() {} + + private EntitlementPrivilegedAccessArgs(EntitlementPrivilegedAccessArgs $) { + this.gcpIamAccess = $.gcpIamAccess; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EntitlementPrivilegedAccessArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EntitlementPrivilegedAccessArgs $; + + public Builder() { + $ = new EntitlementPrivilegedAccessArgs(); + } + + public Builder(EntitlementPrivilegedAccessArgs defaults) { + $ = new EntitlementPrivilegedAccessArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param gcpIamAccess GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + * Structure is documented below. + * + * @return builder + * + */ + public Builder gcpIamAccess(Output gcpIamAccess) { + $.gcpIamAccess = gcpIamAccess; + return this; + } + + /** + * @param gcpIamAccess GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + * Structure is documented below. + * + * @return builder + * + */ + public Builder gcpIamAccess(EntitlementPrivilegedAccessGcpIamAccessArgs gcpIamAccess) { + return gcpIamAccess(Output.of(gcpIamAccess)); + } + + public EntitlementPrivilegedAccessArgs build() { + if ($.gcpIamAccess == null) { + throw new MissingRequiredPropertyException("EntitlementPrivilegedAccessArgs", "gcpIamAccess"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementPrivilegedAccessGcpIamAccessArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementPrivilegedAccessGcpIamAccessArgs.java new file mode 100644 index 0000000000..5021f3feeb --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementPrivilegedAccessGcpIamAccessArgs.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.privilegedaccessmanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs; +import java.lang.String; +import java.util.List; +import java.util.Objects; + + +public final class EntitlementPrivilegedAccessGcpIamAccessArgs extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementPrivilegedAccessGcpIamAccessArgs Empty = new EntitlementPrivilegedAccessGcpIamAccessArgs(); + + /** + * Name of the resource. + * + */ + @Import(name="resource", required=true) + private Output resource; + + /** + * @return Name of the resource. + * + */ + public Output resource() { + return this.resource; + } + + /** + * The type of this resource. + * + */ + @Import(name="resourceType", required=true) + private Output resourceType; + + /** + * @return The type of this resource. + * + */ + public Output resourceType() { + return this.resourceType; + } + + /** + * Role bindings to be created on successful grant. + * Structure is documented below. + * + */ + @Import(name="roleBindings", required=true) + private Output> roleBindings; + + /** + * @return Role bindings to be created on successful grant. + * Structure is documented below. + * + */ + public Output> roleBindings() { + return this.roleBindings; + } + + private EntitlementPrivilegedAccessGcpIamAccessArgs() {} + + private EntitlementPrivilegedAccessGcpIamAccessArgs(EntitlementPrivilegedAccessGcpIamAccessArgs $) { + this.resource = $.resource; + this.resourceType = $.resourceType; + this.roleBindings = $.roleBindings; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EntitlementPrivilegedAccessGcpIamAccessArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EntitlementPrivilegedAccessGcpIamAccessArgs $; + + public Builder() { + $ = new EntitlementPrivilegedAccessGcpIamAccessArgs(); + } + + public Builder(EntitlementPrivilegedAccessGcpIamAccessArgs defaults) { + $ = new EntitlementPrivilegedAccessGcpIamAccessArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param resource Name of the resource. + * + * @return builder + * + */ + public Builder resource(Output resource) { + $.resource = resource; + return this; + } + + /** + * @param resource Name of the resource. + * + * @return builder + * + */ + public Builder resource(String resource) { + return resource(Output.of(resource)); + } + + /** + * @param resourceType The type of this resource. + * + * @return builder + * + */ + public Builder resourceType(Output resourceType) { + $.resourceType = resourceType; + return this; + } + + /** + * @param resourceType The type of this resource. + * + * @return builder + * + */ + public Builder resourceType(String resourceType) { + return resourceType(Output.of(resourceType)); + } + + /** + * @param roleBindings Role bindings to be created on successful grant. + * Structure is documented below. + * + * @return builder + * + */ + public Builder roleBindings(Output> roleBindings) { + $.roleBindings = roleBindings; + return this; + } + + /** + * @param roleBindings Role bindings to be created on successful grant. + * Structure is documented below. + * + * @return builder + * + */ + public Builder roleBindings(List roleBindings) { + return roleBindings(Output.of(roleBindings)); + } + + /** + * @param roleBindings Role bindings to be created on successful grant. + * Structure is documented below. + * + * @return builder + * + */ + public Builder roleBindings(EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs... roleBindings) { + return roleBindings(List.of(roleBindings)); + } + + public EntitlementPrivilegedAccessGcpIamAccessArgs build() { + if ($.resource == null) { + throw new MissingRequiredPropertyException("EntitlementPrivilegedAccessGcpIamAccessArgs", "resource"); + } + if ($.resourceType == null) { + throw new MissingRequiredPropertyException("EntitlementPrivilegedAccessGcpIamAccessArgs", "resourceType"); + } + if ($.roleBindings == null) { + throw new MissingRequiredPropertyException("EntitlementPrivilegedAccessGcpIamAccessArgs", "roleBindings"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs.java new file mode 100644 index 0000000000..b2ac7fd956 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs.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.privilegedaccessmanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs Empty = new EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs(); + + /** + * The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + * https://cloud.google.com/iam/docs/conditions-overview#attributes. + * + */ + @Import(name="conditionExpression") + private @Nullable Output conditionExpression; + + /** + * @return The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + * https://cloud.google.com/iam/docs/conditions-overview#attributes. + * + */ + public Optional> conditionExpression() { + return Optional.ofNullable(this.conditionExpression); + } + + /** + * IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + * + */ + @Import(name="role", required=true) + private Output role; + + /** + * @return IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + * + */ + public Output role() { + return this.role; + } + + private EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs() {} + + private EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs(EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs $) { + this.conditionExpression = $.conditionExpression; + this.role = $.role; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs $; + + public Builder() { + $ = new EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs(); + } + + public Builder(EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs defaults) { + $ = new EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param conditionExpression The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + * https://cloud.google.com/iam/docs/conditions-overview#attributes. + * + * @return builder + * + */ + public Builder conditionExpression(@Nullable Output conditionExpression) { + $.conditionExpression = conditionExpression; + return this; + } + + /** + * @param conditionExpression The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + * https://cloud.google.com/iam/docs/conditions-overview#attributes. + * + * @return builder + * + */ + public Builder conditionExpression(String conditionExpression) { + return conditionExpression(Output.of(conditionExpression)); + } + + /** + * @param role IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + * + * @return builder + * + */ + public Builder role(Output role) { + $.role = role; + return this; + } + + /** + * @param role IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + * + * @return builder + * + */ + public Builder role(String role) { + return role(Output.of(role)); + } + + public EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs build() { + if ($.role == null) { + throw new MissingRequiredPropertyException("EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs", "role"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementRequesterJustificationConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementRequesterJustificationConfigArgs.java new file mode 100644 index 0000000000..d7c99b5c9c --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementRequesterJustificationConfigArgs.java @@ -0,0 +1,129 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.privilegedaccessmanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementRequesterJustificationConfigNotMandatoryArgs; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementRequesterJustificationConfigUnstructuredArgs; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class EntitlementRequesterJustificationConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementRequesterJustificationConfigArgs Empty = new EntitlementRequesterJustificationConfigArgs(); + + /** + * The justification is not mandatory but can be provided in any of the supported formats. + * + */ + @Import(name="notMandatory") + private @Nullable Output notMandatory; + + /** + * @return The justification is not mandatory but can be provided in any of the supported formats. + * + */ + public Optional> notMandatory() { + return Optional.ofNullable(this.notMandatory); + } + + /** + * The requester has to provide a justification in the form of free flowing text. + * + * *** + * + */ + @Import(name="unstructured") + private @Nullable Output unstructured; + + /** + * @return The requester has to provide a justification in the form of free flowing text. + * + * *** + * + */ + public Optional> unstructured() { + return Optional.ofNullable(this.unstructured); + } + + private EntitlementRequesterJustificationConfigArgs() {} + + private EntitlementRequesterJustificationConfigArgs(EntitlementRequesterJustificationConfigArgs $) { + this.notMandatory = $.notMandatory; + this.unstructured = $.unstructured; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EntitlementRequesterJustificationConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EntitlementRequesterJustificationConfigArgs $; + + public Builder() { + $ = new EntitlementRequesterJustificationConfigArgs(); + } + + public Builder(EntitlementRequesterJustificationConfigArgs defaults) { + $ = new EntitlementRequesterJustificationConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param notMandatory The justification is not mandatory but can be provided in any of the supported formats. + * + * @return builder + * + */ + public Builder notMandatory(@Nullable Output notMandatory) { + $.notMandatory = notMandatory; + return this; + } + + /** + * @param notMandatory The justification is not mandatory but can be provided in any of the supported formats. + * + * @return builder + * + */ + public Builder notMandatory(EntitlementRequesterJustificationConfigNotMandatoryArgs notMandatory) { + return notMandatory(Output.of(notMandatory)); + } + + /** + * @param unstructured The requester has to provide a justification in the form of free flowing text. + * + * *** + * + * @return builder + * + */ + public Builder unstructured(@Nullable Output unstructured) { + $.unstructured = unstructured; + return this; + } + + /** + * @param unstructured The requester has to provide a justification in the form of free flowing text. + * + * *** + * + * @return builder + * + */ + public Builder unstructured(EntitlementRequesterJustificationConfigUnstructuredArgs unstructured) { + return unstructured(Output.of(unstructured)); + } + + public EntitlementRequesterJustificationConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementRequesterJustificationConfigNotMandatoryArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementRequesterJustificationConfigNotMandatoryArgs.java new file mode 100644 index 0000000000..ac98594dea --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementRequesterJustificationConfigNotMandatoryArgs.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.privilegedaccessmanager.inputs; + + + + +public final class EntitlementRequesterJustificationConfigNotMandatoryArgs extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementRequesterJustificationConfigNotMandatoryArgs Empty = new EntitlementRequesterJustificationConfigNotMandatoryArgs(); + + public static Builder builder() { + return new Builder(); + } + + public static final class Builder { + private EntitlementRequesterJustificationConfigNotMandatoryArgs $; + + public Builder() { + $ = new EntitlementRequesterJustificationConfigNotMandatoryArgs(); + } + public EntitlementRequesterJustificationConfigNotMandatoryArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementRequesterJustificationConfigUnstructuredArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementRequesterJustificationConfigUnstructuredArgs.java new file mode 100644 index 0000000000..871699d0d8 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementRequesterJustificationConfigUnstructuredArgs.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.privilegedaccessmanager.inputs; + + + + +public final class EntitlementRequesterJustificationConfigUnstructuredArgs extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementRequesterJustificationConfigUnstructuredArgs Empty = new EntitlementRequesterJustificationConfigUnstructuredArgs(); + + public static Builder builder() { + return new Builder(); + } + + public static final class Builder { + private EntitlementRequesterJustificationConfigUnstructuredArgs $; + + public Builder() { + $ = new EntitlementRequesterJustificationConfigUnstructuredArgs(); + } + public EntitlementRequesterJustificationConfigUnstructuredArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementState.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementState.java new file mode 100644 index 0000000000..1549cabdf3 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/inputs/EntitlementState.java @@ -0,0 +1,625 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.privilegedaccessmanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementAdditionalNotificationTargetsArgs; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementApprovalWorkflowArgs; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementEligibleUserArgs; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementPrivilegedAccessArgs; +import com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementRequesterJustificationConfigArgs; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class EntitlementState extends com.pulumi.resources.ResourceArgs { + + public static final EntitlementState Empty = new EntitlementState(); + + /** + * AdditionalNotificationTargets includes email addresses to be notified. + * + */ + @Import(name="additionalNotificationTargets") + private @Nullable Output additionalNotificationTargets; + + /** + * @return AdditionalNotificationTargets includes email addresses to be notified. + * + */ + public Optional> additionalNotificationTargets() { + return Optional.ofNullable(this.additionalNotificationTargets); + } + + /** + * The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + * Different types of approval workflows that can be used to gate privileged access granting. + * + */ + @Import(name="approvalWorkflow") + private @Nullable Output approvalWorkflow; + + /** + * @return The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + * Different types of approval workflows that can be used to gate privileged access granting. + * + */ + public Optional> approvalWorkflow() { + return Optional.ofNullable(this.approvalWorkflow); + } + + /** + * Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + * Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + * Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + * + */ + @Import(name="eligibleUsers") + private @Nullable Output> eligibleUsers; + + /** + * @return Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + * + */ + public Optional>> eligibleUsers() { + return Optional.ofNullable(this.eligibleUsers); + } + + /** + * The ID to use for this Entitlement. This will become the last part of the resource name. + * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + * This value should be unique among all other Entitlements under the specified `parent`. + * + */ + @Import(name="entitlementId") + private @Nullable Output entitlementId; + + /** + * @return The ID to use for this Entitlement. This will become the last part of the resource name. + * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + * This value should be unique among all other Entitlements under the specified `parent`. + * + */ + public Optional> entitlementId() { + return Optional.ofNullable(this.entitlementId); + } + + /** + * For Resource freshness validation (https://google.aip.dev/154) + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return For Resource freshness validation (https://google.aip.dev/154) + * + */ + public Optional> etag() { + return Optional.ofNullable(this.etag); + } + + /** + * The region of the Entitlement resource. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The region of the Entitlement resource. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * The maximum amount of time for which access would be granted for a request. + * A requester can choose to ask for access for less than this duration but never more. + * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + * + */ + @Import(name="maxRequestDuration") + private @Nullable Output maxRequestDuration; + + /** + * @return The maximum amount of time for which access would be granted for a request. + * A requester can choose to ask for access for less than this duration but never more. + * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + * + */ + public Optional> maxRequestDuration() { + return Optional.ofNullable(this.maxRequestDuration); + } + + /** + * Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + * Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + * Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + * + */ + @Import(name="parent") + private @Nullable Output parent; + + /** + * @return Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + * + */ + public Optional> parent() { + return Optional.ofNullable(this.parent); + } + + /** + * Privileged access that this service can be used to gate. + * Structure is documented below. + * + */ + @Import(name="privilegedAccess") + private @Nullable Output privilegedAccess; + + /** + * @return Privileged access that this service can be used to gate. + * Structure is documented below. + * + */ + public Optional> privilegedAccess() { + return Optional.ofNullable(this.privilegedAccess); + } + + /** + * Defines the ways in which a requester should provide the justification while requesting for access. + * Structure is documented below. + * + */ + @Import(name="requesterJustificationConfig") + private @Nullable Output requesterJustificationConfig; + + /** + * @return Defines the ways in which a requester should provide the justification while requesting for access. + * Structure is documented below. + * + */ + public Optional> requesterJustificationConfig() { + return Optional.ofNullable(this.requesterJustificationConfig); + } + + /** + * Output only. The current state of the Entitlement. + * + */ + @Import(name="state") + private @Nullable Output state; + + /** + * @return Output only. The current state of the Entitlement. + * + */ + public Optional> state() { + return Optional.ofNullable(this.state); + } + + /** + * Output only. Update time stamp. 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 Output only. Update time stamp. 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 EntitlementState() {} + + private EntitlementState(EntitlementState $) { + this.additionalNotificationTargets = $.additionalNotificationTargets; + this.approvalWorkflow = $.approvalWorkflow; + this.createTime = $.createTime; + this.eligibleUsers = $.eligibleUsers; + this.entitlementId = $.entitlementId; + this.etag = $.etag; + this.location = $.location; + this.maxRequestDuration = $.maxRequestDuration; + this.name = $.name; + this.parent = $.parent; + this.privilegedAccess = $.privilegedAccess; + this.requesterJustificationConfig = $.requesterJustificationConfig; + this.state = $.state; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EntitlementState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EntitlementState $; + + public Builder() { + $ = new EntitlementState(); + } + + public Builder(EntitlementState defaults) { + $ = new EntitlementState(Objects.requireNonNull(defaults)); + } + + /** + * @param additionalNotificationTargets AdditionalNotificationTargets includes email addresses to be notified. + * + * @return builder + * + */ + public Builder additionalNotificationTargets(@Nullable Output additionalNotificationTargets) { + $.additionalNotificationTargets = additionalNotificationTargets; + return this; + } + + /** + * @param additionalNotificationTargets AdditionalNotificationTargets includes email addresses to be notified. + * + * @return builder + * + */ + public Builder additionalNotificationTargets(EntitlementAdditionalNotificationTargetsArgs additionalNotificationTargets) { + return additionalNotificationTargets(Output.of(additionalNotificationTargets)); + } + + /** + * @param approvalWorkflow The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + * Different types of approval workflows that can be used to gate privileged access granting. + * + * @return builder + * + */ + public Builder approvalWorkflow(@Nullable Output approvalWorkflow) { + $.approvalWorkflow = approvalWorkflow; + return this; + } + + /** + * @param approvalWorkflow The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + * Different types of approval workflows that can be used to gate privileged access granting. + * + * @return builder + * + */ + public Builder approvalWorkflow(EntitlementApprovalWorkflowArgs approvalWorkflow) { + return approvalWorkflow(Output.of(approvalWorkflow)); + } + + /** + * @param createTime Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + * Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + * Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param eligibleUsers Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + * + * @return builder + * + */ + public Builder eligibleUsers(@Nullable Output> eligibleUsers) { + $.eligibleUsers = eligibleUsers; + return this; + } + + /** + * @param eligibleUsers Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + * + * @return builder + * + */ + public Builder eligibleUsers(List eligibleUsers) { + return eligibleUsers(Output.of(eligibleUsers)); + } + + /** + * @param eligibleUsers Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + * + * @return builder + * + */ + public Builder eligibleUsers(EntitlementEligibleUserArgs... eligibleUsers) { + return eligibleUsers(List.of(eligibleUsers)); + } + + /** + * @param entitlementId The ID to use for this Entitlement. This will become the last part of the resource name. + * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + * This value should be unique among all other Entitlements under the specified `parent`. + * + * @return builder + * + */ + public Builder entitlementId(@Nullable Output entitlementId) { + $.entitlementId = entitlementId; + return this; + } + + /** + * @param entitlementId The ID to use for this Entitlement. This will become the last part of the resource name. + * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + * This value should be unique among all other Entitlements under the specified `parent`. + * + * @return builder + * + */ + public Builder entitlementId(String entitlementId) { + return entitlementId(Output.of(entitlementId)); + } + + /** + * @param etag For Resource freshness validation (https://google.aip.dev/154) + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag For Resource freshness validation (https://google.aip.dev/154) + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + + /** + * @param location The region of the Entitlement resource. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The region of the Entitlement resource. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param maxRequestDuration The maximum amount of time for which access would be granted for a request. + * A requester can choose to ask for access for less than this duration but never more. + * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + * + * @return builder + * + */ + public Builder maxRequestDuration(@Nullable Output maxRequestDuration) { + $.maxRequestDuration = maxRequestDuration; + return this; + } + + /** + * @param maxRequestDuration The maximum amount of time for which access would be granted for a request. + * A requester can choose to ask for access for less than this duration but never more. + * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + * + * @return builder + * + */ + public Builder maxRequestDuration(String maxRequestDuration) { + return maxRequestDuration(Output.of(maxRequestDuration)); + } + + /** + * @param name Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + * Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + * Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param parent Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + * + * @return builder + * + */ + public Builder parent(@Nullable Output parent) { + $.parent = parent; + return this; + } + + /** + * @param parent Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + * + * @return builder + * + */ + public Builder parent(String parent) { + return parent(Output.of(parent)); + } + + /** + * @param privilegedAccess Privileged access that this service can be used to gate. + * Structure is documented below. + * + * @return builder + * + */ + public Builder privilegedAccess(@Nullable Output privilegedAccess) { + $.privilegedAccess = privilegedAccess; + return this; + } + + /** + * @param privilegedAccess Privileged access that this service can be used to gate. + * Structure is documented below. + * + * @return builder + * + */ + public Builder privilegedAccess(EntitlementPrivilegedAccessArgs privilegedAccess) { + return privilegedAccess(Output.of(privilegedAccess)); + } + + /** + * @param requesterJustificationConfig Defines the ways in which a requester should provide the justification while requesting for access. + * Structure is documented below. + * + * @return builder + * + */ + public Builder requesterJustificationConfig(@Nullable Output requesterJustificationConfig) { + $.requesterJustificationConfig = requesterJustificationConfig; + return this; + } + + /** + * @param requesterJustificationConfig Defines the ways in which a requester should provide the justification while requesting for access. + * Structure is documented below. + * + * @return builder + * + */ + public Builder requesterJustificationConfig(EntitlementRequesterJustificationConfigArgs requesterJustificationConfig) { + return requesterJustificationConfig(Output.of(requesterJustificationConfig)); + } + + /** + * @param state Output only. The current state of the Entitlement. + * + * @return builder + * + */ + public Builder state(@Nullable Output state) { + $.state = state; + return this; + } + + /** + * @param state Output only. The current state of the Entitlement. + * + * @return builder + * + */ + public Builder state(String state) { + return state(Output.of(state)); + } + + /** + * @param updateTime Output only. Update time stamp. 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 Output only. Update time stamp. 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 EntitlementState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementAdditionalNotificationTargets.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementAdditionalNotificationTargets.java new file mode 100644 index 0000000000..1065a01dec --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementAdditionalNotificationTargets.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.privilegedaccessmanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import javax.annotation.Nullable; + +@CustomType +public final class EntitlementAdditionalNotificationTargets { + /** + * @return Optional. Additional email addresses to be notified when a principal(requester) is granted access. + * + */ + private @Nullable List adminEmailRecipients; + /** + * @return Optional. Additional email address to be notified about an eligible entitlement. + * + */ + private @Nullable List requesterEmailRecipients; + + private EntitlementAdditionalNotificationTargets() {} + /** + * @return Optional. Additional email addresses to be notified when a principal(requester) is granted access. + * + */ + public List adminEmailRecipients() { + return this.adminEmailRecipients == null ? List.of() : this.adminEmailRecipients; + } + /** + * @return Optional. Additional email address to be notified about an eligible entitlement. + * + */ + public List requesterEmailRecipients() { + return this.requesterEmailRecipients == null ? List.of() : this.requesterEmailRecipients; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(EntitlementAdditionalNotificationTargets defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable List adminEmailRecipients; + private @Nullable List requesterEmailRecipients; + public Builder() {} + public Builder(EntitlementAdditionalNotificationTargets defaults) { + Objects.requireNonNull(defaults); + this.adminEmailRecipients = defaults.adminEmailRecipients; + this.requesterEmailRecipients = defaults.requesterEmailRecipients; + } + + @CustomType.Setter + public Builder adminEmailRecipients(@Nullable List adminEmailRecipients) { + + this.adminEmailRecipients = adminEmailRecipients; + return this; + } + public Builder adminEmailRecipients(String... adminEmailRecipients) { + return adminEmailRecipients(List.of(adminEmailRecipients)); + } + @CustomType.Setter + public Builder requesterEmailRecipients(@Nullable List requesterEmailRecipients) { + + this.requesterEmailRecipients = requesterEmailRecipients; + return this; + } + public Builder requesterEmailRecipients(String... requesterEmailRecipients) { + return requesterEmailRecipients(List.of(requesterEmailRecipients)); + } + public EntitlementAdditionalNotificationTargets build() { + final var _resultValue = new EntitlementAdditionalNotificationTargets(); + _resultValue.adminEmailRecipients = adminEmailRecipients; + _resultValue.requesterEmailRecipients = requesterEmailRecipients; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflow.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflow.java new file mode 100644 index 0000000000..f6033c1873 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflow.java @@ -0,0 +1,72 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.privilegedaccessmanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.privilegedaccessmanager.outputs.EntitlementApprovalWorkflowManualApprovals; +import java.util.Objects; + +@CustomType +public final class EntitlementApprovalWorkflow { + /** + * @return A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + * The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + * This can be used to create approval workflows such as + * * Require an approval from any user in a group G. + * * Require an approval from any k number of users from a Group G. + * * Require an approval from any user in a group G and then from a user U. etc. + * A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + * Structure is documented below. + * + */ + private EntitlementApprovalWorkflowManualApprovals manualApprovals; + + private EntitlementApprovalWorkflow() {} + /** + * @return A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + * The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + * This can be used to create approval workflows such as + * * Require an approval from any user in a group G. + * * Require an approval from any k number of users from a Group G. + * * Require an approval from any user in a group G and then from a user U. etc. + * A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + * Structure is documented below. + * + */ + public EntitlementApprovalWorkflowManualApprovals manualApprovals() { + return this.manualApprovals; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(EntitlementApprovalWorkflow defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private EntitlementApprovalWorkflowManualApprovals manualApprovals; + public Builder() {} + public Builder(EntitlementApprovalWorkflow defaults) { + Objects.requireNonNull(defaults); + this.manualApprovals = defaults.manualApprovals; + } + + @CustomType.Setter + public Builder manualApprovals(EntitlementApprovalWorkflowManualApprovals manualApprovals) { + if (manualApprovals == null) { + throw new MissingRequiredPropertyException("EntitlementApprovalWorkflow", "manualApprovals"); + } + this.manualApprovals = manualApprovals; + return this; + } + public EntitlementApprovalWorkflow build() { + final var _resultValue = new EntitlementApprovalWorkflow(); + _resultValue.manualApprovals = manualApprovals; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflowManualApprovals.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflowManualApprovals.java new file mode 100644 index 0000000000..478853c378 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflowManualApprovals.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.privilegedaccessmanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.privilegedaccessmanager.outputs.EntitlementApprovalWorkflowManualApprovalsStep; +import java.lang.Boolean; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class EntitlementApprovalWorkflowManualApprovals { + /** + * @return Optional. Do the approvers need to provide a justification for their actions? + * + */ + private @Nullable Boolean requireApproverJustification; + /** + * @return List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + * Structure is documented below. + * + */ + private List steps; + + private EntitlementApprovalWorkflowManualApprovals() {} + /** + * @return Optional. Do the approvers need to provide a justification for their actions? + * + */ + public Optional requireApproverJustification() { + return Optional.ofNullable(this.requireApproverJustification); + } + /** + * @return List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + * Structure is documented below. + * + */ + public List steps() { + return this.steps; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(EntitlementApprovalWorkflowManualApprovals defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean requireApproverJustification; + private List steps; + public Builder() {} + public Builder(EntitlementApprovalWorkflowManualApprovals defaults) { + Objects.requireNonNull(defaults); + this.requireApproverJustification = defaults.requireApproverJustification; + this.steps = defaults.steps; + } + + @CustomType.Setter + public Builder requireApproverJustification(@Nullable Boolean requireApproverJustification) { + + this.requireApproverJustification = requireApproverJustification; + return this; + } + @CustomType.Setter + public Builder steps(List steps) { + if (steps == null) { + throw new MissingRequiredPropertyException("EntitlementApprovalWorkflowManualApprovals", "steps"); + } + this.steps = steps; + return this; + } + public Builder steps(EntitlementApprovalWorkflowManualApprovalsStep... steps) { + return steps(List.of(steps)); + } + public EntitlementApprovalWorkflowManualApprovals build() { + final var _resultValue = new EntitlementApprovalWorkflowManualApprovals(); + _resultValue.requireApproverJustification = requireApproverJustification; + _resultValue.steps = steps; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflowManualApprovalsStep.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflowManualApprovalsStep.java new file mode 100644 index 0000000000..66ecb6323a --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflowManualApprovalsStep.java @@ -0,0 +1,116 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.privilegedaccessmanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.privilegedaccessmanager.outputs.EntitlementApprovalWorkflowManualApprovalsStepApprovers; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class EntitlementApprovalWorkflowManualApprovalsStep { + /** + * @return How many users from the above list need to approve. + * If there are not enough distinct users in the list above then the workflow + * will indefinitely block. Should always be greater than 0. Currently 1 is the only + * supported value. + * + */ + private @Nullable Integer approvalsNeeded; + /** + * @return Optional. Additional email addresses to be notified when a grant is pending approval. + * + */ + private @Nullable List approverEmailRecipients; + /** + * @return The potential set of approvers in this step. This list should contain at only one entry. + * Structure is documented below. + * + */ + private EntitlementApprovalWorkflowManualApprovalsStepApprovers approvers; + + private EntitlementApprovalWorkflowManualApprovalsStep() {} + /** + * @return How many users from the above list need to approve. + * If there are not enough distinct users in the list above then the workflow + * will indefinitely block. Should always be greater than 0. Currently 1 is the only + * supported value. + * + */ + public Optional approvalsNeeded() { + return Optional.ofNullable(this.approvalsNeeded); + } + /** + * @return Optional. Additional email addresses to be notified when a grant is pending approval. + * + */ + public List approverEmailRecipients() { + return this.approverEmailRecipients == null ? List.of() : this.approverEmailRecipients; + } + /** + * @return The potential set of approvers in this step. This list should contain at only one entry. + * Structure is documented below. + * + */ + public EntitlementApprovalWorkflowManualApprovalsStepApprovers approvers() { + return this.approvers; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(EntitlementApprovalWorkflowManualApprovalsStep defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Integer approvalsNeeded; + private @Nullable List approverEmailRecipients; + private EntitlementApprovalWorkflowManualApprovalsStepApprovers approvers; + public Builder() {} + public Builder(EntitlementApprovalWorkflowManualApprovalsStep defaults) { + Objects.requireNonNull(defaults); + this.approvalsNeeded = defaults.approvalsNeeded; + this.approverEmailRecipients = defaults.approverEmailRecipients; + this.approvers = defaults.approvers; + } + + @CustomType.Setter + public Builder approvalsNeeded(@Nullable Integer approvalsNeeded) { + + this.approvalsNeeded = approvalsNeeded; + return this; + } + @CustomType.Setter + public Builder approverEmailRecipients(@Nullable List approverEmailRecipients) { + + this.approverEmailRecipients = approverEmailRecipients; + return this; + } + public Builder approverEmailRecipients(String... approverEmailRecipients) { + return approverEmailRecipients(List.of(approverEmailRecipients)); + } + @CustomType.Setter + public Builder approvers(EntitlementApprovalWorkflowManualApprovalsStepApprovers approvers) { + if (approvers == null) { + throw new MissingRequiredPropertyException("EntitlementApprovalWorkflowManualApprovalsStep", "approvers"); + } + this.approvers = approvers; + return this; + } + public EntitlementApprovalWorkflowManualApprovalsStep build() { + final var _resultValue = new EntitlementApprovalWorkflowManualApprovalsStep(); + _resultValue.approvalsNeeded = approvalsNeeded; + _resultValue.approverEmailRecipients = approverEmailRecipients; + _resultValue.approvers = approvers; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflowManualApprovalsStepApprovers.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflowManualApprovalsStepApprovers.java new file mode 100644 index 0000000000..0edb6569e4 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementApprovalWorkflowManualApprovalsStepApprovers.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.privilegedaccessmanager.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 EntitlementApprovalWorkflowManualApprovalsStepApprovers { + /** + * @return Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + * + */ + private List principals; + + private EntitlementApprovalWorkflowManualApprovalsStepApprovers() {} + /** + * @return Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + * + */ + public List principals() { + return this.principals; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(EntitlementApprovalWorkflowManualApprovalsStepApprovers defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List principals; + public Builder() {} + public Builder(EntitlementApprovalWorkflowManualApprovalsStepApprovers defaults) { + Objects.requireNonNull(defaults); + this.principals = defaults.principals; + } + + @CustomType.Setter + public Builder principals(List principals) { + if (principals == null) { + throw new MissingRequiredPropertyException("EntitlementApprovalWorkflowManualApprovalsStepApprovers", "principals"); + } + this.principals = principals; + return this; + } + public Builder principals(String... principals) { + return principals(List.of(principals)); + } + public EntitlementApprovalWorkflowManualApprovalsStepApprovers build() { + final var _resultValue = new EntitlementApprovalWorkflowManualApprovalsStepApprovers(); + _resultValue.principals = principals; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementEligibleUser.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementEligibleUser.java new file mode 100644 index 0000000000..f8f6af7044 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementEligibleUser.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.privilegedaccessmanager.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 EntitlementEligibleUser { + /** + * @return Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + * + */ + private List principals; + + private EntitlementEligibleUser() {} + /** + * @return Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + * + */ + public List principals() { + return this.principals; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(EntitlementEligibleUser defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List principals; + public Builder() {} + public Builder(EntitlementEligibleUser defaults) { + Objects.requireNonNull(defaults); + this.principals = defaults.principals; + } + + @CustomType.Setter + public Builder principals(List principals) { + if (principals == null) { + throw new MissingRequiredPropertyException("EntitlementEligibleUser", "principals"); + } + this.principals = principals; + return this; + } + public Builder principals(String... principals) { + return principals(List.of(principals)); + } + public EntitlementEligibleUser build() { + final var _resultValue = new EntitlementEligibleUser(); + _resultValue.principals = principals; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementPrivilegedAccess.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementPrivilegedAccess.java new file mode 100644 index 0000000000..4ba1b45e98 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementPrivilegedAccess.java @@ -0,0 +1,60 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.privilegedaccessmanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.privilegedaccessmanager.outputs.EntitlementPrivilegedAccessGcpIamAccess; +import java.util.Objects; + +@CustomType +public final class EntitlementPrivilegedAccess { + /** + * @return GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + * Structure is documented below. + * + */ + private EntitlementPrivilegedAccessGcpIamAccess gcpIamAccess; + + private EntitlementPrivilegedAccess() {} + /** + * @return GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + * Structure is documented below. + * + */ + public EntitlementPrivilegedAccessGcpIamAccess gcpIamAccess() { + return this.gcpIamAccess; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(EntitlementPrivilegedAccess defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private EntitlementPrivilegedAccessGcpIamAccess gcpIamAccess; + public Builder() {} + public Builder(EntitlementPrivilegedAccess defaults) { + Objects.requireNonNull(defaults); + this.gcpIamAccess = defaults.gcpIamAccess; + } + + @CustomType.Setter + public Builder gcpIamAccess(EntitlementPrivilegedAccessGcpIamAccess gcpIamAccess) { + if (gcpIamAccess == null) { + throw new MissingRequiredPropertyException("EntitlementPrivilegedAccess", "gcpIamAccess"); + } + this.gcpIamAccess = gcpIamAccess; + return this; + } + public EntitlementPrivilegedAccess build() { + final var _resultValue = new EntitlementPrivilegedAccess(); + _resultValue.gcpIamAccess = gcpIamAccess; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementPrivilegedAccessGcpIamAccess.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementPrivilegedAccessGcpIamAccess.java new file mode 100644 index 0000000000..de5cc9a67d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementPrivilegedAccessGcpIamAccess.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.privilegedaccessmanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.privilegedaccessmanager.outputs.EntitlementPrivilegedAccessGcpIamAccessRoleBinding; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class EntitlementPrivilegedAccessGcpIamAccess { + /** + * @return Name of the resource. + * + */ + private String resource; + /** + * @return The type of this resource. + * + */ + private String resourceType; + /** + * @return Role bindings to be created on successful grant. + * Structure is documented below. + * + */ + private List roleBindings; + + private EntitlementPrivilegedAccessGcpIamAccess() {} + /** + * @return Name of the resource. + * + */ + public String resource() { + return this.resource; + } + /** + * @return The type of this resource. + * + */ + public String resourceType() { + return this.resourceType; + } + /** + * @return Role bindings to be created on successful grant. + * Structure is documented below. + * + */ + public List roleBindings() { + return this.roleBindings; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(EntitlementPrivilegedAccessGcpIamAccess defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String resource; + private String resourceType; + private List roleBindings; + public Builder() {} + public Builder(EntitlementPrivilegedAccessGcpIamAccess defaults) { + Objects.requireNonNull(defaults); + this.resource = defaults.resource; + this.resourceType = defaults.resourceType; + this.roleBindings = defaults.roleBindings; + } + + @CustomType.Setter + public Builder resource(String resource) { + if (resource == null) { + throw new MissingRequiredPropertyException("EntitlementPrivilegedAccessGcpIamAccess", "resource"); + } + this.resource = resource; + return this; + } + @CustomType.Setter + public Builder resourceType(String resourceType) { + if (resourceType == null) { + throw new MissingRequiredPropertyException("EntitlementPrivilegedAccessGcpIamAccess", "resourceType"); + } + this.resourceType = resourceType; + return this; + } + @CustomType.Setter + public Builder roleBindings(List roleBindings) { + if (roleBindings == null) { + throw new MissingRequiredPropertyException("EntitlementPrivilegedAccessGcpIamAccess", "roleBindings"); + } + this.roleBindings = roleBindings; + return this; + } + public Builder roleBindings(EntitlementPrivilegedAccessGcpIamAccessRoleBinding... roleBindings) { + return roleBindings(List.of(roleBindings)); + } + public EntitlementPrivilegedAccessGcpIamAccess build() { + final var _resultValue = new EntitlementPrivilegedAccessGcpIamAccess(); + _resultValue.resource = resource; + _resultValue.resourceType = resourceType; + _resultValue.roleBindings = roleBindings; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementPrivilegedAccessGcpIamAccessRoleBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementPrivilegedAccessGcpIamAccessRoleBinding.java new file mode 100644 index 0000000000..e91170aaf2 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementPrivilegedAccessGcpIamAccessRoleBinding.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.privilegedaccessmanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class EntitlementPrivilegedAccessGcpIamAccessRoleBinding { + /** + * @return The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + * https://cloud.google.com/iam/docs/conditions-overview#attributes. + * + */ + private @Nullable String conditionExpression; + /** + * @return IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + * + */ + private String role; + + private EntitlementPrivilegedAccessGcpIamAccessRoleBinding() {} + /** + * @return The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + * https://cloud.google.com/iam/docs/conditions-overview#attributes. + * + */ + public Optional conditionExpression() { + return Optional.ofNullable(this.conditionExpression); + } + /** + * @return IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + * + */ + public String role() { + return this.role; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(EntitlementPrivilegedAccessGcpIamAccessRoleBinding defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String conditionExpression; + private String role; + public Builder() {} + public Builder(EntitlementPrivilegedAccessGcpIamAccessRoleBinding defaults) { + Objects.requireNonNull(defaults); + this.conditionExpression = defaults.conditionExpression; + this.role = defaults.role; + } + + @CustomType.Setter + public Builder conditionExpression(@Nullable String conditionExpression) { + + this.conditionExpression = conditionExpression; + return this; + } + @CustomType.Setter + public Builder role(String role) { + if (role == null) { + throw new MissingRequiredPropertyException("EntitlementPrivilegedAccessGcpIamAccessRoleBinding", "role"); + } + this.role = role; + return this; + } + public EntitlementPrivilegedAccessGcpIamAccessRoleBinding build() { + final var _resultValue = new EntitlementPrivilegedAccessGcpIamAccessRoleBinding(); + _resultValue.conditionExpression = conditionExpression; + _resultValue.role = role; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementRequesterJustificationConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementRequesterJustificationConfig.java new file mode 100644 index 0000000000..9435ed1fd9 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementRequesterJustificationConfig.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.privilegedaccessmanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.privilegedaccessmanager.outputs.EntitlementRequesterJustificationConfigNotMandatory; +import com.pulumi.gcp.privilegedaccessmanager.outputs.EntitlementRequesterJustificationConfigUnstructured; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class EntitlementRequesterJustificationConfig { + /** + * @return The justification is not mandatory but can be provided in any of the supported formats. + * + */ + private @Nullable EntitlementRequesterJustificationConfigNotMandatory notMandatory; + /** + * @return The requester has to provide a justification in the form of free flowing text. + * + * *** + * + */ + private @Nullable EntitlementRequesterJustificationConfigUnstructured unstructured; + + private EntitlementRequesterJustificationConfig() {} + /** + * @return The justification is not mandatory but can be provided in any of the supported formats. + * + */ + public Optional notMandatory() { + return Optional.ofNullable(this.notMandatory); + } + /** + * @return The requester has to provide a justification in the form of free flowing text. + * + * *** + * + */ + public Optional unstructured() { + return Optional.ofNullable(this.unstructured); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(EntitlementRequesterJustificationConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable EntitlementRequesterJustificationConfigNotMandatory notMandatory; + private @Nullable EntitlementRequesterJustificationConfigUnstructured unstructured; + public Builder() {} + public Builder(EntitlementRequesterJustificationConfig defaults) { + Objects.requireNonNull(defaults); + this.notMandatory = defaults.notMandatory; + this.unstructured = defaults.unstructured; + } + + @CustomType.Setter + public Builder notMandatory(@Nullable EntitlementRequesterJustificationConfigNotMandatory notMandatory) { + + this.notMandatory = notMandatory; + return this; + } + @CustomType.Setter + public Builder unstructured(@Nullable EntitlementRequesterJustificationConfigUnstructured unstructured) { + + this.unstructured = unstructured; + return this; + } + public EntitlementRequesterJustificationConfig build() { + final var _resultValue = new EntitlementRequesterJustificationConfig(); + _resultValue.notMandatory = notMandatory; + _resultValue.unstructured = unstructured; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementRequesterJustificationConfigNotMandatory.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementRequesterJustificationConfigNotMandatory.java new file mode 100644 index 0000000000..d246efcd73 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementRequesterJustificationConfigNotMandatory.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.privilegedaccessmanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.util.Objects; + +@CustomType +public final class EntitlementRequesterJustificationConfigNotMandatory { + private EntitlementRequesterJustificationConfigNotMandatory() {} + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(EntitlementRequesterJustificationConfigNotMandatory defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + public Builder() {} + public Builder(EntitlementRequesterJustificationConfigNotMandatory defaults) { + Objects.requireNonNull(defaults); + } + + public EntitlementRequesterJustificationConfigNotMandatory build() { + final var _resultValue = new EntitlementRequesterJustificationConfigNotMandatory(); + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementRequesterJustificationConfigUnstructured.java b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementRequesterJustificationConfigUnstructured.java new file mode 100644 index 0000000000..0c4b16655c --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/privilegedaccessmanager/outputs/EntitlementRequesterJustificationConfigUnstructured.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.privilegedaccessmanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.util.Objects; + +@CustomType +public final class EntitlementRequesterJustificationConfigUnstructured { + private EntitlementRequesterJustificationConfigUnstructured() {} + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(EntitlementRequesterJustificationConfigUnstructured defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + public Builder() {} + public Builder(EntitlementRequesterJustificationConfigUnstructured defaults) { + Objects.requireNonNull(defaults); + } + + public EntitlementRequesterJustificationConfigUnstructured build() { + final var _resultValue = new EntitlementRequesterJustificationConfigUnstructured(); + 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 39e22f6f03..937f61d1db 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 @@ -18,6 +18,7 @@ import java.lang.Integer; import java.lang.String; import java.util.List; +import java.util.Map; import java.util.Optional; import javax.annotation.Nullable; @@ -81,6 +82,7 @@ * .nodeType("REDIS_SHARED_CORE_NANO") * .transitEncryptionMode("TRANSIT_ENCRYPTION_MODE_DISABLED") * .authorizationMode("AUTH_MODE_DISABLED") + * .redisConfigs(Map.of("maxmemory-policy", "volatile-ttl")) * .build()); * * var producerSubnet = new Subnetwork("producerSubnet", SubnetworkArgs.builder() @@ -284,6 +286,24 @@ public Output> pscConfigs() { public Output> pscConnections() { return this.pscConnections; } + /** + * Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + * documentation for the list of supported parameters: + * https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + * + */ + @Export(name="redisConfigs", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> redisConfigs; + + /** + * @return Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + * documentation for the list of supported parameters: + * https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + * + */ + public Output>> redisConfigs() { + return Codegen.optional(this.redisConfigs); + } /** * The name of the region of the Redis cluster. * 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 0976dd446e..a9bbcb5e3e 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 @@ -10,6 +10,7 @@ import java.lang.Integer; import java.lang.String; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import javax.annotation.Nullable; @@ -100,6 +101,25 @@ public Output> pscConfigs() { return this.pscConfigs; } + /** + * Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + * documentation for the list of supported parameters: + * https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + * + */ + @Import(name="redisConfigs") + private @Nullable Output> redisConfigs; + + /** + * @return Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + * documentation for the list of supported parameters: + * https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + * + */ + public Optional>> redisConfigs() { + return Optional.ofNullable(this.redisConfigs); + } + /** * The name of the region of the Redis cluster. * @@ -172,6 +192,7 @@ private ClusterArgs(ClusterArgs $) { this.nodeType = $.nodeType; this.project = $.project; this.pscConfigs = $.pscConfigs; + this.redisConfigs = $.redisConfigs; this.region = $.region; this.replicaCount = $.replicaCount; this.shardCount = $.shardCount; @@ -316,6 +337,31 @@ public Builder pscConfigs(ClusterPscConfigArgs... pscConfigs) { return pscConfigs(List.of(pscConfigs)); } + /** + * @param redisConfigs Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + * documentation for the list of supported parameters: + * https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + * + * @return builder + * + */ + public Builder redisConfigs(@Nullable Output> redisConfigs) { + $.redisConfigs = redisConfigs; + return this; + } + + /** + * @param redisConfigs Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + * documentation for the list of supported parameters: + * https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + * + * @return builder + * + */ + public Builder redisConfigs(Map redisConfigs) { + return redisConfigs(Output.of(redisConfigs)); + } + /** * @param region The name of the region of the Redis cluster. * 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 d7829725f2..609c0c37ef 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 @@ -13,6 +13,7 @@ import java.lang.Integer; import java.lang.String; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import javax.annotation.Nullable; @@ -175,6 +176,25 @@ public Optional>> pscConnections() { return Optional.ofNullable(this.pscConnections); } + /** + * Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + * documentation for the list of supported parameters: + * https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + * + */ + @Import(name="redisConfigs") + private @Nullable Output> redisConfigs; + + /** + * @return Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + * documentation for the list of supported parameters: + * https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + * + */ + public Optional>> redisConfigs() { + return Optional.ofNullable(this.redisConfigs); + } + /** * The name of the region of the Redis cluster. * @@ -313,6 +333,7 @@ private ClusterState(ClusterState $) { this.project = $.project; this.pscConfigs = $.pscConfigs; this.pscConnections = $.pscConnections; + this.redisConfigs = $.redisConfigs; this.region = $.region; this.replicaCount = $.replicaCount; this.shardCount = $.shardCount; @@ -581,6 +602,31 @@ public Builder pscConnections(ClusterPscConnectionArgs... pscConnections) { return pscConnections(List.of(pscConnections)); } + /** + * @param redisConfigs Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + * documentation for the list of supported parameters: + * https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + * + * @return builder + * + */ + public Builder redisConfigs(@Nullable Output> redisConfigs) { + $.redisConfigs = redisConfigs; + return this; + } + + /** + * @param redisConfigs Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + * documentation for the list of supported parameters: + * https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + * + * @return builder + * + */ + public Builder redisConfigs(Map redisConfigs) { + return redisConfigs(Output.of(redisConfigs)); + } + /** * @param region The name of the region of the Redis cluster. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/StorageFunctions.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/StorageFunctions.java index d9725245b4..7339198485 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/StorageFunctions.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/StorageFunctions.java @@ -18,6 +18,8 @@ import com.pulumi.gcp.storage.inputs.GetBucketObjectsArgs; import com.pulumi.gcp.storage.inputs.GetBucketObjectsPlainArgs; import com.pulumi.gcp.storage.inputs.GetBucketPlainArgs; +import com.pulumi.gcp.storage.inputs.GetBucketsArgs; +import com.pulumi.gcp.storage.inputs.GetBucketsPlainArgs; import com.pulumi.gcp.storage.inputs.GetObjectSignedUrlArgs; import com.pulumi.gcp.storage.inputs.GetObjectSignedUrlPlainArgs; import com.pulumi.gcp.storage.inputs.GetProjectServiceAccountArgs; @@ -31,6 +33,7 @@ import com.pulumi.gcp.storage.outputs.GetBucketObjectResult; import com.pulumi.gcp.storage.outputs.GetBucketObjectsResult; import com.pulumi.gcp.storage.outputs.GetBucketResult; +import com.pulumi.gcp.storage.outputs.GetBucketsResult; import com.pulumi.gcp.storage.outputs.GetObjectSignedUrlResult; import com.pulumi.gcp.storage.outputs.GetProjectServiceAccountResult; import com.pulumi.gcp.storage.outputs.GetTransferProjectServiceAccountResult; @@ -1062,6 +1065,282 @@ public static Output getBucketObjects(GetBucketObjectsAr public static CompletableFuture getBucketObjectsPlain(GetBucketObjectsPlainArgs args, InvokeOptions options) { return Deployment.getInstance().invokeAsync("gcp:storage/getBucketObjects:getBucketObjects", TypeShape.of(GetBucketObjectsResult.class), args, Utilities.withVersion(options)); } + /** + * Gets a list of existing GCS buckets. + * See [the official documentation](https://cloud.google.com/storage/docs/introduction) + * and [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list). + * + * ## Example Usage + * + * Example GCS buckets. + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.storage.StorageFunctions;
+     * import com.pulumi.gcp.storage.inputs.GetBucketsArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * 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 example = StorageFunctions.getBuckets(GetBucketsArgs.builder()
+     *             .project("example-project")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getBuckets() { + return getBuckets(GetBucketsArgs.Empty, InvokeOptions.Empty); + } + /** + * Gets a list of existing GCS buckets. + * See [the official documentation](https://cloud.google.com/storage/docs/introduction) + * and [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list). + * + * ## Example Usage + * + * Example GCS buckets. + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.storage.StorageFunctions;
+     * import com.pulumi.gcp.storage.inputs.GetBucketsArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * 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 example = StorageFunctions.getBuckets(GetBucketsArgs.builder()
+     *             .project("example-project")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getBucketsPlain() { + return getBucketsPlain(GetBucketsPlainArgs.Empty, InvokeOptions.Empty); + } + /** + * Gets a list of existing GCS buckets. + * See [the official documentation](https://cloud.google.com/storage/docs/introduction) + * and [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list). + * + * ## Example Usage + * + * Example GCS buckets. + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.storage.StorageFunctions;
+     * import com.pulumi.gcp.storage.inputs.GetBucketsArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * 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 example = StorageFunctions.getBuckets(GetBucketsArgs.builder()
+     *             .project("example-project")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getBuckets(GetBucketsArgs args) { + return getBuckets(args, InvokeOptions.Empty); + } + /** + * Gets a list of existing GCS buckets. + * See [the official documentation](https://cloud.google.com/storage/docs/introduction) + * and [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list). + * + * ## Example Usage + * + * Example GCS buckets. + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.storage.StorageFunctions;
+     * import com.pulumi.gcp.storage.inputs.GetBucketsArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * 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 example = StorageFunctions.getBuckets(GetBucketsArgs.builder()
+     *             .project("example-project")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getBucketsPlain(GetBucketsPlainArgs args) { + return getBucketsPlain(args, InvokeOptions.Empty); + } + /** + * Gets a list of existing GCS buckets. + * See [the official documentation](https://cloud.google.com/storage/docs/introduction) + * and [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list). + * + * ## Example Usage + * + * Example GCS buckets. + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.storage.StorageFunctions;
+     * import com.pulumi.gcp.storage.inputs.GetBucketsArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * 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 example = StorageFunctions.getBuckets(GetBucketsArgs.builder()
+     *             .project("example-project")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getBuckets(GetBucketsArgs args, InvokeOptions options) { + return Deployment.getInstance().invoke("gcp:storage/getBuckets:getBuckets", TypeShape.of(GetBucketsResult.class), args, Utilities.withVersion(options)); + } + /** + * Gets a list of existing GCS buckets. + * See [the official documentation](https://cloud.google.com/storage/docs/introduction) + * and [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list). + * + * ## Example Usage + * + * Example GCS buckets. + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.storage.StorageFunctions;
+     * import com.pulumi.gcp.storage.inputs.GetBucketsArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * 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 example = StorageFunctions.getBuckets(GetBucketsArgs.builder()
+     *             .project("example-project")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getBucketsPlain(GetBucketsPlainArgs args, InvokeOptions options) { + return Deployment.getInstance().invokeAsync("gcp:storage/getBuckets:getBuckets", TypeShape.of(GetBucketsResult.class), args, Utilities.withVersion(options)); + } /** * The Google Cloud storage signed URL data source generates a signed URL for a given storage object. Signed URLs provide a way to give time-limited read or write access to anyone in possession of the URL, regardless of whether they have a Google account. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketsArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketsArgs.java new file mode 100644 index 0000000000..06cc04ee74 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketsArgs.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.storage.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 GetBucketsArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetBucketsArgs Empty = new GetBucketsArgs(); + + /** + * Filter results to buckets whose names begin with this prefix. + * + */ + @Import(name="prefix") + private @Nullable Output prefix; + + /** + * @return Filter results to buckets whose names begin with this prefix. + * + */ + public Optional> prefix() { + return Optional.ofNullable(this.prefix); + } + + /** + * The ID of the project. If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project. If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private GetBucketsArgs() {} + + private GetBucketsArgs(GetBucketsArgs $) { + this.prefix = $.prefix; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetBucketsArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetBucketsArgs $; + + public Builder() { + $ = new GetBucketsArgs(); + } + + public Builder(GetBucketsArgs defaults) { + $ = new GetBucketsArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param prefix Filter results to buckets whose names begin with this prefix. + * + * @return builder + * + */ + public Builder prefix(@Nullable Output prefix) { + $.prefix = prefix; + return this; + } + + /** + * @param prefix Filter results to buckets whose names begin with this prefix. + * + * @return builder + * + */ + public Builder prefix(String prefix) { + return prefix(Output.of(prefix)); + } + + /** + * @param project The ID of the project. 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. If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public GetBucketsArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketsPlainArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketsPlainArgs.java new file mode 100644 index 0000000000..abecd98b2a --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketsPlainArgs.java @@ -0,0 +1,99 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.storage.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 GetBucketsPlainArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetBucketsPlainArgs Empty = new GetBucketsPlainArgs(); + + /** + * Filter results to buckets whose names begin with this prefix. + * + */ + @Import(name="prefix") + private @Nullable String prefix; + + /** + * @return Filter results to buckets whose names begin with this prefix. + * + */ + public Optional prefix() { + return Optional.ofNullable(this.prefix); + } + + /** + * The ID of the project. If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable String project; + + /** + * @return The ID of the project. If it is not provided, the provider project is used. + * + */ + public Optional project() { + return Optional.ofNullable(this.project); + } + + private GetBucketsPlainArgs() {} + + private GetBucketsPlainArgs(GetBucketsPlainArgs $) { + this.prefix = $.prefix; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetBucketsPlainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetBucketsPlainArgs $; + + public Builder() { + $ = new GetBucketsPlainArgs(); + } + + public Builder(GetBucketsPlainArgs defaults) { + $ = new GetBucketsPlainArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param prefix Filter results to buckets whose names begin with this prefix. + * + * @return builder + * + */ + public Builder prefix(@Nullable String prefix) { + $.prefix = prefix; + return this; + } + + /** + * @param project The ID of the project. If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable String project) { + $.project = project; + return this; + } + + public GetBucketsPlainArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/outputs/GetBucketsBucket.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/outputs/GetBucketsBucket.java new file mode 100644 index 0000000000..dbecece672 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/outputs/GetBucketsBucket.java @@ -0,0 +1,151 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.storage.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Map; +import java.util.Objects; + +@CustomType +public final class GetBucketsBucket { + /** + * @return User-provided bucket labels, in key/value pairs. + * + */ + private Map labels; + /** + * @return The location of the bucket. + * + */ + private String location; + /** + * @return The name of the bucket. + * + */ + private String name; + /** + * @return A url reference to the bucket. + * + */ + private String selfLink; + /** + * @return The [StorageClass](https://cloud.google.com/storage/docs/storage-classes) of the bucket. + * + */ + private String storageClass; + + private GetBucketsBucket() {} + /** + * @return User-provided bucket labels, in key/value pairs. + * + */ + public Map labels() { + return this.labels; + } + /** + * @return The location of the bucket. + * + */ + public String location() { + return this.location; + } + /** + * @return The name of the bucket. + * + */ + public String name() { + return this.name; + } + /** + * @return A url reference to the bucket. + * + */ + public String selfLink() { + return this.selfLink; + } + /** + * @return The [StorageClass](https://cloud.google.com/storage/docs/storage-classes) of the bucket. + * + */ + public String storageClass() { + return this.storageClass; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetBucketsBucket defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Map labels; + private String location; + private String name; + private String selfLink; + private String storageClass; + public Builder() {} + public Builder(GetBucketsBucket defaults) { + Objects.requireNonNull(defaults); + this.labels = defaults.labels; + this.location = defaults.location; + this.name = defaults.name; + this.selfLink = defaults.selfLink; + this.storageClass = defaults.storageClass; + } + + @CustomType.Setter + public Builder labels(Map labels) { + if (labels == null) { + throw new MissingRequiredPropertyException("GetBucketsBucket", "labels"); + } + this.labels = labels; + return this; + } + @CustomType.Setter + public Builder location(String location) { + if (location == null) { + throw new MissingRequiredPropertyException("GetBucketsBucket", "location"); + } + this.location = location; + return this; + } + @CustomType.Setter + public Builder name(String name) { + if (name == null) { + throw new MissingRequiredPropertyException("GetBucketsBucket", "name"); + } + this.name = name; + return this; + } + @CustomType.Setter + public Builder selfLink(String selfLink) { + if (selfLink == null) { + throw new MissingRequiredPropertyException("GetBucketsBucket", "selfLink"); + } + this.selfLink = selfLink; + return this; + } + @CustomType.Setter + public Builder storageClass(String storageClass) { + if (storageClass == null) { + throw new MissingRequiredPropertyException("GetBucketsBucket", "storageClass"); + } + this.storageClass = storageClass; + return this; + } + public GetBucketsBucket build() { + final var _resultValue = new GetBucketsBucket(); + _resultValue.labels = labels; + _resultValue.location = location; + _resultValue.name = name; + _resultValue.selfLink = selfLink; + _resultValue.storageClass = storageClass; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/outputs/GetBucketsResult.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/outputs/GetBucketsResult.java new file mode 100644 index 0000000000..637faecf7b --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/outputs/GetBucketsResult.java @@ -0,0 +1,114 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.storage.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.storage.outputs.GetBucketsBucket; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class GetBucketsResult { + /** + * @return A list of all retrieved GCS buckets. Structure is defined below. + * + */ + private List buckets; + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + private String id; + private @Nullable String prefix; + private @Nullable String project; + + private GetBucketsResult() {} + /** + * @return A list of all retrieved GCS buckets. Structure is defined below. + * + */ + public List buckets() { + return this.buckets; + } + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + public String id() { + return this.id; + } + public Optional prefix() { + return Optional.ofNullable(this.prefix); + } + public Optional project() { + return Optional.ofNullable(this.project); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetBucketsResult defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List buckets; + private String id; + private @Nullable String prefix; + private @Nullable String project; + public Builder() {} + public Builder(GetBucketsResult defaults) { + Objects.requireNonNull(defaults); + this.buckets = defaults.buckets; + this.id = defaults.id; + this.prefix = defaults.prefix; + this.project = defaults.project; + } + + @CustomType.Setter + public Builder buckets(List buckets) { + if (buckets == null) { + throw new MissingRequiredPropertyException("GetBucketsResult", "buckets"); + } + this.buckets = buckets; + return this; + } + public Builder buckets(GetBucketsBucket... buckets) { + return buckets(List.of(buckets)); + } + @CustomType.Setter + public Builder id(String id) { + if (id == null) { + throw new MissingRequiredPropertyException("GetBucketsResult", "id"); + } + this.id = id; + return this; + } + @CustomType.Setter + public Builder prefix(@Nullable String prefix) { + + this.prefix = prefix; + return this; + } + @CustomType.Setter + public Builder project(@Nullable String project) { + + this.project = project; + return this; + } + public GetBucketsResult build() { + final var _resultValue = new GetBucketsResult(); + _resultValue.buckets = buckets; + _resultValue.id = id; + _resultValue.prefix = prefix; + _resultValue.project = project; + return _resultValue; + } + } +} diff --git a/sdk/nodejs/alloydb/cluster.ts b/sdk/nodejs/alloydb/cluster.ts index 436bf3bccb..0acc80c845 100644 --- a/sdk/nodejs/alloydb/cluster.ts +++ b/sdk/nodejs/alloydb/cluster.ts @@ -338,6 +338,11 @@ export class Cluster extends pulumi.CustomResource { * - - - */ public readonly location!: pulumi.Output; + /** + * MaintenanceUpdatePolicy defines the policy for system updates. + * Structure is documented below. + */ + public readonly maintenanceUpdatePolicy!: pulumi.Output; /** * Cluster created via DMS migration. * Structure is documented below. @@ -433,6 +438,7 @@ export class Cluster extends pulumi.CustomResource { resourceInputs["initialUser"] = state ? state.initialUser : undefined; resourceInputs["labels"] = state ? state.labels : undefined; resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["maintenanceUpdatePolicy"] = state ? state.maintenanceUpdatePolicy : undefined; resourceInputs["migrationSources"] = state ? state.migrationSources : undefined; resourceInputs["name"] = state ? state.name : undefined; resourceInputs["network"] = state ? state.network : undefined; @@ -466,6 +472,7 @@ export class Cluster extends pulumi.CustomResource { resourceInputs["initialUser"] = args ? args.initialUser : undefined; resourceInputs["labels"] = args ? args.labels : undefined; resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["maintenanceUpdatePolicy"] = args ? args.maintenanceUpdatePolicy : undefined; resourceInputs["network"] = args ? args.network : undefined; resourceInputs["networkConfig"] = args ? args.networkConfig : undefined; resourceInputs["project"] = args ? args.project : undefined; @@ -586,6 +593,11 @@ export interface ClusterState { * - - - */ location?: pulumi.Input; + /** + * MaintenanceUpdatePolicy defines the policy for system updates. + * Structure is documented below. + */ + maintenanceUpdatePolicy?: pulumi.Input; /** * Cluster created via DMS migration. * Structure is documented below. @@ -725,6 +737,11 @@ export interface ClusterArgs { * - - - */ location: pulumi.Input; + /** + * MaintenanceUpdatePolicy defines the policy for system updates. + * Structure is documented below. + */ + maintenanceUpdatePolicy?: pulumi.Input; /** * (Optional, Deprecated) * The relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form: diff --git a/sdk/nodejs/applicationintegration/authConfig.ts b/sdk/nodejs/applicationintegration/authConfig.ts index 05c7d3682a..7f909c6afe 100644 --- a/sdk/nodejs/applicationintegration/authConfig.ts +++ b/sdk/nodejs/applicationintegration/authConfig.ts @@ -24,10 +24,7 @@ import * as utilities from "../utilities"; * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * - * const client = new gcp.applicationintegration.Client("client", { - * location: "us-west1", - * provisionGmek: true, - * }); + * const client = new gcp.applicationintegration.Client("client", {location: "us-west1"}); * const basicExample = new gcp.applicationintegration.AuthConfig("basic_example", { * location: "us-west1", * displayName: "test-authconfig", diff --git a/sdk/nodejs/applicationintegration/client.ts b/sdk/nodejs/applicationintegration/client.ts index 4648ce7540..c842ea30f0 100644 --- a/sdk/nodejs/applicationintegration/client.ts +++ b/sdk/nodejs/applicationintegration/client.ts @@ -24,12 +24,9 @@ import * as utilities from "../utilities"; * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * - * const example = new gcp.applicationintegration.Client("example", { - * location: "us-central1", - * provisionGmek: true, - * }); + * const example = new gcp.applicationintegration.Client("example", {location: "us-central1"}); * ``` - * ### Integrations Client Advance + * ### Integrations Client Full * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -52,7 +49,7 @@ import * as utilities from "../utilities"; * }); * const example = new gcp.applicationintegration.Client("example", { * location: "us-east1", - * createSampleWorkflows: true, + * createSampleIntegrations: true, * runAsServiceAccount: serviceAccount.email, * cloudKmsConfig: { * kmsLocation: "us-east1", @@ -122,7 +119,16 @@ export class Client extends pulumi.CustomResource { */ public readonly cloudKmsConfig!: pulumi.Output; /** + * Indicates if sample integrations should be created along with provisioning. + */ + public readonly createSampleIntegrations!: pulumi.Output; + /** + * (Optional, Deprecated) * Indicates if sample workflow should be created along with provisioning. + * + * > **Warning:** `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. + * + * @deprecated `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. */ public readonly createSampleWorkflows!: pulumi.Output; /** @@ -138,7 +144,12 @@ export class Client extends pulumi.CustomResource { */ public readonly project!: pulumi.Output; /** + * (Optional, Deprecated) * Indicates provision with GMEK or CMEK. + * + * > **Warning:** `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. + * + * @deprecated `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. */ public readonly provisionGmek!: pulumi.Output; /** @@ -160,6 +171,7 @@ export class Client extends pulumi.CustomResource { if (opts.id) { const state = argsOrState as ClientState | undefined; resourceInputs["cloudKmsConfig"] = state ? state.cloudKmsConfig : undefined; + resourceInputs["createSampleIntegrations"] = state ? state.createSampleIntegrations : undefined; resourceInputs["createSampleWorkflows"] = state ? state.createSampleWorkflows : undefined; resourceInputs["location"] = state ? state.location : undefined; resourceInputs["project"] = state ? state.project : undefined; @@ -171,6 +183,7 @@ export class Client extends pulumi.CustomResource { throw new Error("Missing required property 'location'"); } resourceInputs["cloudKmsConfig"] = args ? args.cloudKmsConfig : undefined; + resourceInputs["createSampleIntegrations"] = args ? args.createSampleIntegrations : undefined; resourceInputs["createSampleWorkflows"] = args ? args.createSampleWorkflows : undefined; resourceInputs["location"] = args ? args.location : undefined; resourceInputs["project"] = args ? args.project : undefined; @@ -192,7 +205,16 @@ export interface ClientState { */ cloudKmsConfig?: pulumi.Input; /** + * Indicates if sample integrations should be created along with provisioning. + */ + createSampleIntegrations?: pulumi.Input; + /** + * (Optional, Deprecated) * Indicates if sample workflow should be created along with provisioning. + * + * > **Warning:** `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. + * + * @deprecated `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. */ createSampleWorkflows?: pulumi.Input; /** @@ -208,7 +230,12 @@ export interface ClientState { */ project?: pulumi.Input; /** + * (Optional, Deprecated) * Indicates provision with GMEK or CMEK. + * + * > **Warning:** `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. + * + * @deprecated `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. */ provisionGmek?: pulumi.Input; /** @@ -227,7 +254,16 @@ export interface ClientArgs { */ cloudKmsConfig?: pulumi.Input; /** + * Indicates if sample integrations should be created along with provisioning. + */ + createSampleIntegrations?: pulumi.Input; + /** + * (Optional, Deprecated) * Indicates if sample workflow should be created along with provisioning. + * + * > **Warning:** `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. + * + * @deprecated `createSampleWorkflows` is deprecated and will be removed in a future major release. Use `createSampleIntegrations` instead. */ createSampleWorkflows?: pulumi.Input; /** @@ -243,7 +279,12 @@ export interface ClientArgs { */ project?: pulumi.Input; /** + * (Optional, Deprecated) * Indicates provision with GMEK or CMEK. + * + * > **Warning:** `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. + * + * @deprecated `provisionGmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloudKmsConfig` is not given. */ provisionGmek?: pulumi.Input; /** diff --git a/sdk/nodejs/bigquery/dataset.ts b/sdk/nodejs/bigquery/dataset.ts index 9d48d54f9d..40de171f3b 100644 --- a/sdk/nodejs/bigquery/dataset.ts +++ b/sdk/nodejs/bigquery/dataset.ts @@ -169,7 +169,7 @@ import * as utilities from "../utilities"; * ], * }); * ``` - * ### Bigquery Dataset External Reference Aws Docs + * ### Bigquery Dataset External Reference Aws * * ```typescript * import * as pulumi from "@pulumi/pulumi"; diff --git a/sdk/nodejs/bigquery/job.ts b/sdk/nodejs/bigquery/job.ts index dd32209fc6..940450f0bb 100644 --- a/sdk/nodejs/bigquery/job.ts +++ b/sdk/nodejs/bigquery/job.ts @@ -240,8 +240,9 @@ import * as utilities from "../utilities"; * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * + * const count = 2; * const sourceDataset: gcp.bigquery.Dataset[] = []; - * for (const range = {value: 0}; range.value < 2; range.value++) { + * for (const range = {value: 0}; range.value < count; range.value++) { * sourceDataset.push(new gcp.bigquery.Dataset(`source-${range.value}`, { * datasetId: `job_copy_${range.value}_dataset`, * friendlyName: "test", @@ -250,13 +251,12 @@ import * as utilities from "../utilities"; * })); * } * const source: gcp.bigquery.Table[] = []; - * sourceDataset.length.apply(rangeBody => { - * for (const range = {value: 0}; range.value < rangeBody; range.value++) { - * source.push(new gcp.bigquery.Table(`source-${range.value}`, { - * deletionProtection: false, - * datasetId: sourceDataset[range.value].datasetId, - * tableId: `job_copy_${range.value}_table`, - * schema: `[ + * for (const range = {value: 0}; range.value < count; range.value++) { + * source.push(new gcp.bigquery.Table(`source-${range.value}`, { + * deletionProtection: false, + * datasetId: sourceDataset[range.value].datasetId, + * tableId: `job_copy_${range.value}_table`, + * schema: `[ * { * "name": "name", * "type": "STRING", @@ -274,9 +274,8 @@ import * as utilities from "../utilities"; * } * ] * `, - * })); - * } - * }); + * })); + * } * const destDataset = new gcp.bigquery.Dataset("dest", { * datasetId: "job_copy_dest_dataset", * friendlyName: "test", diff --git a/sdk/nodejs/cloudrunv2/job.ts b/sdk/nodejs/cloudrunv2/job.ts index 450d9069cb..b76df6527f 100644 --- a/sdk/nodejs/cloudrunv2/job.ts +++ b/sdk/nodejs/cloudrunv2/job.ts @@ -178,7 +178,7 @@ import * as utilities from "../utilities"; * const _default = new gcp.cloudrunv2.Job("default", { * name: "cloudrun-job", * location: "us-central1", - * launchStage: "BETA", + * launchStage: "GA", * template: { * template: { * containers: [{ @@ -194,7 +194,6 @@ import * as utilities from "../utilities"; * "tag3", * ], * }], - * egress: "ALL_TRAFFIC", * }, * }, * }, diff --git a/sdk/nodejs/cloudrunv2/service.ts b/sdk/nodejs/cloudrunv2/service.ts index 328d44569a..05bbaa3925 100644 --- a/sdk/nodejs/cloudrunv2/service.ts +++ b/sdk/nodejs/cloudrunv2/service.ts @@ -180,7 +180,7 @@ import * as utilities from "../utilities"; * const _default = new gcp.cloudrunv2.Service("default", { * name: "cloudrun-service", * location: "us-central1", - * launchStage: "BETA", + * launchStage: "GA", * template: { * containers: [{ * image: "us-docker.pkg.dev/cloudrun/container/hello", @@ -195,7 +195,6 @@ import * as utilities from "../utilities"; * "tag3", * ], * }], - * egress: "ALL_TRAFFIC", * }, * }, * }); diff --git a/sdk/nodejs/compute/routerPeer.ts b/sdk/nodejs/compute/routerPeer.ts index f2d839977e..0128625e96 100644 --- a/sdk/nodejs/compute/routerPeer.ts +++ b/sdk/nodejs/compute/routerPeer.ts @@ -170,6 +170,27 @@ import * as utilities from "../utilities"; * }); * ``` * + * ### Router Peer Md5 Authentication Key + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const foobar = new gcp.compute.RouterPeer("foobar", { + * name: "%s-peer", + * router: foobarGoogleComputeRouter.name, + * region: foobarGoogleComputeRouter.region, + * peerAsn: 65515, + * advertisedRoutePriority: 100, + * "interface": foobarGoogleComputeRouterInterface.name, + * peerIpAddress: "169.254.3.2", + * md5AuthenticationKey: { + * name: "%s-peer-key", + * key: "%s-peer-key-value", + * }, + * }); + * ``` + * * ## Import * * RouterBgpPeer can be imported using any of these accepted formats: @@ -300,8 +321,8 @@ export class RouterPeer extends pulumi.CustomResource { */ public /*out*/ readonly managementType!: pulumi.Output; /** - * Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - * Router.md5_authentication_keys. The field must comply with RFC1035. + * Configuration for MD5 authentication on the BGP session. + * Structure is documented below. */ public readonly md5AuthenticationKey!: pulumi.Output; /** @@ -511,8 +532,8 @@ export interface RouterPeerState { */ managementType?: pulumi.Input; /** - * Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - * Router.md5_authentication_keys. The field must comply with RFC1035. + * Configuration for MD5 authentication on the BGP session. + * Structure is documented below. */ md5AuthenticationKey?: pulumi.Input; /** @@ -643,8 +664,8 @@ export interface RouterPeerArgs { */ ipv6NexthopAddress?: pulumi.Input; /** - * Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - * Router.md5_authentication_keys. The field must comply with RFC1035. + * Configuration for MD5 authentication on the BGP session. + * Structure is documented below. */ md5AuthenticationKey?: pulumi.Input; /** diff --git a/sdk/nodejs/config/vars.ts b/sdk/nodejs/config/vars.ts index 39e15b210f..03f5092f0f 100644 --- a/sdk/nodejs/config/vars.ts +++ b/sdk/nodejs/config/vars.ts @@ -1009,6 +1009,14 @@ Object.defineProperty(exports, "privatecaCustomEndpoint", { enumerable: true, }); +export declare const privilegedAccessManagerCustomEndpoint: string | undefined; +Object.defineProperty(exports, "privilegedAccessManagerCustomEndpoint", { + get() { + return __config.get("privilegedAccessManagerCustomEndpoint"); + }, + enumerable: true, +}); + export declare const project: string | undefined; Object.defineProperty(exports, "project", { get() { diff --git a/sdk/nodejs/dataflow/flexTemplateJob.ts b/sdk/nodejs/dataflow/flexTemplateJob.ts index c5d7d22d16..289eac23de 100644 --- a/sdk/nodejs/dataflow/flexTemplateJob.ts +++ b/sdk/nodejs/dataflow/flexTemplateJob.ts @@ -178,9 +178,9 @@ export class FlexTemplateJob extends pulumi.CustomResource { */ public readonly onDelete!: pulumi.Output; /** - * Key/Value pairs to be passed to the Dataflow job (as - * used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - * such as `serviceAccount`, `workerMachineType`, etc can be specified here. + * **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. */ public readonly parameters!: pulumi.Output<{[key: string]: any} | undefined>; /** @@ -390,9 +390,9 @@ export interface FlexTemplateJobState { */ onDelete?: pulumi.Input; /** - * Key/Value pairs to be passed to the Dataflow job (as - * used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - * such as `serviceAccount`, `workerMachineType`, etc can be specified here. + * **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. */ parameters?: pulumi.Input<{[key: string]: any}>; /** @@ -514,9 +514,9 @@ export interface FlexTemplateJobArgs { */ onDelete?: pulumi.Input; /** - * Key/Value pairs to be passed to the Dataflow job (as - * used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - * such as `serviceAccount`, `workerMachineType`, etc can be specified here. + * **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. */ parameters?: pulumi.Input<{[key: string]: any}>; /** diff --git a/sdk/nodejs/dataflow/job.ts b/sdk/nodejs/dataflow/job.ts index d9004d348a..a6efef34d5 100644 --- a/sdk/nodejs/dataflow/job.ts +++ b/sdk/nodejs/dataflow/job.ts @@ -186,7 +186,9 @@ export class Job extends pulumi.CustomResource { */ public readonly onDelete!: pulumi.Output; /** - * Key/Value pairs to be passed to the Dataflow job (as used in the template). + * **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. */ public readonly parameters!: pulumi.Output<{[key: string]: any} | undefined>; /** @@ -374,7 +376,9 @@ export interface JobState { */ onDelete?: pulumi.Input; /** - * Key/Value pairs to be passed to the Dataflow job (as used in the template). + * **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. */ parameters?: pulumi.Input<{[key: string]: any}>; /** @@ -476,7 +480,9 @@ export interface JobArgs { */ onDelete?: pulumi.Input; /** - * Key/Value pairs to be passed to the Dataflow job (as used in the template). + * **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + * case-sensitive based on the language on which the pipeline is coded, mostly Java. + * **Note**: do not configure Dataflow options here in parameters. */ parameters?: pulumi.Input<{[key: string]: any}>; /** diff --git a/sdk/nodejs/essentialcontacts/documentAiWarehouseDocumentSchema.ts b/sdk/nodejs/essentialcontacts/documentAiWarehouseDocumentSchema.ts index 94c340796c..39a892ba35 100644 --- a/sdk/nodejs/essentialcontacts/documentAiWarehouseDocumentSchema.ts +++ b/sdk/nodejs/essentialcontacts/documentAiWarehouseDocumentSchema.ts @@ -46,278 +46,6 @@ import * as utilities from "../utilities"; * }], * }); * ``` - * ### Document Ai Warehouse Document Schema Integer - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = gcp.organizations.getProject({}); - * const exampleInteger = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_integer", { - * projectNumber: project.then(project => project.number), - * displayName: "test-property-integer", - * location: "us", - * propertyDefinitions: [{ - * name: "prop1", - * displayName: "propdisp1", - * isRepeatable: false, - * isFilterable: true, - * isSearchable: true, - * isMetadata: false, - * isRequired: false, - * retrievalImportance: "HIGHEST", - * schemaSources: [{ - * name: "dummy_source", - * processorType: "dummy_processor", - * }], - * integerTypeOptions: {}, - * }], - * }); - * ``` - * ### Document Ai Warehouse Document Schema Float - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = gcp.organizations.getProject({}); - * const exampleFloat = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_float", { - * projectNumber: project.then(project => project.number), - * displayName: "test-property-float", - * location: "us", - * propertyDefinitions: [{ - * name: "prop2", - * displayName: "propdisp2", - * isRepeatable: false, - * isFilterable: true, - * isSearchable: true, - * isMetadata: false, - * isRequired: false, - * retrievalImportance: "HIGHEST", - * schemaSources: [{ - * name: "dummy_source", - * processorType: "dummy_processor", - * }], - * floatTypeOptions: {}, - * }], - * }); - * ``` - * ### Document Ai Warehouse Document Schema Property - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = gcp.organizations.getProject({}); - * const exampleProperty = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_property", { - * projectNumber: project.then(project => project.number), - * displayName: "test-property-property", - * location: "us", - * documentIsFolder: false, - * propertyDefinitions: [{ - * name: "prop8", - * displayName: "propdisp8", - * isRepeatable: false, - * isFilterable: true, - * isSearchable: true, - * isMetadata: false, - * isRequired: false, - * retrievalImportance: "HIGHEST", - * schemaSources: [{ - * name: "dummy_source", - * processorType: "dummy_processor", - * }], - * propertyTypeOptions: { - * propertyDefinitions: [{ - * name: "prop8_nested", - * displayName: "propdisp8_nested", - * isRepeatable: false, - * isFilterable: true, - * isSearchable: true, - * isMetadata: false, - * isRequired: false, - * retrievalImportance: "HIGHEST", - * schemaSources: [{ - * name: "dummy_source_nested", - * processorType: "dummy_processor_nested", - * }], - * textTypeOptions: {}, - * }], - * }, - * }], - * }); - * ``` - * ### Document Ai Warehouse Document Schema Property Enum - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = gcp.organizations.getProject({}); - * const examplePropertyEnum = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_property_enum", { - * projectNumber: project.then(project => project.number), - * displayName: "test-property-property", - * location: "us", - * documentIsFolder: false, - * propertyDefinitions: [{ - * name: "prop8", - * displayName: "propdisp8", - * isRepeatable: false, - * isFilterable: true, - * isSearchable: true, - * isMetadata: false, - * isRequired: false, - * retrievalImportance: "HIGHEST", - * schemaSources: [{ - * name: "dummy_source", - * processorType: "dummy_processor", - * }], - * propertyTypeOptions: { - * propertyDefinitions: [{ - * name: "prop8_nested", - * displayName: "propdisp8_nested", - * isRepeatable: false, - * isFilterable: true, - * isSearchable: true, - * isMetadata: false, - * isRequired: false, - * retrievalImportance: "HIGHEST", - * schemaSources: [{ - * name: "dummy_source_nested", - * processorType: "dummy_processor_nested", - * }], - * enumTypeOptions: { - * possibleValues: [ - * "M", - * "F", - * "X", - * ], - * validationCheckDisabled: false, - * }, - * }], - * }, - * }], - * }); - * ``` - * ### Document Ai Warehouse Document Schema Enum - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = gcp.organizations.getProject({}); - * const exampleEnum = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_enum", { - * projectNumber: project.then(project => project.number), - * displayName: "test-property-enum", - * location: "us", - * propertyDefinitions: [{ - * name: "prop6", - * displayName: "propdisp6", - * isRepeatable: false, - * isFilterable: true, - * isSearchable: true, - * isMetadata: false, - * isRequired: false, - * retrievalImportance: "HIGHEST", - * schemaSources: [{ - * name: "dummy_source", - * processorType: "dummy_processor", - * }], - * enumTypeOptions: { - * possibleValues: [ - * "M", - * "F", - * "X", - * ], - * validationCheckDisabled: false, - * }, - * }], - * }); - * ``` - * ### Document Ai Warehouse Document Schema Map - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = gcp.organizations.getProject({}); - * const exampleMap = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_map", { - * projectNumber: project.then(project => project.number), - * displayName: "test-property-map", - * location: "us", - * propertyDefinitions: [{ - * name: "prop4", - * displayName: "propdisp4", - * isRepeatable: false, - * isFilterable: true, - * isSearchable: true, - * isMetadata: false, - * isRequired: false, - * retrievalImportance: "HIGHEST", - * schemaSources: [{ - * name: "dummy_source", - * processorType: "dummy_processor", - * }], - * mapTypeOptions: {}, - * }], - * }); - * ``` - * ### Document Ai Warehouse Document Schema Datetime - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = gcp.organizations.getProject({}); - * const exampleDatetime = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_datetime", { - * projectNumber: project.then(project => project.number), - * displayName: "test-property-date_time", - * location: "us", - * propertyDefinitions: [{ - * name: "prop7", - * displayName: "propdisp7", - * isRepeatable: false, - * isFilterable: true, - * isSearchable: true, - * isMetadata: false, - * isRequired: false, - * retrievalImportance: "HIGHEST", - * schemaSources: [{ - * name: "dummy_source", - * processorType: "dummy_processor", - * }], - * dateTimeTypeOptions: {}, - * }], - * }); - * ``` - * ### Document Ai Warehouse Document Schema Timestamp - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = gcp.organizations.getProject({}); - * const exampleTimestamp = new gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_timestamp", { - * projectNumber: project.then(project => project.number), - * displayName: "test-property-timestamp", - * location: "us", - * propertyDefinitions: [{ - * name: "prop5", - * displayName: "propdisp5", - * isRepeatable: false, - * isFilterable: true, - * isSearchable: true, - * isMetadata: false, - * isRequired: false, - * retrievalImportance: "HIGHEST", - * schemaSources: [{ - * name: "dummy_source", - * processorType: "dummy_processor", - * }], - * timestampTypeOptions: {}, - * }], - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/firebaserules/release.ts b/sdk/nodejs/firebaserules/release.ts index d03c200191..3608eb3a87 100644 --- a/sdk/nodejs/firebaserules/release.ts +++ b/sdk/nodejs/firebaserules/release.ts @@ -25,7 +25,7 @@ import * as utilities from "../utilities"; * project: "my-project-name", * }); * const primary = new gcp.firebaserules.Release("primary", { - * name: "cloud.firestore", + * name: "cloud.firestore/database", * rulesetName: pulumi.interpolate`projects/my-project-name/rulesets/${firestore.name}`, * project: "my-project-name", * }); diff --git a/sdk/nodejs/index.ts b/sdk/nodejs/index.ts index ca56096387..164734f1e4 100644 --- a/sdk/nodejs/index.ts +++ b/sdk/nodejs/index.ts @@ -105,6 +105,7 @@ import * as orgpolicy from "./orgpolicy"; import * as osconfig from "./osconfig"; import * as oslogin from "./oslogin"; import * as parallelstore from "./parallelstore"; +import * as privilegedaccessmanager from "./privilegedaccessmanager"; import * as projects from "./projects"; import * as pubsub from "./pubsub"; import * as recaptcha from "./recaptcha"; @@ -226,6 +227,7 @@ export { osconfig, oslogin, parallelstore, + privilegedaccessmanager, projects, pubsub, recaptcha, diff --git a/sdk/nodejs/privilegedaccessmanager/entitlement.ts b/sdk/nodejs/privilegedaccessmanager/entitlement.ts new file mode 100644 index 0000000000..4bfbc9c672 --- /dev/null +++ b/sdk/nodejs/privilegedaccessmanager/entitlement.ts @@ -0,0 +1,357 @@ +// *** WARNING: this file 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 + * + * ### Privileged Access Manager Entitlement Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const tfentitlement = new gcp.privilegedaccessmanager.Entitlement("tfentitlement", { + * entitlementId: "example-entitlement", + * location: "global", + * maxRequestDuration: "43200s", + * parent: "projects/my-project-name", + * requesterJustificationConfig: { + * unstructured: {}, + * }, + * eligibleUsers: [{ + * principals: ["group:test@google.com"], + * }], + * privilegedAccess: { + * gcpIamAccess: { + * roleBindings: [{ + * role: "roles/storage.admin", + * conditionExpression: "request.time < timestamp(\"2024-04-23T18:30:00.000Z\")", + * }], + * resource: "//cloudresourcemanager.googleapis.com/projects/my-project-name", + * resourceType: "cloudresourcemanager.googleapis.com/Project", + * }, + * }, + * additionalNotificationTargets: { + * adminEmailRecipients: ["user@example.com"], + * requesterEmailRecipients: ["user@example.com"], + * }, + * approvalWorkflow: { + * manualApprovals: { + * requireApproverJustification: true, + * steps: [{ + * approvalsNeeded: 1, + * approverEmailRecipients: ["user@example.com"], + * approvers: { + * principals: ["group:test@google.com"], + * }, + * }], + * }, + * }, + * }); + * ``` + * + * ## Import + * + * Entitlement can be imported using any of these accepted formats: + * + * * `{{parent}}/locations/{{location}}/entitlements/{{entitlement_id}}` + * + * When using the `pulumi import` command, Entitlement can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:privilegedaccessmanager/entitlement:entitlement default {{parent}}/locations/{{location}}/entitlements/{{entitlement_id}} + * ``` + */ +export class Entitlement extends pulumi.CustomResource { + /** + * Get an existing Entitlement 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?: EntitlementState, opts?: pulumi.CustomResourceOptions): Entitlement { + return new Entitlement(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:privilegedaccessmanager/entitlement:entitlement'; + + /** + * Returns true if the given object is an instance of Entitlement. 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 Entitlement { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Entitlement.__pulumiType; + } + + /** + * AdditionalNotificationTargets includes email addresses to be notified. + */ + public readonly additionalNotificationTargets!: pulumi.Output; + /** + * The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + * Different types of approval workflows that can be used to gate privileged access granting. + */ + public readonly approvalWorkflow!: pulumi.Output; + /** + * Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + * Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + */ + public readonly eligibleUsers!: pulumi.Output; + /** + * The ID to use for this Entitlement. This will become the last part of the resource name. + * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + * This value should be unique among all other Entitlements under the specified `parent`. + */ + public readonly entitlementId!: pulumi.Output; + /** + * For Resource freshness validation (https://google.aip.dev/154) + */ + public /*out*/ readonly etag!: pulumi.Output; + /** + * The region of the Entitlement resource. + */ + public readonly location!: pulumi.Output; + /** + * The maximum amount of time for which access would be granted for a request. + * A requester can choose to ask for access for less than this duration but never more. + * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + */ + public readonly maxRequestDuration!: pulumi.Output; + /** + * Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + * Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + */ + public readonly parent!: pulumi.Output; + /** + * Privileged access that this service can be used to gate. + * Structure is documented below. + */ + public readonly privilegedAccess!: pulumi.Output; + /** + * Defines the ways in which a requester should provide the justification while requesting for access. + * Structure is documented below. + */ + public readonly requesterJustificationConfig!: pulumi.Output; + /** + * Output only. The current state of the Entitlement. + */ + public /*out*/ readonly state!: pulumi.Output; + /** + * Output only. Update time stamp. 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 Entitlement 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: EntitlementArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: EntitlementArgs | EntitlementState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as EntitlementState | undefined; + resourceInputs["additionalNotificationTargets"] = state ? state.additionalNotificationTargets : undefined; + resourceInputs["approvalWorkflow"] = state ? state.approvalWorkflow : undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["eligibleUsers"] = state ? state.eligibleUsers : undefined; + resourceInputs["entitlementId"] = state ? state.entitlementId : undefined; + resourceInputs["etag"] = state ? state.etag : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["maxRequestDuration"] = state ? state.maxRequestDuration : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["parent"] = state ? state.parent : undefined; + resourceInputs["privilegedAccess"] = state ? state.privilegedAccess : undefined; + resourceInputs["requesterJustificationConfig"] = state ? state.requesterJustificationConfig : undefined; + resourceInputs["state"] = state ? state.state : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as EntitlementArgs | undefined; + if ((!args || args.eligibleUsers === undefined) && !opts.urn) { + throw new Error("Missing required property 'eligibleUsers'"); + } + if ((!args || args.entitlementId === undefined) && !opts.urn) { + throw new Error("Missing required property 'entitlementId'"); + } + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + if ((!args || args.maxRequestDuration === undefined) && !opts.urn) { + throw new Error("Missing required property 'maxRequestDuration'"); + } + if ((!args || args.parent === undefined) && !opts.urn) { + throw new Error("Missing required property 'parent'"); + } + if ((!args || args.privilegedAccess === undefined) && !opts.urn) { + throw new Error("Missing required property 'privilegedAccess'"); + } + if ((!args || args.requesterJustificationConfig === undefined) && !opts.urn) { + throw new Error("Missing required property 'requesterJustificationConfig'"); + } + resourceInputs["additionalNotificationTargets"] = args ? args.additionalNotificationTargets : undefined; + resourceInputs["approvalWorkflow"] = args ? args.approvalWorkflow : undefined; + resourceInputs["eligibleUsers"] = args ? args.eligibleUsers : undefined; + resourceInputs["entitlementId"] = args ? args.entitlementId : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["maxRequestDuration"] = args ? args.maxRequestDuration : undefined; + resourceInputs["parent"] = args ? args.parent : undefined; + resourceInputs["privilegedAccess"] = args ? args.privilegedAccess : undefined; + resourceInputs["requesterJustificationConfig"] = args ? args.requesterJustificationConfig : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["etag"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["state"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Entitlement.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering entitlement resources. + */ +export interface EntitlementState { + /** + * AdditionalNotificationTargets includes email addresses to be notified. + */ + additionalNotificationTargets?: pulumi.Input; + /** + * The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + * Different types of approval workflows that can be used to gate privileged access granting. + */ + approvalWorkflow?: pulumi.Input; + /** + * Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + * Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + */ + createTime?: pulumi.Input; + /** + * Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + */ + eligibleUsers?: pulumi.Input[]>; + /** + * The ID to use for this Entitlement. This will become the last part of the resource name. + * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + * This value should be unique among all other Entitlements under the specified `parent`. + */ + entitlementId?: pulumi.Input; + /** + * For Resource freshness validation (https://google.aip.dev/154) + */ + etag?: pulumi.Input; + /** + * The region of the Entitlement resource. + */ + location?: pulumi.Input; + /** + * The maximum amount of time for which access would be granted for a request. + * A requester can choose to ask for access for less than this duration but never more. + * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + */ + maxRequestDuration?: pulumi.Input; + /** + * Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + * Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + */ + name?: pulumi.Input; + /** + * Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + */ + parent?: pulumi.Input; + /** + * Privileged access that this service can be used to gate. + * Structure is documented below. + */ + privilegedAccess?: pulumi.Input; + /** + * Defines the ways in which a requester should provide the justification while requesting for access. + * Structure is documented below. + */ + requesterJustificationConfig?: pulumi.Input; + /** + * Output only. The current state of the Entitlement. + */ + state?: pulumi.Input; + /** + * Output only. Update time stamp. 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 Entitlement resource. + */ +export interface EntitlementArgs { + /** + * AdditionalNotificationTargets includes email addresses to be notified. + */ + additionalNotificationTargets?: pulumi.Input; + /** + * The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + * Different types of approval workflows that can be used to gate privileged access granting. + */ + approvalWorkflow?: pulumi.Input; + /** + * Who can create Grants using Entitlement. This list should contain at most one entry + * Structure is documented below. + */ + eligibleUsers: pulumi.Input[]>; + /** + * The ID to use for this Entitlement. This will become the last part of the resource name. + * This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + * This value should be unique among all other Entitlements under the specified `parent`. + */ + entitlementId: pulumi.Input; + /** + * The region of the Entitlement resource. + */ + location: pulumi.Input; + /** + * The maximum amount of time for which access would be granted for a request. + * A requester can choose to ask for access for less than this duration but never more. + * Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + */ + maxRequestDuration: pulumi.Input; + /** + * Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + */ + parent: pulumi.Input; + /** + * Privileged access that this service can be used to gate. + * Structure is documented below. + */ + privilegedAccess: pulumi.Input; + /** + * Defines the ways in which a requester should provide the justification while requesting for access. + * Structure is documented below. + */ + requesterJustificationConfig: pulumi.Input; +} diff --git a/sdk/nodejs/privilegedaccessmanager/index.ts b/sdk/nodejs/privilegedaccessmanager/index.ts new file mode 100644 index 0000000000..9e6232afdd --- /dev/null +++ b/sdk/nodejs/privilegedaccessmanager/index.ts @@ -0,0 +1,25 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +// Export members: +export { EntitlementArgs, EntitlementState } from "./entitlement"; +export type Entitlement = import("./entitlement").Entitlement; +export const Entitlement: typeof import("./entitlement").Entitlement = null as any; +utilities.lazyLoad(exports, ["Entitlement"], () => require("./entitlement")); + + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "gcp:privilegedaccessmanager/entitlement:entitlement": + return new Entitlement(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("gcp", "privilegedaccessmanager/entitlement", _module) diff --git a/sdk/nodejs/provider.ts b/sdk/nodejs/provider.ts index db6ded4291..e8940761bd 100644 --- a/sdk/nodejs/provider.ts +++ b/sdk/nodejs/provider.ts @@ -147,6 +147,7 @@ export class Provider extends pulumi.ProviderResource { public readonly osLoginCustomEndpoint!: pulumi.Output; public readonly parallelstoreCustomEndpoint!: pulumi.Output; public readonly privatecaCustomEndpoint!: pulumi.Output; + public readonly privilegedAccessManagerCustomEndpoint!: pulumi.Output; public readonly project!: pulumi.Output; public readonly publicCaCustomEndpoint!: pulumi.Output; public readonly pubsubCustomEndpoint!: pulumi.Output; @@ -325,6 +326,7 @@ export class Provider extends pulumi.ProviderResource { resourceInputs["osLoginCustomEndpoint"] = args ? args.osLoginCustomEndpoint : undefined; resourceInputs["parallelstoreCustomEndpoint"] = args ? args.parallelstoreCustomEndpoint : undefined; resourceInputs["privatecaCustomEndpoint"] = args ? args.privatecaCustomEndpoint : undefined; + resourceInputs["privilegedAccessManagerCustomEndpoint"] = args ? args.privilegedAccessManagerCustomEndpoint : undefined; resourceInputs["project"] = (args ? args.project : undefined) ?? utilities.getEnv("GOOGLE_PROJECT", "GOOGLE_CLOUD_PROJECT", "GCLOUD_PROJECT", "CLOUDSDK_CORE_PROJECT"); resourceInputs["publicCaCustomEndpoint"] = args ? args.publicCaCustomEndpoint : undefined; resourceInputs["pubsubCustomEndpoint"] = args ? args.pubsubCustomEndpoint : undefined; @@ -505,6 +507,7 @@ export interface ProviderArgs { osLoginCustomEndpoint?: pulumi.Input; parallelstoreCustomEndpoint?: pulumi.Input; privatecaCustomEndpoint?: pulumi.Input; + privilegedAccessManagerCustomEndpoint?: pulumi.Input; project?: pulumi.Input; publicCaCustomEndpoint?: pulumi.Input; pubsubCustomEndpoint?: pulumi.Input; diff --git a/sdk/nodejs/redis/cluster.ts b/sdk/nodejs/redis/cluster.ts index 4b88b98c4a..b3014b1a2e 100644 --- a/sdk/nodejs/redis/cluster.ts +++ b/sdk/nodejs/redis/cluster.ts @@ -38,6 +38,9 @@ import * as utilities from "../utilities"; * nodeType: "REDIS_SHARED_CORE_NANO", * transitEncryptionMode: "TRANSIT_ENCRYPTION_MODE_DISABLED", * authorizationMode: "AUTH_MODE_DISABLED", + * redisConfigs: { + * "maxmemory-policy": "volatile-ttl", + * }, * }); * const producerSubnet = new gcp.compute.Subnetwork("producer_subnet", { * name: "mysubnet", @@ -161,6 +164,12 @@ export class Cluster extends pulumi.CustomResource { * Structure is documented below. */ public /*out*/ readonly pscConnections!: pulumi.Output; + /** + * Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + * documentation for the list of supported parameters: + * https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + */ + public readonly redisConfigs!: pulumi.Output<{[key: string]: string} | undefined>; /** * The name of the region of the Redis cluster. */ @@ -219,6 +228,7 @@ export class Cluster extends pulumi.CustomResource { resourceInputs["project"] = state ? state.project : undefined; resourceInputs["pscConfigs"] = state ? state.pscConfigs : undefined; resourceInputs["pscConnections"] = state ? state.pscConnections : undefined; + resourceInputs["redisConfigs"] = state ? state.redisConfigs : undefined; resourceInputs["region"] = state ? state.region : undefined; resourceInputs["replicaCount"] = state ? state.replicaCount : undefined; resourceInputs["shardCount"] = state ? state.shardCount : undefined; @@ -240,6 +250,7 @@ export class Cluster extends pulumi.CustomResource { resourceInputs["nodeType"] = args ? args.nodeType : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["pscConfigs"] = args ? args.pscConfigs : undefined; + resourceInputs["redisConfigs"] = args ? args.redisConfigs : undefined; resourceInputs["region"] = args ? args.region : undefined; resourceInputs["replicaCount"] = args ? args.replicaCount : undefined; resourceInputs["shardCount"] = args ? args.shardCount : undefined; @@ -308,6 +319,12 @@ export interface ClusterState { * Structure is documented below. */ pscConnections?: pulumi.Input[]>; + /** + * Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + * documentation for the list of supported parameters: + * https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + */ + redisConfigs?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * The name of the region of the Redis cluster. */ @@ -373,6 +390,12 @@ export interface ClusterArgs { * Structure is documented below. */ pscConfigs: pulumi.Input[]>; + /** + * Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + * documentation for the list of supported parameters: + * https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + */ + redisConfigs?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * The name of the region of the Redis cluster. */ diff --git a/sdk/nodejs/storage/getBuckets.ts b/sdk/nodejs/storage/getBuckets.ts new file mode 100644 index 0000000000..3e37c050e9 --- /dev/null +++ b/sdk/nodejs/storage/getBuckets.ts @@ -0,0 +1,100 @@ +// *** WARNING: this file 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"; + +/** + * Gets a list of existing GCS buckets. + * See [the official documentation](https://cloud.google.com/storage/docs/introduction) + * and [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list). + * + * ## Example Usage + * + * Example GCS buckets. + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const example = gcp.storage.getBuckets({ + * project: "example-project", + * }); + * ``` + */ +export function getBuckets(args?: GetBucketsArgs, opts?: pulumi.InvokeOptions): Promise { + args = args || {}; + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("gcp:storage/getBuckets:getBuckets", { + "prefix": args.prefix, + "project": args.project, + }, opts); +} + +/** + * A collection of arguments for invoking getBuckets. + */ +export interface GetBucketsArgs { + /** + * Filter results to buckets whose names begin with this prefix. + */ + prefix?: string; + /** + * The ID of the project. If it is not provided, the provider project is used. + */ + project?: string; +} + +/** + * A collection of values returned by getBuckets. + */ +export interface GetBucketsResult { + /** + * A list of all retrieved GCS buckets. Structure is defined below. + */ + readonly buckets: outputs.storage.GetBucketsBucket[]; + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + readonly prefix?: string; + readonly project?: string; +} +/** + * Gets a list of existing GCS buckets. + * See [the official documentation](https://cloud.google.com/storage/docs/introduction) + * and [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list). + * + * ## Example Usage + * + * Example GCS buckets. + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const example = gcp.storage.getBuckets({ + * project: "example-project", + * }); + * ``` + */ +export function getBucketsOutput(args?: GetBucketsOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getBuckets(a, opts)) +} + +/** + * A collection of arguments for invoking getBuckets. + */ +export interface GetBucketsOutputArgs { + /** + * Filter results to buckets whose names begin with this prefix. + */ + prefix?: pulumi.Input; + /** + * The ID of the project. If it is not provided, the provider project is used. + */ + project?: pulumi.Input; +} diff --git a/sdk/nodejs/storage/index.ts b/sdk/nodejs/storage/index.ts index efa40801b5..233a465607 100644 --- a/sdk/nodejs/storage/index.ts +++ b/sdk/nodejs/storage/index.ts @@ -75,6 +75,11 @@ export const getBucketObjects: typeof import("./getBucketObjects").getBucketObje export const getBucketObjectsOutput: typeof import("./getBucketObjects").getBucketObjectsOutput = null as any; utilities.lazyLoad(exports, ["getBucketObjects","getBucketObjectsOutput"], () => require("./getBucketObjects")); +export { GetBucketsArgs, GetBucketsResult, GetBucketsOutputArgs } from "./getBuckets"; +export const getBuckets: typeof import("./getBuckets").getBuckets = null as any; +export const getBucketsOutput: typeof import("./getBuckets").getBucketsOutput = null as any; +utilities.lazyLoad(exports, ["getBuckets","getBucketsOutput"], () => require("./getBuckets")); + export { GetObjectSignedUrlArgs, GetObjectSignedUrlResult, GetObjectSignedUrlOutputArgs } from "./getObjectSignedUrl"; export const getObjectSignedUrl: typeof import("./getObjectSignedUrl").getObjectSignedUrl = null as any; export const getObjectSignedUrlOutput: typeof import("./getObjectSignedUrl").getObjectSignedUrlOutput = null as any; diff --git a/sdk/nodejs/tsconfig.json b/sdk/nodejs/tsconfig.json index d6c79953f1..c1fab3bc08 100644 --- a/sdk/nodejs/tsconfig.json +++ b/sdk/nodejs/tsconfig.json @@ -1063,6 +1063,8 @@ "oslogin/sshPublicKey.ts", "parallelstore/index.ts", "parallelstore/instance.ts", + "privilegedaccessmanager/entitlement.ts", + "privilegedaccessmanager/index.ts", "projects/accessApprovalSettings.ts", "projects/apiKey.ts", "projects/defaultServiceAccounts.ts", @@ -1233,6 +1235,7 @@ "storage/getBucketObject.ts", "storage/getBucketObjectContent.ts", "storage/getBucketObjects.ts", + "storage/getBuckets.ts", "storage/getObjectSignedUrl.ts", "storage/getProjectServiceAccount.ts", "storage/getTransferProjectServiceAccount.ts", diff --git a/sdk/nodejs/types/input.ts b/sdk/nodejs/types/input.ts index f2c65f899a..f53381f360 100644 --- a/sdk/nodejs/types/input.ts +++ b/sdk/nodejs/types/input.ts @@ -2031,6 +2031,46 @@ export namespace alloydb { user?: pulumi.Input; } + export interface ClusterMaintenanceUpdatePolicy { + /** + * Preferred windows to perform maintenance. Currently limited to 1. + * Structure is documented below. + */ + maintenanceWindows?: pulumi.Input[]>; + } + + export interface ClusterMaintenanceUpdatePolicyMaintenanceWindow { + /** + * Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + * Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + */ + day: pulumi.Input; + /** + * Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + * Structure is documented below. + */ + startTime: pulumi.Input; + } + + export interface ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime { + /** + * Hours of day in 24 hour format. Should be from 0 to 23. + */ + hours: pulumi.Input; + /** + * Minutes of hour of day. Currently, only the value 0 is supported. + */ + minutes?: pulumi.Input; + /** + * Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + */ + nanos?: pulumi.Input; + /** + * Seconds of minutes of the time. Currently, only the value 0 is supported. + */ + seconds?: pulumi.Input; + } + export interface ClusterMigrationSource { /** * The host and port of the on-premises instance in host:port format @@ -23111,6 +23151,8 @@ export namespace compute { * The number of consecutive BFD packets that must be missed before * BFD declares that a peer is unavailable. If set, the value must * be a value between 5 and 16. + * + * The `md5AuthenticationKey` block supports: */ multiplier?: pulumi.Input; /** @@ -27520,6 +27562,10 @@ export namespace container { * Sandbox configuration for this node. */ sandboxConfig?: pulumi.Input; + /** + * Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfsConfig` must be `enabled=true` for this feature to work. `minMasterVersion` must also be set to use GKE 1.28.3-gke.106700 or later versions. + */ + secondaryBootDisks?: pulumi.Input[]>; /** * The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -27660,6 +27706,7 @@ export namespace container { * The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) */ gpuSharingStrategy: pulumi.Input; /** @@ -27766,6 +27813,17 @@ export namespace container { sandboxType: pulumi.Input; } + export interface ClusterNodeConfigSecondaryBootDisk { + /** + * Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + */ + diskImage: pulumi.Input; + /** + * Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + */ + mode?: pulumi.Input; + } + export interface ClusterNodeConfigShieldedInstanceConfig { /** * Defines if the instance has integrity monitoring enabled. @@ -28247,6 +28305,10 @@ export namespace container { * Sandbox configuration for this node. */ sandboxConfig?: pulumi.Input; + /** + * Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfsConfig` must be `enabled=true` for this feature to work. `minMasterVersion` must also be set to use GKE 1.28.3-gke.106700 or later versions. + */ + secondaryBootDisks?: pulumi.Input[]>; /** * The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -28387,6 +28449,7 @@ export namespace container { * The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) */ gpuSharingStrategy: pulumi.Input; /** @@ -28493,6 +28556,17 @@ export namespace container { sandboxType: pulumi.Input; } + export interface ClusterNodePoolNodeConfigSecondaryBootDisk { + /** + * Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + */ + diskImage: pulumi.Input; + /** + * Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + */ + mode?: pulumi.Input; + } + export interface ClusterNodePoolNodeConfigShieldedInstanceConfig { /** * Defines if the instance has integrity monitoring enabled. @@ -29078,6 +29152,10 @@ export namespace container { * Sandbox configuration for this node. */ sandboxConfig?: pulumi.Input; + /** + * Secondary boot disks for preloading data or container images. + */ + secondaryBootDisks?: pulumi.Input[]>; /** * The Google Cloud Platform Service Account to be used by the node VMs. */ @@ -29280,6 +29358,17 @@ export namespace container { sandboxType: pulumi.Input; } + export interface NodePoolNodeConfigSecondaryBootDisk { + /** + * Disk image to create the secondary boot disk from + */ + diskImage: pulumi.Input; + /** + * Mode for how the secondary boot disk is used. + */ + mode?: pulumi.Input; + } + export interface NodePoolNodeConfigShieldedInstanceConfig { /** * Defines whether the instance has integrity monitoring enabled. @@ -58152,6 +58241,133 @@ export namespace osconfig { } } +export namespace privilegedaccessmanager { + export interface EntitlementAdditionalNotificationTargets { + /** + * Optional. Additional email addresses to be notified when a principal(requester) is granted access. + */ + adminEmailRecipients?: pulumi.Input[]>; + /** + * Optional. Additional email address to be notified about an eligible entitlement. + */ + requesterEmailRecipients?: pulumi.Input[]>; + } + + export interface EntitlementApprovalWorkflow { + /** + * A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + * The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + * This can be used to create approval workflows such as + * * Require an approval from any user in a group G. + * * Require an approval from any k number of users from a Group G. + * * Require an approval from any user in a group G and then from a user U. etc. + * A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + * Structure is documented below. + */ + manualApprovals: pulumi.Input; + } + + export interface EntitlementApprovalWorkflowManualApprovals { + /** + * Optional. Do the approvers need to provide a justification for their actions? + */ + requireApproverJustification?: pulumi.Input; + /** + * List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + * Structure is documented below. + */ + steps: pulumi.Input[]>; + } + + export interface EntitlementApprovalWorkflowManualApprovalsStep { + /** + * How many users from the above list need to approve. + * If there are not enough distinct users in the list above then the workflow + * will indefinitely block. Should always be greater than 0. Currently 1 is the only + * supported value. + */ + approvalsNeeded?: pulumi.Input; + /** + * Optional. Additional email addresses to be notified when a grant is pending approval. + */ + approverEmailRecipients?: pulumi.Input[]>; + /** + * The potential set of approvers in this step. This list should contain at only one entry. + * Structure is documented below. + */ + approvers: pulumi.Input; + } + + export interface EntitlementApprovalWorkflowManualApprovalsStepApprovers { + /** + * Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + */ + principals: pulumi.Input[]>; + } + + export interface EntitlementEligibleUser { + /** + * Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + */ + principals: pulumi.Input[]>; + } + + export interface EntitlementPrivilegedAccess { + /** + * GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + * Structure is documented below. + */ + gcpIamAccess: pulumi.Input; + } + + export interface EntitlementPrivilegedAccessGcpIamAccess { + /** + * Name of the resource. + */ + resource: pulumi.Input; + /** + * The type of this resource. + */ + resourceType: pulumi.Input; + /** + * Role bindings to be created on successful grant. + * Structure is documented below. + */ + roleBindings: pulumi.Input[]>; + } + + export interface EntitlementPrivilegedAccessGcpIamAccessRoleBinding { + /** + * The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + * https://cloud.google.com/iam/docs/conditions-overview#attributes. + */ + conditionExpression?: pulumi.Input; + /** + * IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + */ + role: pulumi.Input; + } + + export interface EntitlementRequesterJustificationConfig { + /** + * The justification is not mandatory but can be provided in any of the supported formats. + */ + notMandatory?: pulumi.Input; + /** + * The requester has to provide a justification in the form of free flowing text. + * + * - - - + */ + unstructured?: pulumi.Input; + } + + export interface EntitlementRequesterJustificationConfigNotMandatory { + } + + export interface EntitlementRequesterJustificationConfigUnstructured { + } +} + export namespace projects { export interface AccessApprovalSettingsEnrolledService { /** diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts index 92a34cbe87..85fe502ba5 100644 --- a/sdk/nodejs/types/output.ts +++ b/sdk/nodejs/types/output.ts @@ -2028,6 +2028,46 @@ export namespace alloydb { user?: string; } + export interface ClusterMaintenanceUpdatePolicy { + /** + * Preferred windows to perform maintenance. Currently limited to 1. + * Structure is documented below. + */ + maintenanceWindows?: outputs.alloydb.ClusterMaintenanceUpdatePolicyMaintenanceWindow[]; + } + + export interface ClusterMaintenanceUpdatePolicyMaintenanceWindow { + /** + * Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + * Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + */ + day: string; + /** + * Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + * Structure is documented below. + */ + startTime: outputs.alloydb.ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime; + } + + export interface ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime { + /** + * Hours of day in 24 hour format. Should be from 0 to 23. + */ + hours: number; + /** + * Minutes of hour of day. Currently, only the value 0 is supported. + */ + minutes?: number; + /** + * Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + */ + nanos?: number; + /** + * Seconds of minutes of the time. Currently, only the value 0 is supported. + */ + seconds?: number; + } + export interface ClusterMigrationSource { /** * The host and port of the on-premises instance in host:port format @@ -31975,6 +32015,8 @@ export namespace compute { * The number of consecutive BFD packets that must be missed before * BFD declares that a peer is unavailable. If set, the value must * be a value between 5 and 16. + * + * The `md5AuthenticationKey` block supports: */ multiplier?: number; /** @@ -36582,6 +36624,10 @@ export namespace container { * Sandbox configuration for this node. */ sandboxConfig?: outputs.container.ClusterNodeConfigSandboxConfig; + /** + * Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfsConfig` must be `enabled=true` for this feature to work. `minMasterVersion` must also be set to use GKE 1.28.3-gke.106700 or later versions. + */ + secondaryBootDisks?: outputs.container.ClusterNodeConfigSecondaryBootDisk[]; /** * The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -36722,6 +36768,7 @@ export namespace container { * The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) */ gpuSharingStrategy: string; /** @@ -36828,6 +36875,17 @@ export namespace container { sandboxType: string; } + export interface ClusterNodeConfigSecondaryBootDisk { + /** + * Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + */ + diskImage: string; + /** + * Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + */ + mode?: string; + } + export interface ClusterNodeConfigShieldedInstanceConfig { /** * Defines if the instance has integrity monitoring enabled. @@ -37309,6 +37367,10 @@ export namespace container { * Sandbox configuration for this node. */ sandboxConfig?: outputs.container.ClusterNodePoolNodeConfigSandboxConfig; + /** + * Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfsConfig` must be `enabled=true` for this feature to work. `minMasterVersion` must also be set to use GKE 1.28.3-gke.106700 or later versions. + */ + secondaryBootDisks?: outputs.container.ClusterNodePoolNodeConfigSecondaryBootDisk[]; /** * The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -37449,6 +37511,7 @@ export namespace container { * The type of GPU sharing strategy to enable on the GPU node. * Accepted values are: * * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) */ gpuSharingStrategy: string; /** @@ -37555,6 +37618,17 @@ export namespace container { sandboxType: string; } + export interface ClusterNodePoolNodeConfigSecondaryBootDisk { + /** + * Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + */ + diskImage: string; + /** + * Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + */ + mode?: string; + } + export interface ClusterNodePoolNodeConfigShieldedInstanceConfig { /** * Defines if the instance has integrity monitoring enabled. @@ -38612,6 +38686,10 @@ export namespace container { * Sandbox configuration for this node. */ sandboxConfigs: outputs.container.GetClusterNodeConfigSandboxConfig[]; + /** + * Secondary boot disks for preloading data or container images. + */ + secondaryBootDisks: outputs.container.GetClusterNodeConfigSecondaryBootDisk[]; /** * The Google Cloud Platform Service Account to be used by the node VMs. */ @@ -38813,6 +38891,17 @@ export namespace container { sandboxType: string; } + export interface GetClusterNodeConfigSecondaryBootDisk { + /** + * Disk image to create the secondary boot disk from + */ + diskImage: string; + /** + * Mode for how the secondary boot disk is used. + */ + mode: string; + } + export interface GetClusterNodeConfigShieldedInstanceConfig { /** * Defines whether the instance has integrity monitoring enabled. @@ -39206,6 +39295,10 @@ export namespace container { * Sandbox configuration for this node. */ sandboxConfigs: outputs.container.GetClusterNodePoolNodeConfigSandboxConfig[]; + /** + * Secondary boot disks for preloading data or container images. + */ + secondaryBootDisks: outputs.container.GetClusterNodePoolNodeConfigSecondaryBootDisk[]; /** * The Google Cloud Platform Service Account to be used by the node VMs. */ @@ -39407,6 +39500,17 @@ export namespace container { sandboxType: string; } + export interface GetClusterNodePoolNodeConfigSecondaryBootDisk { + /** + * Disk image to create the secondary boot disk from + */ + diskImage: string; + /** + * Mode for how the secondary boot disk is used. + */ + mode: string; + } + export interface GetClusterNodePoolNodeConfigShieldedInstanceConfig { /** * Defines whether the instance has integrity monitoring enabled. @@ -39955,6 +40059,10 @@ export namespace container { * Sandbox configuration for this node. */ sandboxConfig?: outputs.container.NodePoolNodeConfigSandboxConfig; + /** + * Secondary boot disks for preloading data or container images. + */ + secondaryBootDisks?: outputs.container.NodePoolNodeConfigSecondaryBootDisk[]; /** * The Google Cloud Platform Service Account to be used by the node VMs. */ @@ -40157,6 +40265,17 @@ export namespace container { sandboxType: string; } + export interface NodePoolNodeConfigSecondaryBootDisk { + /** + * Disk image to create the secondary boot disk from + */ + diskImage: string; + /** + * Mode for how the secondary boot disk is used. + */ + mode?: string; + } + export interface NodePoolNodeConfigShieldedInstanceConfig { /** * Defines whether the instance has integrity monitoring enabled. @@ -69690,6 +69809,134 @@ export namespace osconfig { } +export namespace privilegedaccessmanager { + export interface EntitlementAdditionalNotificationTargets { + /** + * Optional. Additional email addresses to be notified when a principal(requester) is granted access. + */ + adminEmailRecipients?: string[]; + /** + * Optional. Additional email address to be notified about an eligible entitlement. + */ + requesterEmailRecipients?: string[]; + } + + export interface EntitlementApprovalWorkflow { + /** + * A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + * The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + * This can be used to create approval workflows such as + * * Require an approval from any user in a group G. + * * Require an approval from any k number of users from a Group G. + * * Require an approval from any user in a group G and then from a user U. etc. + * A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + * Structure is documented below. + */ + manualApprovals: outputs.privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovals; + } + + export interface EntitlementApprovalWorkflowManualApprovals { + /** + * Optional. Do the approvers need to provide a justification for their actions? + */ + requireApproverJustification?: boolean; + /** + * List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + * Structure is documented below. + */ + steps: outputs.privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStep[]; + } + + export interface EntitlementApprovalWorkflowManualApprovalsStep { + /** + * How many users from the above list need to approve. + * If there are not enough distinct users in the list above then the workflow + * will indefinitely block. Should always be greater than 0. Currently 1 is the only + * supported value. + */ + approvalsNeeded?: number; + /** + * Optional. Additional email addresses to be notified when a grant is pending approval. + */ + approverEmailRecipients?: string[]; + /** + * The potential set of approvers in this step. This list should contain at only one entry. + * Structure is documented below. + */ + approvers: outputs.privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepApprovers; + } + + export interface EntitlementApprovalWorkflowManualApprovalsStepApprovers { + /** + * Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + */ + principals: string[]; + } + + export interface EntitlementEligibleUser { + /** + * Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + */ + principals: string[]; + } + + export interface EntitlementPrivilegedAccess { + /** + * GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + * Structure is documented below. + */ + gcpIamAccess: outputs.privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccess; + } + + export interface EntitlementPrivilegedAccessGcpIamAccess { + /** + * Name of the resource. + */ + resource: string; + /** + * The type of this resource. + */ + resourceType: string; + /** + * Role bindings to be created on successful grant. + * Structure is documented below. + */ + roleBindings: outputs.privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessRoleBinding[]; + } + + export interface EntitlementPrivilegedAccessGcpIamAccessRoleBinding { + /** + * The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + * https://cloud.google.com/iam/docs/conditions-overview#attributes. + */ + conditionExpression?: string; + /** + * IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + */ + role: string; + } + + export interface EntitlementRequesterJustificationConfig { + /** + * The justification is not mandatory but can be provided in any of the supported formats. + */ + notMandatory?: outputs.privilegedaccessmanager.EntitlementRequesterJustificationConfigNotMandatory; + /** + * The requester has to provide a justification in the form of free flowing text. + * + * - - - + */ + unstructured?: outputs.privilegedaccessmanager.EntitlementRequesterJustificationConfigUnstructured; + } + + export interface EntitlementRequesterJustificationConfigNotMandatory { + } + + export interface EntitlementRequesterJustificationConfigUnstructured { + } + +} + export namespace projects { export interface AccessApprovalSettingsEnrolledService { /** @@ -74619,6 +74866,29 @@ export namespace storage { notFoundPage: string; } + export interface GetBucketsBucket { + /** + * User-provided bucket labels, in key/value pairs. + */ + labels: {[key: string]: string}; + /** + * The location of the bucket. + */ + location: string; + /** + * The name of the bucket. + */ + name: string; + /** + * A url reference to the bucket. + */ + selfLink: string; + /** + * The [StorageClass](https://cloud.google.com/storage/docs/storage-classes) of the bucket. + */ + storageClass: string; + } + export interface InsightsReportConfigCsvOptions { /** * The delimiter used to separate the fields in the inventory report CSV file. diff --git a/sdk/python/pulumi_gcp/__init__.py b/sdk/python/pulumi_gcp/__init__.py index 3f2e6a6a7f..3e25e4515b 100644 --- a/sdk/python/pulumi_gcp/__init__.py +++ b/sdk/python/pulumi_gcp/__init__.py @@ -194,6 +194,8 @@ oslogin = __oslogin import pulumi_gcp.parallelstore as __parallelstore parallelstore = __parallelstore + import pulumi_gcp.privilegedaccessmanager as __privilegedaccessmanager + privilegedaccessmanager = __privilegedaccessmanager import pulumi_gcp.projects as __projects projects = __projects import pulumi_gcp.pubsub as __pubsub @@ -339,6 +341,7 @@ osconfig = _utilities.lazy_import('pulumi_gcp.osconfig') oslogin = _utilities.lazy_import('pulumi_gcp.oslogin') parallelstore = _utilities.lazy_import('pulumi_gcp.parallelstore') + privilegedaccessmanager = _utilities.lazy_import('pulumi_gcp.privilegedaccessmanager') projects = _utilities.lazy_import('pulumi_gcp.projects') pubsub = _utilities.lazy_import('pulumi_gcp.pubsub') recaptcha = _utilities.lazy_import('pulumi_gcp.recaptcha') @@ -6281,6 +6284,14 @@ "gcp:parallelstore/instance:Instance": "Instance" } }, + { + "pkg": "gcp", + "mod": "privilegedaccessmanager/entitlement", + "fqn": "pulumi_gcp.privilegedaccessmanager", + "classes": { + "gcp:privilegedaccessmanager/entitlement:entitlement": "Entitlement" + } + }, { "pkg": "gcp", "mod": "projects/accessApprovalSettings", diff --git a/sdk/python/pulumi_gcp/alloydb/_inputs.py b/sdk/python/pulumi_gcp/alloydb/_inputs.py index 3d07c98de3..3963be36cc 100644 --- a/sdk/python/pulumi_gcp/alloydb/_inputs.py +++ b/sdk/python/pulumi_gcp/alloydb/_inputs.py @@ -27,6 +27,9 @@ 'ClusterEncryptionConfigArgs', 'ClusterEncryptionInfoArgs', 'ClusterInitialUserArgs', + 'ClusterMaintenanceUpdatePolicyArgs', + 'ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs', + 'ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs', 'ClusterMigrationSourceArgs', 'ClusterNetworkConfigArgs', 'ClusterRestoreBackupSourceArgs', @@ -816,6 +819,142 @@ def user(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "user", value) +@pulumi.input_type +class ClusterMaintenanceUpdatePolicyArgs: + def __init__(__self__, *, + maintenance_windows: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs']]]] = None): + """ + :param pulumi.Input[Sequence[pulumi.Input['ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs']]] maintenance_windows: Preferred windows to perform maintenance. Currently limited to 1. + Structure is documented below. + """ + if maintenance_windows is not None: + pulumi.set(__self__, "maintenance_windows", maintenance_windows) + + @property + @pulumi.getter(name="maintenanceWindows") + def maintenance_windows(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs']]]]: + """ + Preferred windows to perform maintenance. Currently limited to 1. + Structure is documented below. + """ + return pulumi.get(self, "maintenance_windows") + + @maintenance_windows.setter + def maintenance_windows(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs']]]]): + pulumi.set(self, "maintenance_windows", value) + + +@pulumi.input_type +class ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs: + def __init__(__self__, *, + day: pulumi.Input[str], + start_time: pulumi.Input['ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs']): + """ + :param pulumi.Input[str] day: Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + :param pulumi.Input['ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs'] start_time: Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + Structure is documented below. + """ + pulumi.set(__self__, "day", day) + pulumi.set(__self__, "start_time", start_time) + + @property + @pulumi.getter + def day(self) -> pulumi.Input[str]: + """ + Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + """ + return pulumi.get(self, "day") + + @day.setter + def day(self, value: pulumi.Input[str]): + pulumi.set(self, "day", value) + + @property + @pulumi.getter(name="startTime") + def start_time(self) -> pulumi.Input['ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs']: + """ + Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + Structure is documented below. + """ + return pulumi.get(self, "start_time") + + @start_time.setter + def start_time(self, value: pulumi.Input['ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs']): + pulumi.set(self, "start_time", value) + + +@pulumi.input_type +class ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs: + def __init__(__self__, *, + hours: pulumi.Input[int], + minutes: Optional[pulumi.Input[int]] = None, + nanos: Optional[pulumi.Input[int]] = None, + seconds: Optional[pulumi.Input[int]] = None): + """ + :param pulumi.Input[int] hours: Hours of day in 24 hour format. Should be from 0 to 23. + :param pulumi.Input[int] minutes: Minutes of hour of day. Currently, only the value 0 is supported. + :param pulumi.Input[int] nanos: Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + :param pulumi.Input[int] seconds: Seconds of minutes of the time. Currently, only the value 0 is supported. + """ + pulumi.set(__self__, "hours", hours) + if minutes is not None: + pulumi.set(__self__, "minutes", minutes) + if nanos is not None: + pulumi.set(__self__, "nanos", nanos) + if seconds is not None: + pulumi.set(__self__, "seconds", seconds) + + @property + @pulumi.getter + def hours(self) -> pulumi.Input[int]: + """ + Hours of day in 24 hour format. Should be from 0 to 23. + """ + return pulumi.get(self, "hours") + + @hours.setter + def hours(self, value: pulumi.Input[int]): + pulumi.set(self, "hours", value) + + @property + @pulumi.getter + def minutes(self) -> Optional[pulumi.Input[int]]: + """ + Minutes of hour of day. Currently, only the value 0 is supported. + """ + return pulumi.get(self, "minutes") + + @minutes.setter + def minutes(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "minutes", value) + + @property + @pulumi.getter + def nanos(self) -> Optional[pulumi.Input[int]]: + """ + Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + """ + return pulumi.get(self, "nanos") + + @nanos.setter + def nanos(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "nanos", value) + + @property + @pulumi.getter + def seconds(self) -> Optional[pulumi.Input[int]]: + """ + Seconds of minutes of the time. Currently, only the value 0 is supported. + """ + return pulumi.get(self, "seconds") + + @seconds.setter + def seconds(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "seconds", value) + + @pulumi.input_type class ClusterMigrationSourceArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/alloydb/cluster.py b/sdk/python/pulumi_gcp/alloydb/cluster.py index 63d08bd867..c847fe61a4 100644 --- a/sdk/python/pulumi_gcp/alloydb/cluster.py +++ b/sdk/python/pulumi_gcp/alloydb/cluster.py @@ -29,6 +29,7 @@ def __init__(__self__, *, etag: Optional[pulumi.Input[str]] = None, initial_user: Optional[pulumi.Input['ClusterInitialUserArgs']] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + maintenance_update_policy: Optional[pulumi.Input['ClusterMaintenanceUpdatePolicyArgs']] = None, network: Optional[pulumi.Input[str]] = None, network_config: Optional[pulumi.Input['ClusterNetworkConfigArgs']] = None, project: Optional[pulumi.Input[str]] = None, @@ -68,6 +69,8 @@ def __init__(__self__, *, :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: User-defined labels for the alloydb cluster. **Note**: This field is non-authoritative, and will 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['ClusterMaintenanceUpdatePolicyArgs'] maintenance_update_policy: MaintenanceUpdatePolicy defines the policy for system updates. + Structure is documented below. :param pulumi.Input[str] network: (Optional, Deprecated) The relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". @@ -108,6 +111,8 @@ def __init__(__self__, *, pulumi.set(__self__, "initial_user", initial_user) if labels is not None: pulumi.set(__self__, "labels", labels) + if maintenance_update_policy is not None: + pulumi.set(__self__, "maintenance_update_policy", maintenance_update_policy) if network is not None: warnings.warn("""`network` is deprecated and will be removed in a future major release. Instead, use `network_config` to define the network configuration.""", DeprecationWarning) pulumi.log.warn("""network is deprecated: `network` is deprecated and will be removed in a future major release. Instead, use `network_config` to define the network configuration.""") @@ -298,6 +303,19 @@ def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): pulumi.set(self, "labels", value) + @property + @pulumi.getter(name="maintenanceUpdatePolicy") + def maintenance_update_policy(self) -> Optional[pulumi.Input['ClusterMaintenanceUpdatePolicyArgs']]: + """ + MaintenanceUpdatePolicy defines the policy for system updates. + Structure is documented below. + """ + return pulumi.get(self, "maintenance_update_policy") + + @maintenance_update_policy.setter + def maintenance_update_policy(self, value: Optional[pulumi.Input['ClusterMaintenanceUpdatePolicyArgs']]): + pulumi.set(self, "maintenance_update_policy", value) + @property @pulumi.getter def network(self) -> Optional[pulumi.Input[str]]: @@ -404,6 +422,7 @@ def __init__(__self__, *, initial_user: Optional[pulumi.Input['ClusterInitialUserArgs']] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, + maintenance_update_policy: Optional[pulumi.Input['ClusterMaintenanceUpdatePolicyArgs']] = None, migration_sources: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterMigrationSourceArgs']]]] = None, name: Optional[pulumi.Input[str]] = None, network: Optional[pulumi.Input[str]] = None, @@ -457,6 +476,8 @@ def __init__(__self__, *, - - - + :param pulumi.Input['ClusterMaintenanceUpdatePolicyArgs'] maintenance_update_policy: MaintenanceUpdatePolicy defines the policy for system updates. + Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input['ClusterMigrationSourceArgs']]] migration_sources: Cluster created via DMS migration. Structure is documented below. :param pulumi.Input[str] name: The name of the cluster resource. @@ -519,6 +540,8 @@ def __init__(__self__, *, pulumi.set(__self__, "labels", labels) if location is not None: pulumi.set(__self__, "location", location) + if maintenance_update_policy is not None: + pulumi.set(__self__, "maintenance_update_policy", maintenance_update_policy) if migration_sources is not None: pulumi.set(__self__, "migration_sources", migration_sources) if name is not None: @@ -782,6 +805,19 @@ def location(self) -> Optional[pulumi.Input[str]]: def location(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "location", value) + @property + @pulumi.getter(name="maintenanceUpdatePolicy") + def maintenance_update_policy(self) -> Optional[pulumi.Input['ClusterMaintenanceUpdatePolicyArgs']]: + """ + MaintenanceUpdatePolicy defines the policy for system updates. + Structure is documented below. + """ + return pulumi.get(self, "maintenance_update_policy") + + @maintenance_update_policy.setter + def maintenance_update_policy(self, value: Optional[pulumi.Input['ClusterMaintenanceUpdatePolicyArgs']]): + pulumi.set(self, "maintenance_update_policy", value) + @property @pulumi.getter(name="migrationSources") def migration_sources(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterMigrationSourceArgs']]]]: @@ -961,6 +997,7 @@ def __init__(__self__, initial_user: Optional[pulumi.Input[pulumi.InputType['ClusterInitialUserArgs']]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, + maintenance_update_policy: Optional[pulumi.Input[pulumi.InputType['ClusterMaintenanceUpdatePolicyArgs']]] = None, network: Optional[pulumi.Input[str]] = None, network_config: Optional[pulumi.Input[pulumi.InputType['ClusterNetworkConfigArgs']]] = None, project: Optional[pulumi.Input[str]] = None, @@ -1198,6 +1235,8 @@ def __init__(__self__, - - - + :param pulumi.Input[pulumi.InputType['ClusterMaintenanceUpdatePolicyArgs']] maintenance_update_policy: MaintenanceUpdatePolicy defines the policy for system updates. + Structure is documented below. :param pulumi.Input[str] network: (Optional, Deprecated) The relative resource name of the VPC network on which the instance can be accessed. It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". @@ -1445,6 +1484,7 @@ def _internal_init(__self__, initial_user: Optional[pulumi.Input[pulumi.InputType['ClusterInitialUserArgs']]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, + maintenance_update_policy: Optional[pulumi.Input[pulumi.InputType['ClusterMaintenanceUpdatePolicyArgs']]] = None, network: Optional[pulumi.Input[str]] = None, network_config: Optional[pulumi.Input[pulumi.InputType['ClusterNetworkConfigArgs']]] = None, project: Optional[pulumi.Input[str]] = None, @@ -1477,6 +1517,7 @@ def _internal_init(__self__, if location is None and not opts.urn: raise TypeError("Missing required property 'location'") __props__.__dict__["location"] = location + __props__.__dict__["maintenance_update_policy"] = maintenance_update_policy __props__.__dict__["network"] = network __props__.__dict__["network_config"] = network_config __props__.__dict__["project"] = project @@ -1524,6 +1565,7 @@ def get(resource_name: str, initial_user: Optional[pulumi.Input[pulumi.InputType['ClusterInitialUserArgs']]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, + maintenance_update_policy: Optional[pulumi.Input[pulumi.InputType['ClusterMaintenanceUpdatePolicyArgs']]] = None, migration_sources: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ClusterMigrationSourceArgs']]]]] = None, name: Optional[pulumi.Input[str]] = None, network: Optional[pulumi.Input[str]] = None, @@ -1582,6 +1624,8 @@ def get(resource_name: str, - - - + :param pulumi.Input[pulumi.InputType['ClusterMaintenanceUpdatePolicyArgs']] maintenance_update_policy: MaintenanceUpdatePolicy defines the policy for system updates. + Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ClusterMigrationSourceArgs']]]] migration_sources: Cluster created via DMS migration. Structure is documented below. :param pulumi.Input[str] name: The name of the cluster resource. @@ -1630,6 +1674,7 @@ def get(resource_name: str, __props__.__dict__["initial_user"] = initial_user __props__.__dict__["labels"] = labels __props__.__dict__["location"] = location + __props__.__dict__["maintenance_update_policy"] = maintenance_update_policy __props__.__dict__["migration_sources"] = migration_sources __props__.__dict__["name"] = name __props__.__dict__["network"] = network @@ -1807,6 +1852,15 @@ def location(self) -> pulumi.Output[str]: """ return pulumi.get(self, "location") + @property + @pulumi.getter(name="maintenanceUpdatePolicy") + def maintenance_update_policy(self) -> pulumi.Output[Optional['outputs.ClusterMaintenanceUpdatePolicy']]: + """ + MaintenanceUpdatePolicy defines the policy for system updates. + Structure is documented below. + """ + return pulumi.get(self, "maintenance_update_policy") + @property @pulumi.getter(name="migrationSources") def migration_sources(self) -> pulumi.Output[Sequence['outputs.ClusterMigrationSource']]: diff --git a/sdk/python/pulumi_gcp/alloydb/outputs.py b/sdk/python/pulumi_gcp/alloydb/outputs.py index a3c20006d4..57e2398254 100644 --- a/sdk/python/pulumi_gcp/alloydb/outputs.py +++ b/sdk/python/pulumi_gcp/alloydb/outputs.py @@ -28,6 +28,9 @@ 'ClusterEncryptionConfig', 'ClusterEncryptionInfo', 'ClusterInitialUser', + 'ClusterMaintenanceUpdatePolicy', + 'ClusterMaintenanceUpdatePolicyMaintenanceWindow', + 'ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime', 'ClusterMigrationSource', 'ClusterNetworkConfig', 'ClusterRestoreBackupSource', @@ -931,6 +934,148 @@ def user(self) -> Optional[str]: return pulumi.get(self, "user") +@pulumi.output_type +class ClusterMaintenanceUpdatePolicy(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "maintenanceWindows": + suggest = "maintenance_windows" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClusterMaintenanceUpdatePolicy. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClusterMaintenanceUpdatePolicy.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClusterMaintenanceUpdatePolicy.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + maintenance_windows: Optional[Sequence['outputs.ClusterMaintenanceUpdatePolicyMaintenanceWindow']] = None): + """ + :param Sequence['ClusterMaintenanceUpdatePolicyMaintenanceWindowArgs'] maintenance_windows: Preferred windows to perform maintenance. Currently limited to 1. + Structure is documented below. + """ + if maintenance_windows is not None: + pulumi.set(__self__, "maintenance_windows", maintenance_windows) + + @property + @pulumi.getter(name="maintenanceWindows") + def maintenance_windows(self) -> Optional[Sequence['outputs.ClusterMaintenanceUpdatePolicyMaintenanceWindow']]: + """ + Preferred windows to perform maintenance. Currently limited to 1. + Structure is documented below. + """ + return pulumi.get(self, "maintenance_windows") + + +@pulumi.output_type +class ClusterMaintenanceUpdatePolicyMaintenanceWindow(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "startTime": + suggest = "start_time" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClusterMaintenanceUpdatePolicyMaintenanceWindow. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClusterMaintenanceUpdatePolicyMaintenanceWindow.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClusterMaintenanceUpdatePolicyMaintenanceWindow.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + day: str, + start_time: 'outputs.ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime'): + """ + :param str day: Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + :param 'ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTimeArgs' start_time: Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + Structure is documented below. + """ + pulumi.set(__self__, "day", day) + pulumi.set(__self__, "start_time", start_time) + + @property + @pulumi.getter + def day(self) -> str: + """ + Preferred day of the week for maintenance, e.g. MONDAY, TUESDAY, etc. + Possible values are: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`. + """ + return pulumi.get(self, "day") + + @property + @pulumi.getter(name="startTime") + def start_time(self) -> 'outputs.ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime': + """ + Preferred time to start the maintenance operation on the specified day. Maintenance will start within 1 hour of this time. + Structure is documented below. + """ + return pulumi.get(self, "start_time") + + +@pulumi.output_type +class ClusterMaintenanceUpdatePolicyMaintenanceWindowStartTime(dict): + def __init__(__self__, *, + hours: int, + minutes: Optional[int] = None, + nanos: Optional[int] = None, + seconds: Optional[int] = None): + """ + :param int hours: Hours of day in 24 hour format. Should be from 0 to 23. + :param int minutes: Minutes of hour of day. Currently, only the value 0 is supported. + :param int nanos: Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + :param int seconds: Seconds of minutes of the time. Currently, only the value 0 is supported. + """ + pulumi.set(__self__, "hours", hours) + if minutes is not None: + pulumi.set(__self__, "minutes", minutes) + if nanos is not None: + pulumi.set(__self__, "nanos", nanos) + if seconds is not None: + pulumi.set(__self__, "seconds", seconds) + + @property + @pulumi.getter + def hours(self) -> int: + """ + Hours of day in 24 hour format. Should be from 0 to 23. + """ + return pulumi.get(self, "hours") + + @property + @pulumi.getter + def minutes(self) -> Optional[int]: + """ + Minutes of hour of day. Currently, only the value 0 is supported. + """ + return pulumi.get(self, "minutes") + + @property + @pulumi.getter + def nanos(self) -> Optional[int]: + """ + Fractions of seconds in nanoseconds. Currently, only the value 0 is supported. + """ + return pulumi.get(self, "nanos") + + @property + @pulumi.getter + def seconds(self) -> Optional[int]: + """ + Seconds of minutes of the time. Currently, only the value 0 is supported. + """ + return pulumi.get(self, "seconds") + + @pulumi.output_type class ClusterMigrationSource(dict): @staticmethod diff --git a/sdk/python/pulumi_gcp/applicationintegration/auth_config.py b/sdk/python/pulumi_gcp/applicationintegration/auth_config.py index dc60f27f5a..f2a80db4e4 100644 --- a/sdk/python/pulumi_gcp/applicationintegration/auth_config.py +++ b/sdk/python/pulumi_gcp/applicationintegration/auth_config.py @@ -568,9 +568,7 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - client = gcp.applicationintegration.Client("client", - location="us-west1", - provision_gmek=True) + client = gcp.applicationintegration.Client("client", location="us-west1") basic_example = gcp.applicationintegration.AuthConfig("basic_example", location="us-west1", display_name="test-authconfig", @@ -641,9 +639,7 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - client = gcp.applicationintegration.Client("client", - location="us-west1", - provision_gmek=True) + client = gcp.applicationintegration.Client("client", location="us-west1") basic_example = gcp.applicationintegration.AuthConfig("basic_example", location="us-west1", display_name="test-authconfig", diff --git a/sdk/python/pulumi_gcp/applicationintegration/client.py b/sdk/python/pulumi_gcp/applicationintegration/client.py index c78993ebde..141de6a84e 100644 --- a/sdk/python/pulumi_gcp/applicationintegration/client.py +++ b/sdk/python/pulumi_gcp/applicationintegration/client.py @@ -18,6 +18,7 @@ class ClientArgs: def __init__(__self__, *, location: pulumi.Input[str], cloud_kms_config: Optional[pulumi.Input['ClientCloudKmsConfigArgs']] = None, + create_sample_integrations: Optional[pulumi.Input[bool]] = None, create_sample_workflows: Optional[pulumi.Input[bool]] = None, project: Optional[pulumi.Input[str]] = None, provision_gmek: Optional[pulumi.Input[bool]] = None, @@ -30,19 +31,34 @@ def __init__(__self__, *, - - - :param pulumi.Input['ClientCloudKmsConfigArgs'] cloud_kms_config: Cloud KMS config for AuthModule to encrypt/decrypt credentials. Structure is documented below. - :param pulumi.Input[bool] create_sample_workflows: Indicates if sample workflow should be created along with provisioning. + :param pulumi.Input[bool] create_sample_integrations: Indicates if sample integrations should be created along with provisioning. + :param pulumi.Input[bool] create_sample_workflows: (Optional, Deprecated) + Indicates if sample workflow should be created along with provisioning. + + > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. - :param pulumi.Input[bool] provision_gmek: Indicates provision with GMEK or CMEK. + :param pulumi.Input[bool] provision_gmek: (Optional, Deprecated) + Indicates provision with GMEK or CMEK. + + > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. :param pulumi.Input[str] run_as_service_account: User input run-as service account, if empty, will bring up a new default service account. """ pulumi.set(__self__, "location", location) if cloud_kms_config is not None: pulumi.set(__self__, "cloud_kms_config", cloud_kms_config) + if create_sample_integrations is not None: + pulumi.set(__self__, "create_sample_integrations", create_sample_integrations) + if create_sample_workflows is not None: + warnings.warn("""`create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.""", DeprecationWarning) + pulumi.log.warn("""create_sample_workflows is deprecated: `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.""") if create_sample_workflows is not None: pulumi.set(__self__, "create_sample_workflows", create_sample_workflows) if project is not None: pulumi.set(__self__, "project", project) + if provision_gmek is not None: + warnings.warn("""`provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.""", DeprecationWarning) + pulumi.log.warn("""provision_gmek is deprecated: `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.""") if provision_gmek is not None: pulumi.set(__self__, "provision_gmek", provision_gmek) if run_as_service_account is not None: @@ -76,12 +92,30 @@ def cloud_kms_config(self) -> Optional[pulumi.Input['ClientCloudKmsConfigArgs']] def cloud_kms_config(self, value: Optional[pulumi.Input['ClientCloudKmsConfigArgs']]): pulumi.set(self, "cloud_kms_config", value) + @property + @pulumi.getter(name="createSampleIntegrations") + def create_sample_integrations(self) -> Optional[pulumi.Input[bool]]: + """ + Indicates if sample integrations should be created along with provisioning. + """ + return pulumi.get(self, "create_sample_integrations") + + @create_sample_integrations.setter + def create_sample_integrations(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "create_sample_integrations", value) + @property @pulumi.getter(name="createSampleWorkflows") def create_sample_workflows(self) -> Optional[pulumi.Input[bool]]: """ + (Optional, Deprecated) Indicates if sample workflow should be created along with provisioning. + + > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. """ + warnings.warn("""`create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.""", DeprecationWarning) + pulumi.log.warn("""create_sample_workflows is deprecated: `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.""") + return pulumi.get(self, "create_sample_workflows") @create_sample_workflows.setter @@ -105,8 +139,14 @@ def project(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="provisionGmek") def provision_gmek(self) -> Optional[pulumi.Input[bool]]: """ + (Optional, Deprecated) Indicates provision with GMEK or CMEK. + + > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. """ + warnings.warn("""`provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.""", DeprecationWarning) + pulumi.log.warn("""provision_gmek is deprecated: `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.""") + return pulumi.get(self, "provision_gmek") @provision_gmek.setter @@ -130,6 +170,7 @@ def run_as_service_account(self, value: Optional[pulumi.Input[str]]): class _ClientState: def __init__(__self__, *, cloud_kms_config: Optional[pulumi.Input['ClientCloudKmsConfigArgs']] = None, + create_sample_integrations: Optional[pulumi.Input[bool]] = None, create_sample_workflows: Optional[pulumi.Input[bool]] = None, location: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, @@ -139,24 +180,39 @@ def __init__(__self__, *, Input properties used for looking up and filtering Client resources. :param pulumi.Input['ClientCloudKmsConfigArgs'] cloud_kms_config: Cloud KMS config for AuthModule to encrypt/decrypt credentials. Structure is documented below. - :param pulumi.Input[bool] create_sample_workflows: Indicates if sample workflow should be created along with provisioning. + :param pulumi.Input[bool] create_sample_integrations: Indicates if sample integrations should be created along with provisioning. + :param pulumi.Input[bool] create_sample_workflows: (Optional, Deprecated) + Indicates if sample workflow should be created along with provisioning. + + > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. :param pulumi.Input[str] location: Location in which client needs to be provisioned. - - - :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. - :param pulumi.Input[bool] provision_gmek: Indicates provision with GMEK or CMEK. + :param pulumi.Input[bool] provision_gmek: (Optional, Deprecated) + Indicates provision with GMEK or CMEK. + + > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. :param pulumi.Input[str] run_as_service_account: User input run-as service account, if empty, will bring up a new default service account. """ if cloud_kms_config is not None: pulumi.set(__self__, "cloud_kms_config", cloud_kms_config) + if create_sample_integrations is not None: + pulumi.set(__self__, "create_sample_integrations", create_sample_integrations) + if create_sample_workflows is not None: + warnings.warn("""`create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.""", DeprecationWarning) + pulumi.log.warn("""create_sample_workflows is deprecated: `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.""") if create_sample_workflows is not None: pulumi.set(__self__, "create_sample_workflows", create_sample_workflows) if location is not None: pulumi.set(__self__, "location", location) if project is not None: pulumi.set(__self__, "project", project) + if provision_gmek is not None: + warnings.warn("""`provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.""", DeprecationWarning) + pulumi.log.warn("""provision_gmek is deprecated: `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.""") if provision_gmek is not None: pulumi.set(__self__, "provision_gmek", provision_gmek) if run_as_service_account is not None: @@ -175,12 +231,30 @@ def cloud_kms_config(self) -> Optional[pulumi.Input['ClientCloudKmsConfigArgs']] def cloud_kms_config(self, value: Optional[pulumi.Input['ClientCloudKmsConfigArgs']]): pulumi.set(self, "cloud_kms_config", value) + @property + @pulumi.getter(name="createSampleIntegrations") + def create_sample_integrations(self) -> Optional[pulumi.Input[bool]]: + """ + Indicates if sample integrations should be created along with provisioning. + """ + return pulumi.get(self, "create_sample_integrations") + + @create_sample_integrations.setter + def create_sample_integrations(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "create_sample_integrations", value) + @property @pulumi.getter(name="createSampleWorkflows") def create_sample_workflows(self) -> Optional[pulumi.Input[bool]]: """ + (Optional, Deprecated) Indicates if sample workflow should be created along with provisioning. + + > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. """ + warnings.warn("""`create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.""", DeprecationWarning) + pulumi.log.warn("""create_sample_workflows is deprecated: `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.""") + return pulumi.get(self, "create_sample_workflows") @create_sample_workflows.setter @@ -219,8 +293,14 @@ def project(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="provisionGmek") def provision_gmek(self) -> Optional[pulumi.Input[bool]]: """ + (Optional, Deprecated) Indicates provision with GMEK or CMEK. + + > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. """ + warnings.warn("""`provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.""", DeprecationWarning) + pulumi.log.warn("""provision_gmek is deprecated: `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.""") + return pulumi.get(self, "provision_gmek") @provision_gmek.setter @@ -246,6 +326,7 @@ def __init__(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, cloud_kms_config: Optional[pulumi.Input[pulumi.InputType['ClientCloudKmsConfigArgs']]] = None, + create_sample_integrations: Optional[pulumi.Input[bool]] = None, create_sample_workflows: Optional[pulumi.Input[bool]] = None, location: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, @@ -270,11 +351,9 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - example = gcp.applicationintegration.Client("example", - location="us-central1", - provision_gmek=True) + example = gcp.applicationintegration.Client("example", location="us-central1") ``` - ### Integrations Client Advance + ### Integrations Client Full ```python import pulumi @@ -294,7 +373,7 @@ def __init__(__self__, display_name="Service Account") example = gcp.applicationintegration.Client("example", location="us-east1", - create_sample_workflows=True, + create_sample_integrations=True, run_as_service_account=service_account.email, cloud_kms_config=gcp.applicationintegration.ClientCloudKmsConfigArgs( kms_location="us-east1", @@ -333,14 +412,21 @@ def __init__(__self__, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[pulumi.InputType['ClientCloudKmsConfigArgs']] cloud_kms_config: Cloud KMS config for AuthModule to encrypt/decrypt credentials. Structure is documented below. - :param pulumi.Input[bool] create_sample_workflows: Indicates if sample workflow should be created along with provisioning. + :param pulumi.Input[bool] create_sample_integrations: Indicates if sample integrations should be created along with provisioning. + :param pulumi.Input[bool] create_sample_workflows: (Optional, Deprecated) + Indicates if sample workflow should be created along with provisioning. + + > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. :param pulumi.Input[str] location: Location in which client needs to be provisioned. - - - :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. - :param pulumi.Input[bool] provision_gmek: Indicates provision with GMEK or CMEK. + :param pulumi.Input[bool] provision_gmek: (Optional, Deprecated) + Indicates provision with GMEK or CMEK. + + > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. :param pulumi.Input[str] run_as_service_account: User input run-as service account, if empty, will bring up a new default service account. """ ... @@ -367,11 +453,9 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - example = gcp.applicationintegration.Client("example", - location="us-central1", - provision_gmek=True) + example = gcp.applicationintegration.Client("example", location="us-central1") ``` - ### Integrations Client Advance + ### Integrations Client Full ```python import pulumi @@ -391,7 +475,7 @@ def __init__(__self__, display_name="Service Account") example = gcp.applicationintegration.Client("example", location="us-east1", - create_sample_workflows=True, + create_sample_integrations=True, run_as_service_account=service_account.email, cloud_kms_config=gcp.applicationintegration.ClientCloudKmsConfigArgs( kms_location="us-east1", @@ -442,6 +526,7 @@ def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, cloud_kms_config: Optional[pulumi.Input[pulumi.InputType['ClientCloudKmsConfigArgs']]] = None, + create_sample_integrations: Optional[pulumi.Input[bool]] = None, create_sample_workflows: Optional[pulumi.Input[bool]] = None, location: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, @@ -457,6 +542,7 @@ def _internal_init(__self__, __props__ = ClientArgs.__new__(ClientArgs) __props__.__dict__["cloud_kms_config"] = cloud_kms_config + __props__.__dict__["create_sample_integrations"] = create_sample_integrations __props__.__dict__["create_sample_workflows"] = create_sample_workflows if location is None and not opts.urn: raise TypeError("Missing required property 'location'") @@ -475,6 +561,7 @@ def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, cloud_kms_config: Optional[pulumi.Input[pulumi.InputType['ClientCloudKmsConfigArgs']]] = None, + create_sample_integrations: Optional[pulumi.Input[bool]] = None, create_sample_workflows: Optional[pulumi.Input[bool]] = None, location: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, @@ -489,14 +576,21 @@ def get(resource_name: str, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[pulumi.InputType['ClientCloudKmsConfigArgs']] cloud_kms_config: Cloud KMS config for AuthModule to encrypt/decrypt credentials. Structure is documented below. - :param pulumi.Input[bool] create_sample_workflows: Indicates if sample workflow should be created along with provisioning. + :param pulumi.Input[bool] create_sample_integrations: Indicates if sample integrations should be created along with provisioning. + :param pulumi.Input[bool] create_sample_workflows: (Optional, Deprecated) + Indicates if sample workflow should be created along with provisioning. + + > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. :param pulumi.Input[str] location: Location in which client needs to be provisioned. - - - :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. - :param pulumi.Input[bool] provision_gmek: Indicates provision with GMEK or CMEK. + :param pulumi.Input[bool] provision_gmek: (Optional, Deprecated) + Indicates provision with GMEK or CMEK. + + > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. :param pulumi.Input[str] run_as_service_account: User input run-as service account, if empty, will bring up a new default service account. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -504,6 +598,7 @@ def get(resource_name: str, __props__ = _ClientState.__new__(_ClientState) __props__.__dict__["cloud_kms_config"] = cloud_kms_config + __props__.__dict__["create_sample_integrations"] = create_sample_integrations __props__.__dict__["create_sample_workflows"] = create_sample_workflows __props__.__dict__["location"] = location __props__.__dict__["project"] = project @@ -520,12 +615,26 @@ def cloud_kms_config(self) -> pulumi.Output[Optional['outputs.ClientCloudKmsConf """ return pulumi.get(self, "cloud_kms_config") + @property + @pulumi.getter(name="createSampleIntegrations") + def create_sample_integrations(self) -> pulumi.Output[Optional[bool]]: + """ + Indicates if sample integrations should be created along with provisioning. + """ + return pulumi.get(self, "create_sample_integrations") + @property @pulumi.getter(name="createSampleWorkflows") def create_sample_workflows(self) -> pulumi.Output[Optional[bool]]: """ + (Optional, Deprecated) Indicates if sample workflow should be created along with provisioning. + + > **Warning:** `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead. """ + warnings.warn("""`create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.""", DeprecationWarning) + pulumi.log.warn("""create_sample_workflows is deprecated: `create_sample_workflows` is deprecated and will be removed in a future major release. Use `create_sample_integrations` instead.""") + return pulumi.get(self, "create_sample_workflows") @property @@ -552,8 +661,14 @@ def project(self) -> pulumi.Output[str]: @pulumi.getter(name="provisionGmek") def provision_gmek(self) -> pulumi.Output[Optional[bool]]: """ + (Optional, Deprecated) Indicates provision with GMEK or CMEK. + + > **Warning:** `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given. """ + warnings.warn("""`provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.""", DeprecationWarning) + pulumi.log.warn("""provision_gmek is deprecated: `provision_gmek` is deprecated and will be removed in a future major release. Client would be provisioned as gmek if `cloud_kms_config` is not given.""") + return pulumi.get(self, "provision_gmek") @property diff --git a/sdk/python/pulumi_gcp/bigquery/dataset.py b/sdk/python/pulumi_gcp/bigquery/dataset.py index 4e90990e92..b2f4cacb94 100644 --- a/sdk/python/pulumi_gcp/bigquery/dataset.py +++ b/sdk/python/pulumi_gcp/bigquery/dataset.py @@ -1071,7 +1071,7 @@ def __init__(__self__, ), ]) ``` - ### Bigquery Dataset External Reference Aws Docs + ### Bigquery Dataset External Reference Aws ```python import pulumi @@ -1355,7 +1355,7 @@ def __init__(__self__, ), ]) ``` - ### Bigquery Dataset External Reference Aws Docs + ### Bigquery Dataset External Reference Aws ```python import pulumi diff --git a/sdk/python/pulumi_gcp/bigquery/job.py b/sdk/python/pulumi_gcp/bigquery/job.py index b3944b6bd9..d8dd91c455 100644 --- a/sdk/python/pulumi_gcp/bigquery/job.py +++ b/sdk/python/pulumi_gcp/bigquery/job.py @@ -636,21 +636,21 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp + count = 2 source_dataset = [] - for range in [{"value": i} for i in range(0, 2)]: + for range in [{"value": i} for i in range(0, count)]: source_dataset.append(gcp.bigquery.Dataset(f"source-{range['value']}", dataset_id=f"job_copy_{range['value']}_dataset", friendly_name="test", description="This is a test description", location="US")) source = [] - def create_source(range_body): - for range in [{"value": i} for i in range(0, range_body)]: - source.append(gcp.bigquery.Table(f"source-{range['value']}", - deletion_protection=False, - dataset_id=source_dataset[range["value"]].dataset_id, - table_id=f"job_copy_{range['value']}_table", - schema=\"\"\"[ + for range in [{"value": i} for i in range(0, count)]: + source.append(gcp.bigquery.Table(f"source-{range['value']}", + deletion_protection=False, + dataset_id=source_dataset[range["value"]].dataset_id, + table_id=f"job_copy_{range['value']}_table", + schema=\"\"\"[ { "name": "name", "type": "STRING", @@ -668,8 +668,6 @@ def create_source(range_body): } ] \"\"\")) - - (len(source_dataset)).apply(create_source) dest_dataset = gcp.bigquery.Dataset("dest", dataset_id="job_copy_dest_dataset", friendly_name="test", @@ -1063,21 +1061,21 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp + count = 2 source_dataset = [] - for range in [{"value": i} for i in range(0, 2)]: + for range in [{"value": i} for i in range(0, count)]: source_dataset.append(gcp.bigquery.Dataset(f"source-{range['value']}", dataset_id=f"job_copy_{range['value']}_dataset", friendly_name="test", description="This is a test description", location="US")) source = [] - def create_source(range_body): - for range in [{"value": i} for i in range(0, range_body)]: - source.append(gcp.bigquery.Table(f"source-{range['value']}", - deletion_protection=False, - dataset_id=source_dataset[range["value"]].dataset_id, - table_id=f"job_copy_{range['value']}_table", - schema=\"\"\"[ + for range in [{"value": i} for i in range(0, count)]: + source.append(gcp.bigquery.Table(f"source-{range['value']}", + deletion_protection=False, + dataset_id=source_dataset[range["value"]].dataset_id, + table_id=f"job_copy_{range['value']}_table", + schema=\"\"\"[ { "name": "name", "type": "STRING", @@ -1095,8 +1093,6 @@ def create_source(range_body): } ] \"\"\")) - - (len(source_dataset)).apply(create_source) dest_dataset = gcp.bigquery.Dataset("dest", dataset_id="job_copy_dest_dataset", friendly_name="test", diff --git a/sdk/python/pulumi_gcp/cloudrunv2/job.py b/sdk/python/pulumi_gcp/cloudrunv2/job.py index 0bb13378ba..53f3eac8b7 100644 --- a/sdk/python/pulumi_gcp/cloudrunv2/job.py +++ b/sdk/python/pulumi_gcp/cloudrunv2/job.py @@ -894,7 +894,7 @@ def __init__(__self__, default = gcp.cloudrunv2.Job("default", name="cloudrun-job", location="us-central1", - launch_stage="BETA", + launch_stage="GA", template=gcp.cloudrunv2.JobTemplateArgs( template=gcp.cloudrunv2.JobTemplateTemplateArgs( containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs( @@ -910,7 +910,6 @@ def __init__(__self__, "tag3", ], )], - egress="ALL_TRAFFIC", ), ), )) @@ -1213,7 +1212,7 @@ def __init__(__self__, default = gcp.cloudrunv2.Job("default", name="cloudrun-job", location="us-central1", - launch_stage="BETA", + launch_stage="GA", template=gcp.cloudrunv2.JobTemplateArgs( template=gcp.cloudrunv2.JobTemplateTemplateArgs( containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs( @@ -1229,7 +1228,6 @@ def __init__(__self__, "tag3", ], )], - egress="ALL_TRAFFIC", ), ), )) diff --git a/sdk/python/pulumi_gcp/cloudrunv2/service.py b/sdk/python/pulumi_gcp/cloudrunv2/service.py index 74f6c88054..817629cb80 100644 --- a/sdk/python/pulumi_gcp/cloudrunv2/service.py +++ b/sdk/python/pulumi_gcp/cloudrunv2/service.py @@ -1111,7 +1111,7 @@ def __init__(__self__, default = gcp.cloudrunv2.Service("default", name="cloudrun-service", location="us-central1", - launch_stage="BETA", + launch_stage="GA", template=gcp.cloudrunv2.ServiceTemplateArgs( containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs( image="us-docker.pkg.dev/cloudrun/container/hello", @@ -1126,7 +1126,6 @@ def __init__(__self__, "tag3", ], )], - egress="ALL_TRAFFIC", ), )) ``` @@ -1565,7 +1564,7 @@ def __init__(__self__, default = gcp.cloudrunv2.Service("default", name="cloudrun-service", location="us-central1", - launch_stage="BETA", + launch_stage="GA", template=gcp.cloudrunv2.ServiceTemplateArgs( containers=[gcp.cloudrunv2.ServiceTemplateContainerArgs( image="us-docker.pkg.dev/cloudrun/container/hello", @@ -1580,7 +1579,6 @@ def __init__(__self__, "tag3", ], )], - egress="ALL_TRAFFIC", ), )) ``` diff --git a/sdk/python/pulumi_gcp/compute/_inputs.py b/sdk/python/pulumi_gcp/compute/_inputs.py index 195fa3ff7f..f80cc4ccbf 100644 --- a/sdk/python/pulumi_gcp/compute/_inputs.py +++ b/sdk/python/pulumi_gcp/compute/_inputs.py @@ -28606,6 +28606,8 @@ def __init__(__self__, *, :param pulumi.Input[int] multiplier: The number of consecutive BFD packets that must be missed before BFD declares that a peer is unavailable. If set, the value must be a value between 5 and 16. + + The `md5_authentication_key` block supports: """ pulumi.set(__self__, "session_initialization_mode", session_initialization_mode) if min_receive_interval is not None: @@ -28671,6 +28673,8 @@ def multiplier(self) -> Optional[pulumi.Input[int]]: The number of consecutive BFD packets that must be missed before BFD declares that a peer is unavailable. If set, the value must be a value between 5 and 16. + + The `md5_authentication_key` block supports: """ return pulumi.get(self, "multiplier") diff --git a/sdk/python/pulumi_gcp/compute/outputs.py b/sdk/python/pulumi_gcp/compute/outputs.py index 8f35a057de..d346c8a89f 100644 --- a/sdk/python/pulumi_gcp/compute/outputs.py +++ b/sdk/python/pulumi_gcp/compute/outputs.py @@ -29022,6 +29022,8 @@ def __init__(__self__, *, :param int multiplier: The number of consecutive BFD packets that must be missed before BFD declares that a peer is unavailable. If set, the value must be a value between 5 and 16. + + The `md5_authentication_key` block supports: """ pulumi.set(__self__, "session_initialization_mode", session_initialization_mode) if min_receive_interval is not None: @@ -29075,6 +29077,8 @@ def multiplier(self) -> Optional[int]: The number of consecutive BFD packets that must be missed before BFD declares that a peer is unavailable. If set, the value must be a value between 5 and 16. + + The `md5_authentication_key` block supports: """ return pulumi.get(self, "multiplier") diff --git a/sdk/python/pulumi_gcp/compute/router_peer.py b/sdk/python/pulumi_gcp/compute/router_peer.py index 7bec698292..8e3a61b697 100644 --- a/sdk/python/pulumi_gcp/compute/router_peer.py +++ b/sdk/python/pulumi_gcp/compute/router_peer.py @@ -77,8 +77,8 @@ def __init__(__self__, *, The address must be in the range 2600:2d00:0:2::/64 or 2600:2d00:0:3::/64. If you do not specify the next hop addresses, Google Cloud automatically assigns unused addresses from the 2600:2d00:0:2::/64 or 2600:2d00:0:3::/64 range for you. - :param pulumi.Input['RouterPeerMd5AuthenticationKeyArgs'] md5_authentication_key: Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - Router.md5_authentication_keys. The field must comply with RFC1035. + :param pulumi.Input['RouterPeerMd5AuthenticationKeyArgs'] md5_authentication_key: Configuration for MD5 authentication on the BGP session. + Structure is documented below. :param pulumi.Input[str] name: Name of this BGP peer. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `a-z?` which @@ -338,8 +338,8 @@ def ipv6_nexthop_address(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="md5AuthenticationKey") def md5_authentication_key(self) -> Optional[pulumi.Input['RouterPeerMd5AuthenticationKeyArgs']]: """ - Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - Router.md5_authentication_keys. The field must comply with RFC1035. + Configuration for MD5 authentication on the BGP session. + Structure is documented below. """ return pulumi.get(self, "md5_authentication_key") @@ -506,8 +506,8 @@ def __init__(__self__, *, If you do not specify the next hop addresses, Google Cloud automatically assigns unused addresses from the 2600:2d00:0:2::/64 or 2600:2d00:0:3::/64 range for you. :param pulumi.Input[str] management_type: The resource that configures and manages this BGP peer. - :param pulumi.Input['RouterPeerMd5AuthenticationKeyArgs'] md5_authentication_key: Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - Router.md5_authentication_keys. The field must comply with RFC1035. + :param pulumi.Input['RouterPeerMd5AuthenticationKeyArgs'] md5_authentication_key: Configuration for MD5 authentication on the BGP session. + Structure is documented below. :param pulumi.Input[str] name: Name of this BGP peer. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `a-z?` which @@ -762,8 +762,8 @@ def management_type(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="md5AuthenticationKey") def md5_authentication_key(self) -> Optional[pulumi.Input['RouterPeerMd5AuthenticationKeyArgs']]: """ - Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - Router.md5_authentication_keys. The field must comply with RFC1035. + Configuration for MD5 authentication on the BGP session. + Structure is documented below. """ return pulumi.get(self, "md5_authentication_key") @@ -1076,6 +1076,26 @@ def __init__(__self__, peer_ip_address=addr_peer.address) ``` + ### Router Peer Md5 Authentication Key + + ```python + import pulumi + import pulumi_gcp as gcp + + foobar = gcp.compute.RouterPeer("foobar", + name="%s-peer", + router=foobar_google_compute_router["name"], + region=foobar_google_compute_router["region"], + peer_asn=65515, + advertised_route_priority=100, + interface=foobar_google_compute_router_interface["name"], + peer_ip_address="169.254.3.2", + md5_authentication_key=gcp.compute.RouterPeerMd5AuthenticationKeyArgs( + name="%s-peer-key", + key="%s-peer-key-value", + )) + ``` + ## Import RouterBgpPeer can be imported using any of these accepted formats: @@ -1139,8 +1159,8 @@ def __init__(__self__, The address must be in the range 2600:2d00:0:2::/64 or 2600:2d00:0:3::/64. If you do not specify the next hop addresses, Google Cloud automatically assigns unused addresses from the 2600:2d00:0:2::/64 or 2600:2d00:0:3::/64 range for you. - :param pulumi.Input[pulumi.InputType['RouterPeerMd5AuthenticationKeyArgs']] md5_authentication_key: Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - Router.md5_authentication_keys. The field must comply with RFC1035. + :param pulumi.Input[pulumi.InputType['RouterPeerMd5AuthenticationKeyArgs']] md5_authentication_key: Configuration for MD5 authentication on the BGP session. + Structure is documented below. :param pulumi.Input[str] name: Name of this BGP peer. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `a-z?` which @@ -1325,6 +1345,26 @@ def __init__(__self__, peer_ip_address=addr_peer.address) ``` + ### Router Peer Md5 Authentication Key + + ```python + import pulumi + import pulumi_gcp as gcp + + foobar = gcp.compute.RouterPeer("foobar", + name="%s-peer", + router=foobar_google_compute_router["name"], + region=foobar_google_compute_router["region"], + peer_asn=65515, + advertised_route_priority=100, + interface=foobar_google_compute_router_interface["name"], + peer_ip_address="169.254.3.2", + md5_authentication_key=gcp.compute.RouterPeerMd5AuthenticationKeyArgs( + name="%s-peer-key", + key="%s-peer-key-value", + )) + ``` + ## Import RouterBgpPeer can be imported using any of these accepted formats: @@ -1502,8 +1542,8 @@ def get(resource_name: str, If you do not specify the next hop addresses, Google Cloud automatically assigns unused addresses from the 2600:2d00:0:2::/64 or 2600:2d00:0:3::/64 range for you. :param pulumi.Input[str] management_type: The resource that configures and manages this BGP peer. - :param pulumi.Input[pulumi.InputType['RouterPeerMd5AuthenticationKeyArgs']] md5_authentication_key: Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - Router.md5_authentication_keys. The field must comply with RFC1035. + :param pulumi.Input[pulumi.InputType['RouterPeerMd5AuthenticationKeyArgs']] md5_authentication_key: Configuration for MD5 authentication on the BGP session. + Structure is documented below. :param pulumi.Input[str] name: Name of this BGP peer. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `a-z?` which @@ -1688,8 +1728,8 @@ def management_type(self) -> pulumi.Output[str]: @pulumi.getter(name="md5AuthenticationKey") def md5_authentication_key(self) -> pulumi.Output[Optional['outputs.RouterPeerMd5AuthenticationKey']]: """ - Present if MD5 authentication is enabled for the peering. Must be the name of one of the entries in the - Router.md5_authentication_keys. The field must comply with RFC1035. + Configuration for MD5 authentication on the BGP session. + Structure is documented below. """ return pulumi.get(self, "md5_authentication_key") diff --git a/sdk/python/pulumi_gcp/config/__init__.pyi b/sdk/python/pulumi_gcp/config/__init__.pyi index 651b9c2bfa..ce17aed90e 100644 --- a/sdk/python/pulumi_gcp/config/__init__.pyi +++ b/sdk/python/pulumi_gcp/config/__init__.pyi @@ -260,6 +260,8 @@ parallelstoreCustomEndpoint: Optional[str] privatecaCustomEndpoint: Optional[str] +privilegedAccessManagerCustomEndpoint: Optional[str] + project: Optional[str] publicCaCustomEndpoint: Optional[str] diff --git a/sdk/python/pulumi_gcp/config/vars.py b/sdk/python/pulumi_gcp/config/vars.py index 0bb3366b66..44a9eb7a46 100644 --- a/sdk/python/pulumi_gcp/config/vars.py +++ b/sdk/python/pulumi_gcp/config/vars.py @@ -516,6 +516,10 @@ def parallelstore_custom_endpoint(self) -> Optional[str]: def privateca_custom_endpoint(self) -> Optional[str]: return __config__.get('privatecaCustomEndpoint') + @property + def privileged_access_manager_custom_endpoint(self) -> Optional[str]: + return __config__.get('privilegedAccessManagerCustomEndpoint') + @property def project(self) -> Optional[str]: return __config__.get('project') or _utilities.get_env('GOOGLE_PROJECT', 'GOOGLE_CLOUD_PROJECT', 'GCLOUD_PROJECT', 'CLOUDSDK_CORE_PROJECT') diff --git a/sdk/python/pulumi_gcp/container/_inputs.py b/sdk/python/pulumi_gcp/container/_inputs.py index 5927cf8c2f..5e235d9ca1 100644 --- a/sdk/python/pulumi_gcp/container/_inputs.py +++ b/sdk/python/pulumi_gcp/container/_inputs.py @@ -148,6 +148,7 @@ 'ClusterNodeConfigLocalNvmeSsdBlockConfigArgs', 'ClusterNodeConfigReservationAffinityArgs', 'ClusterNodeConfigSandboxConfigArgs', + 'ClusterNodeConfigSecondaryBootDiskArgs', 'ClusterNodeConfigShieldedInstanceConfigArgs', 'ClusterNodeConfigSoleTenantConfigArgs', 'ClusterNodeConfigSoleTenantConfigNodeAffinityArgs', @@ -184,6 +185,7 @@ 'ClusterNodePoolNodeConfigLocalNvmeSsdBlockConfigArgs', 'ClusterNodePoolNodeConfigReservationAffinityArgs', 'ClusterNodePoolNodeConfigSandboxConfigArgs', + 'ClusterNodePoolNodeConfigSecondaryBootDiskArgs', 'ClusterNodePoolNodeConfigShieldedInstanceConfigArgs', 'ClusterNodePoolNodeConfigSoleTenantConfigArgs', 'ClusterNodePoolNodeConfigSoleTenantConfigNodeAffinityArgs', @@ -236,6 +238,7 @@ 'NodePoolNodeConfigLocalNvmeSsdBlockConfigArgs', 'NodePoolNodeConfigReservationAffinityArgs', 'NodePoolNodeConfigSandboxConfigArgs', + 'NodePoolNodeConfigSecondaryBootDiskArgs', 'NodePoolNodeConfigShieldedInstanceConfigArgs', 'NodePoolNodeConfigSoleTenantConfigArgs', 'NodePoolNodeConfigSoleTenantConfigNodeAffinityArgs', @@ -5726,6 +5729,7 @@ def __init__(__self__, *, resource_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, resource_manager_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None, sandbox_config: Optional[pulumi.Input['ClusterNodeConfigSandboxConfigArgs']] = None, + secondary_boot_disks: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodeConfigSecondaryBootDiskArgs']]]] = None, service_account: Optional[pulumi.Input[str]] = None, shielded_instance_config: Optional[pulumi.Input['ClusterNodeConfigShieldedInstanceConfigArgs']] = None, sole_tenant_config: Optional[pulumi.Input['ClusterNodeConfigSoleTenantConfigArgs']] = None, @@ -5811,6 +5815,7 @@ def __init__(__self__, *, for how these labels are applied to clusters, node pools and nodes. :param pulumi.Input[Mapping[str, Any]] resource_manager_tags: A map of resource manager tag keys and values to be attached to the nodes for managing Compute Engine firewalls using Network Firewall Policies. Tags must be according to specifications found [here](https://cloud.google.com/vpc/docs/tags-firewalls-overview#specifications). A maximum of 5 tag key-value pairs can be specified. Existing tags will be replaced with new values. Tags must be in one of the following formats ([KEY]=[VALUE]) 1. `tagKeys/{tag_key_id}=tagValues/{tag_value_id}` 2. `{org_id}/{tag_key_name}={tag_value_name}` 3. `{project_id}/{tag_key_name}={tag_value_name}`. :param pulumi.Input['ClusterNodeConfigSandboxConfigArgs'] sandbox_config: Sandbox configuration for this node. + :param pulumi.Input[Sequence[pulumi.Input['ClusterNodeConfigSecondaryBootDiskArgs']]] secondary_boot_disks: Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. :param pulumi.Input[str] service_account: The service account to be used by the Node VMs. If not specified, the "default" service account is used. :param pulumi.Input['ClusterNodeConfigShieldedInstanceConfigArgs'] shielded_instance_config: Shielded Instance options. Structure is documented below. @@ -5893,6 +5898,8 @@ def __init__(__self__, *, pulumi.set(__self__, "resource_manager_tags", resource_manager_tags) if sandbox_config is not None: pulumi.set(__self__, "sandbox_config", sandbox_config) + if secondary_boot_disks is not None: + pulumi.set(__self__, "secondary_boot_disks", secondary_boot_disks) if service_account is not None: pulumi.set(__self__, "service_account", service_account) if shielded_instance_config is not None: @@ -6326,6 +6333,18 @@ def sandbox_config(self) -> Optional[pulumi.Input['ClusterNodeConfigSandboxConfi def sandbox_config(self, value: Optional[pulumi.Input['ClusterNodeConfigSandboxConfigArgs']]): pulumi.set(self, "sandbox_config", value) + @property + @pulumi.getter(name="secondaryBootDisks") + def secondary_boot_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodeConfigSecondaryBootDiskArgs']]]]: + """ + Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + """ + return pulumi.get(self, "secondary_boot_disks") + + @secondary_boot_disks.setter + def secondary_boot_disks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodeConfigSecondaryBootDiskArgs']]]]): + pulumi.set(self, "secondary_boot_disks", value) + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> Optional[pulumi.Input[str]]: @@ -6738,6 +6757,7 @@ def __init__(__self__, *, :param pulumi.Input[str] gpu_sharing_strategy: The type of GPU sharing strategy to enable on the GPU node. Accepted values are: * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) :param pulumi.Input[int] max_shared_clients_per_gpu: The maximum number of containers that can share a GPU. """ pulumi.set(__self__, "gpu_sharing_strategy", gpu_sharing_strategy) @@ -6750,6 +6770,7 @@ def gpu_sharing_strategy(self) -> pulumi.Input[str]: The type of GPU sharing strategy to enable on the GPU node. Accepted values are: * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) """ return pulumi.get(self, "gpu_sharing_strategy") @@ -7071,6 +7092,44 @@ def sandbox_type(self, value: pulumi.Input[str]): pulumi.set(self, "sandbox_type", value) +@pulumi.input_type +class ClusterNodeConfigSecondaryBootDiskArgs: + def __init__(__self__, *, + disk_image: pulumi.Input[str], + mode: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] disk_image: Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + :param pulumi.Input[str] mode: Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + """ + pulumi.set(__self__, "disk_image", disk_image) + if mode is not None: + pulumi.set(__self__, "mode", mode) + + @property + @pulumi.getter(name="diskImage") + def disk_image(self) -> pulumi.Input[str]: + """ + Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + """ + return pulumi.get(self, "disk_image") + + @disk_image.setter + def disk_image(self, value: pulumi.Input[str]): + pulumi.set(self, "disk_image", value) + + @property + @pulumi.getter + def mode(self) -> Optional[pulumi.Input[str]]: + """ + Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + """ + return pulumi.get(self, "mode") + + @mode.setter + def mode(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mode", value) + + @pulumi.input_type class ClusterNodeConfigShieldedInstanceConfigArgs: def __init__(__self__, *, @@ -8174,6 +8233,7 @@ def __init__(__self__, *, resource_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, resource_manager_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None, sandbox_config: Optional[pulumi.Input['ClusterNodePoolNodeConfigSandboxConfigArgs']] = None, + secondary_boot_disks: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodePoolNodeConfigSecondaryBootDiskArgs']]]] = None, service_account: Optional[pulumi.Input[str]] = None, shielded_instance_config: Optional[pulumi.Input['ClusterNodePoolNodeConfigShieldedInstanceConfigArgs']] = None, sole_tenant_config: Optional[pulumi.Input['ClusterNodePoolNodeConfigSoleTenantConfigArgs']] = None, @@ -8259,6 +8319,7 @@ def __init__(__self__, *, for how these labels are applied to clusters, node pools and nodes. :param pulumi.Input[Mapping[str, Any]] resource_manager_tags: A map of resource manager tag keys and values to be attached to the nodes for managing Compute Engine firewalls using Network Firewall Policies. Tags must be according to specifications found [here](https://cloud.google.com/vpc/docs/tags-firewalls-overview#specifications). A maximum of 5 tag key-value pairs can be specified. Existing tags will be replaced with new values. Tags must be in one of the following formats ([KEY]=[VALUE]) 1. `tagKeys/{tag_key_id}=tagValues/{tag_value_id}` 2. `{org_id}/{tag_key_name}={tag_value_name}` 3. `{project_id}/{tag_key_name}={tag_value_name}`. :param pulumi.Input['ClusterNodePoolNodeConfigSandboxConfigArgs'] sandbox_config: Sandbox configuration for this node. + :param pulumi.Input[Sequence[pulumi.Input['ClusterNodePoolNodeConfigSecondaryBootDiskArgs']]] secondary_boot_disks: Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. :param pulumi.Input[str] service_account: The service account to be used by the Node VMs. If not specified, the "default" service account is used. :param pulumi.Input['ClusterNodePoolNodeConfigShieldedInstanceConfigArgs'] shielded_instance_config: Shielded Instance options. Structure is documented below. @@ -8341,6 +8402,8 @@ def __init__(__self__, *, pulumi.set(__self__, "resource_manager_tags", resource_manager_tags) if sandbox_config is not None: pulumi.set(__self__, "sandbox_config", sandbox_config) + if secondary_boot_disks is not None: + pulumi.set(__self__, "secondary_boot_disks", secondary_boot_disks) if service_account is not None: pulumi.set(__self__, "service_account", service_account) if shielded_instance_config is not None: @@ -8774,6 +8837,18 @@ def sandbox_config(self) -> Optional[pulumi.Input['ClusterNodePoolNodeConfigSand def sandbox_config(self, value: Optional[pulumi.Input['ClusterNodePoolNodeConfigSandboxConfigArgs']]): pulumi.set(self, "sandbox_config", value) + @property + @pulumi.getter(name="secondaryBootDisks") + def secondary_boot_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodePoolNodeConfigSecondaryBootDiskArgs']]]]: + """ + Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + """ + return pulumi.get(self, "secondary_boot_disks") + + @secondary_boot_disks.setter + def secondary_boot_disks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodePoolNodeConfigSecondaryBootDiskArgs']]]]): + pulumi.set(self, "secondary_boot_disks", value) + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> Optional[pulumi.Input[str]]: @@ -9186,6 +9261,7 @@ def __init__(__self__, *, :param pulumi.Input[str] gpu_sharing_strategy: The type of GPU sharing strategy to enable on the GPU node. Accepted values are: * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) :param pulumi.Input[int] max_shared_clients_per_gpu: The maximum number of containers that can share a GPU. """ pulumi.set(__self__, "gpu_sharing_strategy", gpu_sharing_strategy) @@ -9198,6 +9274,7 @@ def gpu_sharing_strategy(self) -> pulumi.Input[str]: The type of GPU sharing strategy to enable on the GPU node. Accepted values are: * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) """ return pulumi.get(self, "gpu_sharing_strategy") @@ -9519,6 +9596,44 @@ def sandbox_type(self, value: pulumi.Input[str]): pulumi.set(self, "sandbox_type", value) +@pulumi.input_type +class ClusterNodePoolNodeConfigSecondaryBootDiskArgs: + def __init__(__self__, *, + disk_image: pulumi.Input[str], + mode: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] disk_image: Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + :param pulumi.Input[str] mode: Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + """ + pulumi.set(__self__, "disk_image", disk_image) + if mode is not None: + pulumi.set(__self__, "mode", mode) + + @property + @pulumi.getter(name="diskImage") + def disk_image(self) -> pulumi.Input[str]: + """ + Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + """ + return pulumi.get(self, "disk_image") + + @disk_image.setter + def disk_image(self, value: pulumi.Input[str]): + pulumi.set(self, "disk_image", value) + + @property + @pulumi.getter + def mode(self) -> Optional[pulumi.Input[str]]: + """ + Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + """ + return pulumi.get(self, "mode") + + @mode.setter + def mode(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mode", value) + + @pulumi.input_type class ClusterNodePoolNodeConfigShieldedInstanceConfigArgs: def __init__(__self__, *, @@ -11097,6 +11212,7 @@ def __init__(__self__, *, resource_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, resource_manager_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None, sandbox_config: Optional[pulumi.Input['NodePoolNodeConfigSandboxConfigArgs']] = None, + secondary_boot_disks: Optional[pulumi.Input[Sequence[pulumi.Input['NodePoolNodeConfigSecondaryBootDiskArgs']]]] = None, service_account: Optional[pulumi.Input[str]] = None, shielded_instance_config: Optional[pulumi.Input['NodePoolNodeConfigShieldedInstanceConfigArgs']] = None, sole_tenant_config: Optional[pulumi.Input['NodePoolNodeConfigSoleTenantConfigArgs']] = None, @@ -11136,6 +11252,7 @@ def __init__(__self__, *, :param pulumi.Input[Mapping[str, pulumi.Input[str]]] resource_labels: The GCE resource labels (a map of key/value pairs) to be applied to the node pool. :param pulumi.Input[Mapping[str, Any]] resource_manager_tags: A map of resource manager tags. Resource manager tag keys and values have the same definition as resource manager tags. Keys must be in the format tagKeys/{tag_key_id}, and values are in the format tagValues/456. The field is ignored (both PUT & PATCH) when empty. :param pulumi.Input['NodePoolNodeConfigSandboxConfigArgs'] sandbox_config: Sandbox configuration for this node. + :param pulumi.Input[Sequence[pulumi.Input['NodePoolNodeConfigSecondaryBootDiskArgs']]] secondary_boot_disks: Secondary boot disks for preloading data or container images. :param pulumi.Input[str] service_account: The Google Cloud Platform Service Account to be used by the node VMs. :param pulumi.Input['NodePoolNodeConfigShieldedInstanceConfigArgs'] shielded_instance_config: Shielded Instance options. :param pulumi.Input['NodePoolNodeConfigSoleTenantConfigArgs'] sole_tenant_config: Node affinity options for sole tenant node pools. @@ -11206,6 +11323,8 @@ def __init__(__self__, *, pulumi.set(__self__, "resource_manager_tags", resource_manager_tags) if sandbox_config is not None: pulumi.set(__self__, "sandbox_config", sandbox_config) + if secondary_boot_disks is not None: + pulumi.set(__self__, "secondary_boot_disks", secondary_boot_disks) if service_account is not None: pulumi.set(__self__, "service_account", service_account) if shielded_instance_config is not None: @@ -11593,6 +11712,18 @@ def sandbox_config(self) -> Optional[pulumi.Input['NodePoolNodeConfigSandboxConf def sandbox_config(self, value: Optional[pulumi.Input['NodePoolNodeConfigSandboxConfigArgs']]): pulumi.set(self, "sandbox_config", value) + @property + @pulumi.getter(name="secondaryBootDisks") + def secondary_boot_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['NodePoolNodeConfigSecondaryBootDiskArgs']]]]: + """ + Secondary boot disks for preloading data or container images. + """ + return pulumi.get(self, "secondary_boot_disks") + + @secondary_boot_disks.setter + def secondary_boot_disks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['NodePoolNodeConfigSecondaryBootDiskArgs']]]]): + pulumi.set(self, "secondary_boot_disks", value) + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> Optional[pulumi.Input[str]]: @@ -12262,6 +12393,44 @@ def sandbox_type(self, value: pulumi.Input[str]): pulumi.set(self, "sandbox_type", value) +@pulumi.input_type +class NodePoolNodeConfigSecondaryBootDiskArgs: + def __init__(__self__, *, + disk_image: pulumi.Input[str], + mode: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] disk_image: Disk image to create the secondary boot disk from + :param pulumi.Input[str] mode: Mode for how the secondary boot disk is used. + """ + pulumi.set(__self__, "disk_image", disk_image) + if mode is not None: + pulumi.set(__self__, "mode", mode) + + @property + @pulumi.getter(name="diskImage") + def disk_image(self) -> pulumi.Input[str]: + """ + Disk image to create the secondary boot disk from + """ + return pulumi.get(self, "disk_image") + + @disk_image.setter + def disk_image(self, value: pulumi.Input[str]): + pulumi.set(self, "disk_image", value) + + @property + @pulumi.getter + def mode(self) -> Optional[pulumi.Input[str]]: + """ + Mode for how the secondary boot disk is used. + """ + return pulumi.get(self, "mode") + + @mode.setter + def mode(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mode", value) + + @pulumi.input_type class NodePoolNodeConfigShieldedInstanceConfigArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/container/outputs.py b/sdk/python/pulumi_gcp/container/outputs.py index 8f88ef6c2e..fad556e70b 100644 --- a/sdk/python/pulumi_gcp/container/outputs.py +++ b/sdk/python/pulumi_gcp/container/outputs.py @@ -149,6 +149,7 @@ 'ClusterNodeConfigLocalNvmeSsdBlockConfig', 'ClusterNodeConfigReservationAffinity', 'ClusterNodeConfigSandboxConfig', + 'ClusterNodeConfigSecondaryBootDisk', 'ClusterNodeConfigShieldedInstanceConfig', 'ClusterNodeConfigSoleTenantConfig', 'ClusterNodeConfigSoleTenantConfigNodeAffinity', @@ -185,6 +186,7 @@ 'ClusterNodePoolNodeConfigLocalNvmeSsdBlockConfig', 'ClusterNodePoolNodeConfigReservationAffinity', 'ClusterNodePoolNodeConfigSandboxConfig', + 'ClusterNodePoolNodeConfigSecondaryBootDisk', 'ClusterNodePoolNodeConfigShieldedInstanceConfig', 'ClusterNodePoolNodeConfigSoleTenantConfig', 'ClusterNodePoolNodeConfigSoleTenantConfigNodeAffinity', @@ -237,6 +239,7 @@ 'NodePoolNodeConfigLocalNvmeSsdBlockConfig', 'NodePoolNodeConfigReservationAffinity', 'NodePoolNodeConfigSandboxConfig', + 'NodePoolNodeConfigSecondaryBootDisk', 'NodePoolNodeConfigShieldedInstanceConfig', 'NodePoolNodeConfigSoleTenantConfig', 'NodePoolNodeConfigSoleTenantConfigNodeAffinity', @@ -318,6 +321,7 @@ 'GetClusterNodeConfigLocalNvmeSsdBlockConfigResult', 'GetClusterNodeConfigReservationAffinityResult', 'GetClusterNodeConfigSandboxConfigResult', + 'GetClusterNodeConfigSecondaryBootDiskResult', 'GetClusterNodeConfigShieldedInstanceConfigResult', 'GetClusterNodeConfigSoleTenantConfigResult', 'GetClusterNodeConfigSoleTenantConfigNodeAffinityResult', @@ -354,6 +358,7 @@ 'GetClusterNodePoolNodeConfigLocalNvmeSsdBlockConfigResult', 'GetClusterNodePoolNodeConfigReservationAffinityResult', 'GetClusterNodePoolNodeConfigSandboxConfigResult', + 'GetClusterNodePoolNodeConfigSecondaryBootDiskResult', 'GetClusterNodePoolNodeConfigShieldedInstanceConfigResult', 'GetClusterNodePoolNodeConfigSoleTenantConfigResult', 'GetClusterNodePoolNodeConfigSoleTenantConfigNodeAffinityResult', @@ -6442,6 +6447,8 @@ def __key_warning(key: str): suggest = "resource_manager_tags" elif key == "sandboxConfig": suggest = "sandbox_config" + elif key == "secondaryBootDisks": + suggest = "secondary_boot_disks" elif key == "serviceAccount": suggest = "service_account" elif key == "shieldedInstanceConfig": @@ -6494,6 +6501,7 @@ def __init__(__self__, *, resource_labels: Optional[Mapping[str, str]] = None, resource_manager_tags: Optional[Mapping[str, Any]] = None, sandbox_config: Optional['outputs.ClusterNodeConfigSandboxConfig'] = None, + secondary_boot_disks: Optional[Sequence['outputs.ClusterNodeConfigSecondaryBootDisk']] = None, service_account: Optional[str] = None, shielded_instance_config: Optional['outputs.ClusterNodeConfigShieldedInstanceConfig'] = None, sole_tenant_config: Optional['outputs.ClusterNodeConfigSoleTenantConfig'] = None, @@ -6579,6 +6587,7 @@ def __init__(__self__, *, for how these labels are applied to clusters, node pools and nodes. :param Mapping[str, Any] resource_manager_tags: A map of resource manager tag keys and values to be attached to the nodes for managing Compute Engine firewalls using Network Firewall Policies. Tags must be according to specifications found [here](https://cloud.google.com/vpc/docs/tags-firewalls-overview#specifications). A maximum of 5 tag key-value pairs can be specified. Existing tags will be replaced with new values. Tags must be in one of the following formats ([KEY]=[VALUE]) 1. `tagKeys/{tag_key_id}=tagValues/{tag_value_id}` 2. `{org_id}/{tag_key_name}={tag_value_name}` 3. `{project_id}/{tag_key_name}={tag_value_name}`. :param 'ClusterNodeConfigSandboxConfigArgs' sandbox_config: Sandbox configuration for this node. + :param Sequence['ClusterNodeConfigSecondaryBootDiskArgs'] secondary_boot_disks: Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. :param str service_account: The service account to be used by the Node VMs. If not specified, the "default" service account is used. :param 'ClusterNodeConfigShieldedInstanceConfigArgs' shielded_instance_config: Shielded Instance options. Structure is documented below. @@ -6661,6 +6670,8 @@ def __init__(__self__, *, pulumi.set(__self__, "resource_manager_tags", resource_manager_tags) if sandbox_config is not None: pulumi.set(__self__, "sandbox_config", sandbox_config) + if secondary_boot_disks is not None: + pulumi.set(__self__, "secondary_boot_disks", secondary_boot_disks) if service_account is not None: pulumi.set(__self__, "service_account", service_account) if shielded_instance_config is not None: @@ -6970,6 +6981,14 @@ def sandbox_config(self) -> Optional['outputs.ClusterNodeConfigSandboxConfig']: """ return pulumi.get(self, "sandbox_config") + @property + @pulumi.getter(name="secondaryBootDisks") + def secondary_boot_disks(self) -> Optional[Sequence['outputs.ClusterNodeConfigSecondaryBootDisk']]: + """ + Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + """ + return pulumi.get(self, "secondary_boot_disks") + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> Optional[str]: @@ -7402,6 +7421,7 @@ def __init__(__self__, *, :param str gpu_sharing_strategy: The type of GPU sharing strategy to enable on the GPU node. Accepted values are: * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) :param int max_shared_clients_per_gpu: The maximum number of containers that can share a GPU. """ pulumi.set(__self__, "gpu_sharing_strategy", gpu_sharing_strategy) @@ -7414,6 +7434,7 @@ def gpu_sharing_strategy(self) -> str: The type of GPU sharing strategy to enable on the GPU node. Accepted values are: * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) """ return pulumi.get(self, "gpu_sharing_strategy") @@ -7783,6 +7804,53 @@ def sandbox_type(self) -> str: return pulumi.get(self, "sandbox_type") +@pulumi.output_type +class ClusterNodeConfigSecondaryBootDisk(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "diskImage": + suggest = "disk_image" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClusterNodeConfigSecondaryBootDisk. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClusterNodeConfigSecondaryBootDisk.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClusterNodeConfigSecondaryBootDisk.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + disk_image: str, + mode: Optional[str] = None): + """ + :param str disk_image: Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + :param str mode: Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + """ + pulumi.set(__self__, "disk_image", disk_image) + if mode is not None: + pulumi.set(__self__, "mode", mode) + + @property + @pulumi.getter(name="diskImage") + def disk_image(self) -> str: + """ + Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + """ + return pulumi.get(self, "disk_image") + + @property + @pulumi.getter + def mode(self) -> Optional[str]: + """ + Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + """ + return pulumi.get(self, "mode") + + @pulumi.output_type class ClusterNodeConfigShieldedInstanceConfig(dict): @staticmethod @@ -8932,6 +9000,8 @@ def __key_warning(key: str): suggest = "resource_manager_tags" elif key == "sandboxConfig": suggest = "sandbox_config" + elif key == "secondaryBootDisks": + suggest = "secondary_boot_disks" elif key == "serviceAccount": suggest = "service_account" elif key == "shieldedInstanceConfig": @@ -8984,6 +9054,7 @@ def __init__(__self__, *, resource_labels: Optional[Mapping[str, str]] = None, resource_manager_tags: Optional[Mapping[str, Any]] = None, sandbox_config: Optional['outputs.ClusterNodePoolNodeConfigSandboxConfig'] = None, + secondary_boot_disks: Optional[Sequence['outputs.ClusterNodePoolNodeConfigSecondaryBootDisk']] = None, service_account: Optional[str] = None, shielded_instance_config: Optional['outputs.ClusterNodePoolNodeConfigShieldedInstanceConfig'] = None, sole_tenant_config: Optional['outputs.ClusterNodePoolNodeConfigSoleTenantConfig'] = None, @@ -9069,6 +9140,7 @@ def __init__(__self__, *, for how these labels are applied to clusters, node pools and nodes. :param Mapping[str, Any] resource_manager_tags: A map of resource manager tag keys and values to be attached to the nodes for managing Compute Engine firewalls using Network Firewall Policies. Tags must be according to specifications found [here](https://cloud.google.com/vpc/docs/tags-firewalls-overview#specifications). A maximum of 5 tag key-value pairs can be specified. Existing tags will be replaced with new values. Tags must be in one of the following formats ([KEY]=[VALUE]) 1. `tagKeys/{tag_key_id}=tagValues/{tag_value_id}` 2. `{org_id}/{tag_key_name}={tag_value_name}` 3. `{project_id}/{tag_key_name}={tag_value_name}`. :param 'ClusterNodePoolNodeConfigSandboxConfigArgs' sandbox_config: Sandbox configuration for this node. + :param Sequence['ClusterNodePoolNodeConfigSecondaryBootDiskArgs'] secondary_boot_disks: Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. :param str service_account: The service account to be used by the Node VMs. If not specified, the "default" service account is used. :param 'ClusterNodePoolNodeConfigShieldedInstanceConfigArgs' shielded_instance_config: Shielded Instance options. Structure is documented below. @@ -9151,6 +9223,8 @@ def __init__(__self__, *, pulumi.set(__self__, "resource_manager_tags", resource_manager_tags) if sandbox_config is not None: pulumi.set(__self__, "sandbox_config", sandbox_config) + if secondary_boot_disks is not None: + pulumi.set(__self__, "secondary_boot_disks", secondary_boot_disks) if service_account is not None: pulumi.set(__self__, "service_account", service_account) if shielded_instance_config is not None: @@ -9460,6 +9534,14 @@ def sandbox_config(self) -> Optional['outputs.ClusterNodePoolNodeConfigSandboxCo """ return pulumi.get(self, "sandbox_config") + @property + @pulumi.getter(name="secondaryBootDisks") + def secondary_boot_disks(self) -> Optional[Sequence['outputs.ClusterNodePoolNodeConfigSecondaryBootDisk']]: + """ + Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions. + """ + return pulumi.get(self, "secondary_boot_disks") + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> Optional[str]: @@ -9892,6 +9974,7 @@ def __init__(__self__, *, :param str gpu_sharing_strategy: The type of GPU sharing strategy to enable on the GPU node. Accepted values are: * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) :param int max_shared_clients_per_gpu: The maximum number of containers that can share a GPU. """ pulumi.set(__self__, "gpu_sharing_strategy", gpu_sharing_strategy) @@ -9904,6 +9987,7 @@ def gpu_sharing_strategy(self) -> str: The type of GPU sharing strategy to enable on the GPU node. Accepted values are: * `"TIME_SHARING"`: Allow multiple containers to have [time-shared](https://cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus) access to a single GPU device. + * `"MPS"`: Enable co-operative multi-process CUDA workloads to run concurrently on a single GPU device with [MPS](https://cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus) """ return pulumi.get(self, "gpu_sharing_strategy") @@ -10273,6 +10357,53 @@ def sandbox_type(self) -> str: return pulumi.get(self, "sandbox_type") +@pulumi.output_type +class ClusterNodePoolNodeConfigSecondaryBootDisk(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "diskImage": + suggest = "disk_image" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClusterNodePoolNodeConfigSecondaryBootDisk. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClusterNodePoolNodeConfigSecondaryBootDisk.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClusterNodePoolNodeConfigSecondaryBootDisk.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + disk_image: str, + mode: Optional[str] = None): + """ + :param str disk_image: Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + :param str mode: Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + """ + pulumi.set(__self__, "disk_image", disk_image) + if mode is not None: + pulumi.set(__self__, "mode", mode) + + @property + @pulumi.getter(name="diskImage") + def disk_image(self) -> str: + """ + Path to disk image to create the secondary boot disk from. After using the [gke-disk-image-builder](https://github.com/GoogleCloudPlatform/ai-on-gke/tree/main/tools/gke-disk-image-builder), this argument should be `global/images/DISK_IMAGE_NAME`. + """ + return pulumi.get(self, "disk_image") + + @property + @pulumi.getter + def mode(self) -> Optional[str]: + """ + Mode for how the secondary boot disk is used. An example mode is `CONTAINER_IMAGE_CACHE`. + """ + return pulumi.get(self, "mode") + + @pulumi.output_type class ClusterNodePoolNodeConfigShieldedInstanceConfig(dict): @staticmethod @@ -11987,6 +12118,8 @@ def __key_warning(key: str): suggest = "resource_manager_tags" elif key == "sandboxConfig": suggest = "sandbox_config" + elif key == "secondaryBootDisks": + suggest = "secondary_boot_disks" elif key == "serviceAccount": suggest = "service_account" elif key == "shieldedInstanceConfig": @@ -12039,6 +12172,7 @@ def __init__(__self__, *, resource_labels: Optional[Mapping[str, str]] = None, resource_manager_tags: Optional[Mapping[str, Any]] = None, sandbox_config: Optional['outputs.NodePoolNodeConfigSandboxConfig'] = None, + secondary_boot_disks: Optional[Sequence['outputs.NodePoolNodeConfigSecondaryBootDisk']] = None, service_account: Optional[str] = None, shielded_instance_config: Optional['outputs.NodePoolNodeConfigShieldedInstanceConfig'] = None, sole_tenant_config: Optional['outputs.NodePoolNodeConfigSoleTenantConfig'] = None, @@ -12078,6 +12212,7 @@ def __init__(__self__, *, :param Mapping[str, str] resource_labels: The GCE resource labels (a map of key/value pairs) to be applied to the node pool. :param Mapping[str, Any] resource_manager_tags: A map of resource manager tags. Resource manager tag keys and values have the same definition as resource manager tags. Keys must be in the format tagKeys/{tag_key_id}, and values are in the format tagValues/456. The field is ignored (both PUT & PATCH) when empty. :param 'NodePoolNodeConfigSandboxConfigArgs' sandbox_config: Sandbox configuration for this node. + :param Sequence['NodePoolNodeConfigSecondaryBootDiskArgs'] secondary_boot_disks: Secondary boot disks for preloading data or container images. :param str service_account: The Google Cloud Platform Service Account to be used by the node VMs. :param 'NodePoolNodeConfigShieldedInstanceConfigArgs' shielded_instance_config: Shielded Instance options. :param 'NodePoolNodeConfigSoleTenantConfigArgs' sole_tenant_config: Node affinity options for sole tenant node pools. @@ -12148,6 +12283,8 @@ def __init__(__self__, *, pulumi.set(__self__, "resource_manager_tags", resource_manager_tags) if sandbox_config is not None: pulumi.set(__self__, "sandbox_config", sandbox_config) + if secondary_boot_disks is not None: + pulumi.set(__self__, "secondary_boot_disks", secondary_boot_disks) if service_account is not None: pulumi.set(__self__, "service_account", service_account) if shielded_instance_config is not None: @@ -12411,6 +12548,14 @@ def sandbox_config(self) -> Optional['outputs.NodePoolNodeConfigSandboxConfig']: """ return pulumi.get(self, "sandbox_config") + @property + @pulumi.getter(name="secondaryBootDisks") + def secondary_boot_disks(self) -> Optional[Sequence['outputs.NodePoolNodeConfigSecondaryBootDisk']]: + """ + Secondary boot disks for preloading data or container images. + """ + return pulumi.get(self, "secondary_boot_disks") + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> Optional[str]: @@ -13148,6 +13293,53 @@ def sandbox_type(self) -> str: return pulumi.get(self, "sandbox_type") +@pulumi.output_type +class NodePoolNodeConfigSecondaryBootDisk(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "diskImage": + suggest = "disk_image" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in NodePoolNodeConfigSecondaryBootDisk. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + NodePoolNodeConfigSecondaryBootDisk.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + NodePoolNodeConfigSecondaryBootDisk.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + disk_image: str, + mode: Optional[str] = None): + """ + :param str disk_image: Disk image to create the secondary boot disk from + :param str mode: Mode for how the secondary boot disk is used. + """ + pulumi.set(__self__, "disk_image", disk_image) + if mode is not None: + pulumi.set(__self__, "mode", mode) + + @property + @pulumi.getter(name="diskImage") + def disk_image(self) -> str: + """ + Disk image to create the secondary boot disk from + """ + return pulumi.get(self, "disk_image") + + @property + @pulumi.getter + def mode(self) -> Optional[str]: + """ + Mode for how the secondary boot disk is used. + """ + return pulumi.get(self, "mode") + + @pulumi.output_type class NodePoolNodeConfigShieldedInstanceConfig(dict): @staticmethod @@ -15273,6 +15465,7 @@ def __init__(__self__, *, resource_labels: Mapping[str, str], resource_manager_tags: Mapping[str, Any], sandbox_configs: Sequence['outputs.GetClusterNodeConfigSandboxConfigResult'], + secondary_boot_disks: Sequence['outputs.GetClusterNodeConfigSecondaryBootDiskResult'], service_account: str, shielded_instance_configs: Sequence['outputs.GetClusterNodeConfigShieldedInstanceConfigResult'], sole_tenant_configs: Sequence['outputs.GetClusterNodeConfigSoleTenantConfigResult'], @@ -15312,6 +15505,7 @@ def __init__(__self__, *, :param Mapping[str, str] resource_labels: The GCE resource labels (a map of key/value pairs) to be applied to the node pool. :param Mapping[str, Any] resource_manager_tags: A map of resource manager tags. Resource manager tag keys and values have the same definition as resource manager tags. Keys must be in the format tagKeys/{tag_key_id}, and values are in the format tagValues/456. The field is ignored (both PUT & PATCH) when empty. :param Sequence['GetClusterNodeConfigSandboxConfigArgs'] sandbox_configs: Sandbox configuration for this node. + :param Sequence['GetClusterNodeConfigSecondaryBootDiskArgs'] secondary_boot_disks: Secondary boot disks for preloading data or container images. :param str service_account: The Google Cloud Platform Service Account to be used by the node VMs. :param Sequence['GetClusterNodeConfigShieldedInstanceConfigArgs'] shielded_instance_configs: Shielded Instance options. :param Sequence['GetClusterNodeConfigSoleTenantConfigArgs'] sole_tenant_configs: Node affinity options for sole tenant node pools. @@ -15351,6 +15545,7 @@ def __init__(__self__, *, pulumi.set(__self__, "resource_labels", resource_labels) pulumi.set(__self__, "resource_manager_tags", resource_manager_tags) pulumi.set(__self__, "sandbox_configs", sandbox_configs) + pulumi.set(__self__, "secondary_boot_disks", secondary_boot_disks) pulumi.set(__self__, "service_account", service_account) pulumi.set(__self__, "shielded_instance_configs", shielded_instance_configs) pulumi.set(__self__, "sole_tenant_configs", sole_tenant_configs) @@ -15607,6 +15802,14 @@ def sandbox_configs(self) -> Sequence['outputs.GetClusterNodeConfigSandboxConfig """ return pulumi.get(self, "sandbox_configs") + @property + @pulumi.getter(name="secondaryBootDisks") + def secondary_boot_disks(self) -> Sequence['outputs.GetClusterNodeConfigSecondaryBootDiskResult']: + """ + Secondary boot disks for preloading data or container images. + """ + return pulumi.get(self, "secondary_boot_disks") + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> str: @@ -16113,6 +16316,35 @@ def sandbox_type(self) -> str: return pulumi.get(self, "sandbox_type") +@pulumi.output_type +class GetClusterNodeConfigSecondaryBootDiskResult(dict): + def __init__(__self__, *, + disk_image: str, + mode: str): + """ + :param str disk_image: Disk image to create the secondary boot disk from + :param str mode: Mode for how the secondary boot disk is used. + """ + pulumi.set(__self__, "disk_image", disk_image) + pulumi.set(__self__, "mode", mode) + + @property + @pulumi.getter(name="diskImage") + def disk_image(self) -> str: + """ + Disk image to create the secondary boot disk from + """ + return pulumi.get(self, "disk_image") + + @property + @pulumi.getter + def mode(self) -> str: + """ + Mode for how the secondary boot disk is used. + """ + return pulumi.get(self, "mode") + + @pulumi.output_type class GetClusterNodeConfigShieldedInstanceConfigResult(dict): def __init__(__self__, *, @@ -16868,6 +17100,7 @@ def __init__(__self__, *, resource_labels: Mapping[str, str], resource_manager_tags: Mapping[str, Any], sandbox_configs: Sequence['outputs.GetClusterNodePoolNodeConfigSandboxConfigResult'], + secondary_boot_disks: Sequence['outputs.GetClusterNodePoolNodeConfigSecondaryBootDiskResult'], service_account: str, shielded_instance_configs: Sequence['outputs.GetClusterNodePoolNodeConfigShieldedInstanceConfigResult'], sole_tenant_configs: Sequence['outputs.GetClusterNodePoolNodeConfigSoleTenantConfigResult'], @@ -16907,6 +17140,7 @@ def __init__(__self__, *, :param Mapping[str, str] resource_labels: The GCE resource labels (a map of key/value pairs) to be applied to the node pool. :param Mapping[str, Any] resource_manager_tags: A map of resource manager tags. Resource manager tag keys and values have the same definition as resource manager tags. Keys must be in the format tagKeys/{tag_key_id}, and values are in the format tagValues/456. The field is ignored (both PUT & PATCH) when empty. :param Sequence['GetClusterNodePoolNodeConfigSandboxConfigArgs'] sandbox_configs: Sandbox configuration for this node. + :param Sequence['GetClusterNodePoolNodeConfigSecondaryBootDiskArgs'] secondary_boot_disks: Secondary boot disks for preloading data or container images. :param str service_account: The Google Cloud Platform Service Account to be used by the node VMs. :param Sequence['GetClusterNodePoolNodeConfigShieldedInstanceConfigArgs'] shielded_instance_configs: Shielded Instance options. :param Sequence['GetClusterNodePoolNodeConfigSoleTenantConfigArgs'] sole_tenant_configs: Node affinity options for sole tenant node pools. @@ -16946,6 +17180,7 @@ def __init__(__self__, *, pulumi.set(__self__, "resource_labels", resource_labels) pulumi.set(__self__, "resource_manager_tags", resource_manager_tags) pulumi.set(__self__, "sandbox_configs", sandbox_configs) + pulumi.set(__self__, "secondary_boot_disks", secondary_boot_disks) pulumi.set(__self__, "service_account", service_account) pulumi.set(__self__, "shielded_instance_configs", shielded_instance_configs) pulumi.set(__self__, "sole_tenant_configs", sole_tenant_configs) @@ -17202,6 +17437,14 @@ def sandbox_configs(self) -> Sequence['outputs.GetClusterNodePoolNodeConfigSandb """ return pulumi.get(self, "sandbox_configs") + @property + @pulumi.getter(name="secondaryBootDisks") + def secondary_boot_disks(self) -> Sequence['outputs.GetClusterNodePoolNodeConfigSecondaryBootDiskResult']: + """ + Secondary boot disks for preloading data or container images. + """ + return pulumi.get(self, "secondary_boot_disks") + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> str: @@ -17708,6 +17951,35 @@ def sandbox_type(self) -> str: return pulumi.get(self, "sandbox_type") +@pulumi.output_type +class GetClusterNodePoolNodeConfigSecondaryBootDiskResult(dict): + def __init__(__self__, *, + disk_image: str, + mode: str): + """ + :param str disk_image: Disk image to create the secondary boot disk from + :param str mode: Mode for how the secondary boot disk is used. + """ + pulumi.set(__self__, "disk_image", disk_image) + pulumi.set(__self__, "mode", mode) + + @property + @pulumi.getter(name="diskImage") + def disk_image(self) -> str: + """ + Disk image to create the secondary boot disk from + """ + return pulumi.get(self, "disk_image") + + @property + @pulumi.getter + def mode(self) -> str: + """ + Mode for how the secondary boot disk is used. + """ + return pulumi.get(self, "mode") + + @pulumi.output_type class GetClusterNodePoolNodeConfigShieldedInstanceConfigResult(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/dataflow/flex_template_job.py b/sdk/python/pulumi_gcp/dataflow/flex_template_job.py index 775db2be5c..a3c70ed98d 100644 --- a/sdk/python/pulumi_gcp/dataflow/flex_template_job.py +++ b/sdk/python/pulumi_gcp/dataflow/flex_template_job.py @@ -64,9 +64,9 @@ def __init__(__self__, *, :param pulumi.Input[int] num_workers: Immutable. The initial number of Google Compute Engine instances for the job. :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. - :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as - used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - such as `serviceAccount`, `workerMachineType`, etc can be specified here. + :param pulumi.Input[Mapping[str, Any]] parameters: **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. :param pulumi.Input[str] project: The project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[str] region: Immutable. The region in which the created job should run. @@ -307,9 +307,9 @@ def on_delete(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def parameters(self) -> Optional[pulumi.Input[Mapping[str, Any]]]: """ - Key/Value pairs to be passed to the Dataflow job (as - used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - such as `serviceAccount`, `workerMachineType`, etc can be specified here. + **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. """ return pulumi.get(self, "parameters") @@ -483,9 +483,9 @@ def __init__(__self__, *, :param pulumi.Input[int] num_workers: Immutable. The initial number of Google Compute Engine instances for the job. :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. - :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as - used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - such as `serviceAccount`, `workerMachineType`, etc can be specified here. + :param pulumi.Input[Mapping[str, Any]] parameters: **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. :param pulumi.Input[str] project: The project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource and default labels configured on the provider. @@ -761,9 +761,9 @@ def on_delete(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def parameters(self) -> Optional[pulumi.Input[Mapping[str, Any]]]: """ - Key/Value pairs to be passed to the Dataflow job (as - used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - such as `serviceAccount`, `workerMachineType`, etc can be specified here. + **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. """ return pulumi.get(self, "parameters") @@ -1043,9 +1043,9 @@ def __init__(__self__, :param pulumi.Input[int] num_workers: Immutable. The initial number of Google Compute Engine instances for the job. :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. - :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as - used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - such as `serviceAccount`, `workerMachineType`, etc can be specified here. + :param pulumi.Input[Mapping[str, Any]] parameters: **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. :param pulumi.Input[str] project: The project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[str] region: Immutable. The region in which the created job should run. @@ -1287,9 +1287,9 @@ def get(resource_name: str, :param pulumi.Input[int] num_workers: Immutable. The initial number of Google Compute Engine instances for the job. :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. - :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as - used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - such as `serviceAccount`, `workerMachineType`, etc can be specified here. + :param pulumi.Input[Mapping[str, Any]] parameters: **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. :param pulumi.Input[str] project: The project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource and default labels configured on the provider. @@ -1477,9 +1477,9 @@ def on_delete(self) -> pulumi.Output[Optional[str]]: @pulumi.getter def parameters(self) -> pulumi.Output[Optional[Mapping[str, Any]]]: """ - Key/Value pairs to be passed to the Dataflow job (as - used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) - such as `serviceAccount`, `workerMachineType`, etc can be specified here. + **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. """ return pulumi.get(self, "parameters") diff --git a/sdk/python/pulumi_gcp/dataflow/job.py b/sdk/python/pulumi_gcp/dataflow/job.py index 08be2c8283..015403dedc 100644 --- a/sdk/python/pulumi_gcp/dataflow/job.py +++ b/sdk/python/pulumi_gcp/dataflow/job.py @@ -52,7 +52,9 @@ def __init__(__self__, *, :param pulumi.Input[str] name: A unique name for the resource, required by Dataflow. :param pulumi.Input[str] network: The network to which VMs will be assigned. If it is not provided, "default" will be used. :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. - :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as used in the template). + :param pulumi.Input[Mapping[str, Any]] parameters: **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. :param pulumi.Input[str] project: The project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[str] region: The region in which the created job should run. :param pulumi.Input[str] service_account_email: The Service Account email used to create the job. @@ -252,7 +254,9 @@ def on_delete(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def parameters(self) -> Optional[pulumi.Input[Mapping[str, Any]]]: """ - Key/Value pairs to be passed to the Dataflow job (as used in the template). + **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. """ return pulumi.get(self, "parameters") @@ -389,7 +393,9 @@ def __init__(__self__, *, :param pulumi.Input[str] name: A unique name for the resource, required by Dataflow. :param pulumi.Input[str] network: The network to which VMs will be assigned. If it is not provided, "default" will be used. :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. - :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as used in the template). + :param pulumi.Input[Mapping[str, Any]] parameters: **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. :param pulumi.Input[str] project: The project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[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] region: The region in which the created job should run. @@ -606,7 +612,9 @@ def on_delete(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def parameters(self) -> Optional[pulumi.Input[Mapping[str, Any]]]: """ - Key/Value pairs to be passed to the Dataflow job (as used in the template). + **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. """ return pulumi.get(self, "parameters") @@ -900,7 +908,9 @@ def __init__(__self__, :param pulumi.Input[str] name: A unique name for the resource, required by Dataflow. :param pulumi.Input[str] network: The network to which VMs will be assigned. If it is not provided, "default" will be used. :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. - :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as used in the template). + :param pulumi.Input[Mapping[str, Any]] parameters: **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. :param pulumi.Input[str] project: The project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[str] region: The region in which the created job should run. :param pulumi.Input[str] service_account_email: The Service Account email used to create the job. @@ -1149,7 +1159,9 @@ def get(resource_name: str, :param pulumi.Input[str] name: A unique name for the resource, required by Dataflow. :param pulumi.Input[str] network: The network to which VMs will be assigned. If it is not provided, "default" will be used. :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. - :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as used in the template). + :param pulumi.Input[Mapping[str, Any]] parameters: **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. :param pulumi.Input[str] project: The project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[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] region: The region in which the created job should run. @@ -1298,7 +1310,9 @@ def on_delete(self) -> pulumi.Output[Optional[str]]: @pulumi.getter def parameters(self) -> pulumi.Output[Optional[Mapping[str, Any]]]: """ - Key/Value pairs to be passed to the Dataflow job (as used in the template). + **Template specific** Key/Value pairs to be forwarded to the pipeline's options; keys are + case-sensitive based on the language on which the pipeline is coded, mostly Java. + **Note**: do not configure Dataflow options here in parameters. """ return pulumi.get(self, "parameters") diff --git a/sdk/python/pulumi_gcp/essentialcontacts/document_ai_warehouse_document_schema.py b/sdk/python/pulumi_gcp/essentialcontacts/document_ai_warehouse_document_schema.py index 8cb9df6728..20a7d2b206 100644 --- a/sdk/python/pulumi_gcp/essentialcontacts/document_ai_warehouse_document_schema.py +++ b/sdk/python/pulumi_gcp/essentialcontacts/document_ai_warehouse_document_schema.py @@ -255,270 +255,6 @@ def __init__(__self__, text_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionTextTypeOptionsArgs(), )]) ``` - ### Document Ai Warehouse Document Schema Integer - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_integer = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_integer", - project_number=project.number, - display_name="test-property-integer", - location="us", - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop1", - display_name="propdisp1", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - integer_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionIntegerTypeOptionsArgs(), - )]) - ``` - ### Document Ai Warehouse Document Schema Float - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_float = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_float", - project_number=project.number, - display_name="test-property-float", - location="us", - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop2", - display_name="propdisp2", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - float_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionFloatTypeOptionsArgs(), - )]) - ``` - ### Document Ai Warehouse Document Schema Property - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_property = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_property", - project_number=project.number, - display_name="test-property-property", - location="us", - document_is_folder=False, - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop8", - display_name="propdisp8", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - property_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs( - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs( - name="prop8_nested", - display_name="propdisp8_nested", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs( - name="dummy_source_nested", - processor_type="dummy_processor_nested", - )], - text_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionTextTypeOptionsArgs(), - )], - ), - )]) - ``` - ### Document Ai Warehouse Document Schema Property Enum - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_property_enum = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_property_enum", - project_number=project.number, - display_name="test-property-property", - location="us", - document_is_folder=False, - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop8", - display_name="propdisp8", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - property_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs( - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs( - name="prop8_nested", - display_name="propdisp8_nested", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs( - name="dummy_source_nested", - processor_type="dummy_processor_nested", - )], - enum_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionEnumTypeOptionsArgs( - possible_values=[ - "M", - "F", - "X", - ], - validation_check_disabled=False, - ), - )], - ), - )]) - ``` - ### Document Ai Warehouse Document Schema Enum - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_enum = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_enum", - project_number=project.number, - display_name="test-property-enum", - location="us", - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop6", - display_name="propdisp6", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - enum_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionEnumTypeOptionsArgs( - possible_values=[ - "M", - "F", - "X", - ], - validation_check_disabled=False, - ), - )]) - ``` - ### Document Ai Warehouse Document Schema Map - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_map = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_map", - project_number=project.number, - display_name="test-property-map", - location="us", - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop4", - display_name="propdisp4", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - map_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionMapTypeOptionsArgs(), - )]) - ``` - ### Document Ai Warehouse Document Schema Datetime - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_datetime = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_datetime", - project_number=project.number, - display_name="test-property-date_time", - location="us", - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop7", - display_name="propdisp7", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - date_time_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionDateTimeTypeOptionsArgs(), - )]) - ``` - ### Document Ai Warehouse Document Schema Timestamp - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_timestamp = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_timestamp", - project_number=project.number, - display_name="test-property-timestamp", - location="us", - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop5", - display_name="propdisp5", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - timestamp_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionTimestampTypeOptionsArgs(), - )]) - ``` ## Import @@ -592,270 +328,6 @@ def __init__(__self__, text_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionTextTypeOptionsArgs(), )]) ``` - ### Document Ai Warehouse Document Schema Integer - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_integer = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_integer", - project_number=project.number, - display_name="test-property-integer", - location="us", - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop1", - display_name="propdisp1", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - integer_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionIntegerTypeOptionsArgs(), - )]) - ``` - ### Document Ai Warehouse Document Schema Float - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_float = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_float", - project_number=project.number, - display_name="test-property-float", - location="us", - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop2", - display_name="propdisp2", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - float_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionFloatTypeOptionsArgs(), - )]) - ``` - ### Document Ai Warehouse Document Schema Property - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_property = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_property", - project_number=project.number, - display_name="test-property-property", - location="us", - document_is_folder=False, - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop8", - display_name="propdisp8", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - property_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs( - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs( - name="prop8_nested", - display_name="propdisp8_nested", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs( - name="dummy_source_nested", - processor_type="dummy_processor_nested", - )], - text_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionTextTypeOptionsArgs(), - )], - ), - )]) - ``` - ### Document Ai Warehouse Document Schema Property Enum - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_property_enum = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_property_enum", - project_number=project.number, - display_name="test-property-property", - location="us", - document_is_folder=False, - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop8", - display_name="propdisp8", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - property_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsArgs( - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionArgs( - name="prop8_nested", - display_name="propdisp8_nested", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionSchemaSourceArgs( - name="dummy_source_nested", - processor_type="dummy_processor_nested", - )], - enum_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionPropertyTypeOptionsPropertyDefinitionEnumTypeOptionsArgs( - possible_values=[ - "M", - "F", - "X", - ], - validation_check_disabled=False, - ), - )], - ), - )]) - ``` - ### Document Ai Warehouse Document Schema Enum - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_enum = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_enum", - project_number=project.number, - display_name="test-property-enum", - location="us", - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop6", - display_name="propdisp6", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - enum_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionEnumTypeOptionsArgs( - possible_values=[ - "M", - "F", - "X", - ], - validation_check_disabled=False, - ), - )]) - ``` - ### Document Ai Warehouse Document Schema Map - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_map = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_map", - project_number=project.number, - display_name="test-property-map", - location="us", - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop4", - display_name="propdisp4", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - map_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionMapTypeOptionsArgs(), - )]) - ``` - ### Document Ai Warehouse Document Schema Datetime - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_datetime = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_datetime", - project_number=project.number, - display_name="test-property-date_time", - location="us", - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop7", - display_name="propdisp7", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - date_time_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionDateTimeTypeOptionsArgs(), - )]) - ``` - ### Document Ai Warehouse Document Schema Timestamp - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.get_project() - example_timestamp = gcp.essentialcontacts.DocumentAiWarehouseDocumentSchema("example_timestamp", - project_number=project.number, - display_name="test-property-timestamp", - location="us", - property_definitions=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionArgs( - name="prop5", - display_name="propdisp5", - is_repeatable=False, - is_filterable=True, - is_searchable=True, - is_metadata=False, - is_required=False, - retrieval_importance="HIGHEST", - schema_sources=[gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionSchemaSourceArgs( - name="dummy_source", - processor_type="dummy_processor", - )], - timestamp_type_options=gcp.essentialcontacts.DocumentAiWarehouseDocumentSchemaPropertyDefinitionTimestampTypeOptionsArgs(), - )]) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/firebaserules/release.py b/sdk/python/pulumi_gcp/firebaserules/release.py index 9c3985a199..e1a0934a29 100644 --- a/sdk/python/pulumi_gcp/firebaserules/release.py +++ b/sdk/python/pulumi_gcp/firebaserules/release.py @@ -215,7 +215,7 @@ def __init__(__self__, ), project="my-project-name") primary = gcp.firebaserules.Release("primary", - name="cloud.firestore", + name="cloud.firestore/database", ruleset_name=firestore.name.apply(lambda name: f"projects/my-project-name/rulesets/{name}"), project="my-project-name") ``` @@ -296,7 +296,7 @@ def __init__(__self__, ), project="my-project-name") primary = gcp.firebaserules.Release("primary", - name="cloud.firestore", + name="cloud.firestore/database", ruleset_name=firestore.name.apply(lambda name: f"projects/my-project-name/rulesets/{name}"), project="my-project-name") ``` diff --git a/sdk/python/pulumi_gcp/privilegedaccessmanager/__init__.py b/sdk/python/pulumi_gcp/privilegedaccessmanager/__init__.py new file mode 100644 index 0000000000..d41bc907f0 --- /dev/null +++ b/sdk/python/pulumi_gcp/privilegedaccessmanager/__init__.py @@ -0,0 +1,10 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +from .. import _utilities +import typing +# Export this package's modules as members: +from .entitlement import * +from ._inputs import * +from . import outputs diff --git a/sdk/python/pulumi_gcp/privilegedaccessmanager/_inputs.py b/sdk/python/pulumi_gcp/privilegedaccessmanager/_inputs.py new file mode 100644 index 0000000000..b204a1f74c --- /dev/null +++ b/sdk/python/pulumi_gcp/privilegedaccessmanager/_inputs.py @@ -0,0 +1,420 @@ +# 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__ = [ + 'EntitlementAdditionalNotificationTargetsArgs', + 'EntitlementApprovalWorkflowArgs', + 'EntitlementApprovalWorkflowManualApprovalsArgs', + 'EntitlementApprovalWorkflowManualApprovalsStepArgs', + 'EntitlementApprovalWorkflowManualApprovalsStepApproversArgs', + 'EntitlementEligibleUserArgs', + 'EntitlementPrivilegedAccessArgs', + 'EntitlementPrivilegedAccessGcpIamAccessArgs', + 'EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs', + 'EntitlementRequesterJustificationConfigArgs', + 'EntitlementRequesterJustificationConfigNotMandatoryArgs', + 'EntitlementRequesterJustificationConfigUnstructuredArgs', +] + +@pulumi.input_type +class EntitlementAdditionalNotificationTargetsArgs: + def __init__(__self__, *, + admin_email_recipients: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + requester_email_recipients: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None): + """ + :param pulumi.Input[Sequence[pulumi.Input[str]]] admin_email_recipients: Optional. Additional email addresses to be notified when a principal(requester) is granted access. + :param pulumi.Input[Sequence[pulumi.Input[str]]] requester_email_recipients: Optional. Additional email address to be notified about an eligible entitlement. + """ + if admin_email_recipients is not None: + pulumi.set(__self__, "admin_email_recipients", admin_email_recipients) + if requester_email_recipients is not None: + pulumi.set(__self__, "requester_email_recipients", requester_email_recipients) + + @property + @pulumi.getter(name="adminEmailRecipients") + def admin_email_recipients(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Optional. Additional email addresses to be notified when a principal(requester) is granted access. + """ + return pulumi.get(self, "admin_email_recipients") + + @admin_email_recipients.setter + def admin_email_recipients(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "admin_email_recipients", value) + + @property + @pulumi.getter(name="requesterEmailRecipients") + def requester_email_recipients(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Optional. Additional email address to be notified about an eligible entitlement. + """ + return pulumi.get(self, "requester_email_recipients") + + @requester_email_recipients.setter + def requester_email_recipients(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "requester_email_recipients", value) + + +@pulumi.input_type +class EntitlementApprovalWorkflowArgs: + def __init__(__self__, *, + manual_approvals: pulumi.Input['EntitlementApprovalWorkflowManualApprovalsArgs']): + """ + :param pulumi.Input['EntitlementApprovalWorkflowManualApprovalsArgs'] manual_approvals: A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + This can be used to create approval workflows such as + * Require an approval from any user in a group G. + * Require an approval from any k number of users from a Group G. + * Require an approval from any user in a group G and then from a user U. etc. + A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + Structure is documented below. + """ + pulumi.set(__self__, "manual_approvals", manual_approvals) + + @property + @pulumi.getter(name="manualApprovals") + def manual_approvals(self) -> pulumi.Input['EntitlementApprovalWorkflowManualApprovalsArgs']: + """ + A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + This can be used to create approval workflows such as + * Require an approval from any user in a group G. + * Require an approval from any k number of users from a Group G. + * Require an approval from any user in a group G and then from a user U. etc. + A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + Structure is documented below. + """ + return pulumi.get(self, "manual_approvals") + + @manual_approvals.setter + def manual_approvals(self, value: pulumi.Input['EntitlementApprovalWorkflowManualApprovalsArgs']): + pulumi.set(self, "manual_approvals", value) + + +@pulumi.input_type +class EntitlementApprovalWorkflowManualApprovalsArgs: + def __init__(__self__, *, + steps: pulumi.Input[Sequence[pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepArgs']]], + require_approver_justification: Optional[pulumi.Input[bool]] = None): + """ + :param pulumi.Input[Sequence[pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepArgs']]] steps: List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + Structure is documented below. + :param pulumi.Input[bool] require_approver_justification: Optional. Do the approvers need to provide a justification for their actions? + """ + pulumi.set(__self__, "steps", steps) + if require_approver_justification is not None: + pulumi.set(__self__, "require_approver_justification", require_approver_justification) + + @property + @pulumi.getter + def steps(self) -> pulumi.Input[Sequence[pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepArgs']]]: + """ + List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + Structure is documented below. + """ + return pulumi.get(self, "steps") + + @steps.setter + def steps(self, value: pulumi.Input[Sequence[pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepArgs']]]): + pulumi.set(self, "steps", value) + + @property + @pulumi.getter(name="requireApproverJustification") + def require_approver_justification(self) -> Optional[pulumi.Input[bool]]: + """ + Optional. Do the approvers need to provide a justification for their actions? + """ + return pulumi.get(self, "require_approver_justification") + + @require_approver_justification.setter + def require_approver_justification(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "require_approver_justification", value) + + +@pulumi.input_type +class EntitlementApprovalWorkflowManualApprovalsStepArgs: + def __init__(__self__, *, + approvers: pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepApproversArgs'], + approvals_needed: Optional[pulumi.Input[int]] = None, + approver_email_recipients: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None): + """ + :param pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepApproversArgs'] approvers: The potential set of approvers in this step. This list should contain at only one entry. + Structure is documented below. + :param pulumi.Input[int] approvals_needed: How many users from the above list need to approve. + If there are not enough distinct users in the list above then the workflow + will indefinitely block. Should always be greater than 0. Currently 1 is the only + supported value. + :param pulumi.Input[Sequence[pulumi.Input[str]]] approver_email_recipients: Optional. Additional email addresses to be notified when a grant is pending approval. + """ + pulumi.set(__self__, "approvers", approvers) + if approvals_needed is not None: + pulumi.set(__self__, "approvals_needed", approvals_needed) + if approver_email_recipients is not None: + pulumi.set(__self__, "approver_email_recipients", approver_email_recipients) + + @property + @pulumi.getter + def approvers(self) -> pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepApproversArgs']: + """ + The potential set of approvers in this step. This list should contain at only one entry. + Structure is documented below. + """ + return pulumi.get(self, "approvers") + + @approvers.setter + def approvers(self, value: pulumi.Input['EntitlementApprovalWorkflowManualApprovalsStepApproversArgs']): + pulumi.set(self, "approvers", value) + + @property + @pulumi.getter(name="approvalsNeeded") + def approvals_needed(self) -> Optional[pulumi.Input[int]]: + """ + How many users from the above list need to approve. + If there are not enough distinct users in the list above then the workflow + will indefinitely block. Should always be greater than 0. Currently 1 is the only + supported value. + """ + return pulumi.get(self, "approvals_needed") + + @approvals_needed.setter + def approvals_needed(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "approvals_needed", value) + + @property + @pulumi.getter(name="approverEmailRecipients") + def approver_email_recipients(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Optional. Additional email addresses to be notified when a grant is pending approval. + """ + return pulumi.get(self, "approver_email_recipients") + + @approver_email_recipients.setter + def approver_email_recipients(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "approver_email_recipients", value) + + +@pulumi.input_type +class EntitlementApprovalWorkflowManualApprovalsStepApproversArgs: + def __init__(__self__, *, + principals: pulumi.Input[Sequence[pulumi.Input[str]]]): + """ + :param pulumi.Input[Sequence[pulumi.Input[str]]] principals: Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + """ + pulumi.set(__self__, "principals", principals) + + @property + @pulumi.getter + def principals(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]: + """ + Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + """ + return pulumi.get(self, "principals") + + @principals.setter + def principals(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]): + pulumi.set(self, "principals", value) + + +@pulumi.input_type +class EntitlementEligibleUserArgs: + def __init__(__self__, *, + principals: pulumi.Input[Sequence[pulumi.Input[str]]]): + """ + :param pulumi.Input[Sequence[pulumi.Input[str]]] principals: Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + """ + pulumi.set(__self__, "principals", principals) + + @property + @pulumi.getter + def principals(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]: + """ + Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + """ + return pulumi.get(self, "principals") + + @principals.setter + def principals(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]): + pulumi.set(self, "principals", value) + + +@pulumi.input_type +class EntitlementPrivilegedAccessArgs: + def __init__(__self__, *, + gcp_iam_access: pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessArgs']): + """ + :param pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessArgs'] gcp_iam_access: GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + Structure is documented below. + """ + pulumi.set(__self__, "gcp_iam_access", gcp_iam_access) + + @property + @pulumi.getter(name="gcpIamAccess") + def gcp_iam_access(self) -> pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessArgs']: + """ + GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + Structure is documented below. + """ + return pulumi.get(self, "gcp_iam_access") + + @gcp_iam_access.setter + def gcp_iam_access(self, value: pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessArgs']): + pulumi.set(self, "gcp_iam_access", value) + + +@pulumi.input_type +class EntitlementPrivilegedAccessGcpIamAccessArgs: + def __init__(__self__, *, + resource: pulumi.Input[str], + resource_type: pulumi.Input[str], + role_bindings: pulumi.Input[Sequence[pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs']]]): + """ + :param pulumi.Input[str] resource: Name of the resource. + :param pulumi.Input[str] resource_type: The type of this resource. + :param pulumi.Input[Sequence[pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs']]] role_bindings: Role bindings to be created on successful grant. + Structure is documented below. + """ + pulumi.set(__self__, "resource", resource) + pulumi.set(__self__, "resource_type", resource_type) + pulumi.set(__self__, "role_bindings", role_bindings) + + @property + @pulumi.getter + def resource(self) -> pulumi.Input[str]: + """ + Name of the resource. + """ + return pulumi.get(self, "resource") + + @resource.setter + def resource(self, value: pulumi.Input[str]): + pulumi.set(self, "resource", value) + + @property + @pulumi.getter(name="resourceType") + def resource_type(self) -> pulumi.Input[str]: + """ + The type of this resource. + """ + return pulumi.get(self, "resource_type") + + @resource_type.setter + def resource_type(self, value: pulumi.Input[str]): + pulumi.set(self, "resource_type", value) + + @property + @pulumi.getter(name="roleBindings") + def role_bindings(self) -> pulumi.Input[Sequence[pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs']]]: + """ + Role bindings to be created on successful grant. + Structure is documented below. + """ + return pulumi.get(self, "role_bindings") + + @role_bindings.setter + def role_bindings(self, value: pulumi.Input[Sequence[pulumi.Input['EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs']]]): + pulumi.set(self, "role_bindings", value) + + +@pulumi.input_type +class EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs: + def __init__(__self__, *, + role: pulumi.Input[str], + condition_expression: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] role: IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + :param pulumi.Input[str] condition_expression: The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + https://cloud.google.com/iam/docs/conditions-overview#attributes. + """ + pulumi.set(__self__, "role", role) + if condition_expression is not None: + pulumi.set(__self__, "condition_expression", condition_expression) + + @property + @pulumi.getter + def role(self) -> pulumi.Input[str]: + """ + IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + """ + return pulumi.get(self, "role") + + @role.setter + def role(self, value: pulumi.Input[str]): + pulumi.set(self, "role", value) + + @property + @pulumi.getter(name="conditionExpression") + def condition_expression(self) -> Optional[pulumi.Input[str]]: + """ + The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + https://cloud.google.com/iam/docs/conditions-overview#attributes. + """ + return pulumi.get(self, "condition_expression") + + @condition_expression.setter + def condition_expression(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "condition_expression", value) + + +@pulumi.input_type +class EntitlementRequesterJustificationConfigArgs: + def __init__(__self__, *, + not_mandatory: Optional[pulumi.Input['EntitlementRequesterJustificationConfigNotMandatoryArgs']] = None, + unstructured: Optional[pulumi.Input['EntitlementRequesterJustificationConfigUnstructuredArgs']] = None): + """ + :param pulumi.Input['EntitlementRequesterJustificationConfigNotMandatoryArgs'] not_mandatory: The justification is not mandatory but can be provided in any of the supported formats. + :param pulumi.Input['EntitlementRequesterJustificationConfigUnstructuredArgs'] unstructured: The requester has to provide a justification in the form of free flowing text. + + - - - + """ + if not_mandatory is not None: + pulumi.set(__self__, "not_mandatory", not_mandatory) + if unstructured is not None: + pulumi.set(__self__, "unstructured", unstructured) + + @property + @pulumi.getter(name="notMandatory") + def not_mandatory(self) -> Optional[pulumi.Input['EntitlementRequesterJustificationConfigNotMandatoryArgs']]: + """ + The justification is not mandatory but can be provided in any of the supported formats. + """ + return pulumi.get(self, "not_mandatory") + + @not_mandatory.setter + def not_mandatory(self, value: Optional[pulumi.Input['EntitlementRequesterJustificationConfigNotMandatoryArgs']]): + pulumi.set(self, "not_mandatory", value) + + @property + @pulumi.getter + def unstructured(self) -> Optional[pulumi.Input['EntitlementRequesterJustificationConfigUnstructuredArgs']]: + """ + The requester has to provide a justification in the form of free flowing text. + + - - - + """ + return pulumi.get(self, "unstructured") + + @unstructured.setter + def unstructured(self, value: Optional[pulumi.Input['EntitlementRequesterJustificationConfigUnstructuredArgs']]): + pulumi.set(self, "unstructured", value) + + +@pulumi.input_type +class EntitlementRequesterJustificationConfigNotMandatoryArgs: + def __init__(__self__): + pass + + +@pulumi.input_type +class EntitlementRequesterJustificationConfigUnstructuredArgs: + def __init__(__self__): + pass + + diff --git a/sdk/python/pulumi_gcp/privilegedaccessmanager/entitlement.py b/sdk/python/pulumi_gcp/privilegedaccessmanager/entitlement.py new file mode 100644 index 0000000000..dcac62d5be --- /dev/null +++ b/sdk/python/pulumi_gcp/privilegedaccessmanager/entitlement.py @@ -0,0 +1,852 @@ +# 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__ = ['EntitlementArgs', 'Entitlement'] + +@pulumi.input_type +class EntitlementArgs: + def __init__(__self__, *, + eligible_users: pulumi.Input[Sequence[pulumi.Input['EntitlementEligibleUserArgs']]], + entitlement_id: pulumi.Input[str], + location: pulumi.Input[str], + max_request_duration: pulumi.Input[str], + parent: pulumi.Input[str], + privileged_access: pulumi.Input['EntitlementPrivilegedAccessArgs'], + requester_justification_config: pulumi.Input['EntitlementRequesterJustificationConfigArgs'], + additional_notification_targets: Optional[pulumi.Input['EntitlementAdditionalNotificationTargetsArgs']] = None, + approval_workflow: Optional[pulumi.Input['EntitlementApprovalWorkflowArgs']] = None): + """ + The set of arguments for constructing a Entitlement resource. + :param pulumi.Input[Sequence[pulumi.Input['EntitlementEligibleUserArgs']]] eligible_users: Who can create Grants using Entitlement. This list should contain at most one entry + Structure is documented below. + :param pulumi.Input[str] entitlement_id: The ID to use for this Entitlement. This will become the last part of the resource name. + This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + This value should be unique among all other Entitlements under the specified `parent`. + :param pulumi.Input[str] location: The region of the Entitlement resource. + :param pulumi.Input[str] max_request_duration: The maximum amount of time for which access would be granted for a request. + A requester can choose to ask for access for less than this duration but never more. + Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + :param pulumi.Input[str] parent: Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + :param pulumi.Input['EntitlementPrivilegedAccessArgs'] privileged_access: Privileged access that this service can be used to gate. + Structure is documented below. + :param pulumi.Input['EntitlementRequesterJustificationConfigArgs'] requester_justification_config: Defines the ways in which a requester should provide the justification while requesting for access. + Structure is documented below. + :param pulumi.Input['EntitlementAdditionalNotificationTargetsArgs'] additional_notification_targets: AdditionalNotificationTargets includes email addresses to be notified. + :param pulumi.Input['EntitlementApprovalWorkflowArgs'] approval_workflow: The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + Different types of approval workflows that can be used to gate privileged access granting. + """ + pulumi.set(__self__, "eligible_users", eligible_users) + pulumi.set(__self__, "entitlement_id", entitlement_id) + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "max_request_duration", max_request_duration) + pulumi.set(__self__, "parent", parent) + pulumi.set(__self__, "privileged_access", privileged_access) + pulumi.set(__self__, "requester_justification_config", requester_justification_config) + if additional_notification_targets is not None: + pulumi.set(__self__, "additional_notification_targets", additional_notification_targets) + if approval_workflow is not None: + pulumi.set(__self__, "approval_workflow", approval_workflow) + + @property + @pulumi.getter(name="eligibleUsers") + def eligible_users(self) -> pulumi.Input[Sequence[pulumi.Input['EntitlementEligibleUserArgs']]]: + """ + Who can create Grants using Entitlement. This list should contain at most one entry + Structure is documented below. + """ + return pulumi.get(self, "eligible_users") + + @eligible_users.setter + def eligible_users(self, value: pulumi.Input[Sequence[pulumi.Input['EntitlementEligibleUserArgs']]]): + pulumi.set(self, "eligible_users", value) + + @property + @pulumi.getter(name="entitlementId") + def entitlement_id(self) -> pulumi.Input[str]: + """ + The ID to use for this Entitlement. This will become the last part of the resource name. + This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + This value should be unique among all other Entitlements under the specified `parent`. + """ + return pulumi.get(self, "entitlement_id") + + @entitlement_id.setter + def entitlement_id(self, value: pulumi.Input[str]): + pulumi.set(self, "entitlement_id", value) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + The region of the Entitlement resource. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="maxRequestDuration") + def max_request_duration(self) -> pulumi.Input[str]: + """ + The maximum amount of time for which access would be granted for a request. + A requester can choose to ask for access for less than this duration but never more. + Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + """ + return pulumi.get(self, "max_request_duration") + + @max_request_duration.setter + def max_request_duration(self, value: pulumi.Input[str]): + pulumi.set(self, "max_request_duration", value) + + @property + @pulumi.getter + def parent(self) -> pulumi.Input[str]: + """ + Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + """ + return pulumi.get(self, "parent") + + @parent.setter + def parent(self, value: pulumi.Input[str]): + pulumi.set(self, "parent", value) + + @property + @pulumi.getter(name="privilegedAccess") + def privileged_access(self) -> pulumi.Input['EntitlementPrivilegedAccessArgs']: + """ + Privileged access that this service can be used to gate. + Structure is documented below. + """ + return pulumi.get(self, "privileged_access") + + @privileged_access.setter + def privileged_access(self, value: pulumi.Input['EntitlementPrivilegedAccessArgs']): + pulumi.set(self, "privileged_access", value) + + @property + @pulumi.getter(name="requesterJustificationConfig") + def requester_justification_config(self) -> pulumi.Input['EntitlementRequesterJustificationConfigArgs']: + """ + Defines the ways in which a requester should provide the justification while requesting for access. + Structure is documented below. + """ + return pulumi.get(self, "requester_justification_config") + + @requester_justification_config.setter + def requester_justification_config(self, value: pulumi.Input['EntitlementRequesterJustificationConfigArgs']): + pulumi.set(self, "requester_justification_config", value) + + @property + @pulumi.getter(name="additionalNotificationTargets") + def additional_notification_targets(self) -> Optional[pulumi.Input['EntitlementAdditionalNotificationTargetsArgs']]: + """ + AdditionalNotificationTargets includes email addresses to be notified. + """ + return pulumi.get(self, "additional_notification_targets") + + @additional_notification_targets.setter + def additional_notification_targets(self, value: Optional[pulumi.Input['EntitlementAdditionalNotificationTargetsArgs']]): + pulumi.set(self, "additional_notification_targets", value) + + @property + @pulumi.getter(name="approvalWorkflow") + def approval_workflow(self) -> Optional[pulumi.Input['EntitlementApprovalWorkflowArgs']]: + """ + The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + Different types of approval workflows that can be used to gate privileged access granting. + """ + return pulumi.get(self, "approval_workflow") + + @approval_workflow.setter + def approval_workflow(self, value: Optional[pulumi.Input['EntitlementApprovalWorkflowArgs']]): + pulumi.set(self, "approval_workflow", value) + + +@pulumi.input_type +class _EntitlementState: + def __init__(__self__, *, + additional_notification_targets: Optional[pulumi.Input['EntitlementAdditionalNotificationTargetsArgs']] = None, + approval_workflow: Optional[pulumi.Input['EntitlementApprovalWorkflowArgs']] = None, + create_time: Optional[pulumi.Input[str]] = None, + eligible_users: Optional[pulumi.Input[Sequence[pulumi.Input['EntitlementEligibleUserArgs']]]] = None, + entitlement_id: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + max_request_duration: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parent: Optional[pulumi.Input[str]] = None, + privileged_access: Optional[pulumi.Input['EntitlementPrivilegedAccessArgs']] = None, + requester_justification_config: Optional[pulumi.Input['EntitlementRequesterJustificationConfigArgs']] = None, + state: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering Entitlement resources. + :param pulumi.Input['EntitlementAdditionalNotificationTargetsArgs'] additional_notification_targets: AdditionalNotificationTargets includes email addresses to be notified. + :param pulumi.Input['EntitlementApprovalWorkflowArgs'] approval_workflow: The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + Different types of approval workflows that can be used to gate privileged access granting. + :param pulumi.Input[str] create_time: Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + :param pulumi.Input[Sequence[pulumi.Input['EntitlementEligibleUserArgs']]] eligible_users: Who can create Grants using Entitlement. This list should contain at most one entry + Structure is documented below. + :param pulumi.Input[str] entitlement_id: The ID to use for this Entitlement. This will become the last part of the resource name. + This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + This value should be unique among all other Entitlements under the specified `parent`. + :param pulumi.Input[str] etag: For Resource freshness validation (https://google.aip.dev/154) + :param pulumi.Input[str] location: The region of the Entitlement resource. + :param pulumi.Input[str] max_request_duration: The maximum amount of time for which access would be granted for a request. + A requester can choose to ask for access for less than this duration but never more. + Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + :param pulumi.Input[str] name: Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + :param pulumi.Input[str] parent: Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + :param pulumi.Input['EntitlementPrivilegedAccessArgs'] privileged_access: Privileged access that this service can be used to gate. + Structure is documented below. + :param pulumi.Input['EntitlementRequesterJustificationConfigArgs'] requester_justification_config: Defines the ways in which a requester should provide the justification while requesting for access. + Structure is documented below. + :param pulumi.Input[str] state: Output only. The current state of the Entitlement. + :param pulumi.Input[str] update_time: Output only. Update time stamp. 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 additional_notification_targets is not None: + pulumi.set(__self__, "additional_notification_targets", additional_notification_targets) + if approval_workflow is not None: + pulumi.set(__self__, "approval_workflow", approval_workflow) + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if eligible_users is not None: + pulumi.set(__self__, "eligible_users", eligible_users) + if entitlement_id is not None: + pulumi.set(__self__, "entitlement_id", entitlement_id) + if etag is not None: + pulumi.set(__self__, "etag", etag) + if location is not None: + pulumi.set(__self__, "location", location) + if max_request_duration is not None: + pulumi.set(__self__, "max_request_duration", max_request_duration) + if name is not None: + pulumi.set(__self__, "name", name) + if parent is not None: + pulumi.set(__self__, "parent", parent) + if privileged_access is not None: + pulumi.set(__self__, "privileged_access", privileged_access) + if requester_justification_config is not None: + pulumi.set(__self__, "requester_justification_config", requester_justification_config) + if state is not None: + pulumi.set(__self__, "state", state) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="additionalNotificationTargets") + def additional_notification_targets(self) -> Optional[pulumi.Input['EntitlementAdditionalNotificationTargetsArgs']]: + """ + AdditionalNotificationTargets includes email addresses to be notified. + """ + return pulumi.get(self, "additional_notification_targets") + + @additional_notification_targets.setter + def additional_notification_targets(self, value: Optional[pulumi.Input['EntitlementAdditionalNotificationTargetsArgs']]): + pulumi.set(self, "additional_notification_targets", value) + + @property + @pulumi.getter(name="approvalWorkflow") + def approval_workflow(self) -> Optional[pulumi.Input['EntitlementApprovalWorkflowArgs']]: + """ + The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + Different types of approval workflows that can be used to gate privileged access granting. + """ + return pulumi.get(self, "approval_workflow") + + @approval_workflow.setter + def approval_workflow(self, value: Optional[pulumi.Input['EntitlementApprovalWorkflowArgs']]): + pulumi.set(self, "approval_workflow", value) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + """ + return pulumi.get(self, "create_time") + + @create_time.setter + def create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "create_time", value) + + @property + @pulumi.getter(name="eligibleUsers") + def eligible_users(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['EntitlementEligibleUserArgs']]]]: + """ + Who can create Grants using Entitlement. This list should contain at most one entry + Structure is documented below. + """ + return pulumi.get(self, "eligible_users") + + @eligible_users.setter + def eligible_users(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['EntitlementEligibleUserArgs']]]]): + pulumi.set(self, "eligible_users", value) + + @property + @pulumi.getter(name="entitlementId") + def entitlement_id(self) -> Optional[pulumi.Input[str]]: + """ + The ID to use for this Entitlement. This will become the last part of the resource name. + This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + This value should be unique among all other Entitlements under the specified `parent`. + """ + return pulumi.get(self, "entitlement_id") + + @entitlement_id.setter + def entitlement_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "entitlement_id", value) + + @property + @pulumi.getter + def etag(self) -> Optional[pulumi.Input[str]]: + """ + For Resource freshness validation (https://google.aip.dev/154) + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The region of the Entitlement resource. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="maxRequestDuration") + def max_request_duration(self) -> Optional[pulumi.Input[str]]: + """ + The maximum amount of time for which access would be granted for a request. + A requester can choose to ask for access for less than this duration but never more. + Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + """ + return pulumi.get(self, "max_request_duration") + + @max_request_duration.setter + def max_request_duration(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "max_request_duration", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def parent(self) -> Optional[pulumi.Input[str]]: + """ + Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + """ + return pulumi.get(self, "parent") + + @parent.setter + def parent(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "parent", value) + + @property + @pulumi.getter(name="privilegedAccess") + def privileged_access(self) -> Optional[pulumi.Input['EntitlementPrivilegedAccessArgs']]: + """ + Privileged access that this service can be used to gate. + Structure is documented below. + """ + return pulumi.get(self, "privileged_access") + + @privileged_access.setter + def privileged_access(self, value: Optional[pulumi.Input['EntitlementPrivilegedAccessArgs']]): + pulumi.set(self, "privileged_access", value) + + @property + @pulumi.getter(name="requesterJustificationConfig") + def requester_justification_config(self) -> Optional[pulumi.Input['EntitlementRequesterJustificationConfigArgs']]: + """ + Defines the ways in which a requester should provide the justification while requesting for access. + Structure is documented below. + """ + return pulumi.get(self, "requester_justification_config") + + @requester_justification_config.setter + def requester_justification_config(self, value: Optional[pulumi.Input['EntitlementRequesterJustificationConfigArgs']]): + pulumi.set(self, "requester_justification_config", value) + + @property + @pulumi.getter + def state(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The current state of the Entitlement. + """ + return pulumi.get(self, "state") + + @state.setter + def state(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "state", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Update time stamp. 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 Entitlement(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + additional_notification_targets: Optional[pulumi.Input[pulumi.InputType['EntitlementAdditionalNotificationTargetsArgs']]] = None, + approval_workflow: Optional[pulumi.Input[pulumi.InputType['EntitlementApprovalWorkflowArgs']]] = None, + eligible_users: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EntitlementEligibleUserArgs']]]]] = None, + entitlement_id: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + max_request_duration: Optional[pulumi.Input[str]] = None, + parent: Optional[pulumi.Input[str]] = None, + privileged_access: Optional[pulumi.Input[pulumi.InputType['EntitlementPrivilegedAccessArgs']]] = None, + requester_justification_config: Optional[pulumi.Input[pulumi.InputType['EntitlementRequesterJustificationConfigArgs']]] = None, + __props__=None): + """ + ## Example Usage + + ### Privileged Access Manager Entitlement Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + tfentitlement = gcp.privilegedaccessmanager.Entitlement("tfentitlement", + entitlement_id="example-entitlement", + location="global", + max_request_duration="43200s", + parent="projects/my-project-name", + requester_justification_config=gcp.privilegedaccessmanager.EntitlementRequesterJustificationConfigArgs( + unstructured=gcp.privilegedaccessmanager.EntitlementRequesterJustificationConfigUnstructuredArgs(), + ), + eligible_users=[gcp.privilegedaccessmanager.EntitlementEligibleUserArgs( + principals=["group:test@google.com"], + )], + privileged_access=gcp.privilegedaccessmanager.EntitlementPrivilegedAccessArgs( + gcp_iam_access=gcp.privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessArgs( + role_bindings=[gcp.privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs( + role="roles/storage.admin", + condition_expression="request.time < timestamp(\\"2024-04-23T18:30:00.000Z\\")", + )], + resource="//cloudresourcemanager.googleapis.com/projects/my-project-name", + resource_type="cloudresourcemanager.googleapis.com/Project", + ), + ), + additional_notification_targets=gcp.privilegedaccessmanager.EntitlementAdditionalNotificationTargetsArgs( + admin_email_recipients=["user@example.com"], + requester_email_recipients=["user@example.com"], + ), + approval_workflow=gcp.privilegedaccessmanager.EntitlementApprovalWorkflowArgs( + manual_approvals=gcp.privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsArgs( + require_approver_justification=True, + steps=[gcp.privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepArgs( + approvals_needed=1, + approver_email_recipients=["user@example.com"], + approvers=gcp.privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepApproversArgs( + principals=["group:test@google.com"], + ), + )], + ), + )) + ``` + + ## Import + + Entitlement can be imported using any of these accepted formats: + + * `{{parent}}/locations/{{location}}/entitlements/{{entitlement_id}}` + + When using the `pulumi import` command, Entitlement can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:privilegedaccessmanager/entitlement:entitlement default {{parent}}/locations/{{location}}/entitlements/{{entitlement_id}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[pulumi.InputType['EntitlementAdditionalNotificationTargetsArgs']] additional_notification_targets: AdditionalNotificationTargets includes email addresses to be notified. + :param pulumi.Input[pulumi.InputType['EntitlementApprovalWorkflowArgs']] approval_workflow: The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + Different types of approval workflows that can be used to gate privileged access granting. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EntitlementEligibleUserArgs']]]] eligible_users: Who can create Grants using Entitlement. This list should contain at most one entry + Structure is documented below. + :param pulumi.Input[str] entitlement_id: The ID to use for this Entitlement. This will become the last part of the resource name. + This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + This value should be unique among all other Entitlements under the specified `parent`. + :param pulumi.Input[str] location: The region of the Entitlement resource. + :param pulumi.Input[str] max_request_duration: The maximum amount of time for which access would be granted for a request. + A requester can choose to ask for access for less than this duration but never more. + Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + :param pulumi.Input[str] parent: Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + :param pulumi.Input[pulumi.InputType['EntitlementPrivilegedAccessArgs']] privileged_access: Privileged access that this service can be used to gate. + Structure is documented below. + :param pulumi.Input[pulumi.InputType['EntitlementRequesterJustificationConfigArgs']] requester_justification_config: Defines the ways in which a requester should provide the justification while requesting for access. + Structure is documented below. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: EntitlementArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ### Privileged Access Manager Entitlement Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + tfentitlement = gcp.privilegedaccessmanager.Entitlement("tfentitlement", + entitlement_id="example-entitlement", + location="global", + max_request_duration="43200s", + parent="projects/my-project-name", + requester_justification_config=gcp.privilegedaccessmanager.EntitlementRequesterJustificationConfigArgs( + unstructured=gcp.privilegedaccessmanager.EntitlementRequesterJustificationConfigUnstructuredArgs(), + ), + eligible_users=[gcp.privilegedaccessmanager.EntitlementEligibleUserArgs( + principals=["group:test@google.com"], + )], + privileged_access=gcp.privilegedaccessmanager.EntitlementPrivilegedAccessArgs( + gcp_iam_access=gcp.privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessArgs( + role_bindings=[gcp.privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs( + role="roles/storage.admin", + condition_expression="request.time < timestamp(\\"2024-04-23T18:30:00.000Z\\")", + )], + resource="//cloudresourcemanager.googleapis.com/projects/my-project-name", + resource_type="cloudresourcemanager.googleapis.com/Project", + ), + ), + additional_notification_targets=gcp.privilegedaccessmanager.EntitlementAdditionalNotificationTargetsArgs( + admin_email_recipients=["user@example.com"], + requester_email_recipients=["user@example.com"], + ), + approval_workflow=gcp.privilegedaccessmanager.EntitlementApprovalWorkflowArgs( + manual_approvals=gcp.privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsArgs( + require_approver_justification=True, + steps=[gcp.privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepArgs( + approvals_needed=1, + approver_email_recipients=["user@example.com"], + approvers=gcp.privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepApproversArgs( + principals=["group:test@google.com"], + ), + )], + ), + )) + ``` + + ## Import + + Entitlement can be imported using any of these accepted formats: + + * `{{parent}}/locations/{{location}}/entitlements/{{entitlement_id}}` + + When using the `pulumi import` command, Entitlement can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:privilegedaccessmanager/entitlement:entitlement default {{parent}}/locations/{{location}}/entitlements/{{entitlement_id}} + ``` + + :param str resource_name: The name of the resource. + :param EntitlementArgs 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(EntitlementArgs, 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, + additional_notification_targets: Optional[pulumi.Input[pulumi.InputType['EntitlementAdditionalNotificationTargetsArgs']]] = None, + approval_workflow: Optional[pulumi.Input[pulumi.InputType['EntitlementApprovalWorkflowArgs']]] = None, + eligible_users: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EntitlementEligibleUserArgs']]]]] = None, + entitlement_id: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + max_request_duration: Optional[pulumi.Input[str]] = None, + parent: Optional[pulumi.Input[str]] = None, + privileged_access: Optional[pulumi.Input[pulumi.InputType['EntitlementPrivilegedAccessArgs']]] = None, + requester_justification_config: Optional[pulumi.Input[pulumi.InputType['EntitlementRequesterJustificationConfigArgs']]] = 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__ = EntitlementArgs.__new__(EntitlementArgs) + + __props__.__dict__["additional_notification_targets"] = additional_notification_targets + __props__.__dict__["approval_workflow"] = approval_workflow + if eligible_users is None and not opts.urn: + raise TypeError("Missing required property 'eligible_users'") + __props__.__dict__["eligible_users"] = eligible_users + if entitlement_id is None and not opts.urn: + raise TypeError("Missing required property 'entitlement_id'") + __props__.__dict__["entitlement_id"] = entitlement_id + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + if max_request_duration is None and not opts.urn: + raise TypeError("Missing required property 'max_request_duration'") + __props__.__dict__["max_request_duration"] = max_request_duration + if parent is None and not opts.urn: + raise TypeError("Missing required property 'parent'") + __props__.__dict__["parent"] = parent + if privileged_access is None and not opts.urn: + raise TypeError("Missing required property 'privileged_access'") + __props__.__dict__["privileged_access"] = privileged_access + if requester_justification_config is None and not opts.urn: + raise TypeError("Missing required property 'requester_justification_config'") + __props__.__dict__["requester_justification_config"] = requester_justification_config + __props__.__dict__["create_time"] = None + __props__.__dict__["etag"] = None + __props__.__dict__["name"] = None + __props__.__dict__["state"] = None + __props__.__dict__["update_time"] = None + super(Entitlement, __self__).__init__( + 'gcp:privilegedaccessmanager/entitlement:entitlement', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + additional_notification_targets: Optional[pulumi.Input[pulumi.InputType['EntitlementAdditionalNotificationTargetsArgs']]] = None, + approval_workflow: Optional[pulumi.Input[pulumi.InputType['EntitlementApprovalWorkflowArgs']]] = None, + create_time: Optional[pulumi.Input[str]] = None, + eligible_users: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EntitlementEligibleUserArgs']]]]] = None, + entitlement_id: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + max_request_duration: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parent: Optional[pulumi.Input[str]] = None, + privileged_access: Optional[pulumi.Input[pulumi.InputType['EntitlementPrivilegedAccessArgs']]] = None, + requester_justification_config: Optional[pulumi.Input[pulumi.InputType['EntitlementRequesterJustificationConfigArgs']]] = None, + state: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'Entitlement': + """ + Get an existing Entitlement 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['EntitlementAdditionalNotificationTargetsArgs']] additional_notification_targets: AdditionalNotificationTargets includes email addresses to be notified. + :param pulumi.Input[pulumi.InputType['EntitlementApprovalWorkflowArgs']] approval_workflow: The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + Different types of approval workflows that can be used to gate privileged access granting. + :param pulumi.Input[str] create_time: Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EntitlementEligibleUserArgs']]]] eligible_users: Who can create Grants using Entitlement. This list should contain at most one entry + Structure is documented below. + :param pulumi.Input[str] entitlement_id: The ID to use for this Entitlement. This will become the last part of the resource name. + This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + This value should be unique among all other Entitlements under the specified `parent`. + :param pulumi.Input[str] etag: For Resource freshness validation (https://google.aip.dev/154) + :param pulumi.Input[str] location: The region of the Entitlement resource. + :param pulumi.Input[str] max_request_duration: The maximum amount of time for which access would be granted for a request. + A requester can choose to ask for access for less than this duration but never more. + Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + :param pulumi.Input[str] name: Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + :param pulumi.Input[str] parent: Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + :param pulumi.Input[pulumi.InputType['EntitlementPrivilegedAccessArgs']] privileged_access: Privileged access that this service can be used to gate. + Structure is documented below. + :param pulumi.Input[pulumi.InputType['EntitlementRequesterJustificationConfigArgs']] requester_justification_config: Defines the ways in which a requester should provide the justification while requesting for access. + Structure is documented below. + :param pulumi.Input[str] state: Output only. The current state of the Entitlement. + :param pulumi.Input[str] update_time: Output only. Update time stamp. 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__ = _EntitlementState.__new__(_EntitlementState) + + __props__.__dict__["additional_notification_targets"] = additional_notification_targets + __props__.__dict__["approval_workflow"] = approval_workflow + __props__.__dict__["create_time"] = create_time + __props__.__dict__["eligible_users"] = eligible_users + __props__.__dict__["entitlement_id"] = entitlement_id + __props__.__dict__["etag"] = etag + __props__.__dict__["location"] = location + __props__.__dict__["max_request_duration"] = max_request_duration + __props__.__dict__["name"] = name + __props__.__dict__["parent"] = parent + __props__.__dict__["privileged_access"] = privileged_access + __props__.__dict__["requester_justification_config"] = requester_justification_config + __props__.__dict__["state"] = state + __props__.__dict__["update_time"] = update_time + return Entitlement(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="additionalNotificationTargets") + def additional_notification_targets(self) -> pulumi.Output[Optional['outputs.EntitlementAdditionalNotificationTargets']]: + """ + AdditionalNotificationTargets includes email addresses to be notified. + """ + return pulumi.get(self, "additional_notification_targets") + + @property + @pulumi.getter(name="approvalWorkflow") + def approval_workflow(self) -> pulumi.Output[Optional['outputs.EntitlementApprovalWorkflow']]: + """ + The approvals needed before access will be granted to a requester. No approvals will be needed if this field is null. + Different types of approval workflows that can be used to gate privileged access granting. + """ + return pulumi.get(self, "approval_workflow") + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + Output only. Create time stamp. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. + Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter(name="eligibleUsers") + def eligible_users(self) -> pulumi.Output[Sequence['outputs.EntitlementEligibleUser']]: + """ + Who can create Grants using Entitlement. This list should contain at most one entry + Structure is documented below. + """ + return pulumi.get(self, "eligible_users") + + @property + @pulumi.getter(name="entitlementId") + def entitlement_id(self) -> pulumi.Output[str]: + """ + The ID to use for this Entitlement. This will become the last part of the resource name. + This value should be 4-63 characters, and valid characters are "[a-z]", "[0-9]", and "-". The first character should be from [a-z]. + This value should be unique among all other Entitlements under the specified `parent`. + """ + return pulumi.get(self, "entitlement_id") + + @property + @pulumi.getter + def etag(self) -> pulumi.Output[str]: + """ + For Resource freshness validation (https://google.aip.dev/154) + """ + return pulumi.get(self, "etag") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The region of the Entitlement resource. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter(name="maxRequestDuration") + def max_request_duration(self) -> pulumi.Output[str]: + """ + The maximum amount of time for which access would be granted for a request. + A requester can choose to ask for access for less than this duration but never more. + Format: calculate the time in seconds and concatenate it with 's' i.e. 2 hours = "7200s", 45 minutes = "2700s" + """ + return pulumi.get(self, "max_request_duration") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + Output Only. The entitlement's name follows a hierarchical structure, comprising the organization, folder, or project, alongside the region and a unique entitlement ID. + Formats: organizations/{organization-number}/locations/{region}/entitlements/{entitlement-id}, folders/{folder-number}/locations/{region}/entitlements/{entitlement-id}, and projects/{project-id|project-number}/locations/{region}/entitlements/{entitlement-id}. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def parent(self) -> pulumi.Output[str]: + """ + Format: project/{project_id} or organization/{organization_number} or folder/{folder_number} + """ + return pulumi.get(self, "parent") + + @property + @pulumi.getter(name="privilegedAccess") + def privileged_access(self) -> pulumi.Output['outputs.EntitlementPrivilegedAccess']: + """ + Privileged access that this service can be used to gate. + Structure is documented below. + """ + return pulumi.get(self, "privileged_access") + + @property + @pulumi.getter(name="requesterJustificationConfig") + def requester_justification_config(self) -> pulumi.Output['outputs.EntitlementRequesterJustificationConfig']: + """ + Defines the ways in which a requester should provide the justification while requesting for access. + Structure is documented below. + """ + return pulumi.get(self, "requester_justification_config") + + @property + @pulumi.getter + def state(self) -> pulumi.Output[str]: + """ + Output only. The current state of the Entitlement. + """ + return pulumi.get(self, "state") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + Output only. Update time stamp. 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/privilegedaccessmanager/outputs.py b/sdk/python/pulumi_gcp/privilegedaccessmanager/outputs.py new file mode 100644 index 0000000000..dc5de35492 --- /dev/null +++ b/sdk/python/pulumi_gcp/privilegedaccessmanager/outputs.py @@ -0,0 +1,491 @@ +# 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__ = [ + 'EntitlementAdditionalNotificationTargets', + 'EntitlementApprovalWorkflow', + 'EntitlementApprovalWorkflowManualApprovals', + 'EntitlementApprovalWorkflowManualApprovalsStep', + 'EntitlementApprovalWorkflowManualApprovalsStepApprovers', + 'EntitlementEligibleUser', + 'EntitlementPrivilegedAccess', + 'EntitlementPrivilegedAccessGcpIamAccess', + 'EntitlementPrivilegedAccessGcpIamAccessRoleBinding', + 'EntitlementRequesterJustificationConfig', + 'EntitlementRequesterJustificationConfigNotMandatory', + 'EntitlementRequesterJustificationConfigUnstructured', +] + +@pulumi.output_type +class EntitlementAdditionalNotificationTargets(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "adminEmailRecipients": + suggest = "admin_email_recipients" + elif key == "requesterEmailRecipients": + suggest = "requester_email_recipients" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in EntitlementAdditionalNotificationTargets. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + EntitlementAdditionalNotificationTargets.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + EntitlementAdditionalNotificationTargets.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + admin_email_recipients: Optional[Sequence[str]] = None, + requester_email_recipients: Optional[Sequence[str]] = None): + """ + :param Sequence[str] admin_email_recipients: Optional. Additional email addresses to be notified when a principal(requester) is granted access. + :param Sequence[str] requester_email_recipients: Optional. Additional email address to be notified about an eligible entitlement. + """ + if admin_email_recipients is not None: + pulumi.set(__self__, "admin_email_recipients", admin_email_recipients) + if requester_email_recipients is not None: + pulumi.set(__self__, "requester_email_recipients", requester_email_recipients) + + @property + @pulumi.getter(name="adminEmailRecipients") + def admin_email_recipients(self) -> Optional[Sequence[str]]: + """ + Optional. Additional email addresses to be notified when a principal(requester) is granted access. + """ + return pulumi.get(self, "admin_email_recipients") + + @property + @pulumi.getter(name="requesterEmailRecipients") + def requester_email_recipients(self) -> Optional[Sequence[str]]: + """ + Optional. Additional email address to be notified about an eligible entitlement. + """ + return pulumi.get(self, "requester_email_recipients") + + +@pulumi.output_type +class EntitlementApprovalWorkflow(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "manualApprovals": + suggest = "manual_approvals" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in EntitlementApprovalWorkflow. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + EntitlementApprovalWorkflow.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + EntitlementApprovalWorkflow.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + manual_approvals: 'outputs.EntitlementApprovalWorkflowManualApprovals'): + """ + :param 'EntitlementApprovalWorkflowManualApprovalsArgs' manual_approvals: A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + This can be used to create approval workflows such as + * Require an approval from any user in a group G. + * Require an approval from any k number of users from a Group G. + * Require an approval from any user in a group G and then from a user U. etc. + A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + Structure is documented below. + """ + pulumi.set(__self__, "manual_approvals", manual_approvals) + + @property + @pulumi.getter(name="manualApprovals") + def manual_approvals(self) -> 'outputs.EntitlementApprovalWorkflowManualApprovals': + """ + A manual approval workflow where users who are designated as approvers need to call the ApproveGrant/DenyGrant APIs for an Grant. + The workflow can consist of multiple serial steps where each step defines who can act as Approver in that step and how many of those users should approve before the workflow moves to the next step. + This can be used to create approval workflows such as + * Require an approval from any user in a group G. + * Require an approval from any k number of users from a Group G. + * Require an approval from any user in a group G and then from a user U. etc. + A single user might be part of `approvers` ACL for multiple steps in this workflow but they can only approve once and that approval will only be considered to satisfy the approval step at which it was granted. + Structure is documented below. + """ + return pulumi.get(self, "manual_approvals") + + +@pulumi.output_type +class EntitlementApprovalWorkflowManualApprovals(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "requireApproverJustification": + suggest = "require_approver_justification" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in EntitlementApprovalWorkflowManualApprovals. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + EntitlementApprovalWorkflowManualApprovals.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + EntitlementApprovalWorkflowManualApprovals.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + steps: Sequence['outputs.EntitlementApprovalWorkflowManualApprovalsStep'], + require_approver_justification: Optional[bool] = None): + """ + :param Sequence['EntitlementApprovalWorkflowManualApprovalsStepArgs'] steps: List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + Structure is documented below. + :param bool require_approver_justification: Optional. Do the approvers need to provide a justification for their actions? + """ + pulumi.set(__self__, "steps", steps) + if require_approver_justification is not None: + pulumi.set(__self__, "require_approver_justification", require_approver_justification) + + @property + @pulumi.getter + def steps(self) -> Sequence['outputs.EntitlementApprovalWorkflowManualApprovalsStep']: + """ + List of approval steps in this workflow. These steps would be followed in the specified order sequentially. 1 step is supported for now. + Structure is documented below. + """ + return pulumi.get(self, "steps") + + @property + @pulumi.getter(name="requireApproverJustification") + def require_approver_justification(self) -> Optional[bool]: + """ + Optional. Do the approvers need to provide a justification for their actions? + """ + return pulumi.get(self, "require_approver_justification") + + +@pulumi.output_type +class EntitlementApprovalWorkflowManualApprovalsStep(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "approvalsNeeded": + suggest = "approvals_needed" + elif key == "approverEmailRecipients": + suggest = "approver_email_recipients" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in EntitlementApprovalWorkflowManualApprovalsStep. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + EntitlementApprovalWorkflowManualApprovalsStep.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + EntitlementApprovalWorkflowManualApprovalsStep.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + approvers: 'outputs.EntitlementApprovalWorkflowManualApprovalsStepApprovers', + approvals_needed: Optional[int] = None, + approver_email_recipients: Optional[Sequence[str]] = None): + """ + :param 'EntitlementApprovalWorkflowManualApprovalsStepApproversArgs' approvers: The potential set of approvers in this step. This list should contain at only one entry. + Structure is documented below. + :param int approvals_needed: How many users from the above list need to approve. + If there are not enough distinct users in the list above then the workflow + will indefinitely block. Should always be greater than 0. Currently 1 is the only + supported value. + :param Sequence[str] approver_email_recipients: Optional. Additional email addresses to be notified when a grant is pending approval. + """ + pulumi.set(__self__, "approvers", approvers) + if approvals_needed is not None: + pulumi.set(__self__, "approvals_needed", approvals_needed) + if approver_email_recipients is not None: + pulumi.set(__self__, "approver_email_recipients", approver_email_recipients) + + @property + @pulumi.getter + def approvers(self) -> 'outputs.EntitlementApprovalWorkflowManualApprovalsStepApprovers': + """ + The potential set of approvers in this step. This list should contain at only one entry. + Structure is documented below. + """ + return pulumi.get(self, "approvers") + + @property + @pulumi.getter(name="approvalsNeeded") + def approvals_needed(self) -> Optional[int]: + """ + How many users from the above list need to approve. + If there are not enough distinct users in the list above then the workflow + will indefinitely block. Should always be greater than 0. Currently 1 is the only + supported value. + """ + return pulumi.get(self, "approvals_needed") + + @property + @pulumi.getter(name="approverEmailRecipients") + def approver_email_recipients(self) -> Optional[Sequence[str]]: + """ + Optional. Additional email addresses to be notified when a grant is pending approval. + """ + return pulumi.get(self, "approver_email_recipients") + + +@pulumi.output_type +class EntitlementApprovalWorkflowManualApprovalsStepApprovers(dict): + def __init__(__self__, *, + principals: Sequence[str]): + """ + :param Sequence[str] principals: Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + """ + pulumi.set(__self__, "principals", principals) + + @property + @pulumi.getter + def principals(self) -> Sequence[str]: + """ + Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at: https://cloud.google.com/iam/docs/principal-identifiers#v1 + """ + return pulumi.get(self, "principals") + + +@pulumi.output_type +class EntitlementEligibleUser(dict): + def __init__(__self__, *, + principals: Sequence[str]): + """ + :param Sequence[str] principals: Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + """ + pulumi.set(__self__, "principals", principals) + + @property + @pulumi.getter + def principals(self) -> Sequence[str]: + """ + Users who are being allowed for the operation. Each entry should be a valid v1 IAM Principal Identifier. Format for these is documented at "https://cloud.google.com/iam/docs/principal-identifiers#v1" + """ + return pulumi.get(self, "principals") + + +@pulumi.output_type +class EntitlementPrivilegedAccess(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "gcpIamAccess": + suggest = "gcp_iam_access" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in EntitlementPrivilegedAccess. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + EntitlementPrivilegedAccess.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + EntitlementPrivilegedAccess.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + gcp_iam_access: 'outputs.EntitlementPrivilegedAccessGcpIamAccess'): + """ + :param 'EntitlementPrivilegedAccessGcpIamAccessArgs' gcp_iam_access: GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + Structure is documented below. + """ + pulumi.set(__self__, "gcp_iam_access", gcp_iam_access) + + @property + @pulumi.getter(name="gcpIamAccess") + def gcp_iam_access(self) -> 'outputs.EntitlementPrivilegedAccessGcpIamAccess': + """ + GcpIamAccess represents IAM based access control on a GCP resource. Refer to https://cloud.google.com/iam/docs to understand more about IAM. + Structure is documented below. + """ + return pulumi.get(self, "gcp_iam_access") + + +@pulumi.output_type +class EntitlementPrivilegedAccessGcpIamAccess(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "resourceType": + suggest = "resource_type" + elif key == "roleBindings": + suggest = "role_bindings" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in EntitlementPrivilegedAccessGcpIamAccess. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + EntitlementPrivilegedAccessGcpIamAccess.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + EntitlementPrivilegedAccessGcpIamAccess.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + resource: str, + resource_type: str, + role_bindings: Sequence['outputs.EntitlementPrivilegedAccessGcpIamAccessRoleBinding']): + """ + :param str resource: Name of the resource. + :param str resource_type: The type of this resource. + :param Sequence['EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs'] role_bindings: Role bindings to be created on successful grant. + Structure is documented below. + """ + pulumi.set(__self__, "resource", resource) + pulumi.set(__self__, "resource_type", resource_type) + pulumi.set(__self__, "role_bindings", role_bindings) + + @property + @pulumi.getter + def resource(self) -> str: + """ + Name of the resource. + """ + return pulumi.get(self, "resource") + + @property + @pulumi.getter(name="resourceType") + def resource_type(self) -> str: + """ + The type of this resource. + """ + return pulumi.get(self, "resource_type") + + @property + @pulumi.getter(name="roleBindings") + def role_bindings(self) -> Sequence['outputs.EntitlementPrivilegedAccessGcpIamAccessRoleBinding']: + """ + Role bindings to be created on successful grant. + Structure is documented below. + """ + return pulumi.get(self, "role_bindings") + + +@pulumi.output_type +class EntitlementPrivilegedAccessGcpIamAccessRoleBinding(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "conditionExpression": + suggest = "condition_expression" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in EntitlementPrivilegedAccessGcpIamAccessRoleBinding. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + EntitlementPrivilegedAccessGcpIamAccessRoleBinding.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + EntitlementPrivilegedAccessGcpIamAccessRoleBinding.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + role: str, + condition_expression: Optional[str] = None): + """ + :param str role: IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + :param str condition_expression: The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + https://cloud.google.com/iam/docs/conditions-overview#attributes. + """ + pulumi.set(__self__, "role", role) + if condition_expression is not None: + pulumi.set(__self__, "condition_expression", condition_expression) + + @property + @pulumi.getter + def role(self) -> str: + """ + IAM role to be granted. https://cloud.google.com/iam/docs/roles-overview. + """ + return pulumi.get(self, "role") + + @property + @pulumi.getter(name="conditionExpression") + def condition_expression(self) -> Optional[str]: + """ + The expression field of the IAM condition to be associated with the role. If specified, a user with an active grant for this entitlement would be able to access the resource only if this condition evaluates to true for their request. + https://cloud.google.com/iam/docs/conditions-overview#attributes. + """ + return pulumi.get(self, "condition_expression") + + +@pulumi.output_type +class EntitlementRequesterJustificationConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "notMandatory": + suggest = "not_mandatory" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in EntitlementRequesterJustificationConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + EntitlementRequesterJustificationConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + EntitlementRequesterJustificationConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + not_mandatory: Optional['outputs.EntitlementRequesterJustificationConfigNotMandatory'] = None, + unstructured: Optional['outputs.EntitlementRequesterJustificationConfigUnstructured'] = None): + """ + :param 'EntitlementRequesterJustificationConfigNotMandatoryArgs' not_mandatory: The justification is not mandatory but can be provided in any of the supported formats. + :param 'EntitlementRequesterJustificationConfigUnstructuredArgs' unstructured: The requester has to provide a justification in the form of free flowing text. + + - - - + """ + if not_mandatory is not None: + pulumi.set(__self__, "not_mandatory", not_mandatory) + if unstructured is not None: + pulumi.set(__self__, "unstructured", unstructured) + + @property + @pulumi.getter(name="notMandatory") + def not_mandatory(self) -> Optional['outputs.EntitlementRequesterJustificationConfigNotMandatory']: + """ + The justification is not mandatory but can be provided in any of the supported formats. + """ + return pulumi.get(self, "not_mandatory") + + @property + @pulumi.getter + def unstructured(self) -> Optional['outputs.EntitlementRequesterJustificationConfigUnstructured']: + """ + The requester has to provide a justification in the form of free flowing text. + + - - - + """ + return pulumi.get(self, "unstructured") + + +@pulumi.output_type +class EntitlementRequesterJustificationConfigNotMandatory(dict): + def __init__(__self__): + pass + + +@pulumi.output_type +class EntitlementRequesterJustificationConfigUnstructured(dict): + def __init__(__self__): + pass + + diff --git a/sdk/python/pulumi_gcp/provider.py b/sdk/python/pulumi_gcp/provider.py index 78c6a6ee69..5c1a4a7f3b 100644 --- a/sdk/python/pulumi_gcp/provider.py +++ b/sdk/python/pulumi_gcp/provider.py @@ -140,6 +140,7 @@ def __init__(__self__, *, os_login_custom_endpoint: Optional[pulumi.Input[str]] = None, parallelstore_custom_endpoint: Optional[pulumi.Input[str]] = None, privateca_custom_endpoint: Optional[pulumi.Input[str]] = None, + privileged_access_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, public_ca_custom_endpoint: Optional[pulumi.Input[str]] = None, pubsub_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -436,6 +437,8 @@ def __init__(__self__, *, pulumi.set(__self__, "parallelstore_custom_endpoint", parallelstore_custom_endpoint) if privateca_custom_endpoint is not None: pulumi.set(__self__, "privateca_custom_endpoint", privateca_custom_endpoint) + if privileged_access_manager_custom_endpoint is not None: + pulumi.set(__self__, "privileged_access_manager_custom_endpoint", privileged_access_manager_custom_endpoint) if project is None: project = _utilities.get_env('GOOGLE_PROJECT', 'GOOGLE_CLOUD_PROJECT', 'GCLOUD_PROJECT', 'CLOUDSDK_CORE_PROJECT') if project is not None: @@ -1654,6 +1657,15 @@ def privateca_custom_endpoint(self) -> Optional[pulumi.Input[str]]: def privateca_custom_endpoint(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "privateca_custom_endpoint", value) + @property + @pulumi.getter(name="privilegedAccessManagerCustomEndpoint") + def privileged_access_manager_custom_endpoint(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "privileged_access_manager_custom_endpoint") + + @privileged_access_manager_custom_endpoint.setter + def privileged_access_manager_custom_endpoint(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "privileged_access_manager_custom_endpoint", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -2172,6 +2184,7 @@ def __init__(__self__, os_login_custom_endpoint: Optional[pulumi.Input[str]] = None, parallelstore_custom_endpoint: Optional[pulumi.Input[str]] = None, privateca_custom_endpoint: Optional[pulumi.Input[str]] = None, + privileged_access_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, public_ca_custom_endpoint: Optional[pulumi.Input[str]] = None, pubsub_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -2377,6 +2390,7 @@ def _internal_init(__self__, os_login_custom_endpoint: Optional[pulumi.Input[str]] = None, parallelstore_custom_endpoint: Optional[pulumi.Input[str]] = None, privateca_custom_endpoint: Optional[pulumi.Input[str]] = None, + privileged_access_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, public_ca_custom_endpoint: Optional[pulumi.Input[str]] = None, pubsub_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -2554,6 +2568,7 @@ def _internal_init(__self__, __props__.__dict__["os_login_custom_endpoint"] = os_login_custom_endpoint __props__.__dict__["parallelstore_custom_endpoint"] = parallelstore_custom_endpoint __props__.__dict__["privateca_custom_endpoint"] = privateca_custom_endpoint + __props__.__dict__["privileged_access_manager_custom_endpoint"] = privileged_access_manager_custom_endpoint if project is None: project = _utilities.get_env('GOOGLE_PROJECT', 'GOOGLE_CLOUD_PROJECT', 'GCLOUD_PROJECT', 'CLOUDSDK_CORE_PROJECT') __props__.__dict__["project"] = project @@ -3211,6 +3226,11 @@ def parallelstore_custom_endpoint(self) -> pulumi.Output[Optional[str]]: def privateca_custom_endpoint(self) -> pulumi.Output[Optional[str]]: return pulumi.get(self, "privateca_custom_endpoint") + @property + @pulumi.getter(name="privilegedAccessManagerCustomEndpoint") + def privileged_access_manager_custom_endpoint(self) -> pulumi.Output[Optional[str]]: + return pulumi.get(self, "privileged_access_manager_custom_endpoint") + @property @pulumi.getter def project(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/redis/cluster.py b/sdk/python/pulumi_gcp/redis/cluster.py index 940796fefd..f8c7033805 100644 --- a/sdk/python/pulumi_gcp/redis/cluster.py +++ b/sdk/python/pulumi_gcp/redis/cluster.py @@ -22,6 +22,7 @@ def __init__(__self__, *, name: Optional[pulumi.Input[str]] = None, node_type: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, + 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): @@ -39,6 +40,9 @@ def __init__(__self__, *, projects/{projectId}/locations/{locationId}/clusters/{clusterId} :param pulumi.Input[str] node_type: The nodeType for the Redis cluster. If not provided, REDIS_HIGHMEM_MEDIUM will be used as default Possible values: ["REDIS_SHARED_CORE_NANO", "REDIS_HIGHMEM_MEDIUM", "REDIS_HIGHMEM_XLARGE", "REDIS_STANDARD_SMALL"] + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] redis_configs: Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + documentation for the list of supported parameters: + https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations :param pulumi.Input[str] region: The name of the region of the Redis cluster. :param pulumi.Input[int] replica_count: Optional. The number of replica nodes per shard. :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. @@ -55,6 +59,8 @@ def __init__(__self__, *, pulumi.set(__self__, "node_type", node_type) if project is not None: pulumi.set(__self__, "project", project) + if redis_configs is not None: + pulumi.set(__self__, "redis_configs", redis_configs) if region is not None: pulumi.set(__self__, "region", region) if replica_count is not None: @@ -138,6 +144,20 @@ def project(self) -> Optional[pulumi.Input[str]]: def project(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "project", value) + @property + @pulumi.getter(name="redisConfigs") + def redis_configs(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + documentation for the list of supported parameters: + https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + """ + return pulumi.get(self, "redis_configs") + + @redis_configs.setter + def redis_configs(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "redis_configs", value) + @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: @@ -189,6 +209,7 @@ def __init__(__self__, *, project: Optional[pulumi.Input[str]] = None, psc_configs: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterPscConfigArgs']]]] = None, psc_connections: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterPscConnectionArgs']]]] = None, + redis_configs: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, region: Optional[pulumi.Input[str]] = None, replica_count: Optional[pulumi.Input[int]] = None, shard_count: Optional[pulumi.Input[int]] = None, @@ -220,6 +241,9 @@ def __init__(__self__, *, Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input['ClusterPscConnectionArgs']]] psc_connections: Output only. PSC connections for discovery of the cluster topology and accessing the cluster. Structure is documented below. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] redis_configs: Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + documentation for the list of supported parameters: + https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations :param pulumi.Input[str] region: The name of the region of the Redis cluster. :param pulumi.Input[int] replica_count: Optional. The number of replica nodes per shard. :param pulumi.Input[int] shard_count: Required. Number of shards for the Redis cluster. @@ -250,6 +274,8 @@ def __init__(__self__, *, pulumi.set(__self__, "psc_configs", psc_configs) if psc_connections is not None: pulumi.set(__self__, "psc_connections", psc_connections) + if redis_configs is not None: + pulumi.set(__self__, "redis_configs", redis_configs) if region is not None: pulumi.set(__self__, "region", region) if replica_count is not None: @@ -385,6 +411,20 @@ def psc_connections(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['Cluste def psc_connections(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterPscConnectionArgs']]]]): pulumi.set(self, "psc_connections", value) + @property + @pulumi.getter(name="redisConfigs") + def redis_configs(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + documentation for the list of supported parameters: + https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + """ + return pulumi.get(self, "redis_configs") + + @redis_configs.setter + def redis_configs(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "redis_configs", value) + @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: @@ -495,6 +535,7 @@ def __init__(__self__, node_type: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, psc_configs: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ClusterPscConfigArgs']]]]] = None, + redis_configs: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, region: Optional[pulumi.Input[str]] = None, replica_count: Optional[pulumi.Input[int]] = None, shard_count: Optional[pulumi.Input[int]] = None, @@ -530,7 +571,10 @@ def __init__(__self__, replica_count=1, node_type="REDIS_SHARED_CORE_NANO", transit_encryption_mode="TRANSIT_ENCRYPTION_MODE_DISABLED", - authorization_mode="AUTH_MODE_DISABLED") + authorization_mode="AUTH_MODE_DISABLED", + redis_configs={ + "maxmemory-policy": "volatile-ttl", + }) producer_subnet = gcp.compute.Subnetwork("producer_subnet", name="mysubnet", ip_cidr_range="10.0.0.248/29", @@ -590,6 +634,9 @@ def __init__(__self__, network addresses will be designated to the cluster for client access. Currently, only one PscConfig is supported. Structure is documented below. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] redis_configs: Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + documentation for the list of supported parameters: + https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations :param pulumi.Input[str] region: The name of the region of the Redis cluster. :param pulumi.Input[int] replica_count: Optional. The number of replica nodes per shard. :param pulumi.Input[int] shard_count: Required. Number of shards for the Redis cluster. @@ -633,7 +680,10 @@ def __init__(__self__, replica_count=1, node_type="REDIS_SHARED_CORE_NANO", transit_encryption_mode="TRANSIT_ENCRYPTION_MODE_DISABLED", - authorization_mode="AUTH_MODE_DISABLED") + authorization_mode="AUTH_MODE_DISABLED", + redis_configs={ + "maxmemory-policy": "volatile-ttl", + }) producer_subnet = gcp.compute.Subnetwork("producer_subnet", name="mysubnet", ip_cidr_range="10.0.0.248/29", @@ -700,6 +750,7 @@ def _internal_init(__self__, node_type: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, psc_configs: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ClusterPscConfigArgs']]]]] = None, + redis_configs: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, region: Optional[pulumi.Input[str]] = None, replica_count: Optional[pulumi.Input[int]] = None, shard_count: Optional[pulumi.Input[int]] = None, @@ -720,6 +771,7 @@ def _internal_init(__self__, if psc_configs is None and not opts.urn: raise TypeError("Missing required property 'psc_configs'") __props__.__dict__["psc_configs"] = psc_configs + __props__.__dict__["redis_configs"] = redis_configs __props__.__dict__["region"] = region __props__.__dict__["replica_count"] = replica_count if shard_count is None and not opts.urn: @@ -753,6 +805,7 @@ def get(resource_name: str, project: Optional[pulumi.Input[str]] = None, psc_configs: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ClusterPscConfigArgs']]]]] = None, psc_connections: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ClusterPscConnectionArgs']]]]] = None, + redis_configs: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, region: Optional[pulumi.Input[str]] = None, replica_count: Optional[pulumi.Input[int]] = None, shard_count: Optional[pulumi.Input[int]] = None, @@ -789,6 +842,9 @@ def get(resource_name: str, Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ClusterPscConnectionArgs']]]] psc_connections: Output only. PSC connections for discovery of the cluster topology and accessing the cluster. Structure is documented below. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] redis_configs: Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + documentation for the list of supported parameters: + https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations :param pulumi.Input[str] region: The name of the region of the Redis cluster. :param pulumi.Input[int] replica_count: Optional. The number of replica nodes per shard. :param pulumi.Input[int] shard_count: Required. Number of shards for the Redis cluster. @@ -814,6 +870,7 @@ def get(resource_name: str, __props__.__dict__["project"] = project __props__.__dict__["psc_configs"] = psc_configs __props__.__dict__["psc_connections"] = psc_connections + __props__.__dict__["redis_configs"] = redis_configs __props__.__dict__["region"] = region __props__.__dict__["replica_count"] = replica_count __props__.__dict__["shard_count"] = shard_count @@ -906,6 +963,16 @@ def psc_connections(self) -> pulumi.Output[Sequence['outputs.ClusterPscConnectio """ return pulumi.get(self, "psc_connections") + @property + @pulumi.getter(name="redisConfigs") + def redis_configs(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + Configure Redis Cluster behavior using a subset of native Redis configuration parameters. Please check Memorystore + documentation for the list of supported parameters: + https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations + """ + return pulumi.get(self, "redis_configs") + @property @pulumi.getter def region(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/storage/__init__.py b/sdk/python/pulumi_gcp/storage/__init__.py index 9e6343104e..7bcc3e9041 100644 --- a/sdk/python/pulumi_gcp/storage/__init__.py +++ b/sdk/python/pulumi_gcp/storage/__init__.py @@ -19,6 +19,7 @@ from .get_bucket_object import * from .get_bucket_object_content import * from .get_bucket_objects import * +from .get_buckets import * from .get_object_signed_url import * from .get_project_service_account import * from .get_transfer_project_service_account import * diff --git a/sdk/python/pulumi_gcp/storage/get_buckets.py b/sdk/python/pulumi_gcp/storage/get_buckets.py new file mode 100644 index 0000000000..7c5af0ac55 --- /dev/null +++ b/sdk/python/pulumi_gcp/storage/get_buckets.py @@ -0,0 +1,138 @@ +# 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__ = [ + 'GetBucketsResult', + 'AwaitableGetBucketsResult', + 'get_buckets', + 'get_buckets_output', +] + +@pulumi.output_type +class GetBucketsResult: + """ + A collection of values returned by getBuckets. + """ + def __init__(__self__, buckets=None, id=None, prefix=None, project=None): + if buckets and not isinstance(buckets, list): + raise TypeError("Expected argument 'buckets' to be a list") + pulumi.set(__self__, "buckets", buckets) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if prefix and not isinstance(prefix, str): + raise TypeError("Expected argument 'prefix' to be a str") + pulumi.set(__self__, "prefix", prefix) + if project and not isinstance(project, str): + raise TypeError("Expected argument 'project' to be a str") + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter + def buckets(self) -> Sequence['outputs.GetBucketsBucketResult']: + """ + A list of all retrieved GCS buckets. Structure is defined below. + """ + return pulumi.get(self, "buckets") + + @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 prefix(self) -> Optional[str]: + return pulumi.get(self, "prefix") + + @property + @pulumi.getter + def project(self) -> Optional[str]: + return pulumi.get(self, "project") + + +class AwaitableGetBucketsResult(GetBucketsResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetBucketsResult( + buckets=self.buckets, + id=self.id, + prefix=self.prefix, + project=self.project) + + +def get_buckets(prefix: Optional[str] = None, + project: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetBucketsResult: + """ + Gets a list of existing GCS buckets. + See [the official documentation](https://cloud.google.com/storage/docs/introduction) + and [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list). + + ## Example Usage + + Example GCS buckets. + + ```python + import pulumi + import pulumi_gcp as gcp + + example = gcp.storage.get_buckets(project="example-project") + ``` + + + :param str prefix: Filter results to buckets whose names begin with this prefix. + :param str project: The ID of the project. If it is not provided, the provider project is used. + """ + __args__ = dict() + __args__['prefix'] = prefix + __args__['project'] = project + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('gcp:storage/getBuckets:getBuckets', __args__, opts=opts, typ=GetBucketsResult).value + + return AwaitableGetBucketsResult( + buckets=pulumi.get(__ret__, 'buckets'), + id=pulumi.get(__ret__, 'id'), + prefix=pulumi.get(__ret__, 'prefix'), + project=pulumi.get(__ret__, 'project')) + + +@_utilities.lift_output_func(get_buckets) +def get_buckets_output(prefix: Optional[pulumi.Input[Optional[str]]] = None, + project: Optional[pulumi.Input[Optional[str]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetBucketsResult]: + """ + Gets a list of existing GCS buckets. + See [the official documentation](https://cloud.google.com/storage/docs/introduction) + and [API](https://cloud.google.com/storage/docs/json_api/v1/buckets/list). + + ## Example Usage + + Example GCS buckets. + + ```python + import pulumi + import pulumi_gcp as gcp + + example = gcp.storage.get_buckets(project="example-project") + ``` + + + :param str prefix: Filter results to buckets whose names begin with this prefix. + :param str project: The ID of the project. If it is not provided, the provider project is used. + """ + ... diff --git a/sdk/python/pulumi_gcp/storage/outputs.py b/sdk/python/pulumi_gcp/storage/outputs.py index 2c8b8d419d..a9dc027dae 100644 --- a/sdk/python/pulumi_gcp/storage/outputs.py +++ b/sdk/python/pulumi_gcp/storage/outputs.py @@ -72,6 +72,7 @@ 'GetBucketSoftDeletePolicyResult', 'GetBucketVersioningResult', 'GetBucketWebsiteResult', + 'GetBucketsBucketResult', ] @pulumi.output_type @@ -3223,3 +3224,65 @@ def not_found_page(self) -> str: return pulumi.get(self, "not_found_page") +@pulumi.output_type +class GetBucketsBucketResult(dict): + def __init__(__self__, *, + labels: Mapping[str, str], + location: str, + name: str, + self_link: str, + storage_class: str): + """ + :param Mapping[str, str] labels: User-provided bucket labels, in key/value pairs. + :param str location: The location of the bucket. + :param str name: The name of the bucket. + :param str self_link: A url reference to the bucket. + :param str storage_class: The [StorageClass](https://cloud.google.com/storage/docs/storage-classes) of the bucket. + """ + pulumi.set(__self__, "labels", labels) + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "self_link", self_link) + pulumi.set(__self__, "storage_class", storage_class) + + @property + @pulumi.getter + def labels(self) -> Mapping[str, str]: + """ + User-provided bucket labels, in key/value pairs. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def location(self) -> str: + """ + The location of the bucket. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the bucket. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="selfLink") + def self_link(self) -> str: + """ + A url reference to the bucket. + """ + return pulumi.get(self, "self_link") + + @property + @pulumi.getter(name="storageClass") + def storage_class(self) -> str: + """ + The [StorageClass](https://cloud.google.com/storage/docs/storage-classes) of the bucket. + """ + return pulumi.get(self, "storage_class") + + diff --git a/upstream b/upstream index 5541da4289..c840288a61 160000 --- a/upstream +++ b/upstream @@ -1 +1 @@ -Subproject commit 5541da4289cfe1f3945cfcc86f7cdb80d7f09f8c +Subproject commit c840288a61fe926a73f53d21ce5a3b5d6d07a29b