import * as pulumi from "@pulumi/pulumi";
import * as outputs from "../types/output";
/**
 * Provides access to available Google Compute machine types in a zone for a given project.
 * See more about [machine type availability](https://cloud.google.com/compute/docs/regions-zones#available) in the upstream docs.
 *
 * To get more information about machine types, see:
 *
 * * [API Documentation](https://cloud.google.com/compute/docs/reference/rest/v1/machineTypes/list)
 * * [Comparison Guide](https://cloud.google.com/compute/docs/machine-resource)
 *
 * ## Example Usage
 *
 * ### Property-Based Availability
 *
 * Create a VM instance template for each machine type with 16GB of memory and 8 CPUs available in the provided zone.
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * import * as std from "@pulumi/std";
 *
 * export = async () => {
 *     const example = await gcp.compute.getMachineTypes({
 *         filter: "memoryMb = 16384 AND guestCpus = 8",
 *         zone: zone,
 *     });
 *     const exampleInstanceTemplate: gcp.compute.InstanceTemplate[] = [];
 *     for (const range of std.toset({
 *         input: example.machineTypes.map(__item => __item.name),
 *     }).result.map((v, k) => ({key: k, value: v}))) {
 *         exampleInstanceTemplate.push(new gcp.compute.InstanceTemplate(`example-${range.key}`, {
 *             machineType: range.value,
 *             disks: [{
 *                 sourceImage: "debian-cloud/debian-11",
 *                 autoDelete: true,
 *                 boot: true,
 *             }],
 *         }));
 *     }
 * }
 * ```
 *
 * ### Machine Family Preference
 *
 * Create an instance template, preferring `c3` machine family if available in the provided zone, otherwise falling back to `c2` and finally `n2`.
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * import * as std from "@pulumi/std";
 *
 * const example = gcp.compute.getMachineTypes({
 *     filter: "memoryMb = 16384 AND guestCpus = 4",
 *     zone: zone,
 * });
 * const exampleInstanceTemplate = new gcp.compute.InstanceTemplate("example", {
 *     machineType: output(Promise.all([example, std.startswith({
 *         input: mt.name,
 *         prefix: "c3-",
 *     }), example, std.startswith({
 *         input: mt.name,
 *         prefix: "c2-",
 *     }), example, std.startswith({
 *         input: mt.name,
 *         prefix: "n2-",
 *     })]).then(([example, invoke, example1, invoke1, example2, invoke2]) => std.coalescelist({
 *         input: [
 *             .filter(mt => invoke.result).map(mt => (mt.name)),
 *             .filter(mt => invoke1.result).map(mt => (mt.name)),
 *             .filter(mt => invoke2.result).map(mt => (mt.name)),
 *         ],
 *     })).then(invoke => invoke.result?.[0])).apply(x =>String(x)),
 *     disks: [{
 *         sourceImage: "debian-cloud/debian-11",
 *         autoDelete: true,
 *         boot: true,
 *     }],
 * });
 * ```
 */
export declare function getMachineTypes(args?: GetMachineTypesArgs, opts?: pulumi.InvokeOptions): Promise<GetMachineTypesResult>;
/**
 * A collection of arguments for invoking getMachineTypes.
 */
export interface GetMachineTypesArgs {
    /**
     * A filter expression that filters machine types listed in the response.
     */
    filter?: string;
    /**
     * Project from which to list available zones. Defaults to project declared in the provider.
     */
    project?: string;
    /**
     * Zone from which to list machine types.
     */
    zone?: string;
}
/**
 * A collection of values returned by getMachineTypes.
 */
export interface GetMachineTypesResult {
    readonly filter?: string;
    /**
     * The provider-assigned unique ID for this managed resource.
     */
    readonly id: string;
    /**
     * The list of machine types matching the provided filter. Structure is documented below.
     */
    readonly machineTypes: outputs.compute.GetMachineTypesMachineType[];
    readonly project: string;
    readonly zone: string;
}
/**
 * Provides access to available Google Compute machine types in a zone for a given project.
 * See more about [machine type availability](https://cloud.google.com/compute/docs/regions-zones#available) in the upstream docs.
 *
 * To get more information about machine types, see:
 *
 * * [API Documentation](https://cloud.google.com/compute/docs/reference/rest/v1/machineTypes/list)
 * * [Comparison Guide](https://cloud.google.com/compute/docs/machine-resource)
 *
 * ## Example Usage
 *
 * ### Property-Based Availability
 *
 * Create a VM instance template for each machine type with 16GB of memory and 8 CPUs available in the provided zone.
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * import * as std from "@pulumi/std";
 *
 * export = async () => {
 *     const example = await gcp.compute.getMachineTypes({
 *         filter: "memoryMb = 16384 AND guestCpus = 8",
 *         zone: zone,
 *     });
 *     const exampleInstanceTemplate: gcp.compute.InstanceTemplate[] = [];
 *     for (const range of std.toset({
 *         input: example.machineTypes.map(__item => __item.name),
 *     }).result.map((v, k) => ({key: k, value: v}))) {
 *         exampleInstanceTemplate.push(new gcp.compute.InstanceTemplate(`example-${range.key}`, {
 *             machineType: range.value,
 *             disks: [{
 *                 sourceImage: "debian-cloud/debian-11",
 *                 autoDelete: true,
 *                 boot: true,
 *             }],
 *         }));
 *     }
 * }
 * ```
 *
 * ### Machine Family Preference
 *
 * Create an instance template, preferring `c3` machine family if available in the provided zone, otherwise falling back to `c2` and finally `n2`.
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * import * as std from "@pulumi/std";
 *
 * const example = gcp.compute.getMachineTypes({
 *     filter: "memoryMb = 16384 AND guestCpus = 4",
 *     zone: zone,
 * });
 * const exampleInstanceTemplate = new gcp.compute.InstanceTemplate("example", {
 *     machineType: output(Promise.all([example, std.startswith({
 *         input: mt.name,
 *         prefix: "c3-",
 *     }), example, std.startswith({
 *         input: mt.name,
 *         prefix: "c2-",
 *     }), example, std.startswith({
 *         input: mt.name,
 *         prefix: "n2-",
 *     })]).then(([example, invoke, example1, invoke1, example2, invoke2]) => std.coalescelist({
 *         input: [
 *             .filter(mt => invoke.result).map(mt => (mt.name)),
 *             .filter(mt => invoke1.result).map(mt => (mt.name)),
 *             .filter(mt => invoke2.result).map(mt => (mt.name)),
 *         ],
 *     })).then(invoke => invoke.result?.[0])).apply(x =>String(x)),
 *     disks: [{
 *         sourceImage: "debian-cloud/debian-11",
 *         autoDelete: true,
 *         boot: true,
 *     }],
 * });
 * ```
 */
export declare function getMachineTypesOutput(args?: GetMachineTypesOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output<GetMachineTypesResult>;
/**
 * A collection of arguments for invoking getMachineTypes.
 */
export interface GetMachineTypesOutputArgs {
    /**
     * A filter expression that filters machine types listed in the response.
     */
    filter?: pulumi.Input<string | undefined>;
    /**
     * Project from which to list available zones. Defaults to project declared in the provider.
     */
    project?: pulumi.Input<string | undefined>;
    /**
     * Zone from which to list machine types.
     */
    zone?: pulumi.Input<string | undefined>;
}
//# sourceMappingURL=getMachineTypes.d.ts.map