// *** 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.Ehpc
{
    /// <summary>
    /// Provides a Ehpc Cluster resource.
    /// 
    /// For information about Ehpc Cluster and how to use it, see [What is Cluster](https://www.alibabacloud.com/help/e-hpc/latest/createcluster).
    /// 
    /// &gt; **NOTE:** Available in v1.173.0+.
    /// 
    /// ## Example Usage
    /// 
    /// Basic Usage
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var defaultZones = AliCloud.GetZones.Invoke(new()
    ///     {
    ///         AvailableResourceCreation = "VSwitch",
    ///     });
    /// 
    ///     var defaultNetworks = AliCloud.Vpc.GetNetworks.Invoke(new()
    ///     {
    ///         NameRegex = "default-NODELETING",
    ///     });
    /// 
    ///     var defaultSwitches = AliCloud.Vpc.GetSwitches.Invoke(new()
    ///     {
    ///         VpcId = defaultNetworks.Apply(getNetworksResult =&gt; getNetworksResult.Ids[0]),
    ///         ZoneId = defaultZones.Apply(getZonesResult =&gt; getZonesResult.Zones[0]?.Id),
    ///     });
    /// 
    ///     var defaultInstanceTypes = AliCloud.Ecs.GetInstanceTypes.Invoke(new()
    ///     {
    ///         AvailabilityZone = defaultZones.Apply(getZonesResult =&gt; getZonesResult.Zones[0]?.Id),
    ///     });
    /// 
    ///     var config = new Config();
    ///     var storageType = config.Get("storageType") ?? "Performance";
    ///     var defaultFileSystem = new AliCloud.Nas.FileSystem("defaultFileSystem", new()
    ///     {
    ///         StorageType = storageType,
    ///         ProtocolType = "NFS",
    ///     });
    /// 
    ///     var defaultMountTarget = new AliCloud.Nas.MountTarget("defaultMountTarget", new()
    ///     {
    ///         FileSystemId = defaultFileSystem.Id,
    ///         AccessGroupName = "DEFAULT_VPC_GROUP_NAME",
    ///         VswitchId = defaultSwitches.Apply(getSwitchesResult =&gt; getSwitchesResult.Ids[0]),
    ///     });
    /// 
    ///     var defaultImages = AliCloud.Ecs.GetImages.Invoke(new()
    ///     {
    ///         NameRegex = "^centos_7_6_x64*",
    ///         Owners = "system",
    ///     });
    /// 
    ///     var defaultCluster = new AliCloud.Ehpc.Cluster("defaultCluster", new()
    ///     {
    ///         ClusterName = "example_value",
    ///         DeployMode = "Simple",
    ///         Description = "example_description",
    ///         HaEnable = false,
    ///         ImageId = defaultImages.Apply(getImagesResult =&gt; getImagesResult.Images[0]?.Id),
    ///         ImageOwnerAlias = "system",
    ///         VolumeProtocol = "nfs",
    ///         VolumeId = defaultFileSystem.Id,
    ///         VolumeMountpoint = defaultMountTarget.MountTargetDomain,
    ///         ComputeCount = 1,
    ///         ComputeInstanceType = defaultInstanceTypes.Apply(getInstanceTypesResult =&gt; getInstanceTypesResult.InstanceTypes[0]?.Id),
    ///         LoginCount = 1,
    ///         LoginInstanceType = defaultInstanceTypes.Apply(getInstanceTypesResult =&gt; getInstanceTypesResult.InstanceTypes[0]?.Id),
    ///         ManagerCount = 1,
    ///         ManagerInstanceType = defaultInstanceTypes.Apply(getInstanceTypesResult =&gt; getInstanceTypesResult.InstanceTypes[0]?.Id),
    ///         OsTag = "CentOS_7.6_64",
    ///         SchedulerType = "pbs",
    ///         Password = "your-password123",
    ///         VswitchId = defaultSwitches.Apply(getSwitchesResult =&gt; getSwitchesResult.Ids[0]),
    ///         VpcId = defaultNetworks.Apply(getNetworksResult =&gt; getNetworksResult.Ids[0]),
    ///         ZoneId = defaultZones.Apply(getZonesResult =&gt; getZonesResult.Zones[0]?.Id),
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// Ehpc Cluster can be imported using the id, e.g.
    /// 
    /// ```sh
    ///  $ pulumi import alicloud:ehpc/cluster:Cluster example &lt;id&gt;
    /// ```
    /// </summary>
    [AliCloudResourceType("alicloud:ehpc/cluster:Cluster")]
    public partial class Cluster : global::Pulumi.CustomResource
    {
        /// <summary>
        /// The type of the domain account service. Valid values: `nis`, `ldap`. Default value: `nis`
        /// </summary>
        [Output("accountType")]
        public Output<string> AccountType { get; private set; } = null!;

        /// <summary>
        /// The additional volumes. See the following `Block additional_volumes`.
        /// </summary>
        [Output("additionalVolumes")]
        public Output<ImmutableArray<Outputs.ClusterAdditionalVolume>> AdditionalVolumes { get; private set; } = null!;

        /// <summary>
        /// The application. See the following `Block application`.
        /// </summary>
        [Output("applications")]
        public Output<ImmutableArray<Outputs.ClusterApplication>> Applications { get; private set; } = null!;

        /// <summary>
        /// Specifies whether to enable auto-renewal for the subscription. Default value: `false`.
        /// </summary>
        [Output("autoRenew")]
        public Output<bool?> AutoRenew { get; private set; } = null!;

        /// <summary>
        /// The auto-renewal period of the subscription compute nodes. The parameter takes effect when AutoRenew is set to true.
        /// </summary>
        [Output("autoRenewPeriod")]
        public Output<int?> AutoRenewPeriod { get; private set; } = null!;

        /// <summary>
        /// The version of the E-HPC client. By default, the parameter is set to the latest version number.
        /// </summary>
        [Output("clientVersion")]
        public Output<string> ClientVersion { get; private set; } = null!;

        /// <summary>
        /// The name of the cluster. The name must be `2` to `64` characters in length.
        /// </summary>
        [Output("clusterName")]
        public Output<string> ClusterName { get; private set; } = null!;

        /// <summary>
        /// The version of the cluster. Default value: `1.0`.
        /// </summary>
        [Output("clusterVersion")]
        public Output<string> ClusterVersion { get; private set; } = null!;

        /// <summary>
        /// The number of the compute nodes. Valid values: `1` to `99`.
        /// </summary>
        [Output("computeCount")]
        public Output<int> ComputeCount { get; private set; } = null!;

        /// <summary>
        /// Specifies whether the compute nodes support hyper-threading. Default value: `true`.
        /// </summary>
        [Output("computeEnableHt")]
        public Output<bool?> ComputeEnableHt { get; private set; } = null!;

        /// <summary>
        /// The instance type of the compute nodes.
        /// </summary>
        [Output("computeInstanceType")]
        public Output<string> ComputeInstanceType { get; private set; } = null!;

        /// <summary>
        /// The maximum hourly price of the compute nodes. A maximum of three decimal places can be used in the value of the parameter. The parameter is valid only when the ComputeSpotStrategy parameter is set to SpotWithPriceLimit.
        /// </summary>
        [Output("computeSpotPriceLimit")]
        public Output<string?> ComputeSpotPriceLimit { get; private set; } = null!;

        /// <summary>
        /// The bidding method of the compute nodes. Default value: `NoSpot`. Valid values:
        /// - `NoSpot`: The compute nodes are pay-as-you-go instances.
        /// - `SpotWithPriceLimit`: The compute nodes are preemptible instances that have a user-defined maximum hourly price.
        /// - `SpotAsPriceGo`: The compute nodes are preemptible instances for which the market price at the time of purchase is used as the bid price.
        /// </summary>
        [Output("computeSpotStrategy")]
        public Output<string?> ComputeSpotStrategy { get; private set; } = null!;

        /// <summary>
        /// The mode in which the cluster is deployed. Valid values: `Standard`, `Simple`, `Tiny`. Default value: Standard.
        /// - `Standard`: An account node, a scheduling node, a logon node, and multiple compute nodes are separately deployed.
        /// - `Simple`: A management node, a logon node, and multiple compute nodes are deployed. The management node consists of an account node and a scheduling node. The logon node and compute nodes are separately deployed.
        /// - `Tiny`: A management node and multiple compute nodes are deployed. The management node consists of an account node, a scheduling node, and a logon node. The compute nodes are separately deployed.
        /// </summary>
        [Output("deployMode")]
        public Output<string> DeployMode { get; private set; } = null!;

        /// <summary>
        /// The description of the cluster. The description must be `2` to `256` characters in length. It cannot start with `http://` or `https://`.
        /// </summary>
        [Output("description")]
        public Output<string> Description { get; private set; } = null!;

        /// <summary>
        /// The domain name of the on-premises cluster. This parameter takes effect only when the AccoutType parameter is set to Idap.
        /// </summary>
        [Output("domain")]
        public Output<string?> Domain { get; private set; } = null!;

        /// <summary>
        /// The billing method of the nodes.
        /// </summary>
        [Output("ecsChargeType")]
        public Output<string> EcsChargeType { get; private set; } = null!;

        /// <summary>
        /// The version of E-HPC. By default, the parameter is set to the latest version number.
        /// </summary>
        [Output("ehpcVersion")]
        public Output<string> EhpcVersion { get; private set; } = null!;

        /// <summary>
        /// Specifies whether to enable the high availability feature. Default value: `false`.  **Note:** If high availability is enabled, a primary management node and a secondary management node are used.
        /// </summary>
        [Output("haEnable")]
        public Output<bool> HaEnable { get; private set; } = null!;

        /// <summary>
        /// The ID of the image.
        /// </summary>
        [Output("imageId")]
        public Output<string> ImageId { get; private set; } = null!;

        /// <summary>
        /// The type of the image. Valid values: `others`, `self`, `system`, `marketplace`. Default value: `system`.
        /// </summary>
        [Output("imageOwnerAlias")]
        public Output<string> ImageOwnerAlias { get; private set; } = null!;

        /// <summary>
        /// The URL of the job files that are uploaded to an Object Storage Service (OSS) bucket.
        /// </summary>
        [Output("inputFileUrl")]
        public Output<string?> InputFileUrl { get; private set; } = null!;

        /// <summary>
        /// Specifies whether to enable auto scaling. Default value: `false`.
        /// </summary>
        [Output("isComputeEss")]
        public Output<bool?> IsComputeEss { get; private set; } = null!;

        /// <summary>
        /// The queue of the nodes to which the additional file system is attached.
        /// </summary>
        [Output("jobQueue")]
        public Output<string?> JobQueue { get; private set; } = null!;

        /// <summary>
        /// The name of the AccessKey pair.
        /// </summary>
        [Output("keyPairName")]
        public Output<string?> KeyPairName { get; private set; } = null!;

        /// <summary>
        /// The number of the logon nodes. Valid values: `1`.
        /// </summary>
        [Output("loginCount")]
        public Output<int> LoginCount { get; private set; } = null!;

        /// <summary>
        /// The instance type of the logon nodes.
        /// </summary>
        [Output("loginInstanceType")]
        public Output<string> LoginInstanceType { get; private set; } = null!;

        /// <summary>
        /// The number of the management nodes. Valid values: 1 and 2.
        /// </summary>
        [Output("managerCount")]
        public Output<int> ManagerCount { get; private set; } = null!;

        /// <summary>
        /// The instance type of the management nodes.
        /// </summary>
        [Output("managerInstanceType")]
        public Output<string> ManagerInstanceType { get; private set; } = null!;

        /// <summary>
        /// The image tag of the operating system.
        /// </summary>
        [Output("osTag")]
        public Output<string> OsTag { get; private set; } = null!;

        /// <summary>
        /// The root password of the logon node. The password must be 8 to 30 characters in length and contain at least three of the following items: uppercase letters, lowercase letters, digits, and special characters. The password can contain the following special characters: `( ) ~ ! @ # $ % ^ &amp; * - + = { } [ ] : ; ‘ &lt; &gt; , . ? /`. You must specify either `password` or `key_pair_name`. If both are specified, the Password parameter prevails.
        /// </summary>
        [Output("password")]
        public Output<string?> Password { get; private set; } = null!;

        /// <summary>
        /// The duration of the subscription. The unit of the duration is specified by the `period_unit` parameter. Default value: `1`.
        /// * If you set PriceUnit to Year, the valid values of the Period parameter are 1, 2, and 3.
        /// * If you set PriceUnit to Month, the valid values of the Period parameter are 1, 2, 3, 4, 5, 6, 7, 8, and 9.
        /// * If you set PriceUnit to Hour, the valid value of the Period parameter is 1.
        /// </summary>
        [Output("period")]
        public Output<int?> Period { get; private set; } = null!;

        /// <summary>
        /// The unit of the subscription duration. Valid values: `Year`, `Month`, `Hour`. Default value: `Month`.
        /// </summary>
        [Output("periodUnit")]
        public Output<string?> PeriodUnit { get; private set; } = null!;

        /// <summary>
        /// The mode configurations of the plug-in. This parameter takes effect only when the SchedulerType parameter is set to custom. The value must be a JSON string. The parameter contains the following parameters: pluginMod, pluginLocalPath, and pluginOssPath.
        /// - pluginMod: the mode of the plug-in. The following modes are supported:
        /// - oss: The plug-in is downloaded and decompressed from OSS to a local path. The local path is specified by the pluginLocalPath parameter.
        /// - image: By default, the plug-in is stored in a pre-defined local path. The local path is specified by the pluginLocalPath parameter.
        /// - pluginLocalPath: the local path where the plug-in is stored. We recommend that you select a shared directory in oss mode and a non-shared directory in image mode.
        /// - pluginOssPath: the remote path where the plug-in is stored in OSS. This parameter takes effect only when the pluginMod parameter is set to oss.
        /// </summary>
        [Output("plugin")]
        public Output<string?> Plugin { get; private set; } = null!;

        /// <summary>
        /// The post install script. See the following `Block post_install_script`.
        /// </summary>
        [Output("postInstallScripts")]
        public Output<ImmutableArray<Outputs.ClusterPostInstallScript>> PostInstallScripts { get; private set; } = null!;

        /// <summary>
        /// The node of the RAM role.
        /// </summary>
        [Output("ramNodeTypes")]
        public Output<ImmutableArray<string>> RamNodeTypes { get; private set; } = null!;

        /// <summary>
        /// The name of the Resource Access Management (RAM) role.
        /// </summary>
        [Output("ramRoleName")]
        public Output<string?> RamRoleName { get; private set; } = null!;

        /// <summary>
        /// The release instance. Valid values: `true`.
        /// </summary>
        [Output("releaseInstance")]
        public Output<bool?> ReleaseInstance { get; private set; } = null!;

        /// <summary>
        /// The remote directory to which the additional file system is mounted.
        /// </summary>
        [Output("remoteDirectory")]
        public Output<string> RemoteDirectory { get; private set; } = null!;

        /// <summary>
        /// Specifies whether to enable Virtual Network Computing (VNC). Default value: `false`.
        /// </summary>
        [Output("remoteVisEnable")]
        public Output<bool?> RemoteVisEnable { get; private set; } = null!;

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

        /// <summary>
        /// The ID of the Super Computing Cluster (SCC) instance. If you specify the parameter, the SCC instance is moved to a new SCC cluster.
        /// </summary>
        [Output("sccClusterId")]
        public Output<string> SccClusterId { get; private set; } = null!;

        /// <summary>
        /// The type of the scheduler. Valid values: `pbs`, `slurm`, `opengridscheduler` and `deadline`. Default value: `pbs`.
        /// </summary>
        [Output("schedulerType")]
        public Output<string> SchedulerType { get; private set; } = null!;

        /// <summary>
        /// The ID of the security group to which the cluster belongs.
        /// </summary>
        [Output("securityGroupId")]
        public Output<string> SecurityGroupId { get; private set; } = null!;

        /// <summary>
        /// If you do not use an existing security group, set the parameter to the name of a new security group. A default policy is applied to the new security group.
        /// </summary>
        [Output("securityGroupName")]
        public Output<string?> SecurityGroupName { get; private set; } = null!;

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

        /// <summary>
        /// The performance level of the ESSD that is used as the system disk. Default value: `PL1` For more information, see [ESSDs](https://www.alibabacloud.com/help/en/elastic-compute-service/latest/essds). Valid values:
        /// * `PL0`: A single ESSD can deliver up to 10,000 random read/write IOPS.
        /// * `PL1`: A single ESSD can deliver up to 50,000 random read/write IOPS.
        /// * `PL2`: A single ESSD can deliver up to 100,000 random read/write IOPS.
        /// * `PL3`: A single ESSD can deliver up to 1,000,000 random read/write IOPS.
        /// </summary>
        [Output("systemDiskLevel")]
        public Output<string?> SystemDiskLevel { get; private set; } = null!;

        /// <summary>
        /// The size of the system disk. Unit: `GB`. Valid values: `40` to `500`. Default value: `40`.
        /// </summary>
        [Output("systemDiskSize")]
        public Output<int?> SystemDiskSize { get; private set; } = null!;

        /// <summary>
        /// The type of the system disk. Valid values: `cloud_efficiency`, `cloud_ssd`, `cloud_essd` or `cloud`. Default value: `cloud_ssd`.
        /// </summary>
        [Output("systemDiskType")]
        public Output<string?> SystemDiskType { get; private set; } = null!;

        /// <summary>
        /// The ID of the additional file system.
        /// </summary>
        [Output("volumeId")]
        public Output<string> VolumeId { get; private set; } = null!;

        /// <summary>
        /// The mount options of the file system.
        /// </summary>
        [Output("volumeMountOption")]
        public Output<string?> VolumeMountOption { get; private set; } = null!;

        /// <summary>
        /// The mount target of the additional file system.
        /// </summary>
        [Output("volumeMountpoint")]
        public Output<string> VolumeMountpoint { get; private set; } = null!;

        /// <summary>
        /// The type of the protocol that is used by the additional file system. Valid values: `NFS`, `SMB`. Default value: `NFS`
        /// </summary>
        [Output("volumeProtocol")]
        public Output<string> VolumeProtocol { get; private set; } = null!;

        /// <summary>
        /// The type of the additional shared storage. Only NAS file systems are supported.
        /// </summary>
        [Output("volumeType")]
        public Output<string> VolumeType { get; private set; } = null!;

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

        /// <summary>
        /// The ID of the vSwitch. E-HPC supports only VPC networks.
        /// </summary>
        [Output("vswitchId")]
        public Output<string> VswitchId { get; private set; } = null!;

        /// <summary>
        /// Specifies whether not to install the agent. Default value: `false`.
        /// </summary>
        [Output("withoutAgent")]
        public Output<bool?> WithoutAgent { get; private set; } = null!;

        /// <summary>
        /// Specifies whether the logon node uses an elastic IP address (EIP). Default value: `false`.
        /// </summary>
        [Output("withoutElasticIp")]
        public Output<bool?> WithoutElasticIp { get; private set; } = null!;

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


        /// <summary>
        /// Create a Cluster 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 Cluster(string name, ClusterArgs args, CustomResourceOptions? options = null)
            : base("alicloud:ehpc/cluster:Cluster", name, args ?? new ClusterArgs(), MakeResourceOptions(options, ""))
        {
        }

        private Cluster(string name, Input<string> id, ClusterState? state = null, CustomResourceOptions? options = null)
            : base("alicloud:ehpc/cluster:Cluster", 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 Cluster 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 Cluster Get(string name, Input<string> id, ClusterState? state = null, CustomResourceOptions? options = null)
        {
            return new Cluster(name, id, state, options);
        }
    }

    public sealed class ClusterArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// The type of the domain account service. Valid values: `nis`, `ldap`. Default value: `nis`
        /// </summary>
        [Input("accountType")]
        public Input<string>? AccountType { get; set; }

        [Input("additionalVolumes")]
        private InputList<Inputs.ClusterAdditionalVolumeArgs>? _additionalVolumes;

        /// <summary>
        /// The additional volumes. See the following `Block additional_volumes`.
        /// </summary>
        public InputList<Inputs.ClusterAdditionalVolumeArgs> AdditionalVolumes
        {
            get => _additionalVolumes ?? (_additionalVolumes = new InputList<Inputs.ClusterAdditionalVolumeArgs>());
            set => _additionalVolumes = value;
        }

        [Input("applications")]
        private InputList<Inputs.ClusterApplicationArgs>? _applications;

        /// <summary>
        /// The application. See the following `Block application`.
        /// </summary>
        public InputList<Inputs.ClusterApplicationArgs> Applications
        {
            get => _applications ?? (_applications = new InputList<Inputs.ClusterApplicationArgs>());
            set => _applications = value;
        }

        /// <summary>
        /// Specifies whether to enable auto-renewal for the subscription. Default value: `false`.
        /// </summary>
        [Input("autoRenew")]
        public Input<bool>? AutoRenew { get; set; }

        /// <summary>
        /// The auto-renewal period of the subscription compute nodes. The parameter takes effect when AutoRenew is set to true.
        /// </summary>
        [Input("autoRenewPeriod")]
        public Input<int>? AutoRenewPeriod { get; set; }

        /// <summary>
        /// The version of the E-HPC client. By default, the parameter is set to the latest version number.
        /// </summary>
        [Input("clientVersion")]
        public Input<string>? ClientVersion { get; set; }

        /// <summary>
        /// The name of the cluster. The name must be `2` to `64` characters in length.
        /// </summary>
        [Input("clusterName", required: true)]
        public Input<string> ClusterName { get; set; } = null!;

        /// <summary>
        /// The version of the cluster. Default value: `1.0`.
        /// </summary>
        [Input("clusterVersion")]
        public Input<string>? ClusterVersion { get; set; }

        /// <summary>
        /// The number of the compute nodes. Valid values: `1` to `99`.
        /// </summary>
        [Input("computeCount", required: true)]
        public Input<int> ComputeCount { get; set; } = null!;

        /// <summary>
        /// Specifies whether the compute nodes support hyper-threading. Default value: `true`.
        /// </summary>
        [Input("computeEnableHt")]
        public Input<bool>? ComputeEnableHt { get; set; }

        /// <summary>
        /// The instance type of the compute nodes.
        /// </summary>
        [Input("computeInstanceType", required: true)]
        public Input<string> ComputeInstanceType { get; set; } = null!;

        /// <summary>
        /// The maximum hourly price of the compute nodes. A maximum of three decimal places can be used in the value of the parameter. The parameter is valid only when the ComputeSpotStrategy parameter is set to SpotWithPriceLimit.
        /// </summary>
        [Input("computeSpotPriceLimit")]
        public Input<string>? ComputeSpotPriceLimit { get; set; }

        /// <summary>
        /// The bidding method of the compute nodes. Default value: `NoSpot`. Valid values:
        /// - `NoSpot`: The compute nodes are pay-as-you-go instances.
        /// - `SpotWithPriceLimit`: The compute nodes are preemptible instances that have a user-defined maximum hourly price.
        /// - `SpotAsPriceGo`: The compute nodes are preemptible instances for which the market price at the time of purchase is used as the bid price.
        /// </summary>
        [Input("computeSpotStrategy")]
        public Input<string>? ComputeSpotStrategy { get; set; }

        /// <summary>
        /// The mode in which the cluster is deployed. Valid values: `Standard`, `Simple`, `Tiny`. Default value: Standard.
        /// - `Standard`: An account node, a scheduling node, a logon node, and multiple compute nodes are separately deployed.
        /// - `Simple`: A management node, a logon node, and multiple compute nodes are deployed. The management node consists of an account node and a scheduling node. The logon node and compute nodes are separately deployed.
        /// - `Tiny`: A management node and multiple compute nodes are deployed. The management node consists of an account node, a scheduling node, and a logon node. The compute nodes are separately deployed.
        /// </summary>
        [Input("deployMode")]
        public Input<string>? DeployMode { get; set; }

        /// <summary>
        /// The description of the cluster. The description must be `2` to `256` characters in length. It cannot start with `http://` or `https://`.
        /// </summary>
        [Input("description")]
        public Input<string>? Description { get; set; }

        /// <summary>
        /// The domain name of the on-premises cluster. This parameter takes effect only when the AccoutType parameter is set to Idap.
        /// </summary>
        [Input("domain")]
        public Input<string>? Domain { get; set; }

        /// <summary>
        /// The billing method of the nodes.
        /// </summary>
        [Input("ecsChargeType")]
        public Input<string>? EcsChargeType { get; set; }

        /// <summary>
        /// The version of E-HPC. By default, the parameter is set to the latest version number.
        /// </summary>
        [Input("ehpcVersion")]
        public Input<string>? EhpcVersion { get; set; }

        /// <summary>
        /// Specifies whether to enable the high availability feature. Default value: `false`.  **Note:** If high availability is enabled, a primary management node and a secondary management node are used.
        /// </summary>
        [Input("haEnable")]
        public Input<bool>? HaEnable { get; set; }

        /// <summary>
        /// The ID of the image.
        /// </summary>
        [Input("imageId")]
        public Input<string>? ImageId { get; set; }

        /// <summary>
        /// The type of the image. Valid values: `others`, `self`, `system`, `marketplace`. Default value: `system`.
        /// </summary>
        [Input("imageOwnerAlias")]
        public Input<string>? ImageOwnerAlias { get; set; }

        /// <summary>
        /// The URL of the job files that are uploaded to an Object Storage Service (OSS) bucket.
        /// </summary>
        [Input("inputFileUrl")]
        public Input<string>? InputFileUrl { get; set; }

        /// <summary>
        /// Specifies whether to enable auto scaling. Default value: `false`.
        /// </summary>
        [Input("isComputeEss")]
        public Input<bool>? IsComputeEss { get; set; }

        /// <summary>
        /// The queue of the nodes to which the additional file system is attached.
        /// </summary>
        [Input("jobQueue")]
        public Input<string>? JobQueue { get; set; }

        /// <summary>
        /// The name of the AccessKey pair.
        /// </summary>
        [Input("keyPairName")]
        public Input<string>? KeyPairName { get; set; }

        /// <summary>
        /// The number of the logon nodes. Valid values: `1`.
        /// </summary>
        [Input("loginCount", required: true)]
        public Input<int> LoginCount { get; set; } = null!;

        /// <summary>
        /// The instance type of the logon nodes.
        /// </summary>
        [Input("loginInstanceType", required: true)]
        public Input<string> LoginInstanceType { get; set; } = null!;

        /// <summary>
        /// The number of the management nodes. Valid values: 1 and 2.
        /// </summary>
        [Input("managerCount")]
        public Input<int>? ManagerCount { get; set; }

        /// <summary>
        /// The instance type of the management nodes.
        /// </summary>
        [Input("managerInstanceType", required: true)]
        public Input<string> ManagerInstanceType { get; set; } = null!;

        /// <summary>
        /// The image tag of the operating system.
        /// </summary>
        [Input("osTag", required: true)]
        public Input<string> OsTag { get; set; } = null!;

        /// <summary>
        /// The root password of the logon node. The password must be 8 to 30 characters in length and contain at least three of the following items: uppercase letters, lowercase letters, digits, and special characters. The password can contain the following special characters: `( ) ~ ! @ # $ % ^ &amp; * - + = { } [ ] : ; ‘ &lt; &gt; , . ? /`. You must specify either `password` or `key_pair_name`. If both are specified, the Password parameter prevails.
        /// </summary>
        [Input("password")]
        public Input<string>? Password { get; set; }

        /// <summary>
        /// The duration of the subscription. The unit of the duration is specified by the `period_unit` parameter. Default value: `1`.
        /// * If you set PriceUnit to Year, the valid values of the Period parameter are 1, 2, and 3.
        /// * If you set PriceUnit to Month, the valid values of the Period parameter are 1, 2, 3, 4, 5, 6, 7, 8, and 9.
        /// * If you set PriceUnit to Hour, the valid value of the Period parameter is 1.
        /// </summary>
        [Input("period")]
        public Input<int>? Period { get; set; }

        /// <summary>
        /// The unit of the subscription duration. Valid values: `Year`, `Month`, `Hour`. Default value: `Month`.
        /// </summary>
        [Input("periodUnit")]
        public Input<string>? PeriodUnit { get; set; }

        /// <summary>
        /// The mode configurations of the plug-in. This parameter takes effect only when the SchedulerType parameter is set to custom. The value must be a JSON string. The parameter contains the following parameters: pluginMod, pluginLocalPath, and pluginOssPath.
        /// - pluginMod: the mode of the plug-in. The following modes are supported:
        /// - oss: The plug-in is downloaded and decompressed from OSS to a local path. The local path is specified by the pluginLocalPath parameter.
        /// - image: By default, the plug-in is stored in a pre-defined local path. The local path is specified by the pluginLocalPath parameter.
        /// - pluginLocalPath: the local path where the plug-in is stored. We recommend that you select a shared directory in oss mode and a non-shared directory in image mode.
        /// - pluginOssPath: the remote path where the plug-in is stored in OSS. This parameter takes effect only when the pluginMod parameter is set to oss.
        /// </summary>
        [Input("plugin")]
        public Input<string>? Plugin { get; set; }

        [Input("postInstallScripts")]
        private InputList<Inputs.ClusterPostInstallScriptArgs>? _postInstallScripts;

        /// <summary>
        /// The post install script. See the following `Block post_install_script`.
        /// </summary>
        public InputList<Inputs.ClusterPostInstallScriptArgs> PostInstallScripts
        {
            get => _postInstallScripts ?? (_postInstallScripts = new InputList<Inputs.ClusterPostInstallScriptArgs>());
            set => _postInstallScripts = value;
        }

        [Input("ramNodeTypes")]
        private InputList<string>? _ramNodeTypes;

        /// <summary>
        /// The node of the RAM role.
        /// </summary>
        public InputList<string> RamNodeTypes
        {
            get => _ramNodeTypes ?? (_ramNodeTypes = new InputList<string>());
            set => _ramNodeTypes = value;
        }

        /// <summary>
        /// The name of the Resource Access Management (RAM) role.
        /// </summary>
        [Input("ramRoleName")]
        public Input<string>? RamRoleName { get; set; }

        /// <summary>
        /// The release instance. Valid values: `true`.
        /// </summary>
        [Input("releaseInstance")]
        public Input<bool>? ReleaseInstance { get; set; }

        /// <summary>
        /// The remote directory to which the additional file system is mounted.
        /// </summary>
        [Input("remoteDirectory")]
        public Input<string>? RemoteDirectory { get; set; }

        /// <summary>
        /// Specifies whether to enable Virtual Network Computing (VNC). Default value: `false`.
        /// </summary>
        [Input("remoteVisEnable")]
        public Input<bool>? RemoteVisEnable { get; set; }

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

        /// <summary>
        /// The ID of the Super Computing Cluster (SCC) instance. If you specify the parameter, the SCC instance is moved to a new SCC cluster.
        /// </summary>
        [Input("sccClusterId")]
        public Input<string>? SccClusterId { get; set; }

        /// <summary>
        /// The type of the scheduler. Valid values: `pbs`, `slurm`, `opengridscheduler` and `deadline`. Default value: `pbs`.
        /// </summary>
        [Input("schedulerType")]
        public Input<string>? SchedulerType { get; set; }

        /// <summary>
        /// The ID of the security group to which the cluster belongs.
        /// </summary>
        [Input("securityGroupId")]
        public Input<string>? SecurityGroupId { get; set; }

        /// <summary>
        /// If you do not use an existing security group, set the parameter to the name of a new security group. A default policy is applied to the new security group.
        /// </summary>
        [Input("securityGroupName")]
        public Input<string>? SecurityGroupName { get; set; }

        /// <summary>
        /// The performance level of the ESSD that is used as the system disk. Default value: `PL1` For more information, see [ESSDs](https://www.alibabacloud.com/help/en/elastic-compute-service/latest/essds). Valid values:
        /// * `PL0`: A single ESSD can deliver up to 10,000 random read/write IOPS.
        /// * `PL1`: A single ESSD can deliver up to 50,000 random read/write IOPS.
        /// * `PL2`: A single ESSD can deliver up to 100,000 random read/write IOPS.
        /// * `PL3`: A single ESSD can deliver up to 1,000,000 random read/write IOPS.
        /// </summary>
        [Input("systemDiskLevel")]
        public Input<string>? SystemDiskLevel { get; set; }

        /// <summary>
        /// The size of the system disk. Unit: `GB`. Valid values: `40` to `500`. Default value: `40`.
        /// </summary>
        [Input("systemDiskSize")]
        public Input<int>? SystemDiskSize { get; set; }

        /// <summary>
        /// The type of the system disk. Valid values: `cloud_efficiency`, `cloud_ssd`, `cloud_essd` or `cloud`. Default value: `cloud_ssd`.
        /// </summary>
        [Input("systemDiskType")]
        public Input<string>? SystemDiskType { get; set; }

        /// <summary>
        /// The ID of the additional file system.
        /// </summary>
        [Input("volumeId")]
        public Input<string>? VolumeId { get; set; }

        /// <summary>
        /// The mount options of the file system.
        /// </summary>
        [Input("volumeMountOption")]
        public Input<string>? VolumeMountOption { get; set; }

        /// <summary>
        /// The mount target of the additional file system.
        /// </summary>
        [Input("volumeMountpoint")]
        public Input<string>? VolumeMountpoint { get; set; }

        /// <summary>
        /// The type of the protocol that is used by the additional file system. Valid values: `NFS`, `SMB`. Default value: `NFS`
        /// </summary>
        [Input("volumeProtocol")]
        public Input<string>? VolumeProtocol { get; set; }

        /// <summary>
        /// The type of the additional shared storage. Only NAS file systems are supported.
        /// </summary>
        [Input("volumeType")]
        public Input<string>? VolumeType { get; set; }

        /// <summary>
        /// The ID of the virtual private cloud (VPC) to which the cluster belongs.
        /// </summary>
        [Input("vpcId")]
        public Input<string>? VpcId { get; set; }

        /// <summary>
        /// The ID of the vSwitch. E-HPC supports only VPC networks.
        /// </summary>
        [Input("vswitchId")]
        public Input<string>? VswitchId { get; set; }

        /// <summary>
        /// Specifies whether not to install the agent. Default value: `false`.
        /// </summary>
        [Input("withoutAgent")]
        public Input<bool>? WithoutAgent { get; set; }

        /// <summary>
        /// Specifies whether the logon node uses an elastic IP address (EIP). Default value: `false`.
        /// </summary>
        [Input("withoutElasticIp")]
        public Input<bool>? WithoutElasticIp { get; set; }

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

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

    public sealed class ClusterState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// The type of the domain account service. Valid values: `nis`, `ldap`. Default value: `nis`
        /// </summary>
        [Input("accountType")]
        public Input<string>? AccountType { get; set; }

        [Input("additionalVolumes")]
        private InputList<Inputs.ClusterAdditionalVolumeGetArgs>? _additionalVolumes;

        /// <summary>
        /// The additional volumes. See the following `Block additional_volumes`.
        /// </summary>
        public InputList<Inputs.ClusterAdditionalVolumeGetArgs> AdditionalVolumes
        {
            get => _additionalVolumes ?? (_additionalVolumes = new InputList<Inputs.ClusterAdditionalVolumeGetArgs>());
            set => _additionalVolumes = value;
        }

        [Input("applications")]
        private InputList<Inputs.ClusterApplicationGetArgs>? _applications;

        /// <summary>
        /// The application. See the following `Block application`.
        /// </summary>
        public InputList<Inputs.ClusterApplicationGetArgs> Applications
        {
            get => _applications ?? (_applications = new InputList<Inputs.ClusterApplicationGetArgs>());
            set => _applications = value;
        }

        /// <summary>
        /// Specifies whether to enable auto-renewal for the subscription. Default value: `false`.
        /// </summary>
        [Input("autoRenew")]
        public Input<bool>? AutoRenew { get; set; }

        /// <summary>
        /// The auto-renewal period of the subscription compute nodes. The parameter takes effect when AutoRenew is set to true.
        /// </summary>
        [Input("autoRenewPeriod")]
        public Input<int>? AutoRenewPeriod { get; set; }

        /// <summary>
        /// The version of the E-HPC client. By default, the parameter is set to the latest version number.
        /// </summary>
        [Input("clientVersion")]
        public Input<string>? ClientVersion { get; set; }

        /// <summary>
        /// The name of the cluster. The name must be `2` to `64` characters in length.
        /// </summary>
        [Input("clusterName")]
        public Input<string>? ClusterName { get; set; }

        /// <summary>
        /// The version of the cluster. Default value: `1.0`.
        /// </summary>
        [Input("clusterVersion")]
        public Input<string>? ClusterVersion { get; set; }

        /// <summary>
        /// The number of the compute nodes. Valid values: `1` to `99`.
        /// </summary>
        [Input("computeCount")]
        public Input<int>? ComputeCount { get; set; }

        /// <summary>
        /// Specifies whether the compute nodes support hyper-threading. Default value: `true`.
        /// </summary>
        [Input("computeEnableHt")]
        public Input<bool>? ComputeEnableHt { get; set; }

        /// <summary>
        /// The instance type of the compute nodes.
        /// </summary>
        [Input("computeInstanceType")]
        public Input<string>? ComputeInstanceType { get; set; }

        /// <summary>
        /// The maximum hourly price of the compute nodes. A maximum of three decimal places can be used in the value of the parameter. The parameter is valid only when the ComputeSpotStrategy parameter is set to SpotWithPriceLimit.
        /// </summary>
        [Input("computeSpotPriceLimit")]
        public Input<string>? ComputeSpotPriceLimit { get; set; }

        /// <summary>
        /// The bidding method of the compute nodes. Default value: `NoSpot`. Valid values:
        /// - `NoSpot`: The compute nodes are pay-as-you-go instances.
        /// - `SpotWithPriceLimit`: The compute nodes are preemptible instances that have a user-defined maximum hourly price.
        /// - `SpotAsPriceGo`: The compute nodes are preemptible instances for which the market price at the time of purchase is used as the bid price.
        /// </summary>
        [Input("computeSpotStrategy")]
        public Input<string>? ComputeSpotStrategy { get; set; }

        /// <summary>
        /// The mode in which the cluster is deployed. Valid values: `Standard`, `Simple`, `Tiny`. Default value: Standard.
        /// - `Standard`: An account node, a scheduling node, a logon node, and multiple compute nodes are separately deployed.
        /// - `Simple`: A management node, a logon node, and multiple compute nodes are deployed. The management node consists of an account node and a scheduling node. The logon node and compute nodes are separately deployed.
        /// - `Tiny`: A management node and multiple compute nodes are deployed. The management node consists of an account node, a scheduling node, and a logon node. The compute nodes are separately deployed.
        /// </summary>
        [Input("deployMode")]
        public Input<string>? DeployMode { get; set; }

        /// <summary>
        /// The description of the cluster. The description must be `2` to `256` characters in length. It cannot start with `http://` or `https://`.
        /// </summary>
        [Input("description")]
        public Input<string>? Description { get; set; }

        /// <summary>
        /// The domain name of the on-premises cluster. This parameter takes effect only when the AccoutType parameter is set to Idap.
        /// </summary>
        [Input("domain")]
        public Input<string>? Domain { get; set; }

        /// <summary>
        /// The billing method of the nodes.
        /// </summary>
        [Input("ecsChargeType")]
        public Input<string>? EcsChargeType { get; set; }

        /// <summary>
        /// The version of E-HPC. By default, the parameter is set to the latest version number.
        /// </summary>
        [Input("ehpcVersion")]
        public Input<string>? EhpcVersion { get; set; }

        /// <summary>
        /// Specifies whether to enable the high availability feature. Default value: `false`.  **Note:** If high availability is enabled, a primary management node and a secondary management node are used.
        /// </summary>
        [Input("haEnable")]
        public Input<bool>? HaEnable { get; set; }

        /// <summary>
        /// The ID of the image.
        /// </summary>
        [Input("imageId")]
        public Input<string>? ImageId { get; set; }

        /// <summary>
        /// The type of the image. Valid values: `others`, `self`, `system`, `marketplace`. Default value: `system`.
        /// </summary>
        [Input("imageOwnerAlias")]
        public Input<string>? ImageOwnerAlias { get; set; }

        /// <summary>
        /// The URL of the job files that are uploaded to an Object Storage Service (OSS) bucket.
        /// </summary>
        [Input("inputFileUrl")]
        public Input<string>? InputFileUrl { get; set; }

        /// <summary>
        /// Specifies whether to enable auto scaling. Default value: `false`.
        /// </summary>
        [Input("isComputeEss")]
        public Input<bool>? IsComputeEss { get; set; }

        /// <summary>
        /// The queue of the nodes to which the additional file system is attached.
        /// </summary>
        [Input("jobQueue")]
        public Input<string>? JobQueue { get; set; }

        /// <summary>
        /// The name of the AccessKey pair.
        /// </summary>
        [Input("keyPairName")]
        public Input<string>? KeyPairName { get; set; }

        /// <summary>
        /// The number of the logon nodes. Valid values: `1`.
        /// </summary>
        [Input("loginCount")]
        public Input<int>? LoginCount { get; set; }

        /// <summary>
        /// The instance type of the logon nodes.
        /// </summary>
        [Input("loginInstanceType")]
        public Input<string>? LoginInstanceType { get; set; }

        /// <summary>
        /// The number of the management nodes. Valid values: 1 and 2.
        /// </summary>
        [Input("managerCount")]
        public Input<int>? ManagerCount { get; set; }

        /// <summary>
        /// The instance type of the management nodes.
        /// </summary>
        [Input("managerInstanceType")]
        public Input<string>? ManagerInstanceType { get; set; }

        /// <summary>
        /// The image tag of the operating system.
        /// </summary>
        [Input("osTag")]
        public Input<string>? OsTag { get; set; }

        /// <summary>
        /// The root password of the logon node. The password must be 8 to 30 characters in length and contain at least three of the following items: uppercase letters, lowercase letters, digits, and special characters. The password can contain the following special characters: `( ) ~ ! @ # $ % ^ &amp; * - + = { } [ ] : ; ‘ &lt; &gt; , . ? /`. You must specify either `password` or `key_pair_name`. If both are specified, the Password parameter prevails.
        /// </summary>
        [Input("password")]
        public Input<string>? Password { get; set; }

        /// <summary>
        /// The duration of the subscription. The unit of the duration is specified by the `period_unit` parameter. Default value: `1`.
        /// * If you set PriceUnit to Year, the valid values of the Period parameter are 1, 2, and 3.
        /// * If you set PriceUnit to Month, the valid values of the Period parameter are 1, 2, 3, 4, 5, 6, 7, 8, and 9.
        /// * If you set PriceUnit to Hour, the valid value of the Period parameter is 1.
        /// </summary>
        [Input("period")]
        public Input<int>? Period { get; set; }

        /// <summary>
        /// The unit of the subscription duration. Valid values: `Year`, `Month`, `Hour`. Default value: `Month`.
        /// </summary>
        [Input("periodUnit")]
        public Input<string>? PeriodUnit { get; set; }

        /// <summary>
        /// The mode configurations of the plug-in. This parameter takes effect only when the SchedulerType parameter is set to custom. The value must be a JSON string. The parameter contains the following parameters: pluginMod, pluginLocalPath, and pluginOssPath.
        /// - pluginMod: the mode of the plug-in. The following modes are supported:
        /// - oss: The plug-in is downloaded and decompressed from OSS to a local path. The local path is specified by the pluginLocalPath parameter.
        /// - image: By default, the plug-in is stored in a pre-defined local path. The local path is specified by the pluginLocalPath parameter.
        /// - pluginLocalPath: the local path where the plug-in is stored. We recommend that you select a shared directory in oss mode and a non-shared directory in image mode.
        /// - pluginOssPath: the remote path where the plug-in is stored in OSS. This parameter takes effect only when the pluginMod parameter is set to oss.
        /// </summary>
        [Input("plugin")]
        public Input<string>? Plugin { get; set; }

        [Input("postInstallScripts")]
        private InputList<Inputs.ClusterPostInstallScriptGetArgs>? _postInstallScripts;

        /// <summary>
        /// The post install script. See the following `Block post_install_script`.
        /// </summary>
        public InputList<Inputs.ClusterPostInstallScriptGetArgs> PostInstallScripts
        {
            get => _postInstallScripts ?? (_postInstallScripts = new InputList<Inputs.ClusterPostInstallScriptGetArgs>());
            set => _postInstallScripts = value;
        }

        [Input("ramNodeTypes")]
        private InputList<string>? _ramNodeTypes;

        /// <summary>
        /// The node of the RAM role.
        /// </summary>
        public InputList<string> RamNodeTypes
        {
            get => _ramNodeTypes ?? (_ramNodeTypes = new InputList<string>());
            set => _ramNodeTypes = value;
        }

        /// <summary>
        /// The name of the Resource Access Management (RAM) role.
        /// </summary>
        [Input("ramRoleName")]
        public Input<string>? RamRoleName { get; set; }

        /// <summary>
        /// The release instance. Valid values: `true`.
        /// </summary>
        [Input("releaseInstance")]
        public Input<bool>? ReleaseInstance { get; set; }

        /// <summary>
        /// The remote directory to which the additional file system is mounted.
        /// </summary>
        [Input("remoteDirectory")]
        public Input<string>? RemoteDirectory { get; set; }

        /// <summary>
        /// Specifies whether to enable Virtual Network Computing (VNC). Default value: `false`.
        /// </summary>
        [Input("remoteVisEnable")]
        public Input<bool>? RemoteVisEnable { get; set; }

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

        /// <summary>
        /// The ID of the Super Computing Cluster (SCC) instance. If you specify the parameter, the SCC instance is moved to a new SCC cluster.
        /// </summary>
        [Input("sccClusterId")]
        public Input<string>? SccClusterId { get; set; }

        /// <summary>
        /// The type of the scheduler. Valid values: `pbs`, `slurm`, `opengridscheduler` and `deadline`. Default value: `pbs`.
        /// </summary>
        [Input("schedulerType")]
        public Input<string>? SchedulerType { get; set; }

        /// <summary>
        /// The ID of the security group to which the cluster belongs.
        /// </summary>
        [Input("securityGroupId")]
        public Input<string>? SecurityGroupId { get; set; }

        /// <summary>
        /// If you do not use an existing security group, set the parameter to the name of a new security group. A default policy is applied to the new security group.
        /// </summary>
        [Input("securityGroupName")]
        public Input<string>? SecurityGroupName { get; set; }

        /// <summary>
        /// The status of the resource.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        /// <summary>
        /// The performance level of the ESSD that is used as the system disk. Default value: `PL1` For more information, see [ESSDs](https://www.alibabacloud.com/help/en/elastic-compute-service/latest/essds). Valid values:
        /// * `PL0`: A single ESSD can deliver up to 10,000 random read/write IOPS.
        /// * `PL1`: A single ESSD can deliver up to 50,000 random read/write IOPS.
        /// * `PL2`: A single ESSD can deliver up to 100,000 random read/write IOPS.
        /// * `PL3`: A single ESSD can deliver up to 1,000,000 random read/write IOPS.
        /// </summary>
        [Input("systemDiskLevel")]
        public Input<string>? SystemDiskLevel { get; set; }

        /// <summary>
        /// The size of the system disk. Unit: `GB`. Valid values: `40` to `500`. Default value: `40`.
        /// </summary>
        [Input("systemDiskSize")]
        public Input<int>? SystemDiskSize { get; set; }

        /// <summary>
        /// The type of the system disk. Valid values: `cloud_efficiency`, `cloud_ssd`, `cloud_essd` or `cloud`. Default value: `cloud_ssd`.
        /// </summary>
        [Input("systemDiskType")]
        public Input<string>? SystemDiskType { get; set; }

        /// <summary>
        /// The ID of the additional file system.
        /// </summary>
        [Input("volumeId")]
        public Input<string>? VolumeId { get; set; }

        /// <summary>
        /// The mount options of the file system.
        /// </summary>
        [Input("volumeMountOption")]
        public Input<string>? VolumeMountOption { get; set; }

        /// <summary>
        /// The mount target of the additional file system.
        /// </summary>
        [Input("volumeMountpoint")]
        public Input<string>? VolumeMountpoint { get; set; }

        /// <summary>
        /// The type of the protocol that is used by the additional file system. Valid values: `NFS`, `SMB`. Default value: `NFS`
        /// </summary>
        [Input("volumeProtocol")]
        public Input<string>? VolumeProtocol { get; set; }

        /// <summary>
        /// The type of the additional shared storage. Only NAS file systems are supported.
        /// </summary>
        [Input("volumeType")]
        public Input<string>? VolumeType { get; set; }

        /// <summary>
        /// The ID of the virtual private cloud (VPC) to which the cluster belongs.
        /// </summary>
        [Input("vpcId")]
        public Input<string>? VpcId { get; set; }

        /// <summary>
        /// The ID of the vSwitch. E-HPC supports only VPC networks.
        /// </summary>
        [Input("vswitchId")]
        public Input<string>? VswitchId { get; set; }

        /// <summary>
        /// Specifies whether not to install the agent. Default value: `false`.
        /// </summary>
        [Input("withoutAgent")]
        public Input<bool>? WithoutAgent { get; set; }

        /// <summary>
        /// Specifies whether the logon node uses an elastic IP address (EIP). Default value: `false`.
        /// </summary>
        [Input("withoutElasticIp")]
        public Input<bool>? WithoutElasticIp { get; set; }

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

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