import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * Represents long-lasting resources that are dedicated to users to runs custom
 * workloads. A PersistentResource can have multiple node pools and each node
 * pool can have its own machine spec.
 *
 * To get more information about PersistentResource, see:
 *
 * * [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.persistentResources)
 *
 * ## Example Usage
 *
 * ### Vertex Ai Persistent Resource
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const persistentResource = new gcp.vertex.AiPersistentResource("persistent_resource", {
 *     name: "example-persistent-resource",
 *     location: "us-central1",
 *     displayName: "Example persistent resource",
 *     resourcePools: [{
 *         machineSpec: {
 *             machineType: "n1-standard-4",
 *         },
 *         replicaCount: "1",
 *     }],
 * });
 * ```
 * ### Vertex Ai Persistent Resource Autoscaling
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const persistentResource = new gcp.vertex.AiPersistentResource("persistent_resource", {
 *     name: "example-persistent-resource",
 *     location: "us-central1",
 *     displayName: "Example persistent resource",
 *     resourcePools: [{
 *         machineSpec: {
 *             machineType: "n1-standard-4",
 *         },
 *         replicaCount: "1",
 *         autoscalingSpec: {
 *             minReplicaCount: "1",
 *             maxReplicaCount: "2",
 *         },
 *     }],
 * });
 * ```
 * ### Vertex Ai Persistent Resource Machine Spec
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const persistentResource = new gcp.vertex.AiPersistentResource("persistent_resource", {
 *     name: "example-persistent-resource",
 *     location: "us-central1",
 *     resourcePools: [{
 *         machineSpec: {
 *             machineType: "a3-highgpu-8g",
 *             acceleratorCount: 8,
 *             acceleratorType: "NVIDIA_H100_80GB",
 *         },
 *         replicaCount: "1",
 *         diskSpec: {
 *             bootDiskSizeGb: 200,
 *             bootDiskType: "pd-ssd",
 *         },
 *     }],
 * });
 * ```
 * ### Vertex Ai Persistent Resource Network
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * import * as time from "@pulumiverse/time";
 *
 * // VPC network for Vertex AI peering
 * const vertexNetwork = new gcp.compute.Network("vertex_network", {
 *     name: "vertex-network",
 *     autoCreateSubnetworks: false,
 * });
 * // Reserved IP range for Vertex AI peering
 * const vertexRange = new gcp.compute.GlobalAddress("vertex_range", {
 *     name: "vertex-ip-range",
 *     purpose: "VPC_PEERING",
 *     addressType: "INTERNAL",
 *     prefixLength: 24,
 *     network: vertexNetwork.id,
 * });
 * // Service networking connection for Vertex AI
 * const vertexVpcConnection = new gcp.servicenetworking.Connection("vertex_vpc_connection", {
 *     network: vertexNetwork.id,
 *     service: "servicenetworking.googleapis.com",
 *     reservedPeeringRanges: [vertexRange.name],
 * });
 * // Subnetwork for the network attachment
 * const pscSubnetwork = new gcp.compute.Subnetwork("psc_subnetwork", {
 *     name: "psc-subnetwork",
 *     region: "us-central1",
 *     ipCidrRange: "10.0.0.0/16",
 *     network: vertexNetwork.id,
 * });
 * // Network attachment for PSC-I
 * const pscAttachment = new gcp.compute.NetworkAttachment("psc_attachment", {
 *     name: "psc-attachment",
 *     region: "us-central1",
 *     connectionPreference: "ACCEPT_MANUAL",
 *     subnetworks: [pscSubnetwork.id],
 * });
 * const waitForDeletion = new time.Sleep("wait_for_deletion", {destroyDuration: "300s"}, {
 *     dependsOn: [
 *         pscAttachment,
 *         vertexVpcConnection,
 *     ],
 * });
 * const project = gcp.organizations.getProject({});
 * // Grant Vertex AI service agent access to the KMS key
 * const cryptoKey = new gcp.kms.CryptoKeyIAMMember("crypto_key", {
 *     cryptoKeyId: "example-key",
 *     role: "roles/cloudkms.cryptoKeyEncrypterDecrypter",
 *     member: project.then(project => `serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com`),
 * });
 * const persistentResource = new gcp.vertex.AiPersistentResource("persistent_resource", {
 *     name: "example-persistent-resource",
 *     location: "us-central1",
 *     displayName: "test-persistent-resource-full",
 *     labels: {
 *         env: "test",
 *     },
 *     network: pulumi.all([project, vertexNetwork.name]).apply(([project, name]) => `projects/${project.number}/global/networks/${name}`),
 *     reservedIpRanges: [vertexRange.name],
 *     encryptionSpec: {
 *         kmsKeyName: "example-key",
 *     },
 *     pscInterfaceConfig: {
 *         networkAttachment: pscAttachment.id,
 *         dnsPeeringConfigs: [{
 *             domain: "example.com.",
 *             targetProject: project.then(project => project.projectId),
 *             targetNetwork: vertexNetwork.name,
 *         }],
 *     },
 *     resourcePools: [{
 *         id: "vpr-resource-pool",
 *         replicaCount: "1",
 *         machineSpec: {
 *             machineType: "n1-standard-4",
 *         },
 *         diskSpec: {
 *             bootDiskSizeGb: 200,
 *             bootDiskType: "pd-ssd",
 *         },
 *     }],
 *     resourceRuntimeSpec: {
 *         serviceAccountSpec: {
 *             enableCustomServiceAccount: true,
 *         },
 *     },
 * }, {
 *     dependsOn: [
 *         vertexVpcConnection,
 *         cryptoKey,
 *         waitForDeletion,
 *     ],
 * });
 * ```
 *
 * ## Import
 *
 * PersistentResource can be imported using any of these accepted formats:
 *
 * * `projects/{{project}}/locations/{{location}}/persistentResources/{{name}}`
 * * `{{project}}/{{location}}/{{name}}`
 * * `{{location}}/{{name}}`
 *
 * When using the `pulumi import` command, PersistentResource can be imported using one of the formats above. For example:
 *
 * ```sh
 * $ pulumi import gcp:vertex/aiPersistentResource:AiPersistentResource default projects/{{project}}/locations/{{location}}/persistentResources/{{name}}
 * $ pulumi import gcp:vertex/aiPersistentResource:AiPersistentResource default {{project}}/{{location}}/{{name}}
 * $ pulumi import gcp:vertex/aiPersistentResource:AiPersistentResource default {{location}}/{{name}}
 * ```
 */
export declare class AiPersistentResource extends pulumi.CustomResource {
    /**
     * Get an existing AiPersistentResource 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?: AiPersistentResourceState, opts?: pulumi.CustomResourceOptions): AiPersistentResource;
    /**
     * Returns true if the given object is an instance of AiPersistentResource.  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 AiPersistentResource;
    /**
     * Time when the PersistentResource was created.
     */
    readonly createTime: pulumi.Output<string>;
    /**
     * Whether Terraform will be prevented from destroying the resource. Defaults to DELETE.
     * When a 'terraform destroy' or 'pulumi up' would delete the resource,
     * the command will fail if this field is set to "PREVENT" in Terraform state.
     * When set to "ABANDON", the command will remove the resource from Terraform
     * management without updating or deleting the resource in the API.
     * When set to "DELETE", deleting the resource is allowed.
     */
    readonly deletionPolicy: pulumi.Output<string>;
    /**
     * The display name of the PersistentResource.
     * The name can be up to 128 characters long and can consist of any UTF-8
     * characters.
     */
    readonly displayName: pulumi.Output<string | undefined>;
    /**
     * 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;
    }>;
    /**
     * Represents a customer-managed encryption key specification that can be
     * applied to a Vertex AI resource.
     * Structure is documented below.
     */
    readonly encryptionSpec: pulumi.Output<outputs.vertex.AiPersistentResourceEncryptionSpec | undefined>;
    /**
     * The `Status` type defines a logical error model that is suitable for
     * different programming environments, including REST APIs and RPC APIs. It is
     * used by [gRPC](https://github.com/grpc). Each `Status` message contains
     * three pieces of data: error code, error message, and error details.
     * You can find out more about this error model and how to work with it in the
     * [API Design Guide](https://cloud.google.com/apis/design/errors).
     * Structure is documented below.
     */
    readonly errors: pulumi.Output<outputs.vertex.AiPersistentResourceError[]>;
    /**
     * The labels with user-defined metadata to organize PersistentResource.
     * Label keys and values can be no longer than 64 characters
     * (Unicode codepoints), can only contain lowercase letters, numeric
     * characters, underscores and dashes. International characters are allowed.
     * See https://goo.gl/xmQnxf for more information and examples of labels.
     * **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>;
    /**
     * The location of the PersistentResource. eg us-central1
     */
    readonly location: pulumi.Output<string | undefined>;
    /**
     * The ID to use for the PersistentResource, which become the final component
     * of the PersistentResource's resource name.
     * The maximum length is 63 characters, and valid characters
     * are `/^a-z?$/`.
     */
    readonly name: pulumi.Output<string>;
    /**
     * The full name of the Compute Engine
     * [network](https://www.terraform.io/compute/docs/networks-and-firewalls#networks) to peered with
     * Vertex AI to host the persistent resources.
     * For example, `projects/12345/global/networks/myVPC`.
     * [Format](https://www.terraform.io/compute/docs/reference/rest/v1/networks/insert)
     * is of the form `projects/{project}/global/networks/{network}`.
     * Where {project} is a project number, as in `12345`, and {network} is a
     * network name.
     * To specify this field, you must have already [configured VPC Network
     * Peering for Vertex
     * AI](https://cloud.google.com/vertex-ai/docs/general/vpc-peering).
     * If this field is left unspecified, the resources aren't peered with any
     * network.
     */
    readonly network: pulumi.Output<string | undefined>;
    /**
     * 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 for PSC-I.
     * Structure is documented below.
     */
    readonly pscInterfaceConfig: pulumi.Output<outputs.vertex.AiPersistentResourcePscInterfaceConfig | undefined>;
    /**
     * The combination of labels configured directly on the resource
     *  and default labels configured on the provider.
     */
    readonly pulumiLabels: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * A list of names for the reserved IP ranges under the VPC network
     * that can be used for this persistent resource.
     * If set, we will deploy the persistent resource within the provided IP
     * ranges. Otherwise, the persistent resource is deployed to any IP
     * ranges under the provided VPC network.
     * Example: ['vertex-ai-ip-range'].
     */
    readonly reservedIpRanges: pulumi.Output<string[] | undefined>;
    /**
     * The spec of the pools of different resources.
     * Structure is documented below.
     */
    readonly resourcePools: pulumi.Output<outputs.vertex.AiPersistentResourceResourcePool[]>;
    /**
     * Configuration for the runtime on a PersistentResource instance.
     * Structure is documented below.
     */
    readonly resourceRuntimeSpec: pulumi.Output<outputs.vertex.AiPersistentResourceResourceRuntimeSpec | undefined>;
    /**
     * Persistent Cluster runtime information as output
     * Structure is documented below.
     */
    readonly resourceRuntimes: pulumi.Output<outputs.vertex.AiPersistentResourceResourceRuntime[]>;
    /**
     * Reserved for future use.
     */
    readonly satisfiesPzi: pulumi.Output<boolean>;
    /**
     * Reserved for future use.
     */
    readonly satisfiesPzs: pulumi.Output<boolean>;
    /**
     * Time when the PersistentResource for the first time entered the `RUNNING`
     * state.
     */
    readonly startTime: pulumi.Output<string>;
    /**
     * The detailed state of a PersistentResource.
     * Possible values:
     * PROVISIONING
     * RUNNING
     * STOPPING
     * ERROR
     * REBOOTING
     * UPDATING
     */
    readonly state: pulumi.Output<string>;
    /**
     * Time when the PersistentResource was most recently updated.
     */
    readonly updateTime: pulumi.Output<string>;
    /**
     * Create a AiPersistentResource 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: AiPersistentResourceArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering AiPersistentResource resources.
 */
export interface AiPersistentResourceState {
    /**
     * Time when the PersistentResource was created.
     */
    createTime?: pulumi.Input<string | undefined>;
    /**
     * Whether Terraform will be prevented from destroying the resource. Defaults to DELETE.
     * When a 'terraform destroy' or 'pulumi up' would delete the resource,
     * the command will fail if this field is set to "PREVENT" in Terraform state.
     * When set to "ABANDON", the command will remove the resource from Terraform
     * management without updating or deleting the resource in the API.
     * When set to "DELETE", deleting the resource is allowed.
     */
    deletionPolicy?: pulumi.Input<string | undefined>;
    /**
     * The display name of the PersistentResource.
     * The name can be up to 128 characters long and can consist of any UTF-8
     * characters.
     */
    displayName?: pulumi.Input<string | undefined>;
    /**
     * 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>;
    } | undefined>;
    /**
     * Represents a customer-managed encryption key specification that can be
     * applied to a Vertex AI resource.
     * Structure is documented below.
     */
    encryptionSpec?: pulumi.Input<inputs.vertex.AiPersistentResourceEncryptionSpec | undefined>;
    /**
     * The `Status` type defines a logical error model that is suitable for
     * different programming environments, including REST APIs and RPC APIs. It is
     * used by [gRPC](https://github.com/grpc). Each `Status` message contains
     * three pieces of data: error code, error message, and error details.
     * You can find out more about this error model and how to work with it in the
     * [API Design Guide](https://cloud.google.com/apis/design/errors).
     * Structure is documented below.
     */
    errors?: pulumi.Input<pulumi.Input<inputs.vertex.AiPersistentResourceError>[] | undefined>;
    /**
     * The labels with user-defined metadata to organize PersistentResource.
     * Label keys and values can be no longer than 64 characters
     * (Unicode codepoints), can only contain lowercase letters, numeric
     * characters, underscores and dashes. International characters are allowed.
     * See https://goo.gl/xmQnxf for more information and examples of labels.
     * **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>;
    } | undefined>;
    /**
     * The location of the PersistentResource. eg us-central1
     */
    location?: pulumi.Input<string | undefined>;
    /**
     * The ID to use for the PersistentResource, which become the final component
     * of the PersistentResource's resource name.
     * The maximum length is 63 characters, and valid characters
     * are `/^a-z?$/`.
     */
    name?: pulumi.Input<string | undefined>;
    /**
     * The full name of the Compute Engine
     * [network](https://www.terraform.io/compute/docs/networks-and-firewalls#networks) to peered with
     * Vertex AI to host the persistent resources.
     * For example, `projects/12345/global/networks/myVPC`.
     * [Format](https://www.terraform.io/compute/docs/reference/rest/v1/networks/insert)
     * is of the form `projects/{project}/global/networks/{network}`.
     * Where {project} is a project number, as in `12345`, and {network} is a
     * network name.
     * To specify this field, you must have already [configured VPC Network
     * Peering for Vertex
     * AI](https://cloud.google.com/vertex-ai/docs/general/vpc-peering).
     * If this field is left unspecified, the resources aren't peered with any
     * network.
     */
    network?: pulumi.Input<string | undefined>;
    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    project?: pulumi.Input<string | undefined>;
    /**
     * Configuration for PSC-I.
     * Structure is documented below.
     */
    pscInterfaceConfig?: pulumi.Input<inputs.vertex.AiPersistentResourcePscInterfaceConfig | undefined>;
    /**
     * The combination of labels configured directly on the resource
     *  and default labels configured on the provider.
     */
    pulumiLabels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * A list of names for the reserved IP ranges under the VPC network
     * that can be used for this persistent resource.
     * If set, we will deploy the persistent resource within the provided IP
     * ranges. Otherwise, the persistent resource is deployed to any IP
     * ranges under the provided VPC network.
     * Example: ['vertex-ai-ip-range'].
     */
    reservedIpRanges?: pulumi.Input<pulumi.Input<string>[] | undefined>;
    /**
     * The spec of the pools of different resources.
     * Structure is documented below.
     */
    resourcePools?: pulumi.Input<pulumi.Input<inputs.vertex.AiPersistentResourceResourcePool>[] | undefined>;
    /**
     * Configuration for the runtime on a PersistentResource instance.
     * Structure is documented below.
     */
    resourceRuntimeSpec?: pulumi.Input<inputs.vertex.AiPersistentResourceResourceRuntimeSpec | undefined>;
    /**
     * Persistent Cluster runtime information as output
     * Structure is documented below.
     */
    resourceRuntimes?: pulumi.Input<pulumi.Input<inputs.vertex.AiPersistentResourceResourceRuntime>[] | undefined>;
    /**
     * Reserved for future use.
     */
    satisfiesPzi?: pulumi.Input<boolean | undefined>;
    /**
     * Reserved for future use.
     */
    satisfiesPzs?: pulumi.Input<boolean | undefined>;
    /**
     * Time when the PersistentResource for the first time entered the `RUNNING`
     * state.
     */
    startTime?: pulumi.Input<string | undefined>;
    /**
     * The detailed state of a PersistentResource.
     * Possible values:
     * PROVISIONING
     * RUNNING
     * STOPPING
     * ERROR
     * REBOOTING
     * UPDATING
     */
    state?: pulumi.Input<string | undefined>;
    /**
     * Time when the PersistentResource was most recently updated.
     */
    updateTime?: pulumi.Input<string | undefined>;
}
/**
 * The set of arguments for constructing a AiPersistentResource resource.
 */
export interface AiPersistentResourceArgs {
    /**
     * Whether Terraform will be prevented from destroying the resource. Defaults to DELETE.
     * When a 'terraform destroy' or 'pulumi up' would delete the resource,
     * the command will fail if this field is set to "PREVENT" in Terraform state.
     * When set to "ABANDON", the command will remove the resource from Terraform
     * management without updating or deleting the resource in the API.
     * When set to "DELETE", deleting the resource is allowed.
     */
    deletionPolicy?: pulumi.Input<string | undefined>;
    /**
     * The display name of the PersistentResource.
     * The name can be up to 128 characters long and can consist of any UTF-8
     * characters.
     */
    displayName?: pulumi.Input<string | undefined>;
    /**
     * Represents a customer-managed encryption key specification that can be
     * applied to a Vertex AI resource.
     * Structure is documented below.
     */
    encryptionSpec?: pulumi.Input<inputs.vertex.AiPersistentResourceEncryptionSpec | undefined>;
    /**
     * The labels with user-defined metadata to organize PersistentResource.
     * Label keys and values can be no longer than 64 characters
     * (Unicode codepoints), can only contain lowercase letters, numeric
     * characters, underscores and dashes. International characters are allowed.
     * See https://goo.gl/xmQnxf for more information and examples of labels.
     * **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>;
    } | undefined>;
    /**
     * The location of the PersistentResource. eg us-central1
     */
    location?: pulumi.Input<string | undefined>;
    /**
     * The ID to use for the PersistentResource, which become the final component
     * of the PersistentResource's resource name.
     * The maximum length is 63 characters, and valid characters
     * are `/^a-z?$/`.
     */
    name?: pulumi.Input<string | undefined>;
    /**
     * The full name of the Compute Engine
     * [network](https://www.terraform.io/compute/docs/networks-and-firewalls#networks) to peered with
     * Vertex AI to host the persistent resources.
     * For example, `projects/12345/global/networks/myVPC`.
     * [Format](https://www.terraform.io/compute/docs/reference/rest/v1/networks/insert)
     * is of the form `projects/{project}/global/networks/{network}`.
     * Where {project} is a project number, as in `12345`, and {network} is a
     * network name.
     * To specify this field, you must have already [configured VPC Network
     * Peering for Vertex
     * AI](https://cloud.google.com/vertex-ai/docs/general/vpc-peering).
     * If this field is left unspecified, the resources aren't peered with any
     * network.
     */
    network?: pulumi.Input<string | undefined>;
    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    project?: pulumi.Input<string | undefined>;
    /**
     * Configuration for PSC-I.
     * Structure is documented below.
     */
    pscInterfaceConfig?: pulumi.Input<inputs.vertex.AiPersistentResourcePscInterfaceConfig | undefined>;
    /**
     * A list of names for the reserved IP ranges under the VPC network
     * that can be used for this persistent resource.
     * If set, we will deploy the persistent resource within the provided IP
     * ranges. Otherwise, the persistent resource is deployed to any IP
     * ranges under the provided VPC network.
     * Example: ['vertex-ai-ip-range'].
     */
    reservedIpRanges?: pulumi.Input<pulumi.Input<string>[] | undefined>;
    /**
     * The spec of the pools of different resources.
     * Structure is documented below.
     */
    resourcePools: pulumi.Input<pulumi.Input<inputs.vertex.AiPersistentResourceResourcePool>[]>;
    /**
     * Configuration for the runtime on a PersistentResource instance.
     * Structure is documented below.
     */
    resourceRuntimeSpec?: pulumi.Input<inputs.vertex.AiPersistentResourceResourceRuntimeSpec | undefined>;
}
//# sourceMappingURL=aiPersistentResource.d.ts.map