import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * Represents a future reservation resource in Compute Engine. Future reservations allow users
 * to reserve capacity for a specified time window, ensuring that resources are available
 * when needed.
 *
 * Reservations apply only to Compute Engine, Cloud Dataproc, and Google
 * Kubernetes Engine VM usage.Reservations do not apply to `f1-micro` or
 * `g1-small` machine types, preemptible VMs, sole tenant nodes, or other
 * services not listed above
 * like Cloud SQL and Dataflow.
 *
 * To get more information about FutureReservation, see:
 *
 * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/futureReservations)
 * * How-to Guides
 *     * [Future Reservations Guide](https://cloud.google.com/compute/docs/instances/future-reservations-overview)
 *
 * ## Example Usage
 *
 * ### Future Reservation Basic
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const gceFutureReservation = new gcp.compute.FutureReservation("gce_future_reservation", {
 *     name: "gce-future-reservation",
 *     project: "my-project-name",
 *     autoDeleteAutoCreatedReservations: true,
 *     planningStatus: "DRAFT",
 *     namePrefix: "fr-basic",
 *     timeWindow: {
 *         startTime: "2025-11-01T00:00:00Z",
 *         endTime: "2025-11-02T00:00:00Z",
 *     },
 *     specificSkuProperties: {
 *         totalCount: "1",
 *         instanceProperties: {
 *             machineType: "e2-standard-2",
 *         },
 *     },
 * });
 * ```
 * ### Future Reservation Aggregate Reservation
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const gceFutureReservation = new gcp.compute.FutureReservation("gce_future_reservation", {
 *     name: "gce-future-reservation-aggregate-reservation",
 *     project: "my-project-name",
 *     autoDeleteAutoCreatedReservations: true,
 *     planningStatus: "DRAFT",
 *     namePrefix: "fr-basic",
 *     timeWindow: {
 *         startTime: "2025-11-01T00:00:00Z",
 *         endTime: "2025-11-02T00:00:00Z",
 *     },
 *     aggregateReservation: {
 *         vmFamily: "VM_FAMILY_CLOUD_TPU_DEVICE_CT3",
 *         workloadType: "UNSPECIFIED",
 *         reservedResources: [
 *             {
 *                 accelerator: {
 *                     acceleratorCount: 32,
 *                     acceleratorType: "projects/my-project-name/zones/us-central1-a/acceleratorTypes/ct3",
 *                 },
 *             },
 *             {
 *                 accelerator: {
 *                     acceleratorCount: 2,
 *                     acceleratorType: "projects/my-project-name/zones/us-central1-a/acceleratorTypes/ct3",
 *                 },
 *             },
 *         ],
 *     },
 * });
 * ```
 *
 * ## Import
 *
 * FutureReservation can be imported using any of these accepted formats:
 *
 * * `projects/{{project}}/zones/{{zone}}/futureReservations/{{name}}`
 *
 * * `{{project}}/{{zone}}/{{name}}`
 *
 * * `{{zone}}/{{name}}`
 *
 * * `{{name}}`
 *
 * When using the `pulumi import` command, FutureReservation can be imported using one of the formats above. For example:
 *
 * ```sh
 * $ pulumi import gcp:compute/futureReservation:FutureReservation default projects/{{project}}/zones/{{zone}}/futureReservations/{{name}}
 * ```
 *
 * ```sh
 * $ pulumi import gcp:compute/futureReservation:FutureReservation default {{project}}/{{zone}}/{{name}}
 * ```
 *
 * ```sh
 * $ pulumi import gcp:compute/futureReservation:FutureReservation default {{zone}}/{{name}}
 * ```
 *
 * ```sh
 * $ pulumi import gcp:compute/futureReservation:FutureReservation default {{name}}
 * ```
 */
export declare class FutureReservation extends pulumi.CustomResource {
    /**
     * Get an existing FutureReservation 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?: FutureReservationState, opts?: pulumi.CustomResourceOptions): FutureReservation;
    /**
     * Returns true if the given object is an instance of FutureReservation.  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 FutureReservation;
    /**
     * Aggregate reservation details for the future reservation.
     * Structure is documented below.
     */
    readonly aggregateReservation: pulumi.Output<outputs.compute.FutureReservationAggregateReservation | undefined>;
    /**
     * Future timestamp when the FR auto-created reservations will be deleted by Compute Engine.
     */
    readonly autoCreatedReservationsDeleteTime: pulumi.Output<string | undefined>;
    /**
     * Specifies the duration of auto-created reservations. It represents relative time to future reservation startTime when auto-created reservations will be automatically deleted by Compute Engine. Duration time unit is represented as a count of seconds and fractions of seconds at nanosecond resolution.
     * Structure is documented below.
     */
    readonly autoCreatedReservationsDuration: pulumi.Output<outputs.compute.FutureReservationAutoCreatedReservationsDuration | undefined>;
    /**
     * Setting for enabling or disabling automatic deletion for auto-created reservation. If set to true, auto-created reservations will be deleted at Future Reservation's end time (default) or at user's defined timestamp if any of the [autoCreatedReservationsDeleteTime, autoCreatedReservationsDuration] values is specified. For keeping auto-created reservation indefinitely, this value should be set to false.
     */
    readonly autoDeleteAutoCreatedReservations: pulumi.Output<boolean | undefined>;
    /**
     * If not present, then FR will not deliver a new commitment or update an existing commitment.
     * Structure is documented below.
     */
    readonly commitmentInfo: pulumi.Output<outputs.compute.FutureReservationCommitmentInfo | undefined>;
    /**
     * The creation timestamp for this future reservation in RFC3339 text format.
     */
    readonly creationTimestamp: pulumi.Output<string>;
    /**
     * Type of the deployment requested as part of future reservation.
     * Possible values are: `DENSE`, `FLEXIBLE`.
     */
    readonly deploymentType: pulumi.Output<string | undefined>;
    /**
     * An optional description of this resource.
     */
    readonly description: pulumi.Output<string | undefined>;
    /**
     * Name of the resource. Provided by the client when the resource is
     * created. The name must be 1-63 characters long, and comply with
     * RFC1035. Specifically, the name must be 1-63 characters long and match
     * the regular expression `a-z?` which means the
     * first character must be a lowercase letter, and all following
     * characters must be a dash, lowercase letter, or digit, except the las
     * character, which cannot be a dash.
     */
    readonly name: pulumi.Output<string>;
    /**
     * Name prefix for the reservations to be created at the time of delivery. The name prefix must comply with RFC1035. Maximum allowed length for name prefix is 20. Automatically created reservations name format will be -date-####.
     */
    readonly namePrefix: pulumi.Output<string | undefined>;
    /**
     * Planning state before being submitted for evaluation
     * Possible values are: `DRAFT`, `SUBMITTED`.
     */
    readonly planningStatus: pulumi.Output<string>;
    /**
     * 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 reservation mode which determines reservation-termination behavior and expected pricing.
     * Possible values are: `CALENDAR`, `DEFAULT`.
     */
    readonly reservationMode: pulumi.Output<string | undefined>;
    /**
     * Name of reservations where the capacity is provisioned at the time of delivery of future reservations. If the reservation with the given name does not exist already, it is created automatically at the time of Approval with INACTIVE state till specified start-time. Either provide the reservationName or a namePrefix.
     */
    readonly reservationName: pulumi.Output<string | undefined>;
    /**
     * Maintenance information for this reservation
     * Possible values are: `GROUPED`, `INDEPENDENT`.
     */
    readonly schedulingType: pulumi.Output<string | undefined>;
    /**
     * The URI of the created resource.
     */
    readonly selfLink: pulumi.Output<string>;
    /**
     * Server-defined URL for this resource with the resource id.
     */
    readonly selfLinkWithId: pulumi.Output<string>;
    /**
     * Settings for sharing the future reservation
     * Structure is documented below.
     */
    readonly shareSettings: pulumi.Output<outputs.compute.FutureReservationShareSettings | undefined>;
    /**
     * Indicates whether the auto-created reservation can be consumed by VMs with affinity for "any" reservation. If the field is set, then only VMs that target the reservation by name can consume from the delivered reservation.
     */
    readonly specificReservationRequired: pulumi.Output<boolean | undefined>;
    /**
     * Future Reservation configuration to indicate instance properties and total count.
     * Structure is documented below.
     */
    readonly specificSkuProperties: pulumi.Output<outputs.compute.FutureReservationSpecificSkuProperties | undefined>;
    /**
     * [Output only] Status of the Future Reservation
     * Structure is documented below.
     */
    readonly statuses: pulumi.Output<outputs.compute.FutureReservationStatus[]>;
    /**
     * Time window for this Future Reservation.
     * Structure is documented below.
     */
    readonly timeWindow: pulumi.Output<outputs.compute.FutureReservationTimeWindow>;
    /**
     * URL of the Zone where this future reservation resides.
     */
    readonly zone: pulumi.Output<string>;
    /**
     * Create a FutureReservation 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: FutureReservationArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering FutureReservation resources.
 */
export interface FutureReservationState {
    /**
     * Aggregate reservation details for the future reservation.
     * Structure is documented below.
     */
    aggregateReservation?: pulumi.Input<inputs.compute.FutureReservationAggregateReservation>;
    /**
     * Future timestamp when the FR auto-created reservations will be deleted by Compute Engine.
     */
    autoCreatedReservationsDeleteTime?: pulumi.Input<string>;
    /**
     * Specifies the duration of auto-created reservations. It represents relative time to future reservation startTime when auto-created reservations will be automatically deleted by Compute Engine. Duration time unit is represented as a count of seconds and fractions of seconds at nanosecond resolution.
     * Structure is documented below.
     */
    autoCreatedReservationsDuration?: pulumi.Input<inputs.compute.FutureReservationAutoCreatedReservationsDuration>;
    /**
     * Setting for enabling or disabling automatic deletion for auto-created reservation. If set to true, auto-created reservations will be deleted at Future Reservation's end time (default) or at user's defined timestamp if any of the [autoCreatedReservationsDeleteTime, autoCreatedReservationsDuration] values is specified. For keeping auto-created reservation indefinitely, this value should be set to false.
     */
    autoDeleteAutoCreatedReservations?: pulumi.Input<boolean>;
    /**
     * If not present, then FR will not deliver a new commitment or update an existing commitment.
     * Structure is documented below.
     */
    commitmentInfo?: pulumi.Input<inputs.compute.FutureReservationCommitmentInfo>;
    /**
     * The creation timestamp for this future reservation in RFC3339 text format.
     */
    creationTimestamp?: pulumi.Input<string>;
    /**
     * Type of the deployment requested as part of future reservation.
     * Possible values are: `DENSE`, `FLEXIBLE`.
     */
    deploymentType?: pulumi.Input<string>;
    /**
     * An optional description of this resource.
     */
    description?: pulumi.Input<string>;
    /**
     * Name of the resource. Provided by the client when the resource is
     * created. The name must be 1-63 characters long, and comply with
     * RFC1035. Specifically, the name must be 1-63 characters long and match
     * the regular expression `a-z?` which means the
     * first character must be a lowercase letter, and all following
     * characters must be a dash, lowercase letter, or digit, except the las
     * character, which cannot be a dash.
     */
    name?: pulumi.Input<string>;
    /**
     * Name prefix for the reservations to be created at the time of delivery. The name prefix must comply with RFC1035. Maximum allowed length for name prefix is 20. Automatically created reservations name format will be -date-####.
     */
    namePrefix?: pulumi.Input<string>;
    /**
     * Planning state before being submitted for evaluation
     * Possible values are: `DRAFT`, `SUBMITTED`.
     */
    planningStatus?: pulumi.Input<string>;
    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    project?: pulumi.Input<string>;
    /**
     * The reservation mode which determines reservation-termination behavior and expected pricing.
     * Possible values are: `CALENDAR`, `DEFAULT`.
     */
    reservationMode?: pulumi.Input<string>;
    /**
     * Name of reservations where the capacity is provisioned at the time of delivery of future reservations. If the reservation with the given name does not exist already, it is created automatically at the time of Approval with INACTIVE state till specified start-time. Either provide the reservationName or a namePrefix.
     */
    reservationName?: pulumi.Input<string>;
    /**
     * Maintenance information for this reservation
     * Possible values are: `GROUPED`, `INDEPENDENT`.
     */
    schedulingType?: pulumi.Input<string>;
    /**
     * The URI of the created resource.
     */
    selfLink?: pulumi.Input<string>;
    /**
     * Server-defined URL for this resource with the resource id.
     */
    selfLinkWithId?: pulumi.Input<string>;
    /**
     * Settings for sharing the future reservation
     * Structure is documented below.
     */
    shareSettings?: pulumi.Input<inputs.compute.FutureReservationShareSettings>;
    /**
     * Indicates whether the auto-created reservation can be consumed by VMs with affinity for "any" reservation. If the field is set, then only VMs that target the reservation by name can consume from the delivered reservation.
     */
    specificReservationRequired?: pulumi.Input<boolean>;
    /**
     * Future Reservation configuration to indicate instance properties and total count.
     * Structure is documented below.
     */
    specificSkuProperties?: pulumi.Input<inputs.compute.FutureReservationSpecificSkuProperties>;
    /**
     * [Output only] Status of the Future Reservation
     * Structure is documented below.
     */
    statuses?: pulumi.Input<pulumi.Input<inputs.compute.FutureReservationStatus>[]>;
    /**
     * Time window for this Future Reservation.
     * Structure is documented below.
     */
    timeWindow?: pulumi.Input<inputs.compute.FutureReservationTimeWindow>;
    /**
     * URL of the Zone where this future reservation resides.
     */
    zone?: pulumi.Input<string>;
}
/**
 * The set of arguments for constructing a FutureReservation resource.
 */
export interface FutureReservationArgs {
    /**
     * Aggregate reservation details for the future reservation.
     * Structure is documented below.
     */
    aggregateReservation?: pulumi.Input<inputs.compute.FutureReservationAggregateReservation>;
    /**
     * Future timestamp when the FR auto-created reservations will be deleted by Compute Engine.
     */
    autoCreatedReservationsDeleteTime?: pulumi.Input<string>;
    /**
     * Specifies the duration of auto-created reservations. It represents relative time to future reservation startTime when auto-created reservations will be automatically deleted by Compute Engine. Duration time unit is represented as a count of seconds and fractions of seconds at nanosecond resolution.
     * Structure is documented below.
     */
    autoCreatedReservationsDuration?: pulumi.Input<inputs.compute.FutureReservationAutoCreatedReservationsDuration>;
    /**
     * Setting for enabling or disabling automatic deletion for auto-created reservation. If set to true, auto-created reservations will be deleted at Future Reservation's end time (default) or at user's defined timestamp if any of the [autoCreatedReservationsDeleteTime, autoCreatedReservationsDuration] values is specified. For keeping auto-created reservation indefinitely, this value should be set to false.
     */
    autoDeleteAutoCreatedReservations?: pulumi.Input<boolean>;
    /**
     * If not present, then FR will not deliver a new commitment or update an existing commitment.
     * Structure is documented below.
     */
    commitmentInfo?: pulumi.Input<inputs.compute.FutureReservationCommitmentInfo>;
    /**
     * Type of the deployment requested as part of future reservation.
     * Possible values are: `DENSE`, `FLEXIBLE`.
     */
    deploymentType?: pulumi.Input<string>;
    /**
     * An optional description of this resource.
     */
    description?: pulumi.Input<string>;
    /**
     * Name of the resource. Provided by the client when the resource is
     * created. The name must be 1-63 characters long, and comply with
     * RFC1035. Specifically, the name must be 1-63 characters long and match
     * the regular expression `a-z?` which means the
     * first character must be a lowercase letter, and all following
     * characters must be a dash, lowercase letter, or digit, except the las
     * character, which cannot be a dash.
     */
    name?: pulumi.Input<string>;
    /**
     * Name prefix for the reservations to be created at the time of delivery. The name prefix must comply with RFC1035. Maximum allowed length for name prefix is 20. Automatically created reservations name format will be -date-####.
     */
    namePrefix?: pulumi.Input<string>;
    /**
     * Planning state before being submitted for evaluation
     * Possible values are: `DRAFT`, `SUBMITTED`.
     */
    planningStatus?: pulumi.Input<string>;
    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    project?: pulumi.Input<string>;
    /**
     * The reservation mode which determines reservation-termination behavior and expected pricing.
     * Possible values are: `CALENDAR`, `DEFAULT`.
     */
    reservationMode?: pulumi.Input<string>;
    /**
     * Name of reservations where the capacity is provisioned at the time of delivery of future reservations. If the reservation with the given name does not exist already, it is created automatically at the time of Approval with INACTIVE state till specified start-time. Either provide the reservationName or a namePrefix.
     */
    reservationName?: pulumi.Input<string>;
    /**
     * Maintenance information for this reservation
     * Possible values are: `GROUPED`, `INDEPENDENT`.
     */
    schedulingType?: pulumi.Input<string>;
    /**
     * Settings for sharing the future reservation
     * Structure is documented below.
     */
    shareSettings?: pulumi.Input<inputs.compute.FutureReservationShareSettings>;
    /**
     * Indicates whether the auto-created reservation can be consumed by VMs with affinity for "any" reservation. If the field is set, then only VMs that target the reservation by name can consume from the delivered reservation.
     */
    specificReservationRequired?: pulumi.Input<boolean>;
    /**
     * Future Reservation configuration to indicate instance properties and total count.
     * Structure is documented below.
     */
    specificSkuProperties?: pulumi.Input<inputs.compute.FutureReservationSpecificSkuProperties>;
    /**
     * Time window for this Future Reservation.
     * Structure is documented below.
     */
    timeWindow: pulumi.Input<inputs.compute.FutureReservationTimeWindow>;
}
