// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;

namespace Pulumi.AliCloud.Lindorm
{
    /// <summary>
    /// Provides a Lindorm Instance resource.
    /// 
    /// For information about Lindorm Instance and how to use it, see [What is Instance](https://www.alibabacloud.com/help/zh/doc-detail/174640.html).
    /// 
    /// &gt; **NOTE:** Available in v1.132.0+.
    /// 
    /// &gt; **NOTE:**  The Lindorm Instance does not support updating the specifications of multiple different engines or the number of nodes at the same time.
    /// 
    /// ## Import
    /// 
    /// Lindorm Instance can be imported using the id, e.g.
    /// 
    /// ```sh
    ///  $ pulumi import alicloud:lindorm/instance:Instance example &lt;id&gt;
    /// ```
    /// </summary>
    [AliCloudResourceType("alicloud:lindorm/instance:Instance")]
    public partial class Instance : global::Pulumi.CustomResource
    {
        /// <summary>
        /// The multi-availability zone instance, coordinating the virtual switch ID of the availability zone, the switch must be located under the availability zone corresponding to the ArbiterZoneId. This parameter is required if you need to create multiple availability zone instances.
        /// </summary>
        [Output("arbiterVswitchId")]
        public Output<string?> ArbiterVswitchId { get; private set; } = null!;

        /// <summary>
        /// The multiple Availability Zone Instance, the availability zone ID of the coordinating availability zone. required if you need to create multiple availability zone instances.
        /// </summary>
        [Output("arbiterZoneId")]
        public Output<string?> ArbiterZoneId { get; private set; } = null!;

        /// <summary>
        /// The deployment architecture. If you do not fill in this parameter, the default is 1.0. to create multiple availability instances, fill in 2.0. if you need to create multiple availability instances, this parameter is required. Valid values: `1.0` to `2.0`.
        /// </summary>
        [Output("archVersion")]
        public Output<string?> ArchVersion { get; private set; } = null!;

        /// <summary>
        /// The cold storage capacity of the instance. Unit: GB.
        /// </summary>
        [Output("coldStorage")]
        public Output<int> ColdStorage { get; private set; } = null!;

        /// <summary>
        /// The core num. **NOTE:** Field `core_num` has been deprecated from provider version 1.188.0 and it will be removed in the future version.
        /// </summary>
        [Output("coreNum")]
        public Output<int?> CoreNum { get; private set; } = null!;

        /// <summary>
        /// The multiple availability zone instances, CORE single node capacity. required if you want to create multiple availability zone instances. Valid values: `400` to `64000`.
        /// </summary>
        [Output("coreSingleStorage")]
        public Output<int?> CoreSingleStorage { get; private set; } = null!;

        /// <summary>
        /// The core spec. When `disk_category` is `local_ssd_pro` or `local_hdd_pro`, this filed is valid.
        /// - When `disk_category` is `local_ssd_pro`, the valid values is `lindorm.i2.xlarge`, `lindorm.i2.2xlarge`, `lindorm.i2.4xlarge`, `lindorm.i2.8xlarge`.
        /// - When `disk_category` is `local_hdd_pro`, the valid values is `lindorm.d2c.6xlarge`, `lindorm.d2c.12xlarge`, `lindorm.d2c.24xlarge`,
        /// `lindorm.d2s.5xlarge`, `lindorm.d2s.10xlarge`, `lindorm.d1.2xlarge`, `lindorm.d1.4xlarge`, `lindorm.d1.6xlarge`.
        /// </summary>
        [Output("coreSpec")]
        public Output<string> CoreSpec { get; private set; } = null!;

        /// <summary>
        /// The deletion protection of instance.
        /// </summary>
        [Output("deletionProection")]
        public Output<bool> DeletionProection { get; private set; } = null!;

        /// <summary>
        /// The disk type of instance. Valid values: `capacity_cloud_storage`, `cloud_efficiency`, `cloud_essd`, `cloud_ssd`, `local_ssd_pro`, `local_hdd_pro`.
        /// </summary>
        [Output("diskCategory")]
        public Output<string> DiskCategory { get; private set; } = null!;

        /// <summary>
        /// The duration of paid. Valid when the `payment_type` is `Subscription`.  When `pricing_cycle` set to `Month`, the valid value id `1` to `9`.  When `pricing_cycle` set to `Year`, the valid value id `1` to `3`.
        /// </summary>
        [Output("duration")]
        public Output<string?> Duration { get; private set; } = null!;

        /// <summary>
        /// (Available in v1.163.0+) Whether to enable file engine.
        /// </summary>
        [Output("enabledFileEngine")]
        public Output<bool> EnabledFileEngine { get; private set; } = null!;

        /// <summary>
        /// (Available in v1.163.0+) Whether to enable lts engine.
        /// </summary>
        [Output("enabledLtsEngine")]
        public Output<bool> EnabledLtsEngine { get; private set; } = null!;

        /// <summary>
        /// (Available in v1.163.0+) Whether to enable search engine.
        /// </summary>
        [Output("enabledSearchEngine")]
        public Output<bool> EnabledSearchEngine { get; private set; } = null!;

        /// <summary>
        /// (Available in v1.163.0+) Whether to enable table engine.
        /// </summary>
        [Output("enabledTableEngine")]
        public Output<bool> EnabledTableEngine { get; private set; } = null!;

        /// <summary>
        /// (Available in v1.163.0+) Whether to enable time serires engine.
        /// </summary>
        [Output("enabledTimeSeriresEngine")]
        public Output<bool> EnabledTimeSeriresEngine { get; private set; } = null!;

        /// <summary>
        /// The count of file engine.
        /// </summary>
        [Output("fileEngineNodeCount")]
        public Output<int> FileEngineNodeCount { get; private set; } = null!;

        /// <summary>
        /// The specification of file engine. Valid values: `lindorm.c.xlarge`.
        /// </summary>
        [Output("fileEngineSpecification")]
        public Output<string> FileEngineSpecification { get; private set; } = null!;

        /// <summary>
        /// The group name.
        /// </summary>
        [Output("groupName")]
        public Output<string?> GroupName { get; private set; } = null!;

        /// <summary>
        /// The name of the instance.
        /// </summary>
        [Output("instanceName")]
        public Output<string?> InstanceName { get; private set; } = null!;

        /// <summary>
        /// The storage capacity of the instance. Unit: GB. For example, the value 50 indicates 50 GB.
        /// </summary>
        [Output("instanceStorage")]
        public Output<string> InstanceStorage { get; private set; } = null!;

        /// <summary>
        /// The ip white list of instance.
        /// </summary>
        [Output("ipWhiteLists")]
        public Output<ImmutableArray<string>> IpWhiteLists { get; private set; } = null!;

        /// <summary>
        /// The multi-available zone instance, log node disk type. required if you need to create multiple availability zone instances. Valid values: `cloud_efficiency`, `cloud_ssd`.
        /// </summary>
        [Output("logDiskCategory")]
        public Output<string?> LogDiskCategory { get; private set; } = null!;

        /// <summary>
        /// The multiple Availability Zone Instance, number of log nodes. this parameter is required if you want to create multiple availability zone instances. Valid values: `4` to `400`.
        /// </summary>
        [Output("logNum")]
        public Output<int?> LogNum { get; private set; } = null!;

        /// <summary>
        /// The multi-availability instance, log single-node disk capacity. This parameter is required if you want to create multiple availability zone instances. Valid values: `400` to `64000`.
        /// </summary>
        [Output("logSingleStorage")]
        public Output<int?> LogSingleStorage { get; private set; } = null!;

        /// <summary>
        /// The multiple availability zone instances, log node specification. required if you need to create multiple availability zone instances. Valid values: `lindorm.sn1.large`, `lindorm.sn1.2xlarge`.
        /// </summary>
        [Output("logSpec")]
        public Output<string?> LogSpec { get; private set; } = null!;

        /// <summary>
        /// The count of lindorm tunnel service.
        /// </summary>
        [Output("ltsNodeCount")]
        public Output<int> LtsNodeCount { get; private set; } = null!;

        /// <summary>
        /// The specification of lindorm tunnel service. Valid values: `lindorm.g.2xlarge`, `lindorm.g.xlarge`.
        /// </summary>
        [Output("ltsNodeSpecification")]
        public Output<string> LtsNodeSpecification { get; private set; } = null!;

        /// <summary>
        /// The multi-zone combinations. Availability zone combinations are supported on the sale page. required if you need to create multiple availability zone instances. Valid values: `ap-southeast-5abc-aliyun`, `cn-hangzhou-ehi-aliyun`, `cn-beijing-acd-aliyun`, `ap-southeast-1-abc-aliyun`, `cn-zhangjiakou-abc-aliyun`, `cn-shanghai-efg-aliyun`, `cn-shanghai-abd-aliyun`, `cn-hangzhou-bef-aliyun`, `cn-hangzhou-bce-aliyun`, `cn-beijing-fgh-aliyun`, `cn-shenzhen-abc-aliyun`.
        /// </summary>
        [Output("multiZoneCombination")]
        public Output<string?> MultiZoneCombination { get; private set; } = null!;

        /// <summary>
        /// The billing method. Valid values: `PayAsYouGo` and `Subscription`.
        /// </summary>
        [Output("paymentType")]
        public Output<string> PaymentType { get; private set; } = null!;

        /// <summary>
        /// The count of phoenix.
        /// </summary>
        [Output("phoenixNodeCount")]
        public Output<int> PhoenixNodeCount { get; private set; } = null!;

        /// <summary>
        /// The specification of phoenix. Valid values: `lindorm.c.2xlarge`, `lindorm.c.4xlarge`, `lindorm.c.8xlarge`, `lindorm.c.xlarge`, `lindorm.g.2xlarge`, `lindorm.g.4xlarge`, `lindorm.g.8xlarge`, `lindorm.g.xlarge`.
        /// </summary>
        [Output("phoenixNodeSpecification")]
        public Output<string> PhoenixNodeSpecification { get; private set; } = null!;

        /// <summary>
        /// The pricing cycle. Valid when the `payment_type` is `Subscription`. Valid values: `Month` and `Year`.
        /// </summary>
        [Output("pricingCycle")]
        public Output<string?> PricingCycle { get; private set; } = null!;

        /// <summary>
        /// Multi-available zone instances, the virtual switch ID of the primary available zone, must be under the available zone corresponding to the PrimaryZoneId. required if you need to create multiple availability zone instances.
        /// </summary>
        [Output("primaryVswitchId")]
        public Output<string?> PrimaryVswitchId { get; private set; } = null!;

        /// <summary>
        /// Multi-availability zone instance with the availability zone ID of the main availability zone. required if you need to create multiple availability zone instances.
        /// </summary>
        [Output("primaryZoneId")]
        public Output<string?> PrimaryZoneId { get; private set; } = null!;

        /// <summary>
        /// The ID of the resource group.
        /// </summary>
        [Output("resourceGroupId")]
        public Output<string> ResourceGroupId { get; private set; } = null!;

        /// <summary>
        /// The count of search engine.
        /// </summary>
        [Output("searchEngineNodeCount")]
        public Output<int> SearchEngineNodeCount { get; private set; } = null!;

        /// <summary>
        /// The specification of search engine. Valid values: `lindorm.g.2xlarge`, `lindorm.g.4xlarge`, `lindorm.g.8xlarge`, `lindorm.g.xlarge`.
        /// </summary>
        [Output("searchEngineSpecification")]
        public Output<string> SearchEngineSpecification { get; private set; } = null!;

        /// <summary>
        /// (Available in v1.196.0+) The instance type. Valid values: `lindorm`, `lindorm_multizone`, `serverless_lindorm`, `lindorm_standalone`, `lts`.
        /// </summary>
        [Output("serviceType")]
        public Output<string> ServiceType { get; private set; } = null!;

        /// <summary>
        /// The multiple availability zone instances, the virtual switch ID of the ready availability zone must be under the availability zone corresponding to the StandbyZoneId. required if you need to create multiple availability zone instances.
        /// </summary>
        [Output("standbyVswitchId")]
        public Output<string?> StandbyVswitchId { get; private set; } = null!;

        /// <summary>
        /// The multiple availability zone instances with availability zone IDs for the prepared availability zones. required if you need to create multiple availability zone instances.
        /// </summary>
        [Output("standbyZoneId")]
        public Output<string?> StandbyZoneId { get; private set; } = null!;

        /// <summary>
        /// The status of Instance, enumerative: Valid values: `ACTIVATION`, `DELETED`, `CREATING`, `CLASS_CHANGING`, `LOCKED`, `INSTANCE_LEVEL_MODIFY`, `NET_MODIFYING`, `RESIZING`, `RESTARTING`, `MINOR_VERSION_TRANSING`.
        /// </summary>
        [Output("status")]
        public Output<string> Status { get; private set; } = null!;

        /// <summary>
        /// The count of table engine.
        /// </summary>
        [Output("tableEngineNodeCount")]
        public Output<int> TableEngineNodeCount { get; private set; } = null!;

        /// <summary>
        /// The specification of  table engine. Valid values: 
        /// `lindorm.c.2xlarge`, `lindorm.c.4xlarge`, `lindorm.c.8xlarge`, `lindorm.g.xlarge`, `lindorm.g.2xlarge`, `lindorm.g.4xlarge`, `lindorm.g.8xlarge`.
        /// </summary>
        [Output("tableEngineSpecification")]
        public Output<string> TableEngineSpecification { get; private set; } = null!;

        /// <summary>
        /// A mapping of tags to assign to the resource.
        /// </summary>
        [Output("tags")]
        public Output<ImmutableDictionary<string, object>?> Tags { get; private set; } = null!;

        /// <summary>
        /// The count of time series engine.
        /// </summary>
        [Output("timeSeriesEngineNodeCount")]
        public Output<int> TimeSeriesEngineNodeCount { get; private set; } = null!;

        /// <summary>
        /// The specification of time series engine. 
        /// Valid values: `lindorm.g.xlarge`, `lindorm.g.2xlarge`, `lindorm.g.4xlarge`, `lindorm.g.8xlarge`, `lindorm.r.8xlarge`.
        /// </summary>
        [Output("timeSeriesEngineSpecification")]
        public Output<string> TimeSeriesEngineSpecification { get; private set; } = null!;

        /// <summary>
        /// Field `time_serires_engine_specification` has been deprecated from provider version 1.182.0. New field `time_series_engine_specification` instead.
        /// </summary>
        [Output("timeSeriresEngineSpecification")]
        public Output<string> TimeSeriresEngineSpecification { get; private set; } = null!;

        /// <summary>
        /// The upgrade type. **NOTE:** Field 'upgrade_type' has been deprecated from provider version 1.163.0,
        /// and it will be removed in the future version. Valid values:  `open-lindorm-engine`, `open-phoenix-engine`, `open-search-engine`, `open-tsdb-engine`,  `upgrade-cold-storage`, `upgrade-disk-size`,  `upgrade-lindorm-core-num`, `upgrade-lindorm-engine`,  `upgrade-search-core-num`, `upgrade-search-engine`, `upgrade-tsdb-core-num`, `upgrade-tsdb-engine`.
        /// </summary>
        [Output("upgradeType")]
        public Output<string?> UpgradeType { get; private set; } = null!;

        /// <summary>
        /// The VPC ID of the instance.
        /// </summary>
        [Output("vpcId")]
        public Output<string> VpcId { get; private set; } = null!;

        /// <summary>
        /// The vswitch id.
        /// </summary>
        [Output("vswitchId")]
        public Output<string> VswitchId { get; private set; } = null!;

        /// <summary>
        /// The zone ID of the instance.
        /// </summary>
        [Output("zoneId")]
        public Output<string> ZoneId { get; private set; } = null!;


        /// <summary>
        /// Create a Instance resource with the given unique name, arguments, and options.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resource</param>
        /// <param name="args">The arguments used to populate this resource's properties</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public Instance(string name, InstanceArgs args, CustomResourceOptions? options = null)
            : base("alicloud:lindorm/instance:Instance", name, args ?? new InstanceArgs(), MakeResourceOptions(options, ""))
        {
        }

        private Instance(string name, Input<string> id, InstanceState? state = null, CustomResourceOptions? options = null)
            : base("alicloud:lindorm/instance:Instance", name, state, MakeResourceOptions(options, id))
        {
        }

        private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new CustomResourceOptions
            {
                Version = Utilities.Version,
                PluginDownloadURL = "github://api.github.com/rhysmdnz/pulumi-alicloud",
            };
            var merged = CustomResourceOptions.Merge(defaultOptions, options);
            // Override the ID if one was specified for consistency with other language SDKs.
            merged.Id = id ?? merged.Id;
            return merged;
        }
        /// <summary>
        /// Get an existing Instance resource's state with the given name, ID, and optional extra
        /// properties used to qualify the lookup.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resulting resource.</param>
        /// <param name="id">The unique provider ID of the resource to lookup.</param>
        /// <param name="state">Any extra arguments used during the lookup.</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public static Instance Get(string name, Input<string> id, InstanceState? state = null, CustomResourceOptions? options = null)
        {
            return new Instance(name, id, state, options);
        }
    }

    public sealed class InstanceArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// The multi-availability zone instance, coordinating the virtual switch ID of the availability zone, the switch must be located under the availability zone corresponding to the ArbiterZoneId. This parameter is required if you need to create multiple availability zone instances.
        /// </summary>
        [Input("arbiterVswitchId")]
        public Input<string>? ArbiterVswitchId { get; set; }

        /// <summary>
        /// The multiple Availability Zone Instance, the availability zone ID of the coordinating availability zone. required if you need to create multiple availability zone instances.
        /// </summary>
        [Input("arbiterZoneId")]
        public Input<string>? ArbiterZoneId { get; set; }

        /// <summary>
        /// The deployment architecture. If you do not fill in this parameter, the default is 1.0. to create multiple availability instances, fill in 2.0. if you need to create multiple availability instances, this parameter is required. Valid values: `1.0` to `2.0`.
        /// </summary>
        [Input("archVersion")]
        public Input<string>? ArchVersion { get; set; }

        /// <summary>
        /// The cold storage capacity of the instance. Unit: GB.
        /// </summary>
        [Input("coldStorage")]
        public Input<int>? ColdStorage { get; set; }

        /// <summary>
        /// The core num. **NOTE:** Field `core_num` has been deprecated from provider version 1.188.0 and it will be removed in the future version.
        /// </summary>
        [Input("coreNum")]
        public Input<int>? CoreNum { get; set; }

        /// <summary>
        /// The multiple availability zone instances, CORE single node capacity. required if you want to create multiple availability zone instances. Valid values: `400` to `64000`.
        /// </summary>
        [Input("coreSingleStorage")]
        public Input<int>? CoreSingleStorage { get; set; }

        /// <summary>
        /// The core spec. When `disk_category` is `local_ssd_pro` or `local_hdd_pro`, this filed is valid.
        /// - When `disk_category` is `local_ssd_pro`, the valid values is `lindorm.i2.xlarge`, `lindorm.i2.2xlarge`, `lindorm.i2.4xlarge`, `lindorm.i2.8xlarge`.
        /// - When `disk_category` is `local_hdd_pro`, the valid values is `lindorm.d2c.6xlarge`, `lindorm.d2c.12xlarge`, `lindorm.d2c.24xlarge`,
        /// `lindorm.d2s.5xlarge`, `lindorm.d2s.10xlarge`, `lindorm.d1.2xlarge`, `lindorm.d1.4xlarge`, `lindorm.d1.6xlarge`.
        /// </summary>
        [Input("coreSpec")]
        public Input<string>? CoreSpec { get; set; }

        /// <summary>
        /// The deletion protection of instance.
        /// </summary>
        [Input("deletionProection")]
        public Input<bool>? DeletionProection { get; set; }

        /// <summary>
        /// The disk type of instance. Valid values: `capacity_cloud_storage`, `cloud_efficiency`, `cloud_essd`, `cloud_ssd`, `local_ssd_pro`, `local_hdd_pro`.
        /// </summary>
        [Input("diskCategory", required: true)]
        public Input<string> DiskCategory { get; set; } = null!;

        /// <summary>
        /// The duration of paid. Valid when the `payment_type` is `Subscription`.  When `pricing_cycle` set to `Month`, the valid value id `1` to `9`.  When `pricing_cycle` set to `Year`, the valid value id `1` to `3`.
        /// </summary>
        [Input("duration")]
        public Input<string>? Duration { get; set; }

        /// <summary>
        /// The count of file engine.
        /// </summary>
        [Input("fileEngineNodeCount")]
        public Input<int>? FileEngineNodeCount { get; set; }

        /// <summary>
        /// The specification of file engine. Valid values: `lindorm.c.xlarge`.
        /// </summary>
        [Input("fileEngineSpecification")]
        public Input<string>? FileEngineSpecification { get; set; }

        /// <summary>
        /// The group name.
        /// </summary>
        [Input("groupName")]
        public Input<string>? GroupName { get; set; }

        /// <summary>
        /// The name of the instance.
        /// </summary>
        [Input("instanceName")]
        public Input<string>? InstanceName { get; set; }

        /// <summary>
        /// The storage capacity of the instance. Unit: GB. For example, the value 50 indicates 50 GB.
        /// </summary>
        [Input("instanceStorage")]
        public Input<string>? InstanceStorage { get; set; }

        [Input("ipWhiteLists")]
        private InputList<string>? _ipWhiteLists;

        /// <summary>
        /// The ip white list of instance.
        /// </summary>
        public InputList<string> IpWhiteLists
        {
            get => _ipWhiteLists ?? (_ipWhiteLists = new InputList<string>());
            set => _ipWhiteLists = value;
        }

        /// <summary>
        /// The multi-available zone instance, log node disk type. required if you need to create multiple availability zone instances. Valid values: `cloud_efficiency`, `cloud_ssd`.
        /// </summary>
        [Input("logDiskCategory")]
        public Input<string>? LogDiskCategory { get; set; }

        /// <summary>
        /// The multiple Availability Zone Instance, number of log nodes. this parameter is required if you want to create multiple availability zone instances. Valid values: `4` to `400`.
        /// </summary>
        [Input("logNum")]
        public Input<int>? LogNum { get; set; }

        /// <summary>
        /// The multi-availability instance, log single-node disk capacity. This parameter is required if you want to create multiple availability zone instances. Valid values: `400` to `64000`.
        /// </summary>
        [Input("logSingleStorage")]
        public Input<int>? LogSingleStorage { get; set; }

        /// <summary>
        /// The multiple availability zone instances, log node specification. required if you need to create multiple availability zone instances. Valid values: `lindorm.sn1.large`, `lindorm.sn1.2xlarge`.
        /// </summary>
        [Input("logSpec")]
        public Input<string>? LogSpec { get; set; }

        /// <summary>
        /// The count of lindorm tunnel service.
        /// </summary>
        [Input("ltsNodeCount")]
        public Input<int>? LtsNodeCount { get; set; }

        /// <summary>
        /// The specification of lindorm tunnel service. Valid values: `lindorm.g.2xlarge`, `lindorm.g.xlarge`.
        /// </summary>
        [Input("ltsNodeSpecification")]
        public Input<string>? LtsNodeSpecification { get; set; }

        /// <summary>
        /// The multi-zone combinations. Availability zone combinations are supported on the sale page. required if you need to create multiple availability zone instances. Valid values: `ap-southeast-5abc-aliyun`, `cn-hangzhou-ehi-aliyun`, `cn-beijing-acd-aliyun`, `ap-southeast-1-abc-aliyun`, `cn-zhangjiakou-abc-aliyun`, `cn-shanghai-efg-aliyun`, `cn-shanghai-abd-aliyun`, `cn-hangzhou-bef-aliyun`, `cn-hangzhou-bce-aliyun`, `cn-beijing-fgh-aliyun`, `cn-shenzhen-abc-aliyun`.
        /// </summary>
        [Input("multiZoneCombination")]
        public Input<string>? MultiZoneCombination { get; set; }

        /// <summary>
        /// The billing method. Valid values: `PayAsYouGo` and `Subscription`.
        /// </summary>
        [Input("paymentType", required: true)]
        public Input<string> PaymentType { get; set; } = null!;

        /// <summary>
        /// The count of phoenix.
        /// </summary>
        [Input("phoenixNodeCount")]
        public Input<int>? PhoenixNodeCount { get; set; }

        /// <summary>
        /// The specification of phoenix. Valid values: `lindorm.c.2xlarge`, `lindorm.c.4xlarge`, `lindorm.c.8xlarge`, `lindorm.c.xlarge`, `lindorm.g.2xlarge`, `lindorm.g.4xlarge`, `lindorm.g.8xlarge`, `lindorm.g.xlarge`.
        /// </summary>
        [Input("phoenixNodeSpecification")]
        public Input<string>? PhoenixNodeSpecification { get; set; }

        /// <summary>
        /// The pricing cycle. Valid when the `payment_type` is `Subscription`. Valid values: `Month` and `Year`.
        /// </summary>
        [Input("pricingCycle")]
        public Input<string>? PricingCycle { get; set; }

        /// <summary>
        /// Multi-available zone instances, the virtual switch ID of the primary available zone, must be under the available zone corresponding to the PrimaryZoneId. required if you need to create multiple availability zone instances.
        /// </summary>
        [Input("primaryVswitchId")]
        public Input<string>? PrimaryVswitchId { get; set; }

        /// <summary>
        /// Multi-availability zone instance with the availability zone ID of the main availability zone. required if you need to create multiple availability zone instances.
        /// </summary>
        [Input("primaryZoneId")]
        public Input<string>? PrimaryZoneId { get; set; }

        /// <summary>
        /// The ID of the resource group.
        /// </summary>
        [Input("resourceGroupId")]
        public Input<string>? ResourceGroupId { get; set; }

        /// <summary>
        /// The count of search engine.
        /// </summary>
        [Input("searchEngineNodeCount")]
        public Input<int>? SearchEngineNodeCount { get; set; }

        /// <summary>
        /// The specification of search engine. Valid values: `lindorm.g.2xlarge`, `lindorm.g.4xlarge`, `lindorm.g.8xlarge`, `lindorm.g.xlarge`.
        /// </summary>
        [Input("searchEngineSpecification")]
        public Input<string>? SearchEngineSpecification { get; set; }

        /// <summary>
        /// The multiple availability zone instances, the virtual switch ID of the ready availability zone must be under the availability zone corresponding to the StandbyZoneId. required if you need to create multiple availability zone instances.
        /// </summary>
        [Input("standbyVswitchId")]
        public Input<string>? StandbyVswitchId { get; set; }

        /// <summary>
        /// The multiple availability zone instances with availability zone IDs for the prepared availability zones. required if you need to create multiple availability zone instances.
        /// </summary>
        [Input("standbyZoneId")]
        public Input<string>? StandbyZoneId { get; set; }

        /// <summary>
        /// The count of table engine.
        /// </summary>
        [Input("tableEngineNodeCount")]
        public Input<int>? TableEngineNodeCount { get; set; }

        /// <summary>
        /// The specification of  table engine. Valid values: 
        /// `lindorm.c.2xlarge`, `lindorm.c.4xlarge`, `lindorm.c.8xlarge`, `lindorm.g.xlarge`, `lindorm.g.2xlarge`, `lindorm.g.4xlarge`, `lindorm.g.8xlarge`.
        /// </summary>
        [Input("tableEngineSpecification")]
        public Input<string>? TableEngineSpecification { get; set; }

        [Input("tags")]
        private InputMap<object>? _tags;

        /// <summary>
        /// A mapping of tags to assign to the resource.
        /// </summary>
        public InputMap<object> Tags
        {
            get => _tags ?? (_tags = new InputMap<object>());
            set => _tags = value;
        }

        /// <summary>
        /// The count of time series engine.
        /// </summary>
        [Input("timeSeriesEngineNodeCount")]
        public Input<int>? TimeSeriesEngineNodeCount { get; set; }

        /// <summary>
        /// The specification of time series engine. 
        /// Valid values: `lindorm.g.xlarge`, `lindorm.g.2xlarge`, `lindorm.g.4xlarge`, `lindorm.g.8xlarge`, `lindorm.r.8xlarge`.
        /// </summary>
        [Input("timeSeriesEngineSpecification")]
        public Input<string>? TimeSeriesEngineSpecification { get; set; }

        /// <summary>
        /// Field `time_serires_engine_specification` has been deprecated from provider version 1.182.0. New field `time_series_engine_specification` instead.
        /// </summary>
        [Input("timeSeriresEngineSpecification")]
        public Input<string>? TimeSeriresEngineSpecification { get; set; }

        /// <summary>
        /// The upgrade type. **NOTE:** Field 'upgrade_type' has been deprecated from provider version 1.163.0,
        /// and it will be removed in the future version. Valid values:  `open-lindorm-engine`, `open-phoenix-engine`, `open-search-engine`, `open-tsdb-engine`,  `upgrade-cold-storage`, `upgrade-disk-size`,  `upgrade-lindorm-core-num`, `upgrade-lindorm-engine`,  `upgrade-search-core-num`, `upgrade-search-engine`, `upgrade-tsdb-core-num`, `upgrade-tsdb-engine`.
        /// </summary>
        [Input("upgradeType")]
        public Input<string>? UpgradeType { get; set; }

        /// <summary>
        /// The VPC ID of the instance.
        /// </summary>
        [Input("vpcId")]
        public Input<string>? VpcId { get; set; }

        /// <summary>
        /// The vswitch id.
        /// </summary>
        [Input("vswitchId", required: true)]
        public Input<string> VswitchId { get; set; } = null!;

        /// <summary>
        /// The zone ID of the instance.
        /// </summary>
        [Input("zoneId")]
        public Input<string>? ZoneId { get; set; }

        public InstanceArgs()
        {
        }
        public static new InstanceArgs Empty => new InstanceArgs();
    }

    public sealed class InstanceState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// The multi-availability zone instance, coordinating the virtual switch ID of the availability zone, the switch must be located under the availability zone corresponding to the ArbiterZoneId. This parameter is required if you need to create multiple availability zone instances.
        /// </summary>
        [Input("arbiterVswitchId")]
        public Input<string>? ArbiterVswitchId { get; set; }

        /// <summary>
        /// The multiple Availability Zone Instance, the availability zone ID of the coordinating availability zone. required if you need to create multiple availability zone instances.
        /// </summary>
        [Input("arbiterZoneId")]
        public Input<string>? ArbiterZoneId { get; set; }

        /// <summary>
        /// The deployment architecture. If you do not fill in this parameter, the default is 1.0. to create multiple availability instances, fill in 2.0. if you need to create multiple availability instances, this parameter is required. Valid values: `1.0` to `2.0`.
        /// </summary>
        [Input("archVersion")]
        public Input<string>? ArchVersion { get; set; }

        /// <summary>
        /// The cold storage capacity of the instance. Unit: GB.
        /// </summary>
        [Input("coldStorage")]
        public Input<int>? ColdStorage { get; set; }

        /// <summary>
        /// The core num. **NOTE:** Field `core_num` has been deprecated from provider version 1.188.0 and it will be removed in the future version.
        /// </summary>
        [Input("coreNum")]
        public Input<int>? CoreNum { get; set; }

        /// <summary>
        /// The multiple availability zone instances, CORE single node capacity. required if you want to create multiple availability zone instances. Valid values: `400` to `64000`.
        /// </summary>
        [Input("coreSingleStorage")]
        public Input<int>? CoreSingleStorage { get; set; }

        /// <summary>
        /// The core spec. When `disk_category` is `local_ssd_pro` or `local_hdd_pro`, this filed is valid.
        /// - When `disk_category` is `local_ssd_pro`, the valid values is `lindorm.i2.xlarge`, `lindorm.i2.2xlarge`, `lindorm.i2.4xlarge`, `lindorm.i2.8xlarge`.
        /// - When `disk_category` is `local_hdd_pro`, the valid values is `lindorm.d2c.6xlarge`, `lindorm.d2c.12xlarge`, `lindorm.d2c.24xlarge`,
        /// `lindorm.d2s.5xlarge`, `lindorm.d2s.10xlarge`, `lindorm.d1.2xlarge`, `lindorm.d1.4xlarge`, `lindorm.d1.6xlarge`.
        /// </summary>
        [Input("coreSpec")]
        public Input<string>? CoreSpec { get; set; }

        /// <summary>
        /// The deletion protection of instance.
        /// </summary>
        [Input("deletionProection")]
        public Input<bool>? DeletionProection { get; set; }

        /// <summary>
        /// The disk type of instance. Valid values: `capacity_cloud_storage`, `cloud_efficiency`, `cloud_essd`, `cloud_ssd`, `local_ssd_pro`, `local_hdd_pro`.
        /// </summary>
        [Input("diskCategory")]
        public Input<string>? DiskCategory { get; set; }

        /// <summary>
        /// The duration of paid. Valid when the `payment_type` is `Subscription`.  When `pricing_cycle` set to `Month`, the valid value id `1` to `9`.  When `pricing_cycle` set to `Year`, the valid value id `1` to `3`.
        /// </summary>
        [Input("duration")]
        public Input<string>? Duration { get; set; }

        /// <summary>
        /// (Available in v1.163.0+) Whether to enable file engine.
        /// </summary>
        [Input("enabledFileEngine")]
        public Input<bool>? EnabledFileEngine { get; set; }

        /// <summary>
        /// (Available in v1.163.0+) Whether to enable lts engine.
        /// </summary>
        [Input("enabledLtsEngine")]
        public Input<bool>? EnabledLtsEngine { get; set; }

        /// <summary>
        /// (Available in v1.163.0+) Whether to enable search engine.
        /// </summary>
        [Input("enabledSearchEngine")]
        public Input<bool>? EnabledSearchEngine { get; set; }

        /// <summary>
        /// (Available in v1.163.0+) Whether to enable table engine.
        /// </summary>
        [Input("enabledTableEngine")]
        public Input<bool>? EnabledTableEngine { get; set; }

        /// <summary>
        /// (Available in v1.163.0+) Whether to enable time serires engine.
        /// </summary>
        [Input("enabledTimeSeriresEngine")]
        public Input<bool>? EnabledTimeSeriresEngine { get; set; }

        /// <summary>
        /// The count of file engine.
        /// </summary>
        [Input("fileEngineNodeCount")]
        public Input<int>? FileEngineNodeCount { get; set; }

        /// <summary>
        /// The specification of file engine. Valid values: `lindorm.c.xlarge`.
        /// </summary>
        [Input("fileEngineSpecification")]
        public Input<string>? FileEngineSpecification { get; set; }

        /// <summary>
        /// The group name.
        /// </summary>
        [Input("groupName")]
        public Input<string>? GroupName { get; set; }

        /// <summary>
        /// The name of the instance.
        /// </summary>
        [Input("instanceName")]
        public Input<string>? InstanceName { get; set; }

        /// <summary>
        /// The storage capacity of the instance. Unit: GB. For example, the value 50 indicates 50 GB.
        /// </summary>
        [Input("instanceStorage")]
        public Input<string>? InstanceStorage { get; set; }

        [Input("ipWhiteLists")]
        private InputList<string>? _ipWhiteLists;

        /// <summary>
        /// The ip white list of instance.
        /// </summary>
        public InputList<string> IpWhiteLists
        {
            get => _ipWhiteLists ?? (_ipWhiteLists = new InputList<string>());
            set => _ipWhiteLists = value;
        }

        /// <summary>
        /// The multi-available zone instance, log node disk type. required if you need to create multiple availability zone instances. Valid values: `cloud_efficiency`, `cloud_ssd`.
        /// </summary>
        [Input("logDiskCategory")]
        public Input<string>? LogDiskCategory { get; set; }

        /// <summary>
        /// The multiple Availability Zone Instance, number of log nodes. this parameter is required if you want to create multiple availability zone instances. Valid values: `4` to `400`.
        /// </summary>
        [Input("logNum")]
        public Input<int>? LogNum { get; set; }

        /// <summary>
        /// The multi-availability instance, log single-node disk capacity. This parameter is required if you want to create multiple availability zone instances. Valid values: `400` to `64000`.
        /// </summary>
        [Input("logSingleStorage")]
        public Input<int>? LogSingleStorage { get; set; }

        /// <summary>
        /// The multiple availability zone instances, log node specification. required if you need to create multiple availability zone instances. Valid values: `lindorm.sn1.large`, `lindorm.sn1.2xlarge`.
        /// </summary>
        [Input("logSpec")]
        public Input<string>? LogSpec { get; set; }

        /// <summary>
        /// The count of lindorm tunnel service.
        /// </summary>
        [Input("ltsNodeCount")]
        public Input<int>? LtsNodeCount { get; set; }

        /// <summary>
        /// The specification of lindorm tunnel service. Valid values: `lindorm.g.2xlarge`, `lindorm.g.xlarge`.
        /// </summary>
        [Input("ltsNodeSpecification")]
        public Input<string>? LtsNodeSpecification { get; set; }

        /// <summary>
        /// The multi-zone combinations. Availability zone combinations are supported on the sale page. required if you need to create multiple availability zone instances. Valid values: `ap-southeast-5abc-aliyun`, `cn-hangzhou-ehi-aliyun`, `cn-beijing-acd-aliyun`, `ap-southeast-1-abc-aliyun`, `cn-zhangjiakou-abc-aliyun`, `cn-shanghai-efg-aliyun`, `cn-shanghai-abd-aliyun`, `cn-hangzhou-bef-aliyun`, `cn-hangzhou-bce-aliyun`, `cn-beijing-fgh-aliyun`, `cn-shenzhen-abc-aliyun`.
        /// </summary>
        [Input("multiZoneCombination")]
        public Input<string>? MultiZoneCombination { get; set; }

        /// <summary>
        /// The billing method. Valid values: `PayAsYouGo` and `Subscription`.
        /// </summary>
        [Input("paymentType")]
        public Input<string>? PaymentType { get; set; }

        /// <summary>
        /// The count of phoenix.
        /// </summary>
        [Input("phoenixNodeCount")]
        public Input<int>? PhoenixNodeCount { get; set; }

        /// <summary>
        /// The specification of phoenix. Valid values: `lindorm.c.2xlarge`, `lindorm.c.4xlarge`, `lindorm.c.8xlarge`, `lindorm.c.xlarge`, `lindorm.g.2xlarge`, `lindorm.g.4xlarge`, `lindorm.g.8xlarge`, `lindorm.g.xlarge`.
        /// </summary>
        [Input("phoenixNodeSpecification")]
        public Input<string>? PhoenixNodeSpecification { get; set; }

        /// <summary>
        /// The pricing cycle. Valid when the `payment_type` is `Subscription`. Valid values: `Month` and `Year`.
        /// </summary>
        [Input("pricingCycle")]
        public Input<string>? PricingCycle { get; set; }

        /// <summary>
        /// Multi-available zone instances, the virtual switch ID of the primary available zone, must be under the available zone corresponding to the PrimaryZoneId. required if you need to create multiple availability zone instances.
        /// </summary>
        [Input("primaryVswitchId")]
        public Input<string>? PrimaryVswitchId { get; set; }

        /// <summary>
        /// Multi-availability zone instance with the availability zone ID of the main availability zone. required if you need to create multiple availability zone instances.
        /// </summary>
        [Input("primaryZoneId")]
        public Input<string>? PrimaryZoneId { get; set; }

        /// <summary>
        /// The ID of the resource group.
        /// </summary>
        [Input("resourceGroupId")]
        public Input<string>? ResourceGroupId { get; set; }

        /// <summary>
        /// The count of search engine.
        /// </summary>
        [Input("searchEngineNodeCount")]
        public Input<int>? SearchEngineNodeCount { get; set; }

        /// <summary>
        /// The specification of search engine. Valid values: `lindorm.g.2xlarge`, `lindorm.g.4xlarge`, `lindorm.g.8xlarge`, `lindorm.g.xlarge`.
        /// </summary>
        [Input("searchEngineSpecification")]
        public Input<string>? SearchEngineSpecification { get; set; }

        /// <summary>
        /// (Available in v1.196.0+) The instance type. Valid values: `lindorm`, `lindorm_multizone`, `serverless_lindorm`, `lindorm_standalone`, `lts`.
        /// </summary>
        [Input("serviceType")]
        public Input<string>? ServiceType { get; set; }

        /// <summary>
        /// The multiple availability zone instances, the virtual switch ID of the ready availability zone must be under the availability zone corresponding to the StandbyZoneId. required if you need to create multiple availability zone instances.
        /// </summary>
        [Input("standbyVswitchId")]
        public Input<string>? StandbyVswitchId { get; set; }

        /// <summary>
        /// The multiple availability zone instances with availability zone IDs for the prepared availability zones. required if you need to create multiple availability zone instances.
        /// </summary>
        [Input("standbyZoneId")]
        public Input<string>? StandbyZoneId { get; set; }

        /// <summary>
        /// The status of Instance, enumerative: Valid values: `ACTIVATION`, `DELETED`, `CREATING`, `CLASS_CHANGING`, `LOCKED`, `INSTANCE_LEVEL_MODIFY`, `NET_MODIFYING`, `RESIZING`, `RESTARTING`, `MINOR_VERSION_TRANSING`.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        /// <summary>
        /// The count of table engine.
        /// </summary>
        [Input("tableEngineNodeCount")]
        public Input<int>? TableEngineNodeCount { get; set; }

        /// <summary>
        /// The specification of  table engine. Valid values: 
        /// `lindorm.c.2xlarge`, `lindorm.c.4xlarge`, `lindorm.c.8xlarge`, `lindorm.g.xlarge`, `lindorm.g.2xlarge`, `lindorm.g.4xlarge`, `lindorm.g.8xlarge`.
        /// </summary>
        [Input("tableEngineSpecification")]
        public Input<string>? TableEngineSpecification { get; set; }

        [Input("tags")]
        private InputMap<object>? _tags;

        /// <summary>
        /// A mapping of tags to assign to the resource.
        /// </summary>
        public InputMap<object> Tags
        {
            get => _tags ?? (_tags = new InputMap<object>());
            set => _tags = value;
        }

        /// <summary>
        /// The count of time series engine.
        /// </summary>
        [Input("timeSeriesEngineNodeCount")]
        public Input<int>? TimeSeriesEngineNodeCount { get; set; }

        /// <summary>
        /// The specification of time series engine. 
        /// Valid values: `lindorm.g.xlarge`, `lindorm.g.2xlarge`, `lindorm.g.4xlarge`, `lindorm.g.8xlarge`, `lindorm.r.8xlarge`.
        /// </summary>
        [Input("timeSeriesEngineSpecification")]
        public Input<string>? TimeSeriesEngineSpecification { get; set; }

        /// <summary>
        /// Field `time_serires_engine_specification` has been deprecated from provider version 1.182.0. New field `time_series_engine_specification` instead.
        /// </summary>
        [Input("timeSeriresEngineSpecification")]
        public Input<string>? TimeSeriresEngineSpecification { get; set; }

        /// <summary>
        /// The upgrade type. **NOTE:** Field 'upgrade_type' has been deprecated from provider version 1.163.0,
        /// and it will be removed in the future version. Valid values:  `open-lindorm-engine`, `open-phoenix-engine`, `open-search-engine`, `open-tsdb-engine`,  `upgrade-cold-storage`, `upgrade-disk-size`,  `upgrade-lindorm-core-num`, `upgrade-lindorm-engine`,  `upgrade-search-core-num`, `upgrade-search-engine`, `upgrade-tsdb-core-num`, `upgrade-tsdb-engine`.
        /// </summary>
        [Input("upgradeType")]
        public Input<string>? UpgradeType { get; set; }

        /// <summary>
        /// The VPC ID of the instance.
        /// </summary>
        [Input("vpcId")]
        public Input<string>? VpcId { get; set; }

        /// <summary>
        /// The vswitch id.
        /// </summary>
        [Input("vswitchId")]
        public Input<string>? VswitchId { get; set; }

        /// <summary>
        /// The zone ID of the instance.
        /// </summary>
        [Input("zoneId")]
        public Input<string>? ZoneId { get; set; }

        public InstanceState()
        {
        }
        public static new InstanceState Empty => new InstanceState();
    }
}
