import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * A Google Cloud Memorystore instance.
 *
 * To get more information about Instance, see:
 *
 * * [API documentation](https://cloud.google.com/memorystore/docs/valkey/reference/rest/v1/projects.locations.instances)
 * * How-to Guides
 *     * [Official Documentation](https://cloud.google.com/memorystore/docs/valkey/create-instances)
 *
 * ## Example Usage
 *
 * ### Memorystore Instance Basic
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const producerNet = new gcp.compute.Network("producer_net", {
 *     name: "my-network",
 *     autoCreateSubnetworks: false,
 * });
 * const producerSubnet = new gcp.compute.Subnetwork("producer_subnet", {
 *     name: "my-subnet",
 *     ipCidrRange: "10.0.0.248/29",
 *     region: "us-central1",
 *     network: producerNet.id,
 * });
 * const _default = new gcp.networkconnectivity.ServiceConnectionPolicy("default", {
 *     name: "my-policy",
 *     location: "us-central1",
 *     serviceClass: "gcp-memorystore",
 *     description: "my basic service connection policy",
 *     network: producerNet.id,
 *     pscConfig: {
 *         subnetworks: [producerSubnet.id],
 *     },
 * });
 * const project = gcp.organizations.getProject({});
 * const instance_basic = new gcp.memorystore.Instance("instance-basic", {
 *     instanceId: "basic-instance",
 *     shardCount: 1,
 *     desiredAutoCreatedEndpoints: [{
 *         network: producerNet.id,
 *         projectId: project.then(project => project.projectId),
 *     }],
 *     location: "us-central1",
 *     deletionProtectionEnabled: false,
 *     maintenancePolicy: {
 *         weeklyMaintenanceWindows: [{
 *             day: "MONDAY",
 *             startTime: {
 *                 hours: 1,
 *                 minutes: 0,
 *                 seconds: 0,
 *                 nanos: 0,
 *             },
 *         }],
 *     },
 * }, {
 *     dependsOn: [_default],
 * });
 * ```
 * ### Memorystore Instance Full
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const producerNet = new gcp.compute.Network("producer_net", {
 *     name: "my-network",
 *     autoCreateSubnetworks: false,
 * });
 * const producerSubnet = new gcp.compute.Subnetwork("producer_subnet", {
 *     name: "my-subnet",
 *     ipCidrRange: "10.0.0.248/29",
 *     region: "us-central1",
 *     network: producerNet.id,
 * });
 * const _default = new gcp.networkconnectivity.ServiceConnectionPolicy("default", {
 *     name: "my-policy",
 *     location: "us-central1",
 *     serviceClass: "gcp-memorystore",
 *     description: "my basic service connection policy",
 *     network: producerNet.id,
 *     pscConfig: {
 *         subnetworks: [producerSubnet.id],
 *     },
 * });
 * const project = gcp.organizations.getProject({});
 * const instance_full = new gcp.memorystore.Instance("instance-full", {
 *     instanceId: "full-instance",
 *     shardCount: 1,
 *     desiredAutoCreatedEndpoints: [{
 *         network: producerNet.id,
 *         projectId: project.then(project => project.projectId),
 *     }],
 *     location: "us-central1",
 *     replicaCount: 1,
 *     nodeType: "SHARED_CORE_NANO",
 *     transitEncryptionMode: "TRANSIT_ENCRYPTION_DISABLED",
 *     authorizationMode: "AUTH_DISABLED",
 *     kmsKey: "my-key",
 *     engineConfigs: {
 *         "maxmemory-policy": "volatile-ttl",
 *     },
 *     zoneDistributionConfig: {
 *         mode: "SINGLE_ZONE",
 *         zone: "us-central1-b",
 *     },
 *     maintenancePolicy: {
 *         weeklyMaintenanceWindows: [{
 *             day: "MONDAY",
 *             startTime: {
 *                 hours: 1,
 *                 minutes: 0,
 *                 seconds: 0,
 *                 nanos: 0,
 *             },
 *         }],
 *     },
 *     engineVersion: "VALKEY_7_2",
 *     deletionProtectionEnabled: false,
 *     mode: "CLUSTER",
 *     persistenceConfig: {
 *         mode: "RDB",
 *         rdbConfig: {
 *             rdbSnapshotPeriod: "ONE_HOUR",
 *             rdbSnapshotStartTime: "2024-10-02T15:01:23Z",
 *         },
 *     },
 *     labels: {
 *         abc: "xyz",
 *     },
 * }, {
 *     dependsOn: [_default],
 * });
 * ```
 * ### Memorystore Instance Persistence Aof
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const producerNet = new gcp.compute.Network("producer_net", {
 *     name: "my-network",
 *     autoCreateSubnetworks: false,
 * });
 * const producerSubnet = new gcp.compute.Subnetwork("producer_subnet", {
 *     name: "my-subnet",
 *     ipCidrRange: "10.0.0.248/29",
 *     region: "us-central1",
 *     network: producerNet.id,
 * });
 * const _default = new gcp.networkconnectivity.ServiceConnectionPolicy("default", {
 *     name: "my-policy",
 *     location: "us-central1",
 *     serviceClass: "gcp-memorystore",
 *     description: "my basic service connection policy",
 *     network: producerNet.id,
 *     pscConfig: {
 *         subnetworks: [producerSubnet.id],
 *     },
 * });
 * const project = gcp.organizations.getProject({});
 * const instance_persistence_aof = new gcp.memorystore.Instance("instance-persistence-aof", {
 *     instanceId: "aof-instance",
 *     shardCount: 1,
 *     desiredAutoCreatedEndpoints: [{
 *         network: producerNet.id,
 *         projectId: project.then(project => project.projectId),
 *     }],
 *     location: "us-central1",
 *     persistenceConfig: {
 *         mode: "AOF",
 *         aofConfig: {
 *             appendFsync: "EVERY_SEC",
 *         },
 *     },
 *     deletionProtectionEnabled: false,
 * }, {
 *     dependsOn: [_default],
 * });
 * ```
 * ### Memorystore Instance Secondary Instance
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const primaryProducerNet = new gcp.compute.Network("primary_producer_net", {
 *     name: "my-network-primary-instance",
 *     autoCreateSubnetworks: false,
 * });
 * const primaryProducerSubnet = new gcp.compute.Subnetwork("primary_producer_subnet", {
 *     name: "my-subnet-primary-instance",
 *     ipCidrRange: "10.0.1.0/29",
 *     region: "asia-east1",
 *     network: primaryProducerNet.id,
 * });
 * const primaryPolicy = new gcp.networkconnectivity.ServiceConnectionPolicy("primary_policy", {
 *     name: "my-policy-primary-instance",
 *     location: "asia-east1",
 *     serviceClass: "gcp-memorystore",
 *     description: "my basic service connection policy",
 *     network: primaryProducerNet.id,
 *     pscConfig: {
 *         subnetworks: [primaryProducerSubnet.id],
 *     },
 * });
 * const project = gcp.organizations.getProject({});
 * // Primary instance
 * const primaryInstance = new gcp.memorystore.Instance("primary_instance", {
 *     instanceId: "primary-instance",
 *     shardCount: 1,
 *     desiredAutoCreatedEndpoints: [{
 *         network: primaryProducerNet.id,
 *         projectId: project.then(project => project.projectId),
 *     }],
 *     location: "asia-east1",
 *     replicaCount: 1,
 *     nodeType: "SHARED_CORE_NANO",
 *     transitEncryptionMode: "TRANSIT_ENCRYPTION_DISABLED",
 *     authorizationMode: "AUTH_DISABLED",
 *     engineConfigs: {
 *         "maxmemory-policy": "volatile-ttl",
 *     },
 *     zoneDistributionConfig: {
 *         mode: "SINGLE_ZONE",
 *         zone: "asia-east1-c",
 *     },
 *     deletionProtectionEnabled: true,
 *     persistenceConfig: {
 *         mode: "RDB",
 *         rdbConfig: {
 *             rdbSnapshotPeriod: "ONE_HOUR",
 *             rdbSnapshotStartTime: "2024-10-02T15:01:23Z",
 *         },
 *     },
 *     labels: {
 *         abc: "xyz",
 *     },
 * }, {
 *     dependsOn: [primaryPolicy],
 * });
 * const secondaryProducerNet = new gcp.compute.Network("secondary_producer_net", {
 *     name: "my-network-secondary-instance",
 *     autoCreateSubnetworks: false,
 * });
 * const secondaryProducerSubnet = new gcp.compute.Subnetwork("secondary_producer_subnet", {
 *     name: "my-subnet-secondary-instance",
 *     ipCidrRange: "10.0.2.0/29",
 *     region: "europe-north1",
 *     network: secondaryProducerNet.id,
 * });
 * const secondaryPolicy = new gcp.networkconnectivity.ServiceConnectionPolicy("secondary_policy", {
 *     name: "my-policy-secondary-instance",
 *     location: "europe-north1",
 *     serviceClass: "gcp-memorystore",
 *     description: "my basic service connection policy",
 *     network: secondaryProducerNet.id,
 *     pscConfig: {
 *         subnetworks: [secondaryProducerSubnet.id],
 *     },
 * });
 * // Secondary instance
 * const secondaryInstance = new gcp.memorystore.Instance("secondary_instance", {
 *     instanceId: "secondary-instance",
 *     shardCount: 1,
 *     desiredAutoCreatedEndpoints: [{
 *         network: secondaryProducerNet.id,
 *         projectId: project.then(project => project.projectId),
 *     }],
 *     location: "europe-north1",
 *     replicaCount: 1,
 *     nodeType: "SHARED_CORE_NANO",
 *     transitEncryptionMode: "TRANSIT_ENCRYPTION_DISABLED",
 *     authorizationMode: "AUTH_DISABLED",
 *     engineConfigs: {
 *         "maxmemory-policy": "volatile-ttl",
 *     },
 *     zoneDistributionConfig: {
 *         mode: "SINGLE_ZONE",
 *         zone: "europe-north1-c",
 *     },
 *     deletionProtectionEnabled: true,
 *     crossInstanceReplicationConfig: {
 *         instanceRole: "SECONDARY",
 *         primaryInstance: {
 *             instance: primaryInstance.id,
 *         },
 *     },
 *     persistenceConfig: {
 *         mode: "RDB",
 *         rdbConfig: {
 *             rdbSnapshotPeriod: "ONE_HOUR",
 *             rdbSnapshotStartTime: "2024-10-02T15:01:23Z",
 *         },
 *     },
 *     labels: {
 *         abc: "xyz",
 *     },
 * }, {
 *     dependsOn: [secondaryPolicy],
 * });
 * ```
 *
 * ## Import
 *
 * Instance can be imported using any of these accepted formats:
 *
 * * `projects/{{project}}/locations/{{location}}/instances/{{instance_id}}`
 *
 * * `{{project}}/{{location}}/{{instance_id}}`
 *
 * * `{{location}}/{{instance_id}}`
 *
 * When using the `pulumi import` command, Instance can be imported using one of the formats above. For example:
 *
 * ```sh
 * $ pulumi import gcp:memorystore/instance:Instance default projects/{{project}}/locations/{{location}}/instances/{{instance_id}}
 * ```
 *
 * ```sh
 * $ pulumi import gcp:memorystore/instance:Instance default {{project}}/{{location}}/{{instance_id}}
 * ```
 *
 * ```sh
 * $ pulumi import gcp:memorystore/instance:Instance default {{location}}/{{instance_id}}
 * ```
 */
export declare class Instance extends pulumi.CustomResource {
    /**
     * Get an existing Instance 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.
     */
    static get(name: string, id: pulumi.Input<pulumi.ID>, state?: InstanceState, opts?: pulumi.CustomResourceOptions): Instance;
    /**
     * Returns true if the given object is an instance of Instance.  This is designed to work even
     * when multiple copies of the Pulumi SDK have been loaded into the same process.
     */
    static isInstance(obj: any): obj is Instance;
    /**
     * Optional. Immutable. Authorization mode of the instance. Possible values:
     * AUTH_DISABLED
     * IAM_AUTH
     */
    readonly authorizationMode: pulumi.Output<string>;
    /**
     * The automated backup config for a instance.
     * Structure is documented below.
     */
    readonly automatedBackupConfig: pulumi.Output<outputs.memorystore.InstanceAutomatedBackupConfig | undefined>;
    /**
     * This field is used to determine the available maintenance versions for the self service update.
     */
    readonly availableMaintenanceVersions: pulumi.Output<string[]>;
    /**
     * The backup collection full resource name.
     * Example: projects/{project}/locations/{location}/backupCollections/{collection}
     */
    readonly backupCollection: pulumi.Output<string>;
    /**
     * Output only. Creation timestamp of the instance.
     */
    readonly createTime: pulumi.Output<string>;
    /**
     * Cross instance replication config
     * Structure is documented below.
     */
    readonly crossInstanceReplicationConfig: pulumi.Output<outputs.memorystore.InstanceCrossInstanceReplicationConfig>;
    /**
     * Optional. If set to true deletion of the instance will fail.
     */
    readonly deletionProtectionEnabled: pulumi.Output<boolean | undefined>;
    /**
     * Immutable. User inputs for the auto-created endpoints connections.
     */
    readonly desiredAutoCreatedEndpoints: pulumi.Output<outputs.memorystore.InstanceDesiredAutoCreatedEndpoint[] | undefined>;
    /**
     * `desiredPscAutoConnections` is deprecated  Use `desiredAutoCreatedEndpoints` instead `pulumi import` will only work with desiredAutoCreatedEndpoints`.
     *
     * @deprecated `desiredPscAutoConnections` is deprecated. Use `desiredAutoCreatedEndpoints` instead. `terraform import` will only work with desiredAutoCreatedEndpoints`.
     */
    readonly desiredPscAutoConnections: pulumi.Output<outputs.memorystore.InstanceDesiredPscAutoConnection[] | undefined>;
    /**
     * (Deprecated)
     * Deprecated. Output only. Endpoints clients can connect to the instance through.
     * Structure is documented below.
     *
     * @deprecated This field is deprecated. As a result it will not be populated if the connections are created using `desiredAutoCreatedEndpoints` parameter or `gcp.memorystore.InstanceDesiredUserCreatedEndpoints` resource. Instead of this parameter, for discovery, use `endpoints.connections.pscConnection` and `endpoints.connections.pscAutoConnection` with `connectionType` CONNECTION_TYPE_DISCOVERY.
     */
    readonly discoveryEndpoints: pulumi.Output<outputs.memorystore.InstanceDiscoveryEndpoint[]>;
    /**
     * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
     */
    readonly effectiveLabels: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * This field represents the actual maintenance version of the cluster.
     */
    readonly effectiveMaintenanceVersion: pulumi.Output<string>;
    /**
     * Endpoints for the instance.
     * Structure is documented below.
     */
    readonly endpoints: pulumi.Output<outputs.memorystore.InstanceEndpoint[]>;
    /**
     * Optional. User-provided engine configurations for the instance.
     */
    readonly engineConfigs: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * Optional. Engine version of the instance.
     */
    readonly engineVersion: pulumi.Output<string>;
    /**
     * GCS source for the instance.
     * Structure is documented below.
     */
    readonly gcsSource: pulumi.Output<outputs.memorystore.InstanceGcsSource | undefined>;
    /**
     * Required. The ID to use for the instance, which will become the final component of
     * the instance's resource name.
     * This value is subject to the following restrictions:
     * * Must be 4-63 characters in length
     * * Must begin with a letter or digit
     * * Must contain only lowercase letters, digits, and hyphens
     * * Must not end with a hyphen
     * * Must be unique within a location
     */
    readonly instanceId: pulumi.Output<string>;
    /**
     * The KMS key used to encrypt the at-rest data of the cluster
     */
    readonly kmsKey: pulumi.Output<string | undefined>;
    /**
     * Optional. Labels to represent user-provided metadata.
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field `effectiveLabels` for all of the labels present on the resource.
     */
    readonly labels: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `memorystore.googleapis.com/CertificateAuthority`.
     */
    readonly location: pulumi.Output<string>;
    /**
     * Maintenance policy for a cluster
     * Structure is documented below.
     */
    readonly maintenancePolicy: pulumi.Output<outputs.memorystore.InstanceMaintenancePolicy | undefined>;
    /**
     * Upcoming maintenance schedule.
     * Structure is documented below.
     */
    readonly maintenanceSchedules: pulumi.Output<outputs.memorystore.InstanceMaintenanceSchedule[]>;
    /**
     * This field can be used to trigger self service update to indicate the desired maintenance version. The input to this field can be determined by the availableMaintenanceVersions field.
     * *Note*: This field can only be specified when updating an existing cluster to a newer version. Downgrades are currently not supported!
     */
    readonly maintenanceVersion: pulumi.Output<string | undefined>;
    /**
     * Managed backup source for the instance.
     * Structure is documented below.
     */
    readonly managedBackupSource: pulumi.Output<outputs.memorystore.InstanceManagedBackupSource | undefined>;
    /**
     * Instance's Certificate Authority. This field will only be populated if instance's transitEncryptionMode is SERVER_AUTHENTICATION
     * Structure is documented below.
     */
    readonly managedServerCas: pulumi.Output<outputs.memorystore.InstanceManagedServerCa[]>;
    /**
     * Optional. cluster or cluster-disabled.
     * Possible values:
     * CLUSTER
     * CLUSTER_DISABLED
     * Possible values are: `CLUSTER`, `CLUSTER_DISABLED`.
     */
    readonly mode: pulumi.Output<string>;
    /**
     * Identifier. Unique name of the instance.
     * Format: projects/{project}/locations/{location}/instances/{instance}
     */
    readonly name: pulumi.Output<string>;
    /**
     * Represents configuration for nodes of the instance.
     * Structure is documented below.
     */
    readonly nodeConfigs: pulumi.Output<outputs.memorystore.InstanceNodeConfig[]>;
    /**
     * Optional. Machine type for individual nodes of the instance.
     * Possible values:
     * SHARED_CORE_NANO
     * HIGHMEM_MEDIUM
     * HIGHMEM_XLARGE
     * STANDARD_SMALL
     */
    readonly nodeType: pulumi.Output<string>;
    /**
     * Represents persistence configuration for a instance.
     * Structure is documented below.
     */
    readonly persistenceConfig: pulumi.Output<outputs.memorystore.InstancePersistenceConfig>;
    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    readonly project: pulumi.Output<string>;
    /**
     * Configuration of a service attachment of the cluster, for creating PSC connections.
     * Structure is documented below.
     */
    readonly pscAttachmentDetails: pulumi.Output<outputs.memorystore.InstancePscAttachmentDetail[]>;
    /**
     * (Deprecated)
     * Output only. User inputs and resource details of the auto-created PSC connections.
     * Structure is documented below.
     *
     * @deprecated `pscAutoConnections` is deprecated  Use `endpoints.connections.pscAutoConnections` instead.
     */
    readonly pscAutoConnections: pulumi.Output<outputs.memorystore.InstancePscAutoConnection[]>;
    /**
     * The combination of labels configured directly on the resource
     * and default labels configured on the provider.
     */
    readonly pulumiLabels: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * Optional. Number of replica nodes per shard. If omitted the default is 0 replicas.
     */
    readonly replicaCount: pulumi.Output<number>;
    /**
     * Required. Number of shards for the instance.
     */
    readonly shardCount: pulumi.Output<number>;
    /**
     * Output only. Current state of the instance.
     * Possible values:
     * CREATING
     * ACTIVE
     * UPDATING
     * DELETING
     */
    readonly state: pulumi.Output<string>;
    /**
     * Additional information about the state of the instance.
     * Structure is documented below.
     */
    readonly stateInfos: pulumi.Output<outputs.memorystore.InstanceStateInfo[]>;
    /**
     * Optional. Immutable. In-transit encryption mode of the instance.
     * Possible values:
     * TRANSIT_ENCRYPTION_DISABLED
     * SERVER_AUTHENTICATION
     */
    readonly transitEncryptionMode: pulumi.Output<string>;
    /**
     * Output only. System assigned, unique identifier for the instance.
     */
    readonly uid: pulumi.Output<string>;
    /**
     * Output only. Latest update timestamp of the instance.
     */
    readonly updateTime: pulumi.Output<string>;
    /**
     * Zone distribution configuration for allocation of instance resources.
     * Structure is documented below.
     */
    readonly zoneDistributionConfig: pulumi.Output<outputs.memorystore.InstanceZoneDistributionConfig>;
    /**
     * Create a Instance 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: InstanceArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering Instance resources.
 */
export interface InstanceState {
    /**
     * Optional. Immutable. Authorization mode of the instance. Possible values:
     * AUTH_DISABLED
     * IAM_AUTH
     */
    authorizationMode?: pulumi.Input<string>;
    /**
     * The automated backup config for a instance.
     * Structure is documented below.
     */
    automatedBackupConfig?: pulumi.Input<inputs.memorystore.InstanceAutomatedBackupConfig>;
    /**
     * This field is used to determine the available maintenance versions for the self service update.
     */
    availableMaintenanceVersions?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * The backup collection full resource name.
     * Example: projects/{project}/locations/{location}/backupCollections/{collection}
     */
    backupCollection?: pulumi.Input<string>;
    /**
     * Output only. Creation timestamp of the instance.
     */
    createTime?: pulumi.Input<string>;
    /**
     * Cross instance replication config
     * Structure is documented below.
     */
    crossInstanceReplicationConfig?: pulumi.Input<inputs.memorystore.InstanceCrossInstanceReplicationConfig>;
    /**
     * Optional. If set to true deletion of the instance will fail.
     */
    deletionProtectionEnabled?: pulumi.Input<boolean>;
    /**
     * Immutable. User inputs for the auto-created endpoints connections.
     */
    desiredAutoCreatedEndpoints?: pulumi.Input<pulumi.Input<inputs.memorystore.InstanceDesiredAutoCreatedEndpoint>[]>;
    /**
     * `desiredPscAutoConnections` is deprecated  Use `desiredAutoCreatedEndpoints` instead `pulumi import` will only work with desiredAutoCreatedEndpoints`.
     *
     * @deprecated `desiredPscAutoConnections` is deprecated. Use `desiredAutoCreatedEndpoints` instead. `terraform import` will only work with desiredAutoCreatedEndpoints`.
     */
    desiredPscAutoConnections?: pulumi.Input<pulumi.Input<inputs.memorystore.InstanceDesiredPscAutoConnection>[]>;
    /**
     * (Deprecated)
     * Deprecated. Output only. Endpoints clients can connect to the instance through.
     * Structure is documented below.
     *
     * @deprecated This field is deprecated. As a result it will not be populated if the connections are created using `desiredAutoCreatedEndpoints` parameter or `gcp.memorystore.InstanceDesiredUserCreatedEndpoints` resource. Instead of this parameter, for discovery, use `endpoints.connections.pscConnection` and `endpoints.connections.pscAutoConnection` with `connectionType` CONNECTION_TYPE_DISCOVERY.
     */
    discoveryEndpoints?: pulumi.Input<pulumi.Input<inputs.memorystore.InstanceDiscoveryEndpoint>[]>;
    /**
     * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
     */
    effectiveLabels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * This field represents the actual maintenance version of the cluster.
     */
    effectiveMaintenanceVersion?: pulumi.Input<string>;
    /**
     * Endpoints for the instance.
     * Structure is documented below.
     */
    endpoints?: pulumi.Input<pulumi.Input<inputs.memorystore.InstanceEndpoint>[]>;
    /**
     * Optional. User-provided engine configurations for the instance.
     */
    engineConfigs?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Optional. Engine version of the instance.
     */
    engineVersion?: pulumi.Input<string>;
    /**
     * GCS source for the instance.
     * Structure is documented below.
     */
    gcsSource?: pulumi.Input<inputs.memorystore.InstanceGcsSource>;
    /**
     * Required. The ID to use for the instance, which will become the final component of
     * the instance's resource name.
     * This value is subject to the following restrictions:
     * * Must be 4-63 characters in length
     * * Must begin with a letter or digit
     * * Must contain only lowercase letters, digits, and hyphens
     * * Must not end with a hyphen
     * * Must be unique within a location
     */
    instanceId?: pulumi.Input<string>;
    /**
     * The KMS key used to encrypt the at-rest data of the cluster
     */
    kmsKey?: pulumi.Input<string>;
    /**
     * Optional. Labels to represent user-provided metadata.
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field `effectiveLabels` for all of the labels present on the resource.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `memorystore.googleapis.com/CertificateAuthority`.
     */
    location?: pulumi.Input<string>;
    /**
     * Maintenance policy for a cluster
     * Structure is documented below.
     */
    maintenancePolicy?: pulumi.Input<inputs.memorystore.InstanceMaintenancePolicy>;
    /**
     * Upcoming maintenance schedule.
     * Structure is documented below.
     */
    maintenanceSchedules?: pulumi.Input<pulumi.Input<inputs.memorystore.InstanceMaintenanceSchedule>[]>;
    /**
     * This field can be used to trigger self service update to indicate the desired maintenance version. The input to this field can be determined by the availableMaintenanceVersions field.
     * *Note*: This field can only be specified when updating an existing cluster to a newer version. Downgrades are currently not supported!
     */
    maintenanceVersion?: pulumi.Input<string>;
    /**
     * Managed backup source for the instance.
     * Structure is documented below.
     */
    managedBackupSource?: pulumi.Input<inputs.memorystore.InstanceManagedBackupSource>;
    /**
     * Instance's Certificate Authority. This field will only be populated if instance's transitEncryptionMode is SERVER_AUTHENTICATION
     * Structure is documented below.
     */
    managedServerCas?: pulumi.Input<pulumi.Input<inputs.memorystore.InstanceManagedServerCa>[]>;
    /**
     * Optional. cluster or cluster-disabled.
     * Possible values:
     * CLUSTER
     * CLUSTER_DISABLED
     * Possible values are: `CLUSTER`, `CLUSTER_DISABLED`.
     */
    mode?: pulumi.Input<string>;
    /**
     * Identifier. Unique name of the instance.
     * Format: projects/{project}/locations/{location}/instances/{instance}
     */
    name?: pulumi.Input<string>;
    /**
     * Represents configuration for nodes of the instance.
     * Structure is documented below.
     */
    nodeConfigs?: pulumi.Input<pulumi.Input<inputs.memorystore.InstanceNodeConfig>[]>;
    /**
     * Optional. Machine type for individual nodes of the instance.
     * Possible values:
     * SHARED_CORE_NANO
     * HIGHMEM_MEDIUM
     * HIGHMEM_XLARGE
     * STANDARD_SMALL
     */
    nodeType?: pulumi.Input<string>;
    /**
     * Represents persistence configuration for a instance.
     * Structure is documented below.
     */
    persistenceConfig?: pulumi.Input<inputs.memorystore.InstancePersistenceConfig>;
    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    project?: pulumi.Input<string>;
    /**
     * Configuration of a service attachment of the cluster, for creating PSC connections.
     * Structure is documented below.
     */
    pscAttachmentDetails?: pulumi.Input<pulumi.Input<inputs.memorystore.InstancePscAttachmentDetail>[]>;
    /**
     * (Deprecated)
     * Output only. User inputs and resource details of the auto-created PSC connections.
     * Structure is documented below.
     *
     * @deprecated `pscAutoConnections` is deprecated  Use `endpoints.connections.pscAutoConnections` instead.
     */
    pscAutoConnections?: pulumi.Input<pulumi.Input<inputs.memorystore.InstancePscAutoConnection>[]>;
    /**
     * The combination of labels configured directly on the resource
     * and default labels configured on the provider.
     */
    pulumiLabels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Optional. Number of replica nodes per shard. If omitted the default is 0 replicas.
     */
    replicaCount?: pulumi.Input<number>;
    /**
     * Required. Number of shards for the instance.
     */
    shardCount?: pulumi.Input<number>;
    /**
     * Output only. Current state of the instance.
     * Possible values:
     * CREATING
     * ACTIVE
     * UPDATING
     * DELETING
     */
    state?: pulumi.Input<string>;
    /**
     * Additional information about the state of the instance.
     * Structure is documented below.
     */
    stateInfos?: pulumi.Input<pulumi.Input<inputs.memorystore.InstanceStateInfo>[]>;
    /**
     * Optional. Immutable. In-transit encryption mode of the instance.
     * Possible values:
     * TRANSIT_ENCRYPTION_DISABLED
     * SERVER_AUTHENTICATION
     */
    transitEncryptionMode?: pulumi.Input<string>;
    /**
     * Output only. System assigned, unique identifier for the instance.
     */
    uid?: pulumi.Input<string>;
    /**
     * Output only. Latest update timestamp of the instance.
     */
    updateTime?: pulumi.Input<string>;
    /**
     * Zone distribution configuration for allocation of instance resources.
     * Structure is documented below.
     */
    zoneDistributionConfig?: pulumi.Input<inputs.memorystore.InstanceZoneDistributionConfig>;
}
/**
 * The set of arguments for constructing a Instance resource.
 */
export interface InstanceArgs {
    /**
     * Optional. Immutable. Authorization mode of the instance. Possible values:
     * AUTH_DISABLED
     * IAM_AUTH
     */
    authorizationMode?: pulumi.Input<string>;
    /**
     * The automated backup config for a instance.
     * Structure is documented below.
     */
    automatedBackupConfig?: pulumi.Input<inputs.memorystore.InstanceAutomatedBackupConfig>;
    /**
     * Cross instance replication config
     * Structure is documented below.
     */
    crossInstanceReplicationConfig?: pulumi.Input<inputs.memorystore.InstanceCrossInstanceReplicationConfig>;
    /**
     * Optional. If set to true deletion of the instance will fail.
     */
    deletionProtectionEnabled?: pulumi.Input<boolean>;
    /**
     * Immutable. User inputs for the auto-created endpoints connections.
     */
    desiredAutoCreatedEndpoints?: pulumi.Input<pulumi.Input<inputs.memorystore.InstanceDesiredAutoCreatedEndpoint>[]>;
    /**
     * `desiredPscAutoConnections` is deprecated  Use `desiredAutoCreatedEndpoints` instead `pulumi import` will only work with desiredAutoCreatedEndpoints`.
     *
     * @deprecated `desiredPscAutoConnections` is deprecated. Use `desiredAutoCreatedEndpoints` instead. `terraform import` will only work with desiredAutoCreatedEndpoints`.
     */
    desiredPscAutoConnections?: pulumi.Input<pulumi.Input<inputs.memorystore.InstanceDesiredPscAutoConnection>[]>;
    /**
     * Optional. User-provided engine configurations for the instance.
     */
    engineConfigs?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Optional. Engine version of the instance.
     */
    engineVersion?: pulumi.Input<string>;
    /**
     * GCS source for the instance.
     * Structure is documented below.
     */
    gcsSource?: pulumi.Input<inputs.memorystore.InstanceGcsSource>;
    /**
     * Required. The ID to use for the instance, which will become the final component of
     * the instance's resource name.
     * This value is subject to the following restrictions:
     * * Must be 4-63 characters in length
     * * Must begin with a letter or digit
     * * Must contain only lowercase letters, digits, and hyphens
     * * Must not end with a hyphen
     * * Must be unique within a location
     */
    instanceId: pulumi.Input<string>;
    /**
     * The KMS key used to encrypt the at-rest data of the cluster
     */
    kmsKey?: pulumi.Input<string>;
    /**
     * Optional. Labels to represent user-provided metadata.
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field `effectiveLabels` for all of the labels present on the resource.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `memorystore.googleapis.com/CertificateAuthority`.
     */
    location: pulumi.Input<string>;
    /**
     * Maintenance policy for a cluster
     * Structure is documented below.
     */
    maintenancePolicy?: pulumi.Input<inputs.memorystore.InstanceMaintenancePolicy>;
    /**
     * This field can be used to trigger self service update to indicate the desired maintenance version. The input to this field can be determined by the availableMaintenanceVersions field.
     * *Note*: This field can only be specified when updating an existing cluster to a newer version. Downgrades are currently not supported!
     */
    maintenanceVersion?: pulumi.Input<string>;
    /**
     * Managed backup source for the instance.
     * Structure is documented below.
     */
    managedBackupSource?: pulumi.Input<inputs.memorystore.InstanceManagedBackupSource>;
    /**
     * Optional. cluster or cluster-disabled.
     * Possible values:
     * CLUSTER
     * CLUSTER_DISABLED
     * Possible values are: `CLUSTER`, `CLUSTER_DISABLED`.
     */
    mode?: pulumi.Input<string>;
    /**
     * Optional. Machine type for individual nodes of the instance.
     * Possible values:
     * SHARED_CORE_NANO
     * HIGHMEM_MEDIUM
     * HIGHMEM_XLARGE
     * STANDARD_SMALL
     */
    nodeType?: pulumi.Input<string>;
    /**
     * Represents persistence configuration for a instance.
     * Structure is documented below.
     */
    persistenceConfig?: pulumi.Input<inputs.memorystore.InstancePersistenceConfig>;
    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    project?: pulumi.Input<string>;
    /**
     * Optional. Number of replica nodes per shard. If omitted the default is 0 replicas.
     */
    replicaCount?: pulumi.Input<number>;
    /**
     * Required. Number of shards for the instance.
     */
    shardCount: pulumi.Input<number>;
    /**
     * Optional. Immutable. In-transit encryption mode of the instance.
     * Possible values:
     * TRANSIT_ENCRYPTION_DISABLED
     * SERVER_AUTHENTICATION
     */
    transitEncryptionMode?: pulumi.Input<string>;
    /**
     * Zone distribution configuration for allocation of instance resources.
     * Structure is documented below.
     */
    zoneDistributionConfig?: pulumi.Input<inputs.memorystore.InstanceZoneDistributionConfig>;
}
