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: 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]), * disks: [{ * sourceImage: "debian-cloud/debian-11", * autoDelete: true, * boot: true, * }], * }); * ``` */ export declare function getMachineTypes(args?: GetMachineTypesArgs, opts?: pulumi.InvokeOptions): Promise; /** * 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: 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]), * disks: [{ * sourceImage: "debian-cloud/debian-11", * autoDelete: true, * boot: true, * }], * }); * ``` */ export declare function getMachineTypesOutput(args?: GetMachineTypesOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output; /** * A collection of arguments for invoking getMachineTypes. */ export interface GetMachineTypesOutputArgs { /** * A filter expression that filters machine types listed in the response. */ filter?: pulumi.Input; /** * Project from which to list available zones. Defaults to project declared in the provider. */ project?: pulumi.Input; /** * Zone from which to list machine types. */ zone?: pulumi.Input; }