import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * Manages a VM instance resource within GCE. For more information see
 * [the official documentation](https://cloud.google.com/compute/docs/instances)
 * and
 * [API](https://cloud.google.com/compute/docs/reference/latest/instances).
 *
 * ## Example Usage
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const _default = new gcp.serviceaccount.Account("default", {
 *     accountId: "my-custom-sa",
 *     displayName: "Custom SA for VM Instance",
 * });
 * const defaultInstance = new gcp.compute.Instance("default", {
 *     networkInterfaces: [{
 *         accessConfigs: [{}],
 *         network: "default",
 *     }],
 *     name: "my-instance",
 *     machineType: "n2-standard-2",
 *     zone: "us-central1-a",
 *     tags: [
 *         "foo",
 *         "bar",
 *     ],
 *     bootDisk: {
 *         initializeParams: {
 *             image: "debian-cloud/debian-11",
 *             labels: {
 *                 my_label: "value",
 *             },
 *         },
 *     },
 *     scratchDisks: [{
 *         "interface": "NVME",
 *     }],
 *     metadata: {
 *         foo: "bar",
 *     },
 *     metadataStartupScript: "echo hi > /test.txt",
 *     serviceAccount: {
 *         email: _default.email,
 *         scopes: ["cloud-platform"],
 *     },
 * });
 * ```
 *
 * ### Confidential Computing
 *
 * Example with [Confidential Mode](https://cloud.google.com/confidential-computing/confidential-vm/docs/confidential-vm-overview) activated.
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const _default = new gcp.serviceaccount.Account("default", {
 *     accountId: "my-custom-sa",
 *     displayName: "Custom SA for VM Instance",
 * });
 * const confidentialInstance = new gcp.compute.Instance("confidential_instance", {
 *     networkInterfaces: [{
 *         accessConfigs: [{}],
 *         network: "default",
 *     }],
 *     name: "my-confidential-instance",
 *     zone: "us-central1-a",
 *     machineType: "n2d-standard-2",
 *     minCpuPlatform: "AMD Milan",
 *     confidentialInstanceConfig: {
 *         enableConfidentialCompute: true,
 *         confidentialInstanceType: "SEV",
 *     },
 *     bootDisk: {
 *         initializeParams: {
 *             image: "ubuntu-os-cloud/ubuntu-2004-lts",
 *             labels: {
 *                 my_label: "value",
 *             },
 *         },
 *     },
 *     scratchDisks: [{
 *         "interface": "NVME",
 *     }],
 *     serviceAccount: {
 *         email: _default.email,
 *         scopes: ["cloud-platform"],
 *     },
 * });
 * ```
 *
 * ## Import
 *
 * Instances can be imported using any of these accepted formats:
 *
 * * `projects/{{project}}/zones/{{zone}}/instances/{{name}}`
 *
 * * `{{project}}/{{zone}}/{{name}}`
 *
 * * `{{name}}`
 *
 * When using the `pulumi import` command, instances can be imported using one of the formats above. For example:
 *
 * ```sh
 * $ pulumi import gcp:compute/instance:Instance default projects/{{project}}/zones/{{zone}}/instances/{{name}}
 * ```
 *
 * ```sh
 * $ pulumi import gcp:compute/instance:Instance default {{project}}/{{zone}}/{{name}}
 * ```
 *
 * ```sh
 * $ pulumi import gcp:compute/instance:Instance default {{name}}
 * ```
 */
export declare class Instance extends pulumi.CustomResource {
    /**
     * Get an existing Instance 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?: InstanceState, opts?: pulumi.CustomResourceOptions): Instance;
    /**
     * Returns true if the given object is an instance of Instance.  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 Instance;
    /**
     * Configure Nested Virtualisation and Simultaneous Hyper Threading  on this VM. Structure is documented below
     */
    readonly advancedMachineFeatures: pulumi.Output<outputs.compute.InstanceAdvancedMachineFeatures | undefined>;
    /**
     * If true, allows this prvider to stop the instance to update its properties.
     * If you try to update a property that requires stopping the instance without setting this field, the update will fail.
     */
    readonly allowStoppingForUpdate: pulumi.Output<boolean | undefined>;
    /**
     * Additional disks to attach to the instance. Can be repeated multiple times for multiple disks. Structure is documented below.
     */
    readonly attachedDisks: pulumi.Output<outputs.compute.InstanceAttachedDisk[] | undefined>;
    /**
     * The boot disk for the instance.
     * Structure is documented below.
     */
    readonly bootDisk: pulumi.Output<outputs.compute.InstanceBootDisk>;
    /**
     * Whether to allow sending and receiving of
     * packets with non-matching source or destination IPs.
     * This defaults to false.
     */
    readonly canIpForward: pulumi.Output<boolean | undefined>;
    /**
     * Enable [Confidential Mode](https://cloud.google.com/compute/confidential-vm/docs/about-cvm) on this VM. Structure is documented below
     */
    readonly confidentialInstanceConfig: pulumi.Output<outputs.compute.InstanceConfidentialInstanceConfig>;
    /**
     * The CPU platform used by this instance.
     */
    readonly cpuPlatform: pulumi.Output<string>;
    /**
     * Creation timestamp in RFC3339 text format.
     */
    readonly creationTimestamp: pulumi.Output<string>;
    /**
     * The current status of the instance. This could be one of the following values: PROVISIONING, STAGING, RUNNING, STOPPING, SUSPENDING, SUSPENDED, REPAIRING, and TERMINATED. For more information about the status of the instance, see [Instance life cycle](https://cloud.google.com/compute/docs/instances/instance-life-cycle).
     */
    readonly currentStatus: pulumi.Output<string>;
    /**
     * Enable deletion protection on this instance. Defaults to false.
     * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully.
     */
    readonly deletionProtection: pulumi.Output<boolean | undefined>;
    /**
     * A brief description of this resource.
     */
    readonly description: pulumi.Output<string | undefined>;
    /**
     * Desired status of the instance. Either
     * `"RUNNING"`, `"SUSPENDED"` or `"TERMINATED"`.
     */
    readonly desiredStatus: 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;
    }>;
    /**
     * Enable [Virtual Displays](https://cloud.google.com/compute/docs/instances/enable-instance-virtual-display#verify_display_driver) on this instance.
     * **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field.
     */
    readonly enableDisplay: pulumi.Output<boolean | undefined>;
    /**
     * List of the type and count of accelerator cards attached to the instance. Structure documented below.
     * **Note:** GPU accelerators can only be used with `onHostMaintenance` option set to TERMINATE.
     */
    readonly guestAccelerators: pulumi.Output<outputs.compute.InstanceGuestAccelerator[]>;
    /**
     * A custom hostname for the instance. Must be a fully qualified DNS name and RFC-1035-valid.
     * Valid format is a series of labels 1-63 characters long matching the regular expression `a-z`, concatenated with periods.
     * The entire hostname must not exceed 253 characters. Changing this forces a new resource to be created.
     */
    readonly hostname: pulumi.Output<string | undefined>;
    /**
     * Configuration for data encryption on the instance with encryption keys. Structure is documented below.
     */
    readonly instanceEncryptionKey: pulumi.Output<outputs.compute.InstanceInstanceEncryptionKey | undefined>;
    /**
     * The server-assigned unique identifier of this instance.
     */
    readonly instanceId: pulumi.Output<string>;
    /**
     * Action to be taken when a customer's encryption key is revoked. Supports `STOP` and `NONE`, with `NONE` being the default.
     */
    readonly keyRevocationActionType: pulumi.Output<string | undefined>;
    /**
     * The unique fingerprint of the labels.
     */
    readonly labelFingerprint: pulumi.Output<string>;
    /**
     * A map of key/value label pairs to assign to the instance.
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field 'effective_labels' for all of the labels present on the resource.
     */
    readonly labels: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * The machine type to create.
     *
     * **Note:** If you want to update this value (resize the VM) after initial creation, you must set `allowStoppingForUpdate` to `true`.
     *
     * [Custom machine types](https://cloud.google.com/dataproc/docs/concepts/compute/custom-machine-types) can be formatted as `custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY_MB`, e.g. `custom-6-20480` for 6 vCPU and 20GB of RAM.
     * Because of current API limitations some custom machine types may get converted to different machine types (such as an equivalent standard type) and cause non-empty plans in your configuration. Use
     * `lifecycle.ignore_changes` on `machineType` in these cases.
     *
     * There is a limit of 6.5 GB per CPU unless you add [extended memory](https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#extendedmemory). You must do this explicitly by adding the suffix `-ext`, e.g. `custom-2-15360-ext` for 2 vCPU and 15 GB of memory.
     */
    readonly machineType: pulumi.Output<string>;
    /**
     * Metadata key/value pairs to make available from
     * within the instance. Ssh keys attached in the Cloud Console will be removed.
     * Add them to your config in order to keep them attached to your instance.
     * A list of predefined metadata keys (e.g. ssh-keys) can be found [here](https://cloud.google.com/compute/docs/metadata/predefined-metadata-keys)
     *
     * > Depending on the OS you choose for your instance, some metadata keys have
     * special functionality.  Most linux-based images will run the content of
     * `metadata.startup-script` in a shell on every boot.  At a minimum,
     * Debian, CentOS, RHEL, SLES, Container-Optimized OS, and Ubuntu images
     * support this key.  Windows instances require other keys depending on the format
     * of the script and the time you would like it to run - see [this table](https://cloud.google.com/compute/docs/startupscript#providing_a_startup_script_for_windows_instances).
     * For the convenience of the users of `metadata.startup-script`,
     * we provide a special attribute, `metadataStartupScript`, which is documented below.
     */
    readonly metadata: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * The unique fingerprint of the metadata.
     */
    readonly metadataFingerprint: pulumi.Output<string>;
    /**
     * An alternative to using the
     * startup-script metadata key, except this one forces the instance to be recreated
     * (thus re-running the script) if it is changed. This replaces the startup-script
     * metadata key on the created instance and thus the two mechanisms are not
     * allowed to be used simultaneously.  Users are free to use either mechanism - the
     * only distinction is that this separate attribute will cause a recreate on
     * modification.  On import, `metadataStartupScript` will not be set - if you
     * choose to specify it you will see a diff immediately after import causing a
     * destroy/recreate operation. If importing an instance and specifying this value
     * is desired, you will need to modify your state file.
     */
    readonly metadataStartupScript: pulumi.Output<string | undefined>;
    /**
     * Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as
     * `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform).
     * **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field.
     */
    readonly minCpuPlatform: pulumi.Output<string>;
    /**
     * A unique name for the resource, required by GCE.
     * Changing this forces a new resource to be created.
     */
    readonly name: pulumi.Output<string>;
    /**
     * Networks to attach to the instance. This can
     * be specified multiple times. Structure is documented below.
     *
     * - - -
     */
    readonly networkInterfaces: pulumi.Output<outputs.compute.InstanceNetworkInterface[]>;
    /**
     * (Optional, Beta
     * Configures network performance settings for the instance. Structure is
     * documented below. **Note**: `machineType` must be a [supported type](https://cloud.google.com/compute/docs/networking/configure-vm-with-high-bandwidth-configuration),
     * the `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image)
     * in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC`
     * in order for this setting to take effect.
     */
    readonly networkPerformanceConfig: pulumi.Output<outputs.compute.InstanceNetworkPerformanceConfig | undefined>;
    /**
     * Additional instance parameters.
     * .
     */
    readonly params: pulumi.Output<outputs.compute.InstanceParams | undefined>;
    /**
     * Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace.
     */
    readonly partnerMetadata: pulumi.Output<{
        [key: string]: 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>;
    /**
     * The combination of labels configured directly on the resource and default labels configured on the provider.
     */
    readonly pulumiLabels: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * Specifies the reservations that this instance can consume from.
     * Structure is documented below.
     */
    readonly reservationAffinity: pulumi.Output<outputs.compute.InstanceReservationAffinity>;
    /**
     * - A list of selfLinks of resource policies to attach to the instance. Modifying this list will cause the instance to recreate. Currently a max of 1 resource policy is supported.
     */
    readonly resourcePolicies: pulumi.Output<string | undefined>;
    /**
     * The scheduling strategy to use. More details about
     * this configuration option are detailed below.
     */
    readonly scheduling: pulumi.Output<outputs.compute.InstanceScheduling>;
    /**
     * Scratch disks to attach to the instance. This can be
     * specified multiple times for multiple scratch disks. Structure is documented below.
     */
    readonly scratchDisks: pulumi.Output<outputs.compute.InstanceScratchDisk[] | undefined>;
    /**
     * The URI of the created resource.
     */
    readonly selfLink: pulumi.Output<string>;
    /**
     * Service account to attach to the instance.
     * Structure is documented below.
     * **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field.
     */
    readonly serviceAccount: pulumi.Output<outputs.compute.InstanceServiceAccount | undefined>;
    /**
     * Enable [Shielded VM](https://cloud.google.com/security/shielded-cloud/shielded-vm) on this instance. Shielded VM provides verifiable integrity to prevent against malware and rootkits. Defaults to disabled. Structure is documented below.
     * **Note**: `shieldedInstanceConfig` can only be used with boot images with shielded vm support. See the complete list [here](https://cloud.google.com/compute/docs/images#shielded-images).
     * **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field.
     */
    readonly shieldedInstanceConfig: pulumi.Output<outputs.compute.InstanceShieldedInstanceConfig>;
    /**
     * A list of network tags to attach to the instance.
     */
    readonly tags: pulumi.Output<string[] | undefined>;
    /**
     * The unique fingerprint of the tags.
     */
    readonly tagsFingerprint: pulumi.Output<string>;
    /**
     * The zone that the machine should be created in. If it is not provided, the provider zone is used.
     */
    readonly zone: pulumi.Output<string>;
    /**
     * Create a Instance 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: InstanceArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering Instance resources.
 */
export interface InstanceState {
    /**
     * Configure Nested Virtualisation and Simultaneous Hyper Threading  on this VM. Structure is documented below
     */
    advancedMachineFeatures?: pulumi.Input<inputs.compute.InstanceAdvancedMachineFeatures>;
    /**
     * If true, allows this prvider to stop the instance to update its properties.
     * If you try to update a property that requires stopping the instance without setting this field, the update will fail.
     */
    allowStoppingForUpdate?: pulumi.Input<boolean>;
    /**
     * Additional disks to attach to the instance. Can be repeated multiple times for multiple disks. Structure is documented below.
     */
    attachedDisks?: pulumi.Input<pulumi.Input<inputs.compute.InstanceAttachedDisk>[]>;
    /**
     * The boot disk for the instance.
     * Structure is documented below.
     */
    bootDisk?: pulumi.Input<inputs.compute.InstanceBootDisk>;
    /**
     * Whether to allow sending and receiving of
     * packets with non-matching source or destination IPs.
     * This defaults to false.
     */
    canIpForward?: pulumi.Input<boolean>;
    /**
     * Enable [Confidential Mode](https://cloud.google.com/compute/confidential-vm/docs/about-cvm) on this VM. Structure is documented below
     */
    confidentialInstanceConfig?: pulumi.Input<inputs.compute.InstanceConfidentialInstanceConfig>;
    /**
     * The CPU platform used by this instance.
     */
    cpuPlatform?: pulumi.Input<string>;
    /**
     * Creation timestamp in RFC3339 text format.
     */
    creationTimestamp?: pulumi.Input<string>;
    /**
     * The current status of the instance. This could be one of the following values: PROVISIONING, STAGING, RUNNING, STOPPING, SUSPENDING, SUSPENDED, REPAIRING, and TERMINATED. For more information about the status of the instance, see [Instance life cycle](https://cloud.google.com/compute/docs/instances/instance-life-cycle).
     */
    currentStatus?: pulumi.Input<string>;
    /**
     * Enable deletion protection on this instance. Defaults to false.
     * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully.
     */
    deletionProtection?: pulumi.Input<boolean>;
    /**
     * A brief description of this resource.
     */
    description?: pulumi.Input<string>;
    /**
     * Desired status of the instance. Either
     * `"RUNNING"`, `"SUSPENDED"` or `"TERMINATED"`.
     */
    desiredStatus?: pulumi.Input<string>;
    /**
     * 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>;
    }>;
    /**
     * Enable [Virtual Displays](https://cloud.google.com/compute/docs/instances/enable-instance-virtual-display#verify_display_driver) on this instance.
     * **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field.
     */
    enableDisplay?: pulumi.Input<boolean>;
    /**
     * List of the type and count of accelerator cards attached to the instance. Structure documented below.
     * **Note:** GPU accelerators can only be used with `onHostMaintenance` option set to TERMINATE.
     */
    guestAccelerators?: pulumi.Input<pulumi.Input<inputs.compute.InstanceGuestAccelerator>[]>;
    /**
     * A custom hostname for the instance. Must be a fully qualified DNS name and RFC-1035-valid.
     * Valid format is a series of labels 1-63 characters long matching the regular expression `a-z`, concatenated with periods.
     * The entire hostname must not exceed 253 characters. Changing this forces a new resource to be created.
     */
    hostname?: pulumi.Input<string>;
    /**
     * Configuration for data encryption on the instance with encryption keys. Structure is documented below.
     */
    instanceEncryptionKey?: pulumi.Input<inputs.compute.InstanceInstanceEncryptionKey>;
    /**
     * The server-assigned unique identifier of this instance.
     */
    instanceId?: pulumi.Input<string>;
    /**
     * Action to be taken when a customer's encryption key is revoked. Supports `STOP` and `NONE`, with `NONE` being the default.
     */
    keyRevocationActionType?: pulumi.Input<string>;
    /**
     * The unique fingerprint of the labels.
     */
    labelFingerprint?: pulumi.Input<string>;
    /**
     * A map of key/value label pairs to assign to the instance.
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field 'effective_labels' for all of the labels present on the resource.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * The machine type to create.
     *
     * **Note:** If you want to update this value (resize the VM) after initial creation, you must set `allowStoppingForUpdate` to `true`.
     *
     * [Custom machine types](https://cloud.google.com/dataproc/docs/concepts/compute/custom-machine-types) can be formatted as `custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY_MB`, e.g. `custom-6-20480` for 6 vCPU and 20GB of RAM.
     * Because of current API limitations some custom machine types may get converted to different machine types (such as an equivalent standard type) and cause non-empty plans in your configuration. Use
     * `lifecycle.ignore_changes` on `machineType` in these cases.
     *
     * There is a limit of 6.5 GB per CPU unless you add [extended memory](https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#extendedmemory). You must do this explicitly by adding the suffix `-ext`, e.g. `custom-2-15360-ext` for 2 vCPU and 15 GB of memory.
     */
    machineType?: pulumi.Input<string>;
    /**
     * Metadata key/value pairs to make available from
     * within the instance. Ssh keys attached in the Cloud Console will be removed.
     * Add them to your config in order to keep them attached to your instance.
     * A list of predefined metadata keys (e.g. ssh-keys) can be found [here](https://cloud.google.com/compute/docs/metadata/predefined-metadata-keys)
     *
     * > Depending on the OS you choose for your instance, some metadata keys have
     * special functionality.  Most linux-based images will run the content of
     * `metadata.startup-script` in a shell on every boot.  At a minimum,
     * Debian, CentOS, RHEL, SLES, Container-Optimized OS, and Ubuntu images
     * support this key.  Windows instances require other keys depending on the format
     * of the script and the time you would like it to run - see [this table](https://cloud.google.com/compute/docs/startupscript#providing_a_startup_script_for_windows_instances).
     * For the convenience of the users of `metadata.startup-script`,
     * we provide a special attribute, `metadataStartupScript`, which is documented below.
     */
    metadata?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * The unique fingerprint of the metadata.
     */
    metadataFingerprint?: pulumi.Input<string>;
    /**
     * An alternative to using the
     * startup-script metadata key, except this one forces the instance to be recreated
     * (thus re-running the script) if it is changed. This replaces the startup-script
     * metadata key on the created instance and thus the two mechanisms are not
     * allowed to be used simultaneously.  Users are free to use either mechanism - the
     * only distinction is that this separate attribute will cause a recreate on
     * modification.  On import, `metadataStartupScript` will not be set - if you
     * choose to specify it you will see a diff immediately after import causing a
     * destroy/recreate operation. If importing an instance and specifying this value
     * is desired, you will need to modify your state file.
     */
    metadataStartupScript?: pulumi.Input<string>;
    /**
     * Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as
     * `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform).
     * **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field.
     */
    minCpuPlatform?: pulumi.Input<string>;
    /**
     * A unique name for the resource, required by GCE.
     * Changing this forces a new resource to be created.
     */
    name?: pulumi.Input<string>;
    /**
     * Networks to attach to the instance. This can
     * be specified multiple times. Structure is documented below.
     *
     * - - -
     */
    networkInterfaces?: pulumi.Input<pulumi.Input<inputs.compute.InstanceNetworkInterface>[]>;
    /**
     * (Optional, Beta
     * Configures network performance settings for the instance. Structure is
     * documented below. **Note**: `machineType` must be a [supported type](https://cloud.google.com/compute/docs/networking/configure-vm-with-high-bandwidth-configuration),
     * the `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image)
     * in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC`
     * in order for this setting to take effect.
     */
    networkPerformanceConfig?: pulumi.Input<inputs.compute.InstanceNetworkPerformanceConfig>;
    /**
     * Additional instance parameters.
     * .
     */
    params?: pulumi.Input<inputs.compute.InstanceParams>;
    /**
     * Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace.
     */
    partnerMetadata?: pulumi.Input<{
        [key: string]: 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 combination of labels configured directly on the resource and default labels configured on the provider.
     */
    pulumiLabels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Specifies the reservations that this instance can consume from.
     * Structure is documented below.
     */
    reservationAffinity?: pulumi.Input<inputs.compute.InstanceReservationAffinity>;
    /**
     * - A list of selfLinks of resource policies to attach to the instance. Modifying this list will cause the instance to recreate. Currently a max of 1 resource policy is supported.
     */
    resourcePolicies?: pulumi.Input<string>;
    /**
     * The scheduling strategy to use. More details about
     * this configuration option are detailed below.
     */
    scheduling?: pulumi.Input<inputs.compute.InstanceScheduling>;
    /**
     * Scratch disks to attach to the instance. This can be
     * specified multiple times for multiple scratch disks. Structure is documented below.
     */
    scratchDisks?: pulumi.Input<pulumi.Input<inputs.compute.InstanceScratchDisk>[]>;
    /**
     * The URI of the created resource.
     */
    selfLink?: pulumi.Input<string>;
    /**
     * Service account to attach to the instance.
     * Structure is documented below.
     * **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field.
     */
    serviceAccount?: pulumi.Input<inputs.compute.InstanceServiceAccount>;
    /**
     * Enable [Shielded VM](https://cloud.google.com/security/shielded-cloud/shielded-vm) on this instance. Shielded VM provides verifiable integrity to prevent against malware and rootkits. Defaults to disabled. Structure is documented below.
     * **Note**: `shieldedInstanceConfig` can only be used with boot images with shielded vm support. See the complete list [here](https://cloud.google.com/compute/docs/images#shielded-images).
     * **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field.
     */
    shieldedInstanceConfig?: pulumi.Input<inputs.compute.InstanceShieldedInstanceConfig>;
    /**
     * A list of network tags to attach to the instance.
     */
    tags?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * The unique fingerprint of the tags.
     */
    tagsFingerprint?: pulumi.Input<string>;
    /**
     * The zone that the machine should be created in. If it is not provided, the provider zone is used.
     */
    zone?: pulumi.Input<string>;
}
/**
 * The set of arguments for constructing a Instance resource.
 */
export interface InstanceArgs {
    /**
     * Configure Nested Virtualisation and Simultaneous Hyper Threading  on this VM. Structure is documented below
     */
    advancedMachineFeatures?: pulumi.Input<inputs.compute.InstanceAdvancedMachineFeatures>;
    /**
     * If true, allows this prvider to stop the instance to update its properties.
     * If you try to update a property that requires stopping the instance without setting this field, the update will fail.
     */
    allowStoppingForUpdate?: pulumi.Input<boolean>;
    /**
     * Additional disks to attach to the instance. Can be repeated multiple times for multiple disks. Structure is documented below.
     */
    attachedDisks?: pulumi.Input<pulumi.Input<inputs.compute.InstanceAttachedDisk>[]>;
    /**
     * The boot disk for the instance.
     * Structure is documented below.
     */
    bootDisk: pulumi.Input<inputs.compute.InstanceBootDisk>;
    /**
     * Whether to allow sending and receiving of
     * packets with non-matching source or destination IPs.
     * This defaults to false.
     */
    canIpForward?: pulumi.Input<boolean>;
    /**
     * Enable [Confidential Mode](https://cloud.google.com/compute/confidential-vm/docs/about-cvm) on this VM. Structure is documented below
     */
    confidentialInstanceConfig?: pulumi.Input<inputs.compute.InstanceConfidentialInstanceConfig>;
    /**
     * Enable deletion protection on this instance. Defaults to false.
     * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully.
     */
    deletionProtection?: pulumi.Input<boolean>;
    /**
     * A brief description of this resource.
     */
    description?: pulumi.Input<string>;
    /**
     * Desired status of the instance. Either
     * `"RUNNING"`, `"SUSPENDED"` or `"TERMINATED"`.
     */
    desiredStatus?: pulumi.Input<string>;
    /**
     * Enable [Virtual Displays](https://cloud.google.com/compute/docs/instances/enable-instance-virtual-display#verify_display_driver) on this instance.
     * **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field.
     */
    enableDisplay?: pulumi.Input<boolean>;
    /**
     * List of the type and count of accelerator cards attached to the instance. Structure documented below.
     * **Note:** GPU accelerators can only be used with `onHostMaintenance` option set to TERMINATE.
     */
    guestAccelerators?: pulumi.Input<pulumi.Input<inputs.compute.InstanceGuestAccelerator>[]>;
    /**
     * A custom hostname for the instance. Must be a fully qualified DNS name and RFC-1035-valid.
     * Valid format is a series of labels 1-63 characters long matching the regular expression `a-z`, concatenated with periods.
     * The entire hostname must not exceed 253 characters. Changing this forces a new resource to be created.
     */
    hostname?: pulumi.Input<string>;
    /**
     * Configuration for data encryption on the instance with encryption keys. Structure is documented below.
     */
    instanceEncryptionKey?: pulumi.Input<inputs.compute.InstanceInstanceEncryptionKey>;
    /**
     * Action to be taken when a customer's encryption key is revoked. Supports `STOP` and `NONE`, with `NONE` being the default.
     */
    keyRevocationActionType?: pulumi.Input<string>;
    /**
     * A map of key/value label pairs to assign to the instance.
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field 'effective_labels' for all of the labels present on the resource.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * The machine type to create.
     *
     * **Note:** If you want to update this value (resize the VM) after initial creation, you must set `allowStoppingForUpdate` to `true`.
     *
     * [Custom machine types](https://cloud.google.com/dataproc/docs/concepts/compute/custom-machine-types) can be formatted as `custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY_MB`, e.g. `custom-6-20480` for 6 vCPU and 20GB of RAM.
     * Because of current API limitations some custom machine types may get converted to different machine types (such as an equivalent standard type) and cause non-empty plans in your configuration. Use
     * `lifecycle.ignore_changes` on `machineType` in these cases.
     *
     * There is a limit of 6.5 GB per CPU unless you add [extended memory](https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#extendedmemory). You must do this explicitly by adding the suffix `-ext`, e.g. `custom-2-15360-ext` for 2 vCPU and 15 GB of memory.
     */
    machineType: pulumi.Input<string>;
    /**
     * Metadata key/value pairs to make available from
     * within the instance. Ssh keys attached in the Cloud Console will be removed.
     * Add them to your config in order to keep them attached to your instance.
     * A list of predefined metadata keys (e.g. ssh-keys) can be found [here](https://cloud.google.com/compute/docs/metadata/predefined-metadata-keys)
     *
     * > Depending on the OS you choose for your instance, some metadata keys have
     * special functionality.  Most linux-based images will run the content of
     * `metadata.startup-script` in a shell on every boot.  At a minimum,
     * Debian, CentOS, RHEL, SLES, Container-Optimized OS, and Ubuntu images
     * support this key.  Windows instances require other keys depending on the format
     * of the script and the time you would like it to run - see [this table](https://cloud.google.com/compute/docs/startupscript#providing_a_startup_script_for_windows_instances).
     * For the convenience of the users of `metadata.startup-script`,
     * we provide a special attribute, `metadataStartupScript`, which is documented below.
     */
    metadata?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * An alternative to using the
     * startup-script metadata key, except this one forces the instance to be recreated
     * (thus re-running the script) if it is changed. This replaces the startup-script
     * metadata key on the created instance and thus the two mechanisms are not
     * allowed to be used simultaneously.  Users are free to use either mechanism - the
     * only distinction is that this separate attribute will cause a recreate on
     * modification.  On import, `metadataStartupScript` will not be set - if you
     * choose to specify it you will see a diff immediately after import causing a
     * destroy/recreate operation. If importing an instance and specifying this value
     * is desired, you will need to modify your state file.
     */
    metadataStartupScript?: pulumi.Input<string>;
    /**
     * Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as
     * `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform).
     * **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field.
     */
    minCpuPlatform?: pulumi.Input<string>;
    /**
     * A unique name for the resource, required by GCE.
     * Changing this forces a new resource to be created.
     */
    name?: pulumi.Input<string>;
    /**
     * Networks to attach to the instance. This can
     * be specified multiple times. Structure is documented below.
     *
     * - - -
     */
    networkInterfaces: pulumi.Input<pulumi.Input<inputs.compute.InstanceNetworkInterface>[]>;
    /**
     * (Optional, Beta
     * Configures network performance settings for the instance. Structure is
     * documented below. **Note**: `machineType` must be a [supported type](https://cloud.google.com/compute/docs/networking/configure-vm-with-high-bandwidth-configuration),
     * the `image` used must include the [`GVNIC`](https://cloud.google.com/compute/docs/networking/using-gvnic#create-instance-gvnic-image)
     * in `guest-os-features`, and `network_interface.0.nic-type` must be `GVNIC`
     * in order for this setting to take effect.
     */
    networkPerformanceConfig?: pulumi.Input<inputs.compute.InstanceNetworkPerformanceConfig>;
    /**
     * Additional instance parameters.
     * .
     */
    params?: pulumi.Input<inputs.compute.InstanceParams>;
    /**
     * Beta key/value pair represents partner metadata assigned to instance where key represent a defined namespace and value is a json string represent the entries associted with the namespace.
     */
    partnerMetadata?: pulumi.Input<{
        [key: string]: 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>;
    /**
     * Specifies the reservations that this instance can consume from.
     * Structure is documented below.
     */
    reservationAffinity?: pulumi.Input<inputs.compute.InstanceReservationAffinity>;
    /**
     * - A list of selfLinks of resource policies to attach to the instance. Modifying this list will cause the instance to recreate. Currently a max of 1 resource policy is supported.
     */
    resourcePolicies?: pulumi.Input<string>;
    /**
     * The scheduling strategy to use. More details about
     * this configuration option are detailed below.
     */
    scheduling?: pulumi.Input<inputs.compute.InstanceScheduling>;
    /**
     * Scratch disks to attach to the instance. This can be
     * specified multiple times for multiple scratch disks. Structure is documented below.
     */
    scratchDisks?: pulumi.Input<pulumi.Input<inputs.compute.InstanceScratchDisk>[]>;
    /**
     * Service account to attach to the instance.
     * Structure is documented below.
     * **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field.
     */
    serviceAccount?: pulumi.Input<inputs.compute.InstanceServiceAccount>;
    /**
     * Enable [Shielded VM](https://cloud.google.com/security/shielded-cloud/shielded-vm) on this instance. Shielded VM provides verifiable integrity to prevent against malware and rootkits. Defaults to disabled. Structure is documented below.
     * **Note**: `shieldedInstanceConfig` can only be used with boot images with shielded vm support. See the complete list [here](https://cloud.google.com/compute/docs/images#shielded-images).
     * **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field.
     */
    shieldedInstanceConfig?: pulumi.Input<inputs.compute.InstanceShieldedInstanceConfig>;
    /**
     * A list of network tags to attach to the instance.
     */
    tags?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * The zone that the machine should be created in. If it is not provided, the provider zone is used.
     */
    zone?: pulumi.Input<string>;
}
