import * as pulumi from "@pulumi/pulumi";
import { input as inputs, output as outputs } from "../types";
/**
 * Manages an ECS VM instance resource within HuaweiCloud.
 *
 * ## Example Usage
 * ### Basic Instance
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as huaweicloud from "@pulumi/huaweicloud";
 * import * as pulumi from "@huaweicloudos/pulumi";
 *
 * const config = new pulumi.Config();
 * const secgroupId = config.requireObject("secgroupId");
 * const myaz = huaweicloud.getAvailabilityZones({});
 * const myflavor = myaz.then(myaz => huaweicloud.Ecs.getFlavors({
 *     availabilityZone: myaz.names?[0],
 *     performanceType: "normal",
 *     cpuCoreCount: 2,
 *     memorySize: 4,
 * }));
 * const mynet = huaweicloud.Vpc.getSubnet({
 *     name: "subnet-default",
 * });
 * const myimage = huaweicloud.Ims.getImage({
 *     name: "Ubuntu 18.04 server 64bit",
 *     mostRecent: true,
 * });
 * const basic = new huaweicloud.ecs.Instance("basic", {
 *     imageId: myimage.then(myimage => myimage.id),
 *     flavorId: myflavor.then(myflavor => myflavor.ids?[0]),
 *     securityGroupIds: [secgroupId],
 *     availabilityZone: myaz.then(myaz => myaz.names?[0]),
 *     networks: [{
 *         uuid: mynet.then(mynet => mynet.id),
 *     }],
 * });
 * ```
 * ### Instance With Associated Eip
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as pulumi from "@huaweicloudos/pulumi";
 *
 * const config = new pulumi.Config();
 * const secgroupId = config.requireObject("secgroupId");
 * const myinstance = new huaweicloud.ecs.Instance("myinstance", {
 *     imageId: "ad091b52-742f-469e-8f3c-fd81cadf0743",
 *     flavorId: "s6.small.1",
 *     keyPair: "my_key_pair_name",
 *     securityGroupIds: [secgroupId],
 *     availabilityZone: "cn-north-4a",
 *     networks: [{
 *         uuid: "55534eaa-533a-419d-9b40-ec427ea7195a",
 *     }],
 * });
 * const myeip = new huaweicloud.vpc.Eip("myeip", {
 *     publicip: {
 *         type: "5_bgp",
 *     },
 *     bandwidth: {
 *         name: "test",
 *         size: 8,
 *         shareType: "PER",
 *         chargeMode: "traffic",
 *     },
 * });
 * const associated = new huaweicloud.ecs.EipAssociate("associated", {
 *     publicIp: myeip.address,
 *     instanceId: myinstance.id,
 * });
 * ```
 * ### Instance With Attached Volume
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as pulumi from "@huaweicloudos/pulumi";
 *
 * const config = new pulumi.Config();
 * const secgroupId = config.requireObject("secgroupId");
 * const myvolume = new huaweicloud.evs.Volume("myvolume", {
 *     availabilityZone: "cn-north-4a",
 *     volumeType: "SAS",
 *     size: 10,
 * });
 * const myinstance = new huaweicloud.ecs.Instance("myinstance", {
 *     imageId: "ad091b52-742f-469e-8f3c-fd81cadf0743",
 *     flavorId: "s6.small.1",
 *     keyPair: "my_key_pair_name",
 *     securityGroupIds: [secgroupId],
 *     availabilityZone: "cn-north-4a",
 *     networks: [{
 *         uuid: "55534eaa-533a-419d-9b40-ec427ea7195a",
 *     }],
 * });
 * const attached = new huaweicloud.ecs.VolumeAttach("attached", {
 *     instanceId: myinstance.id,
 *     volumeId: myvolume.id,
 * });
 * ```
 * ### Instance With Multiple Data Disks
 *
 * It's possible to specify multiple `dataDisks` entries to create an instance with multiple data disks, but we can't
 * ensure the volume attached order. So it's recommended to use `Instance With Attached Volume` above.
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as pulumi from "@huaweicloudos/pulumi";
 *
 * const config = new pulumi.Config();
 * const secgroupId = config.requireObject("secgroupId");
 * const multi_disk = new huaweicloud.ecs.Instance("multi-disk", {
 *     imageId: "ad091b52-742f-469e-8f3c-fd81cadf0743",
 *     flavorId: "s6.small.1",
 *     keyPair: "my_key_pair_name",
 *     securityGroupIds: [secgroupId],
 *     availabilityZone: "cn-north-4a",
 *     systemDiskType: "SAS",
 *     systemDiskSize: 40,
 *     dataDisks: [
 *         {
 *             type: "SAS",
 *             size: 10,
 *         },
 *         {
 *             type: "SAS",
 *             size: 20,
 *         },
 *     ],
 *     deleteDisksOnTermination: true,
 *     networks: [{
 *         uuid: "55534eaa-533a-419d-9b40-ec427ea7195a",
 *     }],
 * });
 * ```
 * ### Instance With Multiple Networks
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as pulumi from "@huaweicloudos/pulumi";
 *
 * const config = new pulumi.Config();
 * const secgroupId = config.requireObject("secgroupId");
 * const multi_net = new huaweicloud.ecs.Instance("multi-net", {
 *     imageId: "ad091b52-742f-469e-8f3c-fd81cadf0743",
 *     flavorId: "s6.small.1",
 *     keyPair: "my_key_pair_name",
 *     securityGroupIds: [secgroupId],
 *     availabilityZone: "cn-north-4a",
 *     networks: [
 *         {
 *             uuid: "55534eaa-533a-419d-9b40-ec427ea7195a",
 *         },
 *         {
 *             uuid: "3c4a0d74-24b9-46cf-9d7f-8b7a4dc2f65c",
 *         },
 *     ],
 * });
 * ```
 * ### Instance with User Data (cloud-init)
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as pulumi from "@huaweicloudos/pulumi";
 *
 * const config = new pulumi.Config();
 * const secgroupId = config.requireObject("secgroupId");
 * const myinstance = new huaweicloud.ecs.Instance("myinstance", {
 *     imageId: "ad091b52-742f-469e-8f3c-fd81cadf0743",
 *     flavorId: "s6.small.1",
 *     keyPair: "my_key_pair_name",
 *     securityGroupIds: [secgroupId],
 *     availabilityZone: "az",
 *     userData: `#cloud-config
 * hostname: instance_1.example.com
 * fqdn: instance_1.example.com`,
 *     networks: [{
 *         uuid: "55534eaa-533a-419d-9b40-ec427ea7195a",
 *     }],
 * });
 * ```
 *
 * ## Import
 *
 * Instances can be imported by their `id`. For example,
 *
 * ```sh
 *  $ pulumi import huaweicloud:Ecs/instance:Instance my_instance b11b407c-e604-4e8d-8bc4-92398320b847
 * ```
 *
 *  Note that the imported state may not be identical to your resource definition, due to some attributes missing from the API response, security or some other reason. The missing attributes include`admin_pass`, `user_data`, `metadata`, `data_disks`, `scheduler_hints`, `stop_before_destroy`, `delete_disks_on_termination`, `delete_eip_on_termination`, `network/access_network`, `bandwidth`, `eip_type`, `power_action` and arguments for pre-paid and spot price. It is generally recommended running `terraform plan` after importing an instance. You can then decide if changes should be applied to the instance, or the resource definition should be updated to align with the instance. Also you can ignore changes as below. hcl resource "huaweicloud_compute_instance" "myinstance" {
 *
 *  ...
 *
 *  lifecycle {
 *
 *  ignore_changes = [
 *
 *  user_data, data_disks,
 *
 *  ]
 *
 *  } }
 */
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;
    /**
     * The first detected Fixed IPv4 address or the Floating IP.
     */
    readonly accessIpV4: pulumi.Output<string>;
    /**
     * The first detected Fixed IPv6 address.
     */
    readonly accessIpV6: pulumi.Output<string>;
    /**
     * Specifies the administrative password to assign to the instance.
     */
    readonly adminPass: pulumi.Output<string | undefined>;
    /**
     * Specifies the IAM agency name which is created on IAM to provide
     * temporary credentials for ECS to access cloud services.
     */
    readonly agencyName: pulumi.Output<string>;
    /**
     * Specifies the agent list in comma-separated string.
     * Available agents are:
     * + `ces`: enable cloud eye monitoring.
     * + `hss`: enable host security basic.
     * + `hss,hss-ent`: enable host security enterprise edition.
     */
    readonly agentList: pulumi.Output<string>;
    /**
     * @deprecated Deprecated
     */
    readonly autoPay: pulumi.Output<string | undefined>;
    /**
     * Specifies whether auto renew is enabled.
     * Valid values are *true* and *false*. Defaults to *false*.
     */
    readonly autoRenew: pulumi.Output<string | undefined>;
    /**
     * Specifies the auto terminate time.
     * The value is in the format of "yyyy-MM-ddTHH:mm:ssZ" in UTC+0 and complies with ISO8601.
     * If the value of second (ss) is not "00", the system automatically sets to the current value of minute (mm).
     * The auto terminate time must be at least half an hour later than the current time.
     * The auto terminate time cannot be three years later than the current time.
     * For example, set the value to "2024-09-25T12:05:00Z".
     */
    readonly autoTerminateTime: pulumi.Output<string | undefined>;
    /**
     * Specifies the availability zone in which to create the instance.
     * Please following [reference](https://developer.huaweicloud.com/intl/en-us/endpoint/?ECS)
     * for the values. Changing this creates a new instance.
     */
    readonly availabilityZone: pulumi.Output<string>;
    /**
     * Specifies the bandwidth of an EIP that will be automatically assigned to the instance.
     * The object structure is documented below. Changing this creates a new instance.
     */
    readonly bandwidth: pulumi.Output<outputs.Ecs.InstanceBandwidth | undefined>;
    /**
     * Specifies the charging mode of the instance. Valid values are *prePaid*,
     * *postPaid* and *spot*, defaults to *postPaid*. Changing this creates a new instance.
     */
    readonly chargingMode: pulumi.Output<string>;
    /**
     * The creation time, in UTC format.
     */
    readonly createdAt: pulumi.Output<string>;
    /**
     * Specifies an array of one or more data disks to attach to the instance.
     * The dataDisks object structure is documented below. Changing this creates a new instance.
     */
    readonly dataDisks: pulumi.Output<outputs.Ecs.InstanceDataDisk[] | undefined>;
    /**
     * Specifies whether to delete the data disks when the instance is terminated.
     * Defaults to *false*. This parameter is valid if `chargingMode` is set to *postPaid*, and all data disks will be deleted
     * in *prePaid* charging mode.
     */
    readonly deleteDisksOnTermination: pulumi.Output<boolean | undefined>;
    /**
     * Specifies whether the EIP is released when the instance is terminated.
     * Defaults to *true*.
     */
    readonly deleteEipOnTermination: pulumi.Output<boolean | undefined>;
    /**
     * Specifies the description of the instance. The description consists of 0 to 85
     * characters, and can't contain '<' or '>'.
     */
    readonly description: pulumi.Output<string>;
    /**
     * Specifies the ID of an *existing* EIP assigned to the instance.
     * This parameter and `eipType`, `bandwidth` are alternative. Changing this creates a new instance.
     */
    readonly eipId: pulumi.Output<string | undefined>;
    /**
     * Specifies the type of an EIP that will be automatically assigned to the instance.
     * Available values are *5_bgp* (dynamic BGP) and *5_sbgp* (static BGP). Changing this creates a new instance.
     */
    readonly eipType: pulumi.Output<string | undefined>;
    /**
     * Specifies a unique id in UUID format of enterprise project.
     */
    readonly enterpriseProjectId: pulumi.Output<string>;
    /**
     * The expired time of prePaid instance, in UTC format.
     */
    readonly expiredTime: pulumi.Output<string>;
    /**
     * Specifies the flavor ID of the instance to be created.
     */
    readonly flavorId: pulumi.Output<string>;
    /**
     * The flavor name of the instance.
     */
    readonly flavorName: pulumi.Output<string>;
    /**
     * The hostname of the instance.
     */
    readonly hostname: pulumi.Output<string>;
    /**
     * Required if `imageName` is empty. Specifies the image ID of the desired
     * image for the instance. Changing this creates a new instance.
     */
    readonly imageId: pulumi.Output<string>;
    /**
     * Required if `imageId` is empty. Specifies the name of the desired image
     * for the instance. Changing this creates a new instance.
     */
    readonly imageName: pulumi.Output<string>;
    /**
     * Specifies the SSH keypair name used for logging in to the instance.
     */
    readonly keyPair: pulumi.Output<string | undefined>;
    /**
     * Specifies the user-defined metadata key-value pair.
     */
    readonly metadata: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * Specifies a unique name for the instance. The name consists of 1 to 64 characters,
     * including letters, digits, underscores (_), hyphens (-), and periods (.).
     */
    readonly name: pulumi.Output<string>;
    /**
     * Specifies an array of one or more networks to attach to the instance. The
     * network object structure is documented below. Changing this creates a new instance.
     */
    readonly networks: pulumi.Output<outputs.Ecs.InstanceNetwork[]>;
    /**
     * Specifies the charging period of the instance.
     * If `periodUnit` is set to *month* , the value ranges from 1 to 9. If `periodUnit` is set to *year*, the value
     * ranges from 1 to 3. This parameter is mandatory if `chargingMode` is set to *prePaid*. Changing this creates a
     * new resource.
     */
    readonly period: pulumi.Output<number | undefined>;
    /**
     * Specifies the charging period unit of the instance.
     * Valid values are *month* and *year*. This parameter is mandatory if `chargingMode` is set to *prePaid*.
     * Changing this creates a new instance.
     */
    readonly periodUnit: pulumi.Output<string | undefined>;
    /**
     * Specifies the power action to be done for the instance.
     * The valid values are *ON*, *OFF*, *REBOOT*, *FORCE-OFF* and *FORCE-REBOOT*.
     */
    readonly powerAction: pulumi.Output<string>;
    /**
     * Specifies the the private key of the keypair in use. This parameter is mandatory
     * when replacing or unbinding a keypair and the instance is in **Running** state.
     */
    readonly privateKey: pulumi.Output<string | undefined>;
    /**
     * The EIP address that is associated to the instance.
     */
    readonly publicIp: pulumi.Output<string>;
    /**
     * Specifies the region in which to create the instance.
     * If omitted, the provider-level region will be used. Changing this creates a new instance.
     */
    readonly region: pulumi.Output<string>;
    /**
     * Specifies the scheduler with hints on how the instance should be launched. The
     * available hints are described below.
     */
    readonly schedulerHints: pulumi.Output<outputs.Ecs.InstanceSchedulerHint[]>;
    /**
     * Specifies an array of one or more security group IDs to associate with the
     * instance.
     */
    readonly securityGroupIds: pulumi.Output<string[]>;
    /**
     * An array of one or more security groups to associate with the instance.
     */
    readonly securityGroups: pulumi.Output<string[]>;
    /**
     * Specifies the service duration of the spot ECS in hours.
     * The valid value is range from `1` to `6`.
     * This parameter takes effect only when `chargingMode` is set to *spot*.
     * Changing this creates a new instance.
     */
    readonly spotDuration: pulumi.Output<number | undefined>;
    /**
     * Specifies the number of time periods in the service duration.
     * This parameter takes effect only when `chargingMode` is set to *spot* and the default value is 1.
     * Changing this creates a new instance.
     */
    readonly spotDurationCount: pulumi.Output<number>;
    /**
     * Specifies the highest price per hour you accept for a spot ECS.
     * This parameter takes effect only when `chargingMode` is set to *spot*. If the price is not specified,
     * the pay-per-use price is used by default. Changing this creates a new instance.
     */
    readonly spotMaximumPrice: pulumi.Output<string | undefined>;
    /**
     * The status of the instance.
     */
    readonly status: pulumi.Output<string>;
    /**
     * Specifies whether to try stop instance gracefully before destroying it, thus giving
     * chance for guest OS daemons to stop correctly. If instance doesn't stop within timeout, it will be destroyed anyway.
     */
    readonly stopBeforeDestroy: pulumi.Output<boolean | undefined>;
    /**
     * Specifies the system disk DSS pool ID. This field is used
     * only for dedicated storage. Changing this parameter will create a new resource.
     */
    readonly systemDiskDssPoolId: pulumi.Output<string | undefined>;
    /**
     * The system disk volume ID.
     */
    readonly systemDiskId: pulumi.Output<string>;
    /**
     * Specifies the IOPS(Input/Output Operations Per Second) for the disk.
     * The field is valid and required when `systemDiskType` is set to **GPSSD2** or **ESSD2**.
     */
    readonly systemDiskIops: pulumi.Output<number>;
    /**
     * Specifies the ID of a KMS key used to encrypt the system disk.
     * Changing this creates a new instance.
     */
    readonly systemDiskKmsKeyId: pulumi.Output<string>;
    /**
     * Specifies the system disk size in GB, The value range is 1 to 1024.
     * Shrinking the disk is not supported.
     */
    readonly systemDiskSize: pulumi.Output<number>;
    /**
     * Specifies the throughput for the disk. The Unit is MiB/s.
     * The field is valid and required when `systemDiskType` is set to **GPSSD2**.
     */
    readonly systemDiskThroughput: pulumi.Output<number>;
    /**
     * Specifies the system disk type of the instance. Defaults to `GPSSD`.
     * Changing this creates a new instance.
     */
    readonly systemDiskType: pulumi.Output<string>;
    /**
     * Specifies the key/value pairs to associate with the instance.
     */
    readonly tags: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * The last update time, in UTC format.
     */
    readonly updatedAt: pulumi.Output<string>;
    /**
     * Specifies the user data to be injected to the instance during the creation. Text
     * and text files can be injected. The content of `userData` can be plaint text or encoded with base64.
     */
    readonly userData: pulumi.Output<string | undefined>;
    /**
     * Specifies a user ID, required when using keyPair in prePaid charging mode.
     * Changing this creates a new instance.
     */
    readonly userId: pulumi.Output<string | undefined>;
    /**
     * An array of one or more disks to attach to the instance.
     * The volume attached object structure is documented below.
     */
    readonly volumeAttacheds: pulumi.Output<outputs.Ecs.InstanceVolumeAttached[]>;
    /**
     * 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 {
    /**
     * The first detected Fixed IPv4 address or the Floating IP.
     */
    accessIpV4?: pulumi.Input<string>;
    /**
     * The first detected Fixed IPv6 address.
     */
    accessIpV6?: pulumi.Input<string>;
    /**
     * Specifies the administrative password to assign to the instance.
     */
    adminPass?: pulumi.Input<string>;
    /**
     * Specifies the IAM agency name which is created on IAM to provide
     * temporary credentials for ECS to access cloud services.
     */
    agencyName?: pulumi.Input<string>;
    /**
     * Specifies the agent list in comma-separated string.
     * Available agents are:
     * + `ces`: enable cloud eye monitoring.
     * + `hss`: enable host security basic.
     * + `hss,hss-ent`: enable host security enterprise edition.
     */
    agentList?: pulumi.Input<string>;
    /**
     * @deprecated Deprecated
     */
    autoPay?: pulumi.Input<string>;
    /**
     * Specifies whether auto renew is enabled.
     * Valid values are *true* and *false*. Defaults to *false*.
     */
    autoRenew?: pulumi.Input<string>;
    /**
     * Specifies the auto terminate time.
     * The value is in the format of "yyyy-MM-ddTHH:mm:ssZ" in UTC+0 and complies with ISO8601.
     * If the value of second (ss) is not "00", the system automatically sets to the current value of minute (mm).
     * The auto terminate time must be at least half an hour later than the current time.
     * The auto terminate time cannot be three years later than the current time.
     * For example, set the value to "2024-09-25T12:05:00Z".
     */
    autoTerminateTime?: pulumi.Input<string>;
    /**
     * Specifies the availability zone in which to create the instance.
     * Please following [reference](https://developer.huaweicloud.com/intl/en-us/endpoint/?ECS)
     * for the values. Changing this creates a new instance.
     */
    availabilityZone?: pulumi.Input<string>;
    /**
     * Specifies the bandwidth of an EIP that will be automatically assigned to the instance.
     * The object structure is documented below. Changing this creates a new instance.
     */
    bandwidth?: pulumi.Input<inputs.Ecs.InstanceBandwidth>;
    /**
     * Specifies the charging mode of the instance. Valid values are *prePaid*,
     * *postPaid* and *spot*, defaults to *postPaid*. Changing this creates a new instance.
     */
    chargingMode?: pulumi.Input<string>;
    /**
     * The creation time, in UTC format.
     */
    createdAt?: pulumi.Input<string>;
    /**
     * Specifies an array of one or more data disks to attach to the instance.
     * The dataDisks object structure is documented below. Changing this creates a new instance.
     */
    dataDisks?: pulumi.Input<pulumi.Input<inputs.Ecs.InstanceDataDisk>[]>;
    /**
     * Specifies whether to delete the data disks when the instance is terminated.
     * Defaults to *false*. This parameter is valid if `chargingMode` is set to *postPaid*, and all data disks will be deleted
     * in *prePaid* charging mode.
     */
    deleteDisksOnTermination?: pulumi.Input<boolean>;
    /**
     * Specifies whether the EIP is released when the instance is terminated.
     * Defaults to *true*.
     */
    deleteEipOnTermination?: pulumi.Input<boolean>;
    /**
     * Specifies the description of the instance. The description consists of 0 to 85
     * characters, and can't contain '<' or '>'.
     */
    description?: pulumi.Input<string>;
    /**
     * Specifies the ID of an *existing* EIP assigned to the instance.
     * This parameter and `eipType`, `bandwidth` are alternative. Changing this creates a new instance.
     */
    eipId?: pulumi.Input<string>;
    /**
     * Specifies the type of an EIP that will be automatically assigned to the instance.
     * Available values are *5_bgp* (dynamic BGP) and *5_sbgp* (static BGP). Changing this creates a new instance.
     */
    eipType?: pulumi.Input<string>;
    /**
     * Specifies a unique id in UUID format of enterprise project.
     */
    enterpriseProjectId?: pulumi.Input<string>;
    /**
     * The expired time of prePaid instance, in UTC format.
     */
    expiredTime?: pulumi.Input<string>;
    /**
     * Specifies the flavor ID of the instance to be created.
     */
    flavorId?: pulumi.Input<string>;
    /**
     * The flavor name of the instance.
     */
    flavorName?: pulumi.Input<string>;
    /**
     * The hostname of the instance.
     */
    hostname?: pulumi.Input<string>;
    /**
     * Required if `imageName` is empty. Specifies the image ID of the desired
     * image for the instance. Changing this creates a new instance.
     */
    imageId?: pulumi.Input<string>;
    /**
     * Required if `imageId` is empty. Specifies the name of the desired image
     * for the instance. Changing this creates a new instance.
     */
    imageName?: pulumi.Input<string>;
    /**
     * Specifies the SSH keypair name used for logging in to the instance.
     */
    keyPair?: pulumi.Input<string>;
    /**
     * Specifies the user-defined metadata key-value pair.
     */
    metadata?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Specifies a unique name for the instance. The name consists of 1 to 64 characters,
     * including letters, digits, underscores (_), hyphens (-), and periods (.).
     */
    name?: pulumi.Input<string>;
    /**
     * Specifies an array of one or more networks to attach to the instance. The
     * network object structure is documented below. Changing this creates a new instance.
     */
    networks?: pulumi.Input<pulumi.Input<inputs.Ecs.InstanceNetwork>[]>;
    /**
     * Specifies the charging period of the instance.
     * If `periodUnit` is set to *month* , the value ranges from 1 to 9. If `periodUnit` is set to *year*, the value
     * ranges from 1 to 3. This parameter is mandatory if `chargingMode` is set to *prePaid*. Changing this creates a
     * new resource.
     */
    period?: pulumi.Input<number>;
    /**
     * Specifies the charging period unit of the instance.
     * Valid values are *month* and *year*. This parameter is mandatory if `chargingMode` is set to *prePaid*.
     * Changing this creates a new instance.
     */
    periodUnit?: pulumi.Input<string>;
    /**
     * Specifies the power action to be done for the instance.
     * The valid values are *ON*, *OFF*, *REBOOT*, *FORCE-OFF* and *FORCE-REBOOT*.
     */
    powerAction?: pulumi.Input<string>;
    /**
     * Specifies the the private key of the keypair in use. This parameter is mandatory
     * when replacing or unbinding a keypair and the instance is in **Running** state.
     */
    privateKey?: pulumi.Input<string>;
    /**
     * The EIP address that is associated to the instance.
     */
    publicIp?: pulumi.Input<string>;
    /**
     * Specifies the region in which to create the instance.
     * If omitted, the provider-level region will be used. Changing this creates a new instance.
     */
    region?: pulumi.Input<string>;
    /**
     * Specifies the scheduler with hints on how the instance should be launched. The
     * available hints are described below.
     */
    schedulerHints?: pulumi.Input<pulumi.Input<inputs.Ecs.InstanceSchedulerHint>[]>;
    /**
     * Specifies an array of one or more security group IDs to associate with the
     * instance.
     */
    securityGroupIds?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * An array of one or more security groups to associate with the instance.
     */
    securityGroups?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * Specifies the service duration of the spot ECS in hours.
     * The valid value is range from `1` to `6`.
     * This parameter takes effect only when `chargingMode` is set to *spot*.
     * Changing this creates a new instance.
     */
    spotDuration?: pulumi.Input<number>;
    /**
     * Specifies the number of time periods in the service duration.
     * This parameter takes effect only when `chargingMode` is set to *spot* and the default value is 1.
     * Changing this creates a new instance.
     */
    spotDurationCount?: pulumi.Input<number>;
    /**
     * Specifies the highest price per hour you accept for a spot ECS.
     * This parameter takes effect only when `chargingMode` is set to *spot*. If the price is not specified,
     * the pay-per-use price is used by default. Changing this creates a new instance.
     */
    spotMaximumPrice?: pulumi.Input<string>;
    /**
     * The status of the instance.
     */
    status?: pulumi.Input<string>;
    /**
     * Specifies whether to try stop instance gracefully before destroying it, thus giving
     * chance for guest OS daemons to stop correctly. If instance doesn't stop within timeout, it will be destroyed anyway.
     */
    stopBeforeDestroy?: pulumi.Input<boolean>;
    /**
     * Specifies the system disk DSS pool ID. This field is used
     * only for dedicated storage. Changing this parameter will create a new resource.
     */
    systemDiskDssPoolId?: pulumi.Input<string>;
    /**
     * The system disk volume ID.
     */
    systemDiskId?: pulumi.Input<string>;
    /**
     * Specifies the IOPS(Input/Output Operations Per Second) for the disk.
     * The field is valid and required when `systemDiskType` is set to **GPSSD2** or **ESSD2**.
     */
    systemDiskIops?: pulumi.Input<number>;
    /**
     * Specifies the ID of a KMS key used to encrypt the system disk.
     * Changing this creates a new instance.
     */
    systemDiskKmsKeyId?: pulumi.Input<string>;
    /**
     * Specifies the system disk size in GB, The value range is 1 to 1024.
     * Shrinking the disk is not supported.
     */
    systemDiskSize?: pulumi.Input<number>;
    /**
     * Specifies the throughput for the disk. The Unit is MiB/s.
     * The field is valid and required when `systemDiskType` is set to **GPSSD2**.
     */
    systemDiskThroughput?: pulumi.Input<number>;
    /**
     * Specifies the system disk type of the instance. Defaults to `GPSSD`.
     * Changing this creates a new instance.
     */
    systemDiskType?: pulumi.Input<string>;
    /**
     * Specifies the key/value pairs to associate with the instance.
     */
    tags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * The last update time, in UTC format.
     */
    updatedAt?: pulumi.Input<string>;
    /**
     * Specifies the user data to be injected to the instance during the creation. Text
     * and text files can be injected. The content of `userData` can be plaint text or encoded with base64.
     */
    userData?: pulumi.Input<string>;
    /**
     * Specifies a user ID, required when using keyPair in prePaid charging mode.
     * Changing this creates a new instance.
     */
    userId?: pulumi.Input<string>;
    /**
     * An array of one or more disks to attach to the instance.
     * The volume attached object structure is documented below.
     */
    volumeAttacheds?: pulumi.Input<pulumi.Input<inputs.Ecs.InstanceVolumeAttached>[]>;
}
/**
 * The set of arguments for constructing a Instance resource.
 */
export interface InstanceArgs {
    /**
     * Specifies the administrative password to assign to the instance.
     */
    adminPass?: pulumi.Input<string>;
    /**
     * Specifies the IAM agency name which is created on IAM to provide
     * temporary credentials for ECS to access cloud services.
     */
    agencyName?: pulumi.Input<string>;
    /**
     * Specifies the agent list in comma-separated string.
     * Available agents are:
     * + `ces`: enable cloud eye monitoring.
     * + `hss`: enable host security basic.
     * + `hss,hss-ent`: enable host security enterprise edition.
     */
    agentList?: pulumi.Input<string>;
    /**
     * @deprecated Deprecated
     */
    autoPay?: pulumi.Input<string>;
    /**
     * Specifies whether auto renew is enabled.
     * Valid values are *true* and *false*. Defaults to *false*.
     */
    autoRenew?: pulumi.Input<string>;
    /**
     * Specifies the auto terminate time.
     * The value is in the format of "yyyy-MM-ddTHH:mm:ssZ" in UTC+0 and complies with ISO8601.
     * If the value of second (ss) is not "00", the system automatically sets to the current value of minute (mm).
     * The auto terminate time must be at least half an hour later than the current time.
     * The auto terminate time cannot be three years later than the current time.
     * For example, set the value to "2024-09-25T12:05:00Z".
     */
    autoTerminateTime?: pulumi.Input<string>;
    /**
     * Specifies the availability zone in which to create the instance.
     * Please following [reference](https://developer.huaweicloud.com/intl/en-us/endpoint/?ECS)
     * for the values. Changing this creates a new instance.
     */
    availabilityZone?: pulumi.Input<string>;
    /**
     * Specifies the bandwidth of an EIP that will be automatically assigned to the instance.
     * The object structure is documented below. Changing this creates a new instance.
     */
    bandwidth?: pulumi.Input<inputs.Ecs.InstanceBandwidth>;
    /**
     * Specifies the charging mode of the instance. Valid values are *prePaid*,
     * *postPaid* and *spot*, defaults to *postPaid*. Changing this creates a new instance.
     */
    chargingMode?: pulumi.Input<string>;
    /**
     * Specifies an array of one or more data disks to attach to the instance.
     * The dataDisks object structure is documented below. Changing this creates a new instance.
     */
    dataDisks?: pulumi.Input<pulumi.Input<inputs.Ecs.InstanceDataDisk>[]>;
    /**
     * Specifies whether to delete the data disks when the instance is terminated.
     * Defaults to *false*. This parameter is valid if `chargingMode` is set to *postPaid*, and all data disks will be deleted
     * in *prePaid* charging mode.
     */
    deleteDisksOnTermination?: pulumi.Input<boolean>;
    /**
     * Specifies whether the EIP is released when the instance is terminated.
     * Defaults to *true*.
     */
    deleteEipOnTermination?: pulumi.Input<boolean>;
    /**
     * Specifies the description of the instance. The description consists of 0 to 85
     * characters, and can't contain '<' or '>'.
     */
    description?: pulumi.Input<string>;
    /**
     * Specifies the ID of an *existing* EIP assigned to the instance.
     * This parameter and `eipType`, `bandwidth` are alternative. Changing this creates a new instance.
     */
    eipId?: pulumi.Input<string>;
    /**
     * Specifies the type of an EIP that will be automatically assigned to the instance.
     * Available values are *5_bgp* (dynamic BGP) and *5_sbgp* (static BGP). Changing this creates a new instance.
     */
    eipType?: pulumi.Input<string>;
    /**
     * Specifies a unique id in UUID format of enterprise project.
     */
    enterpriseProjectId?: pulumi.Input<string>;
    /**
     * Specifies the flavor ID of the instance to be created.
     */
    flavorId?: pulumi.Input<string>;
    /**
     * The flavor name of the instance.
     */
    flavorName?: pulumi.Input<string>;
    /**
     * The hostname of the instance.
     */
    hostname?: pulumi.Input<string>;
    /**
     * Required if `imageName` is empty. Specifies the image ID of the desired
     * image for the instance. Changing this creates a new instance.
     */
    imageId?: pulumi.Input<string>;
    /**
     * Required if `imageId` is empty. Specifies the name of the desired image
     * for the instance. Changing this creates a new instance.
     */
    imageName?: pulumi.Input<string>;
    /**
     * Specifies the SSH keypair name used for logging in to the instance.
     */
    keyPair?: pulumi.Input<string>;
    /**
     * Specifies the user-defined metadata key-value pair.
     */
    metadata?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Specifies a unique name for the instance. The name consists of 1 to 64 characters,
     * including letters, digits, underscores (_), hyphens (-), and periods (.).
     */
    name?: pulumi.Input<string>;
    /**
     * Specifies an array of one or more networks to attach to the instance. The
     * network object structure is documented below. Changing this creates a new instance.
     */
    networks: pulumi.Input<pulumi.Input<inputs.Ecs.InstanceNetwork>[]>;
    /**
     * Specifies the charging period of the instance.
     * If `periodUnit` is set to *month* , the value ranges from 1 to 9. If `periodUnit` is set to *year*, the value
     * ranges from 1 to 3. This parameter is mandatory if `chargingMode` is set to *prePaid*. Changing this creates a
     * new resource.
     */
    period?: pulumi.Input<number>;
    /**
     * Specifies the charging period unit of the instance.
     * Valid values are *month* and *year*. This parameter is mandatory if `chargingMode` is set to *prePaid*.
     * Changing this creates a new instance.
     */
    periodUnit?: pulumi.Input<string>;
    /**
     * Specifies the power action to be done for the instance.
     * The valid values are *ON*, *OFF*, *REBOOT*, *FORCE-OFF* and *FORCE-REBOOT*.
     */
    powerAction?: pulumi.Input<string>;
    /**
     * Specifies the the private key of the keypair in use. This parameter is mandatory
     * when replacing or unbinding a keypair and the instance is in **Running** state.
     */
    privateKey?: pulumi.Input<string>;
    /**
     * Specifies the region in which to create the instance.
     * If omitted, the provider-level region will be used. Changing this creates a new instance.
     */
    region?: pulumi.Input<string>;
    /**
     * Specifies the scheduler with hints on how the instance should be launched. The
     * available hints are described below.
     */
    schedulerHints?: pulumi.Input<pulumi.Input<inputs.Ecs.InstanceSchedulerHint>[]>;
    /**
     * Specifies an array of one or more security group IDs to associate with the
     * instance.
     */
    securityGroupIds?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * An array of one or more security groups to associate with the instance.
     */
    securityGroups?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * Specifies the service duration of the spot ECS in hours.
     * The valid value is range from `1` to `6`.
     * This parameter takes effect only when `chargingMode` is set to *spot*.
     * Changing this creates a new instance.
     */
    spotDuration?: pulumi.Input<number>;
    /**
     * Specifies the number of time periods in the service duration.
     * This parameter takes effect only when `chargingMode` is set to *spot* and the default value is 1.
     * Changing this creates a new instance.
     */
    spotDurationCount?: pulumi.Input<number>;
    /**
     * Specifies the highest price per hour you accept for a spot ECS.
     * This parameter takes effect only when `chargingMode` is set to *spot*. If the price is not specified,
     * the pay-per-use price is used by default. Changing this creates a new instance.
     */
    spotMaximumPrice?: pulumi.Input<string>;
    /**
     * Specifies whether to try stop instance gracefully before destroying it, thus giving
     * chance for guest OS daemons to stop correctly. If instance doesn't stop within timeout, it will be destroyed anyway.
     */
    stopBeforeDestroy?: pulumi.Input<boolean>;
    /**
     * Specifies the system disk DSS pool ID. This field is used
     * only for dedicated storage. Changing this parameter will create a new resource.
     */
    systemDiskDssPoolId?: pulumi.Input<string>;
    /**
     * Specifies the IOPS(Input/Output Operations Per Second) for the disk.
     * The field is valid and required when `systemDiskType` is set to **GPSSD2** or **ESSD2**.
     */
    systemDiskIops?: pulumi.Input<number>;
    /**
     * Specifies the ID of a KMS key used to encrypt the system disk.
     * Changing this creates a new instance.
     */
    systemDiskKmsKeyId?: pulumi.Input<string>;
    /**
     * Specifies the system disk size in GB, The value range is 1 to 1024.
     * Shrinking the disk is not supported.
     */
    systemDiskSize?: pulumi.Input<number>;
    /**
     * Specifies the throughput for the disk. The Unit is MiB/s.
     * The field is valid and required when `systemDiskType` is set to **GPSSD2**.
     */
    systemDiskThroughput?: pulumi.Input<number>;
    /**
     * Specifies the system disk type of the instance. Defaults to `GPSSD`.
     * Changing this creates a new instance.
     */
    systemDiskType?: pulumi.Input<string>;
    /**
     * Specifies the key/value pairs to associate with the instance.
     */
    tags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Specifies the user data to be injected to the instance during the creation. Text
     * and text files can be injected. The content of `userData` can be plaint text or encoded with base64.
     */
    userData?: pulumi.Input<string>;
    /**
     * Specifies a user ID, required when using keyPair in prePaid charging mode.
     * Changing this creates a new instance.
     */
    userId?: pulumi.Input<string>;
}
