import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * A collection of virtual machines and connected resources forming a high-performance computing cluster capable of running large-scale, tightly coupled workloads. A cluster combines a set a compute resources that perform computations, storage resources that contain inputs and store outputs, an orchestrator that is responsible for assigning jobs to compute resources, and network resources that connect everything together.
 *
 * ## Example Usage
 *
 * ### Hypercomputecluster Cluster Basic
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const project = gcp.organizations.getProject({});
 * const projectId = project.then(project => project.name);
 * const cluster = new gcp.hypercomputecluster.Cluster("cluster", {
 *     clusterId: "mycluster1",
 *     location: "us-central1",
 *     description: "Cluster Director instance created through Terraform",
 *     networkResources: [{
 *         id: "network1",
 *         config: {
 *             newNetwork: {
 *                 description: "Network one",
 *                 network: projectId.then(projectId => `projects/${projectId}/global/networks/cluster-net1`),
 *             },
 *         },
 *     }],
 *     computeResources: [{
 *         id: "compute1",
 *         config: {
 *             newOnDemandInstances: {
 *                 machineType: "n2-standard-2",
 *                 zone: "us-central1-a",
 *             },
 *         },
 *     }],
 *     orchestrator: {
 *         slurm: {
 *             loginNodes: {
 *                 machineType: "n2-standard-2",
 *                 count: "1",
 *                 zone: "us-central1-a",
 *                 bootDisk: {
 *                     sizeGb: "100",
 *                     type: "pd-balanced",
 *                 },
 *             },
 *             nodeSets: [{
 *                 id: "nodeset1",
 *                 computeId: "compute1",
 *                 staticNodeCount: "1",
 *                 computeInstance: {
 *                     bootDisk: {
 *                         sizeGb: "100",
 *                         type: "pd-balanced",
 *                     },
 *                 },
 *             }],
 *             partitions: [{
 *                 id: "partition1",
 *                 nodeSetIds: ["nodeset1"],
 *             }],
 *             defaultPartition: "partition1",
 *         },
 *     },
 * });
 * ```
 *
 * ## 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}}`
 *
 * When using the `pulumi import` command, Cluster can be imported using one of the formats above. For example:
 *
 * ```sh
 * $ pulumi import gcp:hypercomputecluster/cluster:Cluster default projects/{{project}}/locations/{{location}}/clusters/{{cluster_id}}
 * $ pulumi import gcp:hypercomputecluster/cluster:Cluster default {{project}}/{{location}}/{{cluster_id}}
 * $ pulumi import gcp:hypercomputecluster/cluster:Cluster default {{location}}/{{cluster_id}}
 * ```
 */
export declare class Cluster extends pulumi.CustomResource {
    /**
     * Get an existing Cluster 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?: ClusterState, opts?: pulumi.CustomResourceOptions): Cluster;
    /**
     * Returns true if the given object is an instance of Cluster.  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 Cluster;
    /**
     * ID of the cluster to create. Must start with a lowercase letter,
     * use only lowercase letters and numbers, and be at most 10 characters long.
     */
    readonly clusterId: pulumi.Output<string>;
    /**
     * Compute resources available to the cluster. Keys specify the ID of the
     * compute resource by which it can be referenced elsewhere, and must conform
     * to [RFC-1034](https://datatracker.ietf.org/doc/html/rfc1034) (lower-case,
     * alphanumeric, and at most 63 characters).
     * Structure is documented below.
     */
    readonly computeResources: pulumi.Output<outputs.hypercomputecluster.ClusterComputeResource[] | undefined>;
    /**
     * Time that the cluster was originally 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>;
    /**
     * User-provided description of the cluster.
     */
    readonly description: 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;
    }>;
    /**
     * [Labels](https://cloud.google.com/compute/docs/labeling-resources) applied
     * to the cluster. Labels can be used to organize clusters and to filter them
     * in queries.
     * **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.
     */
    readonly location: pulumi.Output<string>;
    /**
     * Identifier. [Relative resource name](https://google.aip.dev/122) of the cluster, in the
     * format `projects/{project}/locations/{location}/clusters/{cluster}`.
     */
    readonly name: pulumi.Output<string>;
    /**
     * Network resources available to the cluster. Must contain at most one value.
     * Keys specify the ID of the network resource by which it can be referenced
     * elsewhere, and must conform to
     * [RFC-1034](https://datatracker.ietf.org/doc/html/rfc1034) (lower-case,
     * alphanumeric, and at most 63 characters).
     * Structure is documented below.
     */
    readonly networkResources: pulumi.Output<outputs.hypercomputecluster.ClusterNetworkResource[] | undefined>;
    /**
     * The component responsible for scheduling and running workloads on the
     * cluster as well as providing the user interface for interacting with the
     * cluster at runtime.
     * Structure is documented below.
     */
    readonly orchestrator: pulumi.Output<outputs.hypercomputecluster.ClusterOrchestrator | 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>;
    /**
     * The combination of labels configured directly on the resource
     *  and default labels configured on the provider.
     */
    readonly pulumiLabels: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * Indicates whether changes to the cluster are currently in flight. If this
     * is `true`, then the current state might not match the cluster's intended
     * state.
     */
    readonly reconciling: pulumi.Output<boolean>;
    /**
     * Storage resources available to the cluster. Keys specify the ID of the
     * storage resource by which it can be referenced elsewhere, and must conform
     * to [RFC-1034](https://datatracker.ietf.org/doc/html/rfc1034) (lower-case,
     * alphanumeric, and at most 63 characters).
     * Structure is documented below.
     */
    readonly storageResources: pulumi.Output<outputs.hypercomputecluster.ClusterStorageResource[] | undefined>;
    /**
     * Time that the cluster was most recently updated.
     */
    readonly updateTime: pulumi.Output<string>;
    /**
     * Create a Cluster 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: ClusterArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering Cluster resources.
 */
export interface ClusterState {
    /**
     * ID of the cluster to create. Must start with a lowercase letter,
     * use only lowercase letters and numbers, and be at most 10 characters long.
     */
    clusterId?: pulumi.Input<string | undefined>;
    /**
     * Compute resources available to the cluster. Keys specify the ID of the
     * compute resource by which it can be referenced elsewhere, and must conform
     * to [RFC-1034](https://datatracker.ietf.org/doc/html/rfc1034) (lower-case,
     * alphanumeric, and at most 63 characters).
     * Structure is documented below.
     */
    computeResources?: pulumi.Input<pulumi.Input<inputs.hypercomputecluster.ClusterComputeResource>[] | undefined>;
    /**
     * Time that the cluster was originally 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>;
    /**
     * User-provided description of the cluster.
     */
    description?: 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>;
    /**
     * [Labels](https://cloud.google.com/compute/docs/labeling-resources) applied
     * to the cluster. Labels can be used to organize clusters and to filter them
     * in queries.
     * **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>;
    /**
     * Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122.
     */
    location?: pulumi.Input<string | undefined>;
    /**
     * Identifier. [Relative resource name](https://google.aip.dev/122) of the cluster, in the
     * format `projects/{project}/locations/{location}/clusters/{cluster}`.
     */
    name?: pulumi.Input<string | undefined>;
    /**
     * Network resources available to the cluster. Must contain at most one value.
     * Keys specify the ID of the network resource by which it can be referenced
     * elsewhere, and must conform to
     * [RFC-1034](https://datatracker.ietf.org/doc/html/rfc1034) (lower-case,
     * alphanumeric, and at most 63 characters).
     * Structure is documented below.
     */
    networkResources?: pulumi.Input<pulumi.Input<inputs.hypercomputecluster.ClusterNetworkResource>[] | undefined>;
    /**
     * The component responsible for scheduling and running workloads on the
     * cluster as well as providing the user interface for interacting with the
     * cluster at runtime.
     * Structure is documented below.
     */
    orchestrator?: pulumi.Input<inputs.hypercomputecluster.ClusterOrchestrator | 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>;
    /**
     * 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>;
    /**
     * Indicates whether changes to the cluster are currently in flight. If this
     * is `true`, then the current state might not match the cluster's intended
     * state.
     */
    reconciling?: pulumi.Input<boolean | undefined>;
    /**
     * Storage resources available to the cluster. Keys specify the ID of the
     * storage resource by which it can be referenced elsewhere, and must conform
     * to [RFC-1034](https://datatracker.ietf.org/doc/html/rfc1034) (lower-case,
     * alphanumeric, and at most 63 characters).
     * Structure is documented below.
     */
    storageResources?: pulumi.Input<pulumi.Input<inputs.hypercomputecluster.ClusterStorageResource>[] | undefined>;
    /**
     * Time that the cluster was most recently updated.
     */
    updateTime?: pulumi.Input<string | undefined>;
}
/**
 * The set of arguments for constructing a Cluster resource.
 */
export interface ClusterArgs {
    /**
     * ID of the cluster to create. Must start with a lowercase letter,
     * use only lowercase letters and numbers, and be at most 10 characters long.
     */
    clusterId: pulumi.Input<string>;
    /**
     * Compute resources available to the cluster. Keys specify the ID of the
     * compute resource by which it can be referenced elsewhere, and must conform
     * to [RFC-1034](https://datatracker.ietf.org/doc/html/rfc1034) (lower-case,
     * alphanumeric, and at most 63 characters).
     * Structure is documented below.
     */
    computeResources?: pulumi.Input<pulumi.Input<inputs.hypercomputecluster.ClusterComputeResource>[] | 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>;
    /**
     * User-provided description of the cluster.
     */
    description?: pulumi.Input<string | undefined>;
    /**
     * [Labels](https://cloud.google.com/compute/docs/labeling-resources) applied
     * to the cluster. Labels can be used to organize clusters and to filter them
     * in queries.
     * **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>;
    /**
     * Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122.
     */
    location: pulumi.Input<string>;
    /**
     * Network resources available to the cluster. Must contain at most one value.
     * Keys specify the ID of the network resource by which it can be referenced
     * elsewhere, and must conform to
     * [RFC-1034](https://datatracker.ietf.org/doc/html/rfc1034) (lower-case,
     * alphanumeric, and at most 63 characters).
     * Structure is documented below.
     */
    networkResources?: pulumi.Input<pulumi.Input<inputs.hypercomputecluster.ClusterNetworkResource>[] | undefined>;
    /**
     * The component responsible for scheduling and running workloads on the
     * cluster as well as providing the user interface for interacting with the
     * cluster at runtime.
     * Structure is documented below.
     */
    orchestrator?: pulumi.Input<inputs.hypercomputecluster.ClusterOrchestrator | 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>;
    /**
     * Storage resources available to the cluster. Keys specify the ID of the
     * storage resource by which it can be referenced elsewhere, and must conform
     * to [RFC-1034](https://datatracker.ietf.org/doc/html/rfc1034) (lower-case,
     * alphanumeric, and at most 63 characters).
     * Structure is documented below.
     */
    storageResources?: pulumi.Input<pulumi.Input<inputs.hypercomputecluster.ClusterStorageResource>[] | undefined>;
}
//# sourceMappingURL=cluster.d.ts.map