All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.gcp.alloydb.kotlin.Cluster.kt Maven / Gradle / Ivy

Go to download

Build cloud applications and infrastructure by combining the safety and reliability of infrastructure as code with the power of the Kotlin programming language.

There is a newer version: 8.10.0.0
Show newest version
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.gcp.alloydb.kotlin

import com.pulumi.core.Output
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterAutomatedBackupPolicy
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterBackupSource
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterContinuousBackupConfig
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterContinuousBackupInfo
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterEncryptionConfig
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterEncryptionInfo
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterInitialUser
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterMaintenanceUpdatePolicy
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterMigrationSource
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterNetworkConfig
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterRestoreBackupSource
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterRestoreContinuousBackupSource
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterSecondaryConfig
import com.pulumi.kotlin.KotlinCustomResource
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.ResourceMapper
import com.pulumi.kotlin.options.CustomResourceOptions
import com.pulumi.kotlin.options.CustomResourceOptionsBuilder
import com.pulumi.resources.Resource
import kotlin.Boolean
import kotlin.Deprecated
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterAutomatedBackupPolicy.Companion.toKotlin as clusterAutomatedBackupPolicyToKotlin
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterBackupSource.Companion.toKotlin as clusterBackupSourceToKotlin
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterContinuousBackupConfig.Companion.toKotlin as clusterContinuousBackupConfigToKotlin
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterContinuousBackupInfo.Companion.toKotlin as clusterContinuousBackupInfoToKotlin
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterEncryptionConfig.Companion.toKotlin as clusterEncryptionConfigToKotlin
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterEncryptionInfo.Companion.toKotlin as clusterEncryptionInfoToKotlin
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterInitialUser.Companion.toKotlin as clusterInitialUserToKotlin
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterMaintenanceUpdatePolicy.Companion.toKotlin as clusterMaintenanceUpdatePolicyToKotlin
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterMigrationSource.Companion.toKotlin as clusterMigrationSourceToKotlin
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterNetworkConfig.Companion.toKotlin as clusterNetworkConfigToKotlin
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterRestoreBackupSource.Companion.toKotlin as clusterRestoreBackupSourceToKotlin
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterRestoreContinuousBackupSource.Companion.toKotlin as clusterRestoreContinuousBackupSourceToKotlin
import com.pulumi.gcp.alloydb.kotlin.outputs.ClusterSecondaryConfig.Companion.toKotlin as clusterSecondaryConfigToKotlin

/**
 * Builder for [Cluster].
 */
@PulumiTagMarker
public class ClusterResourceBuilder internal constructor() {
    public var name: String? = null

    public var args: ClusterArgs = ClusterArgs()

    public var opts: CustomResourceOptions = CustomResourceOptions()

    /**
     * @param name The _unique_ name of the resulting resource.
     */
    public fun name(`value`: String) {
        this.name = value
    }

    /**
     * @param block The arguments to use to populate this resource's properties.
     */
    public suspend fun args(block: suspend ClusterArgsBuilder.() -> Unit) {
        val builder = ClusterArgsBuilder()
        block(builder)
        this.args = builder.build()
    }

    /**
     * @param block A bag of options that control this resource's behavior.
     */
    public suspend fun opts(block: suspend CustomResourceOptionsBuilder.() -> Unit) {
        this.opts = com.pulumi.kotlin.options.CustomResourceOptions.opts(block)
    }

    internal fun build(): Cluster {
        val builtJavaResource = com.pulumi.gcp.alloydb.Cluster(
            this.name,
            this.args.toJava(),
            this.opts.toJava(),
        )
        return Cluster(builtJavaResource)
    }
}

/**
 * A managed alloydb cluster.
 * To get more information about Cluster, see:
 * * [API documentation](https://cloud.google.com/alloydb/docs/reference/rest/v1/projects.locations.clusters/create)
 * * How-to Guides
 *     * [AlloyDB](https://cloud.google.com/alloydb/docs/)
 * > **Note:** Users can promote a secondary cluster to a primary cluster with the help of `cluster_type`.
 * To promote, users have to set the `cluster_type` property as `PRIMARY` and remove the `secondary_config` field from cluster configuration.
 * See Example.
 * ## Example Usage
 * ### Alloydb Cluster Basic
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const defaultNetwork = new gcp.compute.Network("default", {name: "alloydb-cluster"});
 * const _default = new gcp.alloydb.Cluster("default", {
 *     clusterId: "alloydb-cluster",
 *     location: "us-central1",
 *     network: defaultNetwork.id,
 * });
 * const project = gcp.organizations.getProject({});
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * default_network = gcp.compute.Network("default", name="alloydb-cluster")
 * default = gcp.alloydb.Cluster("default",
 *     cluster_id="alloydb-cluster",
 *     location="us-central1",
 *     network=default_network.id)
 * project = gcp.organizations.get_project()
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var defaultNetwork = new Gcp.Compute.Network("default", new()
 *     {
 *         Name = "alloydb-cluster",
 *     });
 *     var @default = new Gcp.Alloydb.Cluster("default", new()
 *     {
 *         ClusterId = "alloydb-cluster",
 *         Location = "us-central1",
 *         Network = defaultNetwork.Id,
 *     });
 *     var project = Gcp.Organizations.GetProject.Invoke();
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/alloydb"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute"
 * 	"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 {
 * 		defaultNetwork, err := compute.NewNetwork(ctx, "default", &compute.NetworkArgs{
 * 			Name: pulumi.String("alloydb-cluster"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = alloydb.NewCluster(ctx, "default", &alloydb.ClusterArgs{
 * 			ClusterId: pulumi.String("alloydb-cluster"),
 * 			Location:  pulumi.String("us-central1"),
 * 			Network:   defaultNetwork.ID(),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = organizations.LookupProject(ctx, nil, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.compute.Network;
 * import com.pulumi.gcp.compute.NetworkArgs;
 * import com.pulumi.gcp.alloydb.Cluster;
 * import com.pulumi.gcp.alloydb.ClusterArgs;
 * import com.pulumi.gcp.organizations.OrganizationsFunctions;
 * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var defaultNetwork = new Network("defaultNetwork", NetworkArgs.builder()
 *             .name("alloydb-cluster")
 *             .build());
 *         var default_ = new Cluster("default", ClusterArgs.builder()
 *             .clusterId("alloydb-cluster")
 *             .location("us-central1")
 *             .network(defaultNetwork.id())
 *             .build());
 *         final var project = OrganizationsFunctions.getProject();
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   default:
 *     type: gcp:alloydb:Cluster
 *     properties:
 *       clusterId: alloydb-cluster
 *       location: us-central1
 *       network: ${defaultNetwork.id}
 *   defaultNetwork:
 *     type: gcp:compute:Network
 *     name: default
 *     properties:
 *       name: alloydb-cluster
 * variables:
 *   project:
 *     fn::invoke:
 *       Function: gcp:organizations:getProject
 *       Arguments: {}
 * ```
 * 
 * ### Alloydb Cluster Full
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const _default = new gcp.compute.Network("default", {name: "alloydb-cluster-full"});
 * const full = new gcp.alloydb.Cluster("full", {
 *     clusterId: "alloydb-cluster-full",
 *     location: "us-central1",
 *     network: _default.id,
 *     databaseVersion: "POSTGRES_15",
 *     initialUser: {
 *         user: "alloydb-cluster-full",
 *         password: "alloydb-cluster-full",
 *     },
 *     continuousBackupConfig: {
 *         enabled: true,
 *         recoveryWindowDays: 14,
 *     },
 *     automatedBackupPolicy: {
 *         location: "us-central1",
 *         backupWindow: "1800s",
 *         enabled: true,
 *         weeklySchedule: {
 *             daysOfWeeks: ["MONDAY"],
 *             startTimes: [{
 *                 hours: 23,
 *                 minutes: 0,
 *                 seconds: 0,
 *                 nanos: 0,
 *             }],
 *         },
 *         quantityBasedRetention: {
 *             count: 1,
 *         },
 *         labels: {
 *             test: "alloydb-cluster-full",
 *         },
 *     },
 *     labels: {
 *         test: "alloydb-cluster-full",
 *     },
 * });
 * const project = gcp.organizations.getProject({});
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * default = gcp.compute.Network("default", name="alloydb-cluster-full")
 * full = gcp.alloydb.Cluster("full",
 *     cluster_id="alloydb-cluster-full",
 *     location="us-central1",
 *     network=default.id,
 *     database_version="POSTGRES_15",
 *     initial_user=gcp.alloydb.ClusterInitialUserArgs(
 *         user="alloydb-cluster-full",
 *         password="alloydb-cluster-full",
 *     ),
 *     continuous_backup_config=gcp.alloydb.ClusterContinuousBackupConfigArgs(
 *         enabled=True,
 *         recovery_window_days=14,
 *     ),
 *     automated_backup_policy=gcp.alloydb.ClusterAutomatedBackupPolicyArgs(
 *         location="us-central1",
 *         backup_window="1800s",
 *         enabled=True,
 *         weekly_schedule=gcp.alloydb.ClusterAutomatedBackupPolicyWeeklyScheduleArgs(
 *             days_of_weeks=["MONDAY"],
 *             start_times=[gcp.alloydb.ClusterAutomatedBackupPolicyWeeklyScheduleStartTimeArgs(
 *                 hours=23,
 *                 minutes=0,
 *                 seconds=0,
 *                 nanos=0,
 *             )],
 *         ),
 *         quantity_based_retention=gcp.alloydb.ClusterAutomatedBackupPolicyQuantityBasedRetentionArgs(
 *             count=1,
 *         ),
 *         labels={
 *             "test": "alloydb-cluster-full",
 *         },
 *     ),
 *     labels={
 *         "test": "alloydb-cluster-full",
 *     })
 * project = gcp.organizations.get_project()
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var @default = new Gcp.Compute.Network("default", new()
 *     {
 *         Name = "alloydb-cluster-full",
 *     });
 *     var full = new Gcp.Alloydb.Cluster("full", new()
 *     {
 *         ClusterId = "alloydb-cluster-full",
 *         Location = "us-central1",
 *         Network = @default.Id,
 *         DatabaseVersion = "POSTGRES_15",
 *         InitialUser = new Gcp.Alloydb.Inputs.ClusterInitialUserArgs
 *         {
 *             User = "alloydb-cluster-full",
 *             Password = "alloydb-cluster-full",
 *         },
 *         ContinuousBackupConfig = new Gcp.Alloydb.Inputs.ClusterContinuousBackupConfigArgs
 *         {
 *             Enabled = true,
 *             RecoveryWindowDays = 14,
 *         },
 *         AutomatedBackupPolicy = new Gcp.Alloydb.Inputs.ClusterAutomatedBackupPolicyArgs
 *         {
 *             Location = "us-central1",
 *             BackupWindow = "1800s",
 *             Enabled = true,
 *             WeeklySchedule = new Gcp.Alloydb.Inputs.ClusterAutomatedBackupPolicyWeeklyScheduleArgs
 *             {
 *                 DaysOfWeeks = new[]
 *                 {
 *                     "MONDAY",
 *                 },
 *                 StartTimes = new[]
 *                 {
 *                     new Gcp.Alloydb.Inputs.ClusterAutomatedBackupPolicyWeeklyScheduleStartTimeArgs
 *                     {
 *                         Hours = 23,
 *                         Minutes = 0,
 *                         Seconds = 0,
 *                         Nanos = 0,
 *                     },
 *                 },
 *             },
 *             QuantityBasedRetention = new Gcp.Alloydb.Inputs.ClusterAutomatedBackupPolicyQuantityBasedRetentionArgs
 *             {
 *                 Count = 1,
 *             },
 *             Labels =
 *             {
 *                 { "test", "alloydb-cluster-full" },
 *             },
 *         },
 *         Labels =
 *         {
 *             { "test", "alloydb-cluster-full" },
 *         },
 *     });
 *     var project = Gcp.Organizations.GetProject.Invoke();
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/alloydb"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute"
 * 	"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 {
 * 		_, err := compute.NewNetwork(ctx, "default", &compute.NetworkArgs{
 * 			Name: pulumi.String("alloydb-cluster-full"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = alloydb.NewCluster(ctx, "full", &alloydb.ClusterArgs{
 * 			ClusterId:       pulumi.String("alloydb-cluster-full"),
 * 			Location:        pulumi.String("us-central1"),
 * 			Network:         _default.ID(),
 * 			DatabaseVersion: pulumi.String("POSTGRES_15"),
 * 			InitialUser: &alloydb.ClusterInitialUserArgs{
 * 				User:     pulumi.String("alloydb-cluster-full"),
 * 				Password: pulumi.String("alloydb-cluster-full"),
 * 			},
 * 			ContinuousBackupConfig: &alloydb.ClusterContinuousBackupConfigArgs{
 * 				Enabled:            pulumi.Bool(true),
 * 				RecoveryWindowDays: pulumi.Int(14),
 * 			},
 * 			AutomatedBackupPolicy: &alloydb.ClusterAutomatedBackupPolicyArgs{
 * 				Location:     pulumi.String("us-central1"),
 * 				BackupWindow: pulumi.String("1800s"),
 * 				Enabled:      pulumi.Bool(true),
 * 				WeeklySchedule: &alloydb.ClusterAutomatedBackupPolicyWeeklyScheduleArgs{
 * 					DaysOfWeeks: pulumi.StringArray{
 * 						pulumi.String("MONDAY"),
 * 					},
 * 					StartTimes: alloydb.ClusterAutomatedBackupPolicyWeeklyScheduleStartTimeArray{
 * 						&alloydb.ClusterAutomatedBackupPolicyWeeklyScheduleStartTimeArgs{
 * 							Hours:   pulumi.Int(23),
 * 							Minutes: pulumi.Int(0),
 * 							Seconds: pulumi.Int(0),
 * 							Nanos:   pulumi.Int(0),
 * 						},
 * 					},
 * 				},
 * 				QuantityBasedRetention: &alloydb.ClusterAutomatedBackupPolicyQuantityBasedRetentionArgs{
 * 					Count: pulumi.Int(1),
 * 				},
 * 				Labels: pulumi.StringMap{
 * 					"test": pulumi.String("alloydb-cluster-full"),
 * 				},
 * 			},
 * 			Labels: pulumi.StringMap{
 * 				"test": pulumi.String("alloydb-cluster-full"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = organizations.LookupProject(ctx, nil, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.compute.Network;
 * import com.pulumi.gcp.compute.NetworkArgs;
 * import com.pulumi.gcp.alloydb.Cluster;
 * import com.pulumi.gcp.alloydb.ClusterArgs;
 * import com.pulumi.gcp.alloydb.inputs.ClusterInitialUserArgs;
 * import com.pulumi.gcp.alloydb.inputs.ClusterContinuousBackupConfigArgs;
 * import com.pulumi.gcp.alloydb.inputs.ClusterAutomatedBackupPolicyArgs;
 * import com.pulumi.gcp.alloydb.inputs.ClusterAutomatedBackupPolicyWeeklyScheduleArgs;
 * import com.pulumi.gcp.alloydb.inputs.ClusterAutomatedBackupPolicyQuantityBasedRetentionArgs;
 * import com.pulumi.gcp.organizations.OrganizationsFunctions;
 * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var default_ = new Network("default", NetworkArgs.builder()
 *             .name("alloydb-cluster-full")
 *             .build());
 *         var full = new Cluster("full", ClusterArgs.builder()
 *             .clusterId("alloydb-cluster-full")
 *             .location("us-central1")
 *             .network(default_.id())
 *             .databaseVersion("POSTGRES_15")
 *             .initialUser(ClusterInitialUserArgs.builder()
 *                 .user("alloydb-cluster-full")
 *                 .password("alloydb-cluster-full")
 *                 .build())
 *             .continuousBackupConfig(ClusterContinuousBackupConfigArgs.builder()
 *                 .enabled(true)
 *                 .recoveryWindowDays(14)
 *                 .build())
 *             .automatedBackupPolicy(ClusterAutomatedBackupPolicyArgs.builder()
 *                 .location("us-central1")
 *                 .backupWindow("1800s")
 *                 .enabled(true)
 *                 .weeklySchedule(ClusterAutomatedBackupPolicyWeeklyScheduleArgs.builder()
 *                     .daysOfWeeks("MONDAY")
 *                     .startTimes(ClusterAutomatedBackupPolicyWeeklyScheduleStartTimeArgs.builder()
 *                         .hours(23)
 *                         .minutes(0)
 *                         .seconds(0)
 *                         .nanos(0)
 *                         .build())
 *                     .build())
 *                 .quantityBasedRetention(ClusterAutomatedBackupPolicyQuantityBasedRetentionArgs.builder()
 *                     .count(1)
 *                     .build())
 *                 .labels(Map.of("test", "alloydb-cluster-full"))
 *                 .build())
 *             .labels(Map.of("test", "alloydb-cluster-full"))
 *             .build());
 *         final var project = OrganizationsFunctions.getProject();
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   full:
 *     type: gcp:alloydb:Cluster
 *     properties:
 *       clusterId: alloydb-cluster-full
 *       location: us-central1
 *       network: ${default.id}
 *       databaseVersion: POSTGRES_15
 *       initialUser:
 *         user: alloydb-cluster-full
 *         password: alloydb-cluster-full
 *       continuousBackupConfig:
 *         enabled: true
 *         recoveryWindowDays: 14
 *       automatedBackupPolicy:
 *         location: us-central1
 *         backupWindow: 1800s
 *         enabled: true
 *         weeklySchedule:
 *           daysOfWeeks:
 *             - MONDAY
 *           startTimes:
 *             - hours: 23
 *               minutes: 0
 *               seconds: 0
 *               nanos: 0
 *         quantityBasedRetention:
 *           count: 1
 *         labels:
 *           test: alloydb-cluster-full
 *       labels:
 *         test: alloydb-cluster-full
 *   default:
 *     type: gcp:compute:Network
 *     properties:
 *       name: alloydb-cluster-full
 * variables:
 *   project:
 *     fn::invoke:
 *       Function: gcp:organizations:getProject
 *       Arguments: {}
 * ```
 * 
 * ### Alloydb Cluster Restore
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const default = gcp.compute.getNetwork({
 *     name: "alloydb-network",
 * });
 * const source = new gcp.alloydb.Cluster("source", {
 *     clusterId: "alloydb-source-cluster",
 *     location: "us-central1",
 *     network: _default.then(_default => _default.id),
 *     initialUser: {
 *         password: "alloydb-source-cluster",
 *     },
 * });
 * const sourceInstance = new gcp.alloydb.Instance("source", {
 *     cluster: source.name,
 *     instanceId: "alloydb-instance",
 *     instanceType: "PRIMARY",
 *     machineConfig: {
 *         cpuCount: 2,
 *     },
 * });
 * const sourceBackup = new gcp.alloydb.Backup("source", {
 *     backupId: "alloydb-backup",
 *     location: "us-central1",
 *     clusterName: source.name,
 * });
 * const restoredFromBackup = new gcp.alloydb.Cluster("restored_from_backup", {
 *     clusterId: "alloydb-backup-restored",
 *     location: "us-central1",
 *     network: _default.then(_default => _default.id),
 *     restoreBackupSource: {
 *         backupName: sourceBackup.name,
 *     },
 * });
 * const restoredViaPitr = new gcp.alloydb.Cluster("restored_via_pitr", {
 *     clusterId: "alloydb-pitr-restored",
 *     location: "us-central1",
 *     network: _default.then(_default => _default.id),
 *     restoreContinuousBackupSource: {
 *         cluster: source.name,
 *         pointInTime: "2023-08-03T19:19:00.094Z",
 *     },
 * });
 * const project = gcp.organizations.getProject({});
 * const privateIpAlloc = new gcp.compute.GlobalAddress("private_ip_alloc", {
 *     name: "alloydb-source-cluster",
 *     addressType: "INTERNAL",
 *     purpose: "VPC_PEERING",
 *     prefixLength: 16,
 *     network: _default.then(_default => _default.id),
 * });
 * const vpcConnection = new gcp.servicenetworking.Connection("vpc_connection", {
 *     network: _default.then(_default => _default.id),
 *     service: "servicenetworking.googleapis.com",
 *     reservedPeeringRanges: [privateIpAlloc.name],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * default = gcp.compute.get_network(name="alloydb-network")
 * source = gcp.alloydb.Cluster("source",
 *     cluster_id="alloydb-source-cluster",
 *     location="us-central1",
 *     network=default.id,
 *     initial_user=gcp.alloydb.ClusterInitialUserArgs(
 *         password="alloydb-source-cluster",
 *     ))
 * source_instance = gcp.alloydb.Instance("source",
 *     cluster=source.name,
 *     instance_id="alloydb-instance",
 *     instance_type="PRIMARY",
 *     machine_config=gcp.alloydb.InstanceMachineConfigArgs(
 *         cpu_count=2,
 *     ))
 * source_backup = gcp.alloydb.Backup("source",
 *     backup_id="alloydb-backup",
 *     location="us-central1",
 *     cluster_name=source.name)
 * restored_from_backup = gcp.alloydb.Cluster("restored_from_backup",
 *     cluster_id="alloydb-backup-restored",
 *     location="us-central1",
 *     network=default.id,
 *     restore_backup_source=gcp.alloydb.ClusterRestoreBackupSourceArgs(
 *         backup_name=source_backup.name,
 *     ))
 * restored_via_pitr = gcp.alloydb.Cluster("restored_via_pitr",
 *     cluster_id="alloydb-pitr-restored",
 *     location="us-central1",
 *     network=default.id,
 *     restore_continuous_backup_source=gcp.alloydb.ClusterRestoreContinuousBackupSourceArgs(
 *         cluster=source.name,
 *         point_in_time="2023-08-03T19:19:00.094Z",
 *     ))
 * project = gcp.organizations.get_project()
 * private_ip_alloc = gcp.compute.GlobalAddress("private_ip_alloc",
 *     name="alloydb-source-cluster",
 *     address_type="INTERNAL",
 *     purpose="VPC_PEERING",
 *     prefix_length=16,
 *     network=default.id)
 * vpc_connection = gcp.servicenetworking.Connection("vpc_connection",
 *     network=default.id,
 *     service="servicenetworking.googleapis.com",
 *     reserved_peering_ranges=[private_ip_alloc.name])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var @default = Gcp.Compute.GetNetwork.Invoke(new()
 *     {
 *         Name = "alloydb-network",
 *     });
 *     var source = new Gcp.Alloydb.Cluster("source", new()
 *     {
 *         ClusterId = "alloydb-source-cluster",
 *         Location = "us-central1",
 *         Network = @default.Apply(@default => @default.Apply(getNetworkResult => getNetworkResult.Id)),
 *         InitialUser = new Gcp.Alloydb.Inputs.ClusterInitialUserArgs
 *         {
 *             Password = "alloydb-source-cluster",
 *         },
 *     });
 *     var sourceInstance = new Gcp.Alloydb.Instance("source", new()
 *     {
 *         Cluster = source.Name,
 *         InstanceId = "alloydb-instance",
 *         InstanceType = "PRIMARY",
 *         MachineConfig = new Gcp.Alloydb.Inputs.InstanceMachineConfigArgs
 *         {
 *             CpuCount = 2,
 *         },
 *     });
 *     var sourceBackup = new Gcp.Alloydb.Backup("source", new()
 *     {
 *         BackupId = "alloydb-backup",
 *         Location = "us-central1",
 *         ClusterName = source.Name,
 *     });
 *     var restoredFromBackup = new Gcp.Alloydb.Cluster("restored_from_backup", new()
 *     {
 *         ClusterId = "alloydb-backup-restored",
 *         Location = "us-central1",
 *         Network = @default.Apply(@default => @default.Apply(getNetworkResult => getNetworkResult.Id)),
 *         RestoreBackupSource = new Gcp.Alloydb.Inputs.ClusterRestoreBackupSourceArgs
 *         {
 *             BackupName = sourceBackup.Name,
 *         },
 *     });
 *     var restoredViaPitr = new Gcp.Alloydb.Cluster("restored_via_pitr", new()
 *     {
 *         ClusterId = "alloydb-pitr-restored",
 *         Location = "us-central1",
 *         Network = @default.Apply(@default => @default.Apply(getNetworkResult => getNetworkResult.Id)),
 *         RestoreContinuousBackupSource = new Gcp.Alloydb.Inputs.ClusterRestoreContinuousBackupSourceArgs
 *         {
 *             Cluster = source.Name,
 *             PointInTime = "2023-08-03T19:19:00.094Z",
 *         },
 *     });
 *     var project = Gcp.Organizations.GetProject.Invoke();
 *     var privateIpAlloc = new Gcp.Compute.GlobalAddress("private_ip_alloc", new()
 *     {
 *         Name = "alloydb-source-cluster",
 *         AddressType = "INTERNAL",
 *         Purpose = "VPC_PEERING",
 *         PrefixLength = 16,
 *         Network = @default.Apply(@default => @default.Apply(getNetworkResult => getNetworkResult.Id)),
 *     });
 *     var vpcConnection = new Gcp.ServiceNetworking.Connection("vpc_connection", new()
 *     {
 *         Network = @default.Apply(@default => @default.Apply(getNetworkResult => getNetworkResult.Id)),
 *         Service = "servicenetworking.googleapis.com",
 *         ReservedPeeringRanges = new[]
 *         {
 *             privateIpAlloc.Name,
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/alloydb"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/servicenetworking"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		_default, err := compute.LookupNetwork(ctx, &compute.LookupNetworkArgs{
 * 			Name: "alloydb-network",
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		source, err := alloydb.NewCluster(ctx, "source", &alloydb.ClusterArgs{
 * 			ClusterId: pulumi.String("alloydb-source-cluster"),
 * 			Location:  pulumi.String("us-central1"),
 * 			Network:   pulumi.String(_default.Id),
 * 			InitialUser: &alloydb.ClusterInitialUserArgs{
 * 				Password: pulumi.String("alloydb-source-cluster"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = alloydb.NewInstance(ctx, "source", &alloydb.InstanceArgs{
 * 			Cluster:      source.Name,
 * 			InstanceId:   pulumi.String("alloydb-instance"),
 * 			InstanceType: pulumi.String("PRIMARY"),
 * 			MachineConfig: &alloydb.InstanceMachineConfigArgs{
 * 				CpuCount: pulumi.Int(2),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		sourceBackup, err := alloydb.NewBackup(ctx, "source", &alloydb.BackupArgs{
 * 			BackupId:    pulumi.String("alloydb-backup"),
 * 			Location:    pulumi.String("us-central1"),
 * 			ClusterName: source.Name,
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = alloydb.NewCluster(ctx, "restored_from_backup", &alloydb.ClusterArgs{
 * 			ClusterId: pulumi.String("alloydb-backup-restored"),
 * 			Location:  pulumi.String("us-central1"),
 * 			Network:   pulumi.String(_default.Id),
 * 			RestoreBackupSource: &alloydb.ClusterRestoreBackupSourceArgs{
 * 				BackupName: sourceBackup.Name,
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = alloydb.NewCluster(ctx, "restored_via_pitr", &alloydb.ClusterArgs{
 * 			ClusterId: pulumi.String("alloydb-pitr-restored"),
 * 			Location:  pulumi.String("us-central1"),
 * 			Network:   pulumi.String(_default.Id),
 * 			RestoreContinuousBackupSource: &alloydb.ClusterRestoreContinuousBackupSourceArgs{
 * 				Cluster:     source.Name,
 * 				PointInTime: pulumi.String("2023-08-03T19:19:00.094Z"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = organizations.LookupProject(ctx, nil, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		privateIpAlloc, err := compute.NewGlobalAddress(ctx, "private_ip_alloc", &compute.GlobalAddressArgs{
 * 			Name:         pulumi.String("alloydb-source-cluster"),
 * 			AddressType:  pulumi.String("INTERNAL"),
 * 			Purpose:      pulumi.String("VPC_PEERING"),
 * 			PrefixLength: pulumi.Int(16),
 * 			Network:      pulumi.String(_default.Id),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = servicenetworking.NewConnection(ctx, "vpc_connection", &servicenetworking.ConnectionArgs{
 * 			Network: pulumi.String(_default.Id),
 * 			Service: pulumi.String("servicenetworking.googleapis.com"),
 * 			ReservedPeeringRanges: pulumi.StringArray{
 * 				privateIpAlloc.Name,
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.compute.ComputeFunctions;
 * import com.pulumi.gcp.compute.inputs.GetNetworkArgs;
 * import com.pulumi.gcp.alloydb.Cluster;
 * import com.pulumi.gcp.alloydb.ClusterArgs;
 * import com.pulumi.gcp.alloydb.inputs.ClusterInitialUserArgs;
 * import com.pulumi.gcp.alloydb.Instance;
 * import com.pulumi.gcp.alloydb.InstanceArgs;
 * import com.pulumi.gcp.alloydb.inputs.InstanceMachineConfigArgs;
 * import com.pulumi.gcp.alloydb.Backup;
 * import com.pulumi.gcp.alloydb.BackupArgs;
 * import com.pulumi.gcp.alloydb.inputs.ClusterRestoreBackupSourceArgs;
 * import com.pulumi.gcp.alloydb.inputs.ClusterRestoreContinuousBackupSourceArgs;
 * import com.pulumi.gcp.organizations.OrganizationsFunctions;
 * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
 * import com.pulumi.gcp.compute.GlobalAddress;
 * import com.pulumi.gcp.compute.GlobalAddressArgs;
 * import com.pulumi.gcp.servicenetworking.Connection;
 * import com.pulumi.gcp.servicenetworking.ConnectionArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         final var default = ComputeFunctions.getNetwork(GetNetworkArgs.builder()
 *             .name("alloydb-network")
 *             .build());
 *         var source = new Cluster("source", ClusterArgs.builder()
 *             .clusterId("alloydb-source-cluster")
 *             .location("us-central1")
 *             .network(default_.id())
 *             .initialUser(ClusterInitialUserArgs.builder()
 *                 .password("alloydb-source-cluster")
 *                 .build())
 *             .build());
 *         var sourceInstance = new Instance("sourceInstance", InstanceArgs.builder()
 *             .cluster(source.name())
 *             .instanceId("alloydb-instance")
 *             .instanceType("PRIMARY")
 *             .machineConfig(InstanceMachineConfigArgs.builder()
 *                 .cpuCount(2)
 *                 .build())
 *             .build());
 *         var sourceBackup = new Backup("sourceBackup", BackupArgs.builder()
 *             .backupId("alloydb-backup")
 *             .location("us-central1")
 *             .clusterName(source.name())
 *             .build());
 *         var restoredFromBackup = new Cluster("restoredFromBackup", ClusterArgs.builder()
 *             .clusterId("alloydb-backup-restored")
 *             .location("us-central1")
 *             .network(default_.id())
 *             .restoreBackupSource(ClusterRestoreBackupSourceArgs.builder()
 *                 .backupName(sourceBackup.name())
 *                 .build())
 *             .build());
 *         var restoredViaPitr = new Cluster("restoredViaPitr", ClusterArgs.builder()
 *             .clusterId("alloydb-pitr-restored")
 *             .location("us-central1")
 *             .network(default_.id())
 *             .restoreContinuousBackupSource(ClusterRestoreContinuousBackupSourceArgs.builder()
 *                 .cluster(source.name())
 *                 .pointInTime("2023-08-03T19:19:00.094Z")
 *                 .build())
 *             .build());
 *         final var project = OrganizationsFunctions.getProject();
 *         var privateIpAlloc = new GlobalAddress("privateIpAlloc", GlobalAddressArgs.builder()
 *             .name("alloydb-source-cluster")
 *             .addressType("INTERNAL")
 *             .purpose("VPC_PEERING")
 *             .prefixLength(16)
 *             .network(default_.id())
 *             .build());
 *         var vpcConnection = new Connection("vpcConnection", ConnectionArgs.builder()
 *             .network(default_.id())
 *             .service("servicenetworking.googleapis.com")
 *             .reservedPeeringRanges(privateIpAlloc.name())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   source:
 *     type: gcp:alloydb:Cluster
 *     properties:
 *       clusterId: alloydb-source-cluster
 *       location: us-central1
 *       network: ${default.id}
 *       initialUser:
 *         password: alloydb-source-cluster
 *   sourceInstance:
 *     type: gcp:alloydb:Instance
 *     name: source
 *     properties:
 *       cluster: ${source.name}
 *       instanceId: alloydb-instance
 *       instanceType: PRIMARY
 *       machineConfig:
 *         cpuCount: 2
 *   sourceBackup:
 *     type: gcp:alloydb:Backup
 *     name: source
 *     properties:
 *       backupId: alloydb-backup
 *       location: us-central1
 *       clusterName: ${source.name}
 *   restoredFromBackup:
 *     type: gcp:alloydb:Cluster
 *     name: restored_from_backup
 *     properties:
 *       clusterId: alloydb-backup-restored
 *       location: us-central1
 *       network: ${default.id}
 *       restoreBackupSource:
 *         backupName: ${sourceBackup.name}
 *   restoredViaPitr:
 *     type: gcp:alloydb:Cluster
 *     name: restored_via_pitr
 *     properties:
 *       clusterId: alloydb-pitr-restored
 *       location: us-central1
 *       network: ${default.id}
 *       restoreContinuousBackupSource:
 *         cluster: ${source.name}
 *         pointInTime: 2023-08-03T19:19:00.094Z
 *   privateIpAlloc:
 *     type: gcp:compute:GlobalAddress
 *     name: private_ip_alloc
 *     properties:
 *       name: alloydb-source-cluster
 *       addressType: INTERNAL
 *       purpose: VPC_PEERING
 *       prefixLength: 16
 *       network: ${default.id}
 *   vpcConnection:
 *     type: gcp:servicenetworking:Connection
 *     name: vpc_connection
 *     properties:
 *       network: ${default.id}
 *       service: servicenetworking.googleapis.com
 *       reservedPeeringRanges:
 *         - ${privateIpAlloc.name}
 * variables:
 *   project:
 *     fn::invoke:
 *       Function: gcp:organizations:getProject
 *       Arguments: {}
 *   default:
 *     fn::invoke:
 *       Function: gcp:compute:getNetwork
 *       Arguments:
 *         name: alloydb-network
 * ```
 * 
 * ### Alloydb Secondary Cluster Basic
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const _default = new gcp.compute.Network("default", {name: "alloydb-secondary-cluster"});
 * const primary = new gcp.alloydb.Cluster("primary", {
 *     clusterId: "alloydb-primary-cluster",
 *     location: "us-central1",
 *     network: _default.id,
 * });
 * const primaryInstance = new gcp.alloydb.Instance("primary", {
 *     cluster: primary.name,
 *     instanceId: "alloydb-primary-instance",
 *     instanceType: "PRIMARY",
 *     machineConfig: {
 *         cpuCount: 2,
 *     },
 * });
 * const secondary = new gcp.alloydb.Cluster("secondary", {
 *     clusterId: "alloydb-secondary-cluster",
 *     location: "us-east1",
 *     network: _default.id,
 *     clusterType: "SECONDARY",
 *     continuousBackupConfig: {
 *         enabled: false,
 *     },
 *     secondaryConfig: {
 *         primaryClusterName: primary.name,
 *     },
 * });
 * const project = gcp.organizations.getProject({});
 * const privateIpAlloc = new gcp.compute.GlobalAddress("private_ip_alloc", {
 *     name: "alloydb-secondary-cluster",
 *     addressType: "INTERNAL",
 *     purpose: "VPC_PEERING",
 *     prefixLength: 16,
 *     network: _default.id,
 * });
 * const vpcConnection = new gcp.servicenetworking.Connection("vpc_connection", {
 *     network: _default.id,
 *     service: "servicenetworking.googleapis.com",
 *     reservedPeeringRanges: [privateIpAlloc.name],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * default = gcp.compute.Network("default", name="alloydb-secondary-cluster")
 * primary = gcp.alloydb.Cluster("primary",
 *     cluster_id="alloydb-primary-cluster",
 *     location="us-central1",
 *     network=default.id)
 * primary_instance = gcp.alloydb.Instance("primary",
 *     cluster=primary.name,
 *     instance_id="alloydb-primary-instance",
 *     instance_type="PRIMARY",
 *     machine_config=gcp.alloydb.InstanceMachineConfigArgs(
 *         cpu_count=2,
 *     ))
 * secondary = gcp.alloydb.Cluster("secondary",
 *     cluster_id="alloydb-secondary-cluster",
 *     location="us-east1",
 *     network=default.id,
 *     cluster_type="SECONDARY",
 *     continuous_backup_config=gcp.alloydb.ClusterContinuousBackupConfigArgs(
 *         enabled=False,
 *     ),
 *     secondary_config=gcp.alloydb.ClusterSecondaryConfigArgs(
 *         primary_cluster_name=primary.name,
 *     ))
 * project = gcp.organizations.get_project()
 * private_ip_alloc = gcp.compute.GlobalAddress("private_ip_alloc",
 *     name="alloydb-secondary-cluster",
 *     address_type="INTERNAL",
 *     purpose="VPC_PEERING",
 *     prefix_length=16,
 *     network=default.id)
 * vpc_connection = gcp.servicenetworking.Connection("vpc_connection",
 *     network=default.id,
 *     service="servicenetworking.googleapis.com",
 *     reserved_peering_ranges=[private_ip_alloc.name])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var @default = new Gcp.Compute.Network("default", new()
 *     {
 *         Name = "alloydb-secondary-cluster",
 *     });
 *     var primary = new Gcp.Alloydb.Cluster("primary", new()
 *     {
 *         ClusterId = "alloydb-primary-cluster",
 *         Location = "us-central1",
 *         Network = @default.Id,
 *     });
 *     var primaryInstance = new Gcp.Alloydb.Instance("primary", new()
 *     {
 *         Cluster = primary.Name,
 *         InstanceId = "alloydb-primary-instance",
 *         InstanceType = "PRIMARY",
 *         MachineConfig = new Gcp.Alloydb.Inputs.InstanceMachineConfigArgs
 *         {
 *             CpuCount = 2,
 *         },
 *     });
 *     var secondary = new Gcp.Alloydb.Cluster("secondary", new()
 *     {
 *         ClusterId = "alloydb-secondary-cluster",
 *         Location = "us-east1",
 *         Network = @default.Id,
 *         ClusterType = "SECONDARY",
 *         ContinuousBackupConfig = new Gcp.Alloydb.Inputs.ClusterContinuousBackupConfigArgs
 *         {
 *             Enabled = false,
 *         },
 *         SecondaryConfig = new Gcp.Alloydb.Inputs.ClusterSecondaryConfigArgs
 *         {
 *             PrimaryClusterName = primary.Name,
 *         },
 *     });
 *     var project = Gcp.Organizations.GetProject.Invoke();
 *     var privateIpAlloc = new Gcp.Compute.GlobalAddress("private_ip_alloc", new()
 *     {
 *         Name = "alloydb-secondary-cluster",
 *         AddressType = "INTERNAL",
 *         Purpose = "VPC_PEERING",
 *         PrefixLength = 16,
 *         Network = @default.Id,
 *     });
 *     var vpcConnection = new Gcp.ServiceNetworking.Connection("vpc_connection", new()
 *     {
 *         Network = @default.Id,
 *         Service = "servicenetworking.googleapis.com",
 *         ReservedPeeringRanges = new[]
 *         {
 *             privateIpAlloc.Name,
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/alloydb"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/servicenetworking"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		_, err := compute.NewNetwork(ctx, "default", &compute.NetworkArgs{
 * 			Name: pulumi.String("alloydb-secondary-cluster"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		primary, err := alloydb.NewCluster(ctx, "primary", &alloydb.ClusterArgs{
 * 			ClusterId: pulumi.String("alloydb-primary-cluster"),
 * 			Location:  pulumi.String("us-central1"),
 * 			Network:   _default.ID(),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = alloydb.NewInstance(ctx, "primary", &alloydb.InstanceArgs{
 * 			Cluster:      primary.Name,
 * 			InstanceId:   pulumi.String("alloydb-primary-instance"),
 * 			InstanceType: pulumi.String("PRIMARY"),
 * 			MachineConfig: &alloydb.InstanceMachineConfigArgs{
 * 				CpuCount: pulumi.Int(2),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = alloydb.NewCluster(ctx, "secondary", &alloydb.ClusterArgs{
 * 			ClusterId:   pulumi.String("alloydb-secondary-cluster"),
 * 			Location:    pulumi.String("us-east1"),
 * 			Network:     _default.ID(),
 * 			ClusterType: pulumi.String("SECONDARY"),
 * 			ContinuousBackupConfig: &alloydb.ClusterContinuousBackupConfigArgs{
 * 				Enabled: pulumi.Bool(false),
 * 			},
 * 			SecondaryConfig: &alloydb.ClusterSecondaryConfigArgs{
 * 				PrimaryClusterName: primary.Name,
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = organizations.LookupProject(ctx, nil, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		privateIpAlloc, err := compute.NewGlobalAddress(ctx, "private_ip_alloc", &compute.GlobalAddressArgs{
 * 			Name:         pulumi.String("alloydb-secondary-cluster"),
 * 			AddressType:  pulumi.String("INTERNAL"),
 * 			Purpose:      pulumi.String("VPC_PEERING"),
 * 			PrefixLength: pulumi.Int(16),
 * 			Network:      _default.ID(),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = servicenetworking.NewConnection(ctx, "vpc_connection", &servicenetworking.ConnectionArgs{
 * 			Network: _default.ID(),
 * 			Service: pulumi.String("servicenetworking.googleapis.com"),
 * 			ReservedPeeringRanges: pulumi.StringArray{
 * 				privateIpAlloc.Name,
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.compute.Network;
 * import com.pulumi.gcp.compute.NetworkArgs;
 * import com.pulumi.gcp.alloydb.Cluster;
 * import com.pulumi.gcp.alloydb.ClusterArgs;
 * import com.pulumi.gcp.alloydb.Instance;
 * import com.pulumi.gcp.alloydb.InstanceArgs;
 * import com.pulumi.gcp.alloydb.inputs.InstanceMachineConfigArgs;
 * import com.pulumi.gcp.alloydb.inputs.ClusterContinuousBackupConfigArgs;
 * import com.pulumi.gcp.alloydb.inputs.ClusterSecondaryConfigArgs;
 * import com.pulumi.gcp.organizations.OrganizationsFunctions;
 * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
 * import com.pulumi.gcp.compute.GlobalAddress;
 * import com.pulumi.gcp.compute.GlobalAddressArgs;
 * import com.pulumi.gcp.servicenetworking.Connection;
 * import com.pulumi.gcp.servicenetworking.ConnectionArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var default_ = new Network("default", NetworkArgs.builder()
 *             .name("alloydb-secondary-cluster")
 *             .build());
 *         var primary = new Cluster("primary", ClusterArgs.builder()
 *             .clusterId("alloydb-primary-cluster")
 *             .location("us-central1")
 *             .network(default_.id())
 *             .build());
 *         var primaryInstance = new Instance("primaryInstance", InstanceArgs.builder()
 *             .cluster(primary.name())
 *             .instanceId("alloydb-primary-instance")
 *             .instanceType("PRIMARY")
 *             .machineConfig(InstanceMachineConfigArgs.builder()
 *                 .cpuCount(2)
 *                 .build())
 *             .build());
 *         var secondary = new Cluster("secondary", ClusterArgs.builder()
 *             .clusterId("alloydb-secondary-cluster")
 *             .location("us-east1")
 *             .network(default_.id())
 *             .clusterType("SECONDARY")
 *             .continuousBackupConfig(ClusterContinuousBackupConfigArgs.builder()
 *                 .enabled(false)
 *                 .build())
 *             .secondaryConfig(ClusterSecondaryConfigArgs.builder()
 *                 .primaryClusterName(primary.name())
 *                 .build())
 *             .build());
 *         final var project = OrganizationsFunctions.getProject();
 *         var privateIpAlloc = new GlobalAddress("privateIpAlloc", GlobalAddressArgs.builder()
 *             .name("alloydb-secondary-cluster")
 *             .addressType("INTERNAL")
 *             .purpose("VPC_PEERING")
 *             .prefixLength(16)
 *             .network(default_.id())
 *             .build());
 *         var vpcConnection = new Connection("vpcConnection", ConnectionArgs.builder()
 *             .network(default_.id())
 *             .service("servicenetworking.googleapis.com")
 *             .reservedPeeringRanges(privateIpAlloc.name())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   primary:
 *     type: gcp:alloydb:Cluster
 *     properties:
 *       clusterId: alloydb-primary-cluster
 *       location: us-central1
 *       network: ${default.id}
 *   primaryInstance:
 *     type: gcp:alloydb:Instance
 *     name: primary
 *     properties:
 *       cluster: ${primary.name}
 *       instanceId: alloydb-primary-instance
 *       instanceType: PRIMARY
 *       machineConfig:
 *         cpuCount: 2
 *   secondary:
 *     type: gcp:alloydb:Cluster
 *     properties:
 *       clusterId: alloydb-secondary-cluster
 *       location: us-east1
 *       network: ${default.id}
 *       clusterType: SECONDARY
 *       continuousBackupConfig:
 *         enabled: false
 *       secondaryConfig:
 *         primaryClusterName: ${primary.name}
 *   default:
 *     type: gcp:compute:Network
 *     properties:
 *       name: alloydb-secondary-cluster
 *   privateIpAlloc:
 *     type: gcp:compute:GlobalAddress
 *     name: private_ip_alloc
 *     properties:
 *       name: alloydb-secondary-cluster
 *       addressType: INTERNAL
 *       purpose: VPC_PEERING
 *       prefixLength: 16
 *       network: ${default.id}
 *   vpcConnection:
 *     type: gcp:servicenetworking:Connection
 *     name: vpc_connection
 *     properties:
 *       network: ${default.id}
 *       service: servicenetworking.googleapis.com
 *       reservedPeeringRanges:
 *         - ${privateIpAlloc.name}
 * variables:
 *   project:
 *     fn::invoke:
 *       Function: gcp:organizations:getProject
 *       Arguments: {}
 * ```
 * 
 * ## Import
 * Cluster can be imported using any of these accepted formats:
 * * `projects/{{project}}/locations/{{location}}/clusters/{{cluster_id}}`
 * * `{{project}}/{{location}}/{{cluster_id}}`
 * * `{{location}}/{{cluster_id}}`
 * * `{{cluster_id}}`
 * When using the `pulumi import` command, Cluster can be imported using one of the formats above. For example:
 * ```sh
 * $ pulumi import gcp:alloydb/cluster:Cluster default projects/{{project}}/locations/{{location}}/clusters/{{cluster_id}}
 * ```
 * ```sh
 * $ pulumi import gcp:alloydb/cluster:Cluster default {{project}}/{{location}}/{{cluster_id}}
 * ```
 * ```sh
 * $ pulumi import gcp:alloydb/cluster:Cluster default {{location}}/{{cluster_id}}
 * ```
 * ```sh
 * $ pulumi import gcp:alloydb/cluster:Cluster default {{cluster_id}}
 * ```
 */
public class Cluster internal constructor(
    override val javaResource: com.pulumi.gcp.alloydb.Cluster,
) : KotlinCustomResource(javaResource, ClusterMapper) {
    /**
     * Annotations to allow client tools to store small amount of arbitrary data. This is distinct from labels. https://google.aip.dev/128
     * An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }.
     * **Note**: This field is non-authoritative, and will only manage the annotations present in your configuration.
     * Please refer to the field `effective_annotations` for all of the annotations present on the resource.
     */
    public val annotations: Output>?
        get() = javaResource.annotations().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 ->
                    args0.key.to(args0.value)
                }).toMap()
            }).orElse(null)
        })

    /**
     * The automated backup policy for this cluster. AutomatedBackupPolicy is disabled by default.
     * Structure is documented below.
     */
    public val automatedBackupPolicy: Output
        get() = javaResource.automatedBackupPolicy().applyValue({ args0 ->
            args0.let({ args0 ->
                clusterAutomatedBackupPolicyToKotlin(args0)
            })
        })

    /**
     * Cluster created from backup.
     * Structure is documented below.
     */
    public val backupSources: Output>
        get() = javaResource.backupSources().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> clusterBackupSourceToKotlin(args0) })
            })
        })

    /**
     * The ID of the alloydb cluster.
     */
    public val clusterId: Output
        get() = javaResource.clusterId().applyValue({ args0 -> args0 })

    /**
     * The type of cluster. If not set, defaults to PRIMARY.
     * Default value is `PRIMARY`.
     * Possible values are: `PRIMARY`, `SECONDARY`.
     */
    public val clusterType: Output?
        get() = javaResource.clusterType().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * The continuous backup config for this cluster.
     * If no policy is provided then the default policy will be used. The default policy takes one backup a day and retains backups for 14 days.
     * Structure is documented below.
     */
    public val continuousBackupConfig: Output
        get() = javaResource.continuousBackupConfig().applyValue({ args0 ->
            args0.let({ args0 ->
                clusterContinuousBackupConfigToKotlin(args0)
            })
        })

    /**
     * ContinuousBackupInfo describes the continuous backup properties of a cluster.
     * Structure is documented below.
     */
    public val continuousBackupInfos: Output>
        get() = javaResource.continuousBackupInfos().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> clusterContinuousBackupInfoToKotlin(args0) })
            })
        })

    /**
     * The database engine major version. This is an optional field and it's populated at the Cluster creation time. This field cannot be changed after cluster creation.
     */
    public val databaseVersion: Output
        get() = javaResource.databaseVersion().applyValue({ args0 -> args0 })

    /**
     * Policy to determine if the cluster should be deleted forcefully.
     * Deleting a cluster forcefully, deletes the cluster and all its associated instances within the cluster.
     * Deleting a Secondary cluster with a secondary instance REQUIRES setting deletion_policy = "FORCE" otherwise an error is returned. This is needed as there is no support to delete just the secondary instance, and the only way to delete secondary instance is to delete the associated secondary cluster forcefully which also deletes the secondary instance.
     */
    public val deletionPolicy: Output?
        get() = javaResource.deletionPolicy().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * User-settable and human-readable display name for the Cluster.
     */
    public val displayName: Output?
        get() = javaResource.displayName().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    public val effectiveAnnotations: Output>
        get() = javaResource.effectiveAnnotations().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.key.to(args0.value)
            }).toMap()
        })

    /**
     * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
     */
    public val effectiveLabels: Output>
        get() = javaResource.effectiveLabels().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.key.to(args0.value)
            }).toMap()
        })

    /**
     * EncryptionConfig describes the encryption config of a cluster or a backup that is encrypted with a CMEK (customer-managed encryption key).
     * Structure is documented below.
     */
    public val encryptionConfig: Output?
        get() = javaResource.encryptionConfig().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> clusterEncryptionConfigToKotlin(args0) })
            }).orElse(null)
        })

    /**
     * (Output)
     * Output only. The encryption information for the WALs and backups required for ContinuousBackup.
     * Structure is documented below.
     */
    public val encryptionInfos: Output>
        get() = javaResource.encryptionInfos().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> clusterEncryptionInfoToKotlin(args0) })
            })
        })

    /**
     * For Resource freshness validation (https://google.aip.dev/154)
     */
    public val etag: Output?
        get() = javaResource.etag().applyValue({ args0 -> args0.map({ args0 -> args0 }).orElse(null) })

    /**
     * Initial user to setup during cluster creation.
     * Structure is documented below.
     */
    public val initialUser: Output?
        get() = javaResource.initialUser().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 ->
                    clusterInitialUserToKotlin(args0)
                })
            }).orElse(null)
        })

    /**
     * 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.
     */
    public val labels: Output>?
        get() = javaResource.labels().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 ->
                    args0.key.to(args0.value)
                }).toMap()
            }).orElse(null)
        })

    /**
     * The location where the alloydb cluster should reside.
     * - - -
     */
    public val location: Output
        get() = javaResource.location().applyValue({ args0 -> args0 })

    /**
     * MaintenanceUpdatePolicy defines the policy for system updates.
     * Structure is documented below.
     */
    public val maintenanceUpdatePolicy: Output?
        get() = javaResource.maintenanceUpdatePolicy().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> clusterMaintenanceUpdatePolicyToKotlin(args0) })
            }).orElse(null)
        })

    /**
     * Cluster created via DMS migration.
     * Structure is documented below.
     */
    public val migrationSources: Output>
        get() = javaResource.migrationSources().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> clusterMigrationSourceToKotlin(args0) })
            })
        })

    /**
     * The name of the cluster resource.
     */
    public val name: Output
        get() = javaResource.name().applyValue({ args0 -> args0 })

    /**
     * (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}".
     * > **Warning:** `network` is deprecated and will be removed in a future major release. Instead, use `network_config` to define the network configuration.
     */
    @Deprecated(
        message = """
  `network` is deprecated and will be removed in a future major release. Instead, use
      `network_config` to define the network configuration.
  """,
    )
    public val network: Output
        get() = javaResource.network().applyValue({ args0 -> args0 })

    /**
     * Metadata related to network configuration.
     * Structure is documented below.
     */
    public val networkConfig: Output
        get() = javaResource.networkConfig().applyValue({ args0 ->
            args0.let({ args0 ->
                clusterNetworkConfigToKotlin(args0)
            })
        })

    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    public val project: Output
        get() = javaResource.project().applyValue({ args0 -> args0 })

    /**
     * The combination of labels configured directly on the resource
     * and default labels configured on the provider.
     */
    public val pulumiLabels: Output>
        get() = javaResource.pulumiLabels().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.key.to(args0.value)
            }).toMap()
        })

    /**
     * Output only. Reconciling (https://google.aip.dev/128#reconciliation).
     * Set to true if the current state of Cluster does not match the user's intended state, and the service is actively updating the resource to reconcile them.
     * This can happen due to user-triggered updates or system actions like failover or maintenance.
     */
    public val reconciling: Output
        get() = javaResource.reconciling().applyValue({ args0 -> args0 })

    /**
     * The source when restoring from a backup. Conflicts with 'restore_continuous_backup_source', both can't be set together.
     * Structure is documented below.
     */
    public val restoreBackupSource: Output?
        get() = javaResource.restoreBackupSource().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> clusterRestoreBackupSourceToKotlin(args0) })
            }).orElse(null)
        })

    /**
     * The source when restoring via point in time recovery (PITR). Conflicts with 'restore_backup_source', both can't be set together.
     * Structure is documented below.
     */
    public val restoreContinuousBackupSource: Output?
        get() = javaResource.restoreContinuousBackupSource().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> clusterRestoreContinuousBackupSourceToKotlin(args0) })
            }).orElse(null)
        })

    /**
     * Configuration of the secondary cluster for Cross Region Replication. This should be set if and only if the cluster is of type SECONDARY.
     * Structure is documented below.
     */
    public val secondaryConfig: Output?
        get() = javaResource.secondaryConfig().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> clusterSecondaryConfigToKotlin(args0) })
            }).orElse(null)
        })

    /**
     * Output only. The current serving state of the cluster.
     */
    public val state: Output
        get() = javaResource.state().applyValue({ args0 -> args0 })

    /**
     * The system-generated UID of the resource.
     */
    public val uid: Output
        get() = javaResource.uid().applyValue({ args0 -> args0 })
}

public object ClusterMapper : ResourceMapper {
    override fun supportsMappingOfType(javaResource: Resource): Boolean =
        com.pulumi.gcp.alloydb.Cluster::class == javaResource::class

    override fun map(javaResource: Resource): Cluster = Cluster(
        javaResource as
            com.pulumi.gcp.alloydb.Cluster,
    )
}

/**
 * @see [Cluster].
 * @param name The _unique_ name of the resulting resource.
 * @param block Builder for [Cluster].
 */
public suspend fun cluster(name: String, block: suspend ClusterResourceBuilder.() -> Unit): Cluster {
    val builder = ClusterResourceBuilder()
    builder.name(name)
    block(builder)
    return builder.build()
}

/**
 * @see [Cluster].
 * @param name The _unique_ name of the resulting resource.
 */
public fun cluster(name: String): Cluster {
    val builder = ClusterResourceBuilder()
    builder.name(name)
    return builder.build()
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy