// *** 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.CS
{
    /// <summary>
    /// ## Example Usage
    /// 
    /// The managed cluster configuration,
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var config = new Config();
    ///     var name = config.Get("name") ?? "tf-test";
    ///     var defaultZones = AliCloud.GetZones.Invoke(new()
    ///     {
    ///         AvailableResourceCreation = "VSwitch",
    ///     });
    /// 
    ///     var defaultInstanceTypes = AliCloud.Ecs.GetInstanceTypes.Invoke(new()
    ///     {
    ///         AvailabilityZone = defaultZones.Apply(getZonesResult =&gt; getZonesResult.Zones[0]?.Id),
    ///         CpuCoreCount = 2,
    ///         MemorySize = 4,
    ///         KubernetesNodeRole = "Worker",
    ///     });
    /// 
    ///     var defaultNetwork = new AliCloud.Vpc.Network("defaultNetwork", new()
    ///     {
    ///         VpcName = name,
    ///         CidrBlock = "10.1.0.0/21",
    ///     });
    /// 
    ///     var defaultSwitch = new AliCloud.Vpc.Switch("defaultSwitch", new()
    ///     {
    ///         VswitchName = name,
    ///         VpcId = defaultNetwork.Id,
    ///         CidrBlock = "10.1.1.0/24",
    ///         ZoneId = defaultZones.Apply(getZonesResult =&gt; getZonesResult.Zones[0]?.Id),
    ///     });
    /// 
    ///     var defaultKeyPair = new AliCloud.Ecs.KeyPair("defaultKeyPair", new()
    ///     {
    ///         KeyPairName = name,
    ///     });
    /// 
    ///     var defaultManagedKubernetes = new List&lt;AliCloud.CS.ManagedKubernetes&gt;();
    ///     for (var rangeIndex = 0; rangeIndex &lt; (1 == true); rangeIndex++)
    ///     {
    ///         var range = new { Value = rangeIndex };
    ///         defaultManagedKubernetes.Add(new AliCloud.CS.ManagedKubernetes($"defaultManagedKubernetes-{range.Value}", new()
    ///         {
    ///             ClusterSpec = "ack.pro.small",
    ///             IsEnterpriseSecurityGroup = true,
    ///             PodCidr = "172.20.0.0/16",
    ///             ServiceCidr = "172.21.0.0/20",
    ///             WorkerVswitchIds = new[]
    ///             {
    ///                 defaultSwitch.Id,
    ///             },
    ///         }));
    ///     }
    /// });
    /// ```
    /// 
    /// Create a node pool.
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var @default = new AliCloud.CS.NodePool("default", new()
    ///     {
    ///         ClusterId = alicloud_cs_managed_kubernetes.Default[0].Id,
    ///         VswitchIds = new[]
    ///         {
    ///             alicloud_vswitch.Default.Id,
    ///         },
    ///         InstanceTypes = new[]
    ///         {
    ///             data.Alicloud_instance_types.Default.Instance_types[0].Id,
    ///         },
    ///         SystemDiskCategory = "cloud_efficiency",
    ///         SystemDiskSize = 40,
    ///         KeyName = alicloud_key_pair.Default.Key_name,
    ///         DesiredSize = 1,
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// The parameter `node_count` are deprecated from version 1.158.0，but it can still works. If you want to use the new parameter `desired_size` instead, you can update it as follows. for more information of `desired_size`, visit [Modify the expected number of nodes in a node pool](https://www.alibabacloud.com/help/en/doc-detail/160490.html#title-mpp-3jj-oo3).
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var @default = new AliCloud.CS.NodePool("default", new()
    ///     {
    ///         ClusterId = alicloud_cs_managed_kubernetes.Default[0].Id,
    ///         VswitchIds = new[]
    ///         {
    ///             alicloud_vswitch.Default.Id,
    ///         },
    ///         InstanceTypes = new[]
    ///         {
    ///             data.Alicloud_instance_types.Default.Instance_types[0].Id,
    ///         },
    ///         SystemDiskCategory = "cloud_efficiency",
    ///         SystemDiskSize = 40,
    ///         KeyName = alicloud_key_pair.Default.Key_name,
    ///         DesiredSize = 1,
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// Create a managed node pool. If you need to enable maintenance window, you need to set the maintenance window in `alicloud.cs.ManagedKubernetes`.
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var @default = new AliCloud.CS.NodePool("default", new()
    ///     {
    ///         ClusterId = alicloud_cs_managed_kubernetes.Default[0].Id,
    ///         VswitchIds = new[]
    ///         {
    ///             alicloud_vswitch.Default.Id,
    ///         },
    ///         InstanceTypes = new[]
    ///         {
    ///             data.Alicloud_instance_types.Default.Instance_types[0].Id,
    ///         },
    ///         SystemDiskCategory = "cloud_efficiency",
    ///         SystemDiskSize = 40,
    ///         KeyName = alicloud_key_pair.Default.Key_name,
    ///         DesiredSize = 1,
    ///         Management = new AliCloud.CS.Inputs.NodePoolManagementArgs
    ///         {
    ///             AutoRepair = true,
    ///             AutoUpgrade = true,
    ///             Surge = 1,
    ///             MaxUnavailable = 1,
    ///         },
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// Enable automatic scaling for the node pool. `scaling_config` is required.
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var @default = new AliCloud.CS.NodePool("default", new()
    ///     {
    ///         ClusterId = alicloud_cs_managed_kubernetes.Default[0].Id,
    ///         VswitchIds = new[]
    ///         {
    ///             alicloud_vswitch.Default.Id,
    ///         },
    ///         InstanceTypes = new[]
    ///         {
    ///             data.Alicloud_instance_types.Default.Instance_types[0].Id,
    ///         },
    ///         SystemDiskCategory = "cloud_efficiency",
    ///         SystemDiskSize = 40,
    ///         KeyName = alicloud_key_pair.Default.Key_name,
    ///         ScalingConfig = new AliCloud.CS.Inputs.NodePoolScalingConfigArgs
    ///         {
    ///             MinSize = 1,
    ///             MaxSize = 10,
    ///         },
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// Enable automatic scaling for managed node pool.
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var @default = new AliCloud.CS.NodePool("default", new()
    ///     {
    ///         ClusterId = alicloud_cs_managed_kubernetes.Default[0].Id,
    ///         VswitchIds = new[]
    ///         {
    ///             alicloud_vswitch.Default.Id,
    ///         },
    ///         InstanceTypes = new[]
    ///         {
    ///             data.Alicloud_instance_types.Default.Instance_types[0].Id,
    ///         },
    ///         SystemDiskCategory = "cloud_efficiency",
    ///         SystemDiskSize = 40,
    ///         KeyName = alicloud_key_pair.Default.Key_name,
    ///         Management = new AliCloud.CS.Inputs.NodePoolManagementArgs
    ///         {
    ///             AutoRepair = true,
    ///             AutoUpgrade = true,
    ///             Surge = 1,
    ///             MaxUnavailable = 1,
    ///         },
    ///         ScalingConfig = new AliCloud.CS.Inputs.NodePoolScalingConfigArgs
    ///         {
    ///             MinSize = 1,
    ///             MaxSize = 10,
    ///             Type = "cpu",
    ///         },
    ///     }, new CustomResourceOptions
    ///     {
    ///         DependsOn = new[]
    ///         {
    ///             alicloud_cs_autoscaling_config.Default,
    ///         },
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// Create a `PrePaid` node pool.
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var @default = new AliCloud.CS.NodePool("default", new()
    ///     {
    ///         ClusterId = alicloud_cs_managed_kubernetes.Default[0].Id,
    ///         VswitchIds = new[]
    ///         {
    ///             alicloud_vswitch.Default.Id,
    ///         },
    ///         InstanceTypes = new[]
    ///         {
    ///             data.Alicloud_instance_types.Default.Instance_types[0].Id,
    ///         },
    ///         SystemDiskCategory = "cloud_efficiency",
    ///         SystemDiskSize = 40,
    ///         KeyName = alicloud_key_pair.Default.Key_name,
    ///         InstanceChargeType = "PrePaid",
    ///         Period = 1,
    ///         PeriodUnit = "Month",
    ///         AutoRenew = true,
    ///         AutoRenewPeriod = 1,
    ///         InstallCloudMonitor = true,
    ///         ScalingConfig = new AliCloud.CS.Inputs.NodePoolScalingConfigArgs
    ///         {
    ///             MinSize = 1,
    ///             MaxSize = 10,
    ///             Type = "cpu",
    ///         },
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// Create a node pool with spot instance.
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var @default = new AliCloud.CS.NodePool("default", new()
    ///     {
    ///         ClusterId = alicloud_cs_managed_kubernetes.Default[0].Id,
    ///         VswitchIds = new[]
    ///         {
    ///             alicloud_vswitch.Default.Id,
    ///         },
    ///         InstanceTypes = new[]
    ///         {
    ///             data.Alicloud_instance_types.Default.Instance_types[0].Id,
    ///         },
    ///         SystemDiskCategory = "cloud_efficiency",
    ///         SystemDiskSize = 40,
    ///         KeyName = alicloud_key_pair.Default.Key_name,
    ///         DesiredSize = 1,
    ///         SpotStrategy = "SpotWithPriceLimit",
    ///         SpotPriceLimits = new[]
    ///         {
    ///             new AliCloud.CS.Inputs.NodePoolSpotPriceLimitArgs
    ///             {
    ///                 InstanceType = data.Alicloud_instance_types.Default.Instance_types[0].Id,
    ///                 PriceLimit = "0.70",
    ///             },
    ///         },
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// Use Spot instances to create a node pool with auto-scaling enabled
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var @default = new AliCloud.CS.NodePool("default", new()
    ///     {
    ///         ClusterId = alicloud_cs_managed_kubernetes.Default[0].Id,
    ///         VswitchIds = new[]
    ///         {
    ///             alicloud_vswitch.Default.Id,
    ///         },
    ///         InstanceTypes = new[]
    ///         {
    ///             data.Alicloud_instance_types.Default.Instance_types[0].Id,
    ///         },
    ///         SystemDiskCategory = "cloud_efficiency",
    ///         SystemDiskSize = 40,
    ///         KeyName = alicloud_key_pair.Default.Key_name,
    ///         ScalingConfig = new AliCloud.CS.Inputs.NodePoolScalingConfigArgs
    ///         {
    ///             MinSize = 1,
    ///             MaxSize = 10,
    ///             Type = "spot",
    ///         },
    ///         SpotStrategy = "SpotWithPriceLimit",
    ///         SpotPriceLimits = new[]
    ///         {
    ///             new AliCloud.CS.Inputs.NodePoolSpotPriceLimitArgs
    ///             {
    ///                 InstanceType = data.Alicloud_instance_types.Default.Instance_types[0].Id,
    ///                 PriceLimit = "0.70",
    ///             },
    ///         },
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// Create a node pool with platform as Windows
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var @default = new AliCloud.CS.NodePool("default", new()
    ///     {
    ///         ClusterId = alicloud_cs_managed_kubernetes.Default[0].Id,
    ///         VswitchIds = new[]
    ///         {
    ///             alicloud_vswitch.Default.Id,
    ///         },
    ///         InstanceTypes = new[]
    ///         {
    ///             data.Alicloud_instance_types.Default.Instance_types[0].Id,
    ///         },
    ///         SystemDiskCategory = "cloud_efficiency",
    ///         SystemDiskSize = 40,
    ///         InstanceChargeType = "PostPaid",
    ///         DesiredSize = 1,
    ///         Password = "Hello1234",
    ///         Platform = "Windows",
    ///         ImageId = window_image_id,
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// Add an existing node to the node pool
    /// 
    /// In order to distinguish automatically created nodes, it is recommended that existing nodes be placed separately in a node pool for management.
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var @default = new AliCloud.CS.NodePool("default", new()
    ///     {
    ///         ClusterId = alicloud_cs_managed_kubernetes.Default[0].Id,
    ///         VswitchIds = new[]
    ///         {
    ///             alicloud_vswitch.Default.Id,
    ///         },
    ///         InstanceTypes = new[]
    ///         {
    ///             data.Alicloud_instance_types.Default.Instance_types[0].Id,
    ///         },
    ///         SystemDiskCategory = "cloud_efficiency",
    ///         SystemDiskSize = 40,
    ///         InstanceChargeType = "PostPaid",
    ///         Instances = new[]
    ///         {
    ///             "instance_id_01",
    ///             "instance_id_02",
    ///             "instance_id_03",
    ///         },
    ///         FormatDisk = false,
    ///         KeepInstanceName = true,
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// Create a node pool with customized kubelet parameters
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using AliCloud = Pulumi.AliCloud;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var @default = new AliCloud.CS.NodePool("default", new()
    ///     {
    ///         ClusterId = alicloud_cs_managed_kubernetes.Default[0].Id,
    ///         VswitchIds = new[]
    ///         {
    ///             alicloud_vswitch.Default.Id,
    ///         },
    ///         InstanceTypes = new[]
    ///         {
    ///             data.Alicloud_instance_types.Default.Instance_types[0].Id,
    ///         },
    ///         SystemDiskCategory = "cloud_efficiency",
    ///         SystemDiskSize = 40,
    ///         InstanceChargeType = "PostPaid",
    ///         DesiredSize = 3,
    ///         KubeletConfiguration = new AliCloud.CS.Inputs.NodePoolKubeletConfigurationArgs
    ///         {
    ///             RegistryPullQps = "10",
    ///             RegistryBurst = "5",
    ///             EventRecordQps = "10",
    ///             EventBurst = "5",
    ///             EvictionHard = 
    ///             {
    ///                 { "memory.available", "1024Mi" },
    ///                 { "nodefs.available", "10%" },
    ///                 { "nodefs.inodesFree", "1000" },
    ///                 { "imagefs.available", "10%" },
    ///                 { "imagefs.inodesFree", "1000" },
    ///                 { "allocatableMemory.available", "2048" },
    ///                 { "pid.available", "1000" },
    ///             },
    ///             SystemReserved = 
    ///             {
    ///                 { "cpu", "1" },
    ///                 { "memory", "1Gi" },
    ///                 { "ephemeral-storage", "10Gi" },
    ///             },
    ///             KubeReserved = 
    ///             {
    ///                 { "cpu", "500m" },
    ///                 { "memory", "1Gi" },
    ///             },
    ///         },
    ///         RollingPolicy = new AliCloud.CS.Inputs.NodePoolRollingPolicyArgs
    ///         {
    ///             MaxParallelism = 1,
    ///         },
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// Cluster nodepool can be imported using the id, e.g. Then complete the nodepool.tf accords to the result of `terraform plan`.
    /// 
    /// ```sh
    ///  $ pulumi import alicloud:cs/nodePool:NodePool custom_nodepool cluster_id:nodepool_id
    /// ```
    /// </summary>
    [AliCloudResourceType("alicloud:cs/nodePool:NodePool")]
    public partial class NodePool : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Enable Node payment auto-renew, default is `false`.
        /// </summary>
        [Output("autoRenew")]
        public Output<bool?> AutoRenew { get; private set; } = null!;

        /// <summary>
        /// Node payment auto-renew period, one of `1`, `2`, `3`,`6`, `12`.
        /// </summary>
        [Output("autoRenewPeriod")]
        public Output<int?> AutoRenewPeriod { get; private set; } = null!;

        /// <summary>
        /// Whether enable worker node to support cis security reinforcement, its valid value `true` or `false`. Default to `false` and apply to AliyunLinux series. See [CIS Reinforcement](https://help.aliyun.com/document_detail/223744.html).
        /// </summary>
        [Output("cisEnabled")]
        public Output<bool?> CisEnabled { get; private set; } = null!;

        /// <summary>
        /// The id of kubernetes cluster.
        /// </summary>
        [Output("clusterId")]
        public Output<string> ClusterId { get; private set; } = null!;

        /// <summary>
        /// Kubelet cpu policy. For Kubernetes 1.12.6 and later, its valid value is either `static` or `none`. Default to `none` and modification is not supported.
        /// </summary>
        [Output("cpuPolicy")]
        public Output<string?> CpuPolicy { get; private set; } = null!;

        /// <summary>
        /// The data disk configurations of worker nodes, such as the disk type and disk size.
        /// </summary>
        [Output("dataDisks")]
        public Output<ImmutableArray<Outputs.NodePoolDataDisk>> DataDisks { get; private set; } = null!;

        /// <summary>
        /// The deployment set of node pool. Specify the deploymentSet to ensure that the nodes in the node pool can be distributed on different physical machines.
        /// </summary>
        [Output("deploymentSetId")]
        public Output<string> DeploymentSetId { get; private set; } = null!;

        /// <summary>
        /// The desired size of nodes of the node pool. From version 1.158.0, `desired_size` is not required.
        /// </summary>
        [Output("desiredSize")]
        public Output<int> DesiredSize { get; private set; } = null!;

        /// <summary>
        /// After you select this check box, if data disks have been attached to the specified ECS instances and the file system of the last data disk is uninitialized, the system automatically formats the last data disk to ext4 and mounts the data disk to /var/lib/docker and /var/lib/kubelet. The original data on the disk will be cleared. Make sure that you back up data in advance. If no data disk is mounted on the ECS instance, no new data disk will be purchased. Default is `false`.
        /// </summary>
        [Output("formatDisk")]
        public Output<bool> FormatDisk { get; private set; } = null!;

        /// <summary>
        /// Custom Image support. Must based on CentOS7 or AliyunLinux2.
        /// </summary>
        [Output("imageId")]
        public Output<string> ImageId { get; private set; } = null!;

        /// <summary>
        /// The image type, instead of `platform`. This field cannot be modified. One of `AliyunLinux`, `AliyunLinux3`, `AliyunLinux3Arm64`, `AliyunLinuxUEFI`, `CentOS`, `Windows`,`WindowsCore`,`AliyunLinux Qboot`,`ContainerOS`. If you select `Windows` or `WindowsCore`, the `passord` is required.
        /// </summary>
        [Output("imageType")]
        public Output<string> ImageType { get; private set; } = null!;

        /// <summary>
        /// Install the cloud monitoring plug-in on the node, and you can view the monitoring information of the instance through the cloud monitoring console. Default is `true`.
        /// </summary>
        [Output("installCloudMonitor")]
        public Output<bool?> InstallCloudMonitor { get; private set; } = null!;

        /// <summary>
        /// Node payment type. Valid values: `PostPaid`, `PrePaid`, default is `PostPaid`. If value is `PrePaid`, the arguments `period`, `period_unit`, `auto_renew` and `auto_renew_period` are required.
        /// </summary>
        [Output("instanceChargeType")]
        public Output<string?> InstanceChargeType { get; private set; } = null!;

        /// <summary>
        /// The instance type of worker node.
        /// </summary>
        [Output("instanceTypes")]
        public Output<ImmutableArray<string>> InstanceTypes { get; private set; } = null!;

        /// <summary>
        /// The instance list. Add existing nodes under the same cluster VPC to the node pool.
        /// </summary>
        [Output("instances")]
        public Output<ImmutableArray<string>> Instances { get; private set; } = null!;

        /// <summary>
        /// The billing method for network usage. Valid values `PayByBandwidth` and `PayByTraffic`. Conflict with `eip_internet_charge_type`, EIP and public network IP can only choose one.
        /// </summary>
        [Output("internetChargeType")]
        public Output<string> InternetChargeType { get; private set; } = null!;

        /// <summary>
        /// The maximum outbound bandwidth for the public network. Unit: Mbit/s. Valid values: 0 to 100.
        /// </summary>
        [Output("internetMaxBandwidthOut")]
        public Output<int> InternetMaxBandwidthOut { get; private set; } = null!;

        /// <summary>
        /// Add an existing instance to the node pool, whether to keep the original instance name. It is recommended to set to `true`.
        /// </summary>
        [Output("keepInstanceName")]
        public Output<bool> KeepInstanceName { get; private set; } = null!;

        /// <summary>
        /// The keypair of ssh login cluster node, you have to create it first. You have to specify one of `password` `key_name` `kms_encrypted_password` fields. Only `key_name` is supported in the management node pool.
        /// </summary>
        [Output("keyName")]
        public Output<string?> KeyName { get; private set; } = null!;

        /// <summary>
        /// An KMS encrypts password used to a cs kubernetes. You have to specify one of `password` `key_name` `kms_encrypted_password` fields.
        /// </summary>
        [Output("kmsEncryptedPassword")]
        public Output<string?> KmsEncryptedPassword { get; private set; } = null!;

        /// <summary>
        /// An KMS encryption context used to decrypt `kms_encrypted_password` before creating or updating a cs kubernetes with `kms_encrypted_password`. See [Encryption Context](https://www.alibabacloud.com/help/doc-detail/42975.htm). It is valid when `kms_encrypted_password` is set.
        /// </summary>
        [Output("kmsEncryptionContext")]
        public Output<ImmutableDictionary<string, object>?> KmsEncryptionContext { get; private set; } = null!;

        /// <summary>
        /// Kubelet configuration parameters for worker nodes. Detailed below. More information in [Kubelet Configuration](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/).
        /// </summary>
        [Output("kubeletConfiguration")]
        public Output<Outputs.NodePoolKubeletConfiguration?> KubeletConfiguration { get; private set; } = null!;

        /// <summary>
        /// A List of Kubernetes labels to assign to the nodes . Only labels that are applied with the ACK API are managed by this argument. Detailed below. More information in [Labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/).
        /// </summary>
        [Output("labels")]
        public Output<ImmutableArray<Outputs.NodePoolLabel>> Labels { get; private set; } = null!;

        /// <summary>
        /// Managed node pool configuration. When using a managed node pool, the node key must use `key_name`. Detailed below.
        /// </summary>
        [Output("management")]
        public Output<Outputs.NodePoolManagement?> Management { get; private set; } = null!;

        /// <summary>
        /// The name of node pool.
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// The worker node number of the node pool. From version 1.111.0, `node_count` is not required.
        /// </summary>
        [Output("nodeCount")]
        public Output<int> NodeCount { get; private set; } = null!;

        /// <summary>
        /// Each node name consists of a prefix, an IP substring, and a suffix, the input format is `customized,&lt;prefix&gt;,IPSubStringLen,&lt;suffix&gt;`. For example "customized,aliyun.com-,5,-test", if the node IP address is 192.168.59.176, the prefix is aliyun.com-, IP substring length is 5, and the suffix is -test, the node name will be aliyun.com-59176-test.
        /// </summary>
        [Output("nodeNameMode")]
        public Output<string> NodeNameMode { get; private set; } = null!;

        /// <summary>
        /// The password of ssh login cluster node. You have to specify one of `password` `key_name` `kms_encrypted_password` fields.
        /// </summary>
        [Output("password")]
        public Output<string?> Password { get; private set; } = null!;

        /// <summary>
        /// Node payment period. Its valid value is one of {1, 2, 3, 6, 12, 24, 36, 48, 60}.
        /// </summary>
        [Output("period")]
        public Output<int?> Period { get; private set; } = null!;

        /// <summary>
        /// Node payment period unit, valid value: `Month`. Default is `Month`.
        /// </summary>
        [Output("periodUnit")]
        public Output<string?> PeriodUnit { get; private set; } = null!;

        /// <summary>
        /// The platform. One of `AliyunLinux`, `Windows`, `CentOS`, `WindowsCore`. If you select `Windows` or `WindowsCore`, the `passord` is required. Field `platform` has been deprecated from provider version 1.145.0. New field `image_type` instead.
        /// </summary>
        [Output("platform")]
        public Output<string> Platform { get; private set; } = null!;

        /// <summary>
        /// PolarDB id list, You can choose which PolarDB whitelist to add instances to.
        /// </summary>
        [Output("polardbIds")]
        public Output<ImmutableArray<string>> PolardbIds { get; private set; } = null!;

        /// <summary>
        /// RDS instance list, You can choose which RDS instances whitelist to add instances to.
        /// </summary>
        [Output("rdsInstances")]
        public Output<ImmutableArray<string>> RdsInstances { get; private set; } = null!;

        /// <summary>
        /// The ID of the resource group,by default these cloud resources are automatically assigned to the default resource group.
        /// </summary>
        [Output("resourceGroupId")]
        public Output<string> ResourceGroupId { get; private set; } = null!;

        /// <summary>
        /// Rolling policy is used to specify the strategy when the node pool is rolling update. This field works when nodepool updating.
        /// </summary>
        [Output("rollingPolicy")]
        public Output<Outputs.NodePoolRollingPolicy?> RollingPolicy { get; private set; } = null!;

        /// <summary>
        /// Rollout policy is used to specify the strategy when the node pool is rolling update. This field works when node pool updating. Please use `rolling_policy` to instead it from provider version 1.185.0.
        /// </summary>
        [Output("rolloutPolicy")]
        public Output<Outputs.NodePoolRolloutPolicy?> RolloutPolicy { get; private set; } = null!;

        /// <summary>
        /// The runtime name of containers. If not set, the cluster runtime will be used as the node pool runtime. If you select another container runtime, see [Comparison of Docker, containerd, and Sandboxed-Container](https://www.alibabacloud.com/help/doc-detail/160313.htm).
        /// </summary>
        [Output("runtimeName")]
        public Output<string> RuntimeName { get; private set; } = null!;

        /// <summary>
        /// The runtime version of containers. If not set, the cluster runtime will be used as the node pool runtime.
        /// </summary>
        [Output("runtimeVersion")]
        public Output<string> RuntimeVersion { get; private set; } = null!;

        /// <summary>
        /// Auto scaling node pool configuration. For more details, see `scaling_config`. With auto-scaling is enabled, the nodes in the node pool will be labeled with `k8s.aliyun.com=true` to prevent system pods such as coredns, metrics-servers from being scheduled to elastic nodes, and to prevent node shrinkage from causing business abnormalities.
        /// </summary>
        [Output("scalingConfig")]
        public Output<Outputs.NodePoolScalingConfig?> ScalingConfig { get; private set; } = null!;

        /// <summary>
        /// (Available in 1.105.0+) Id of the Scaling Group.
        /// </summary>
        [Output("scalingGroupId")]
        public Output<string> ScalingGroupId { get; private set; } = null!;

        /// <summary>
        /// The scaling mode. Valid values: `release`, `recycle`, default is `release`. Standard mode(release): Create and release ECS instances based on requests.Swift mode(recycle): Create, stop, and restart ECS instances based on needs. New ECS instances are only created when no stopped ECS instance is avalible. This mode further accelerates the scaling process. Apart from ECS instances that use local storage, when an ECS instance is stopped, you are only chatged for storage space.
        /// </summary>
        [Output("scalingPolicy")]
        public Output<string> ScalingPolicy { get; private set; } = null!;

        /// <summary>
        /// The security group id for worker node. Field `security_group_id` has been deprecated from provider version 1.145.0. New field `security_group_ids` instead.
        /// </summary>
        [Output("securityGroupId")]
        public Output<string> SecurityGroupId { get; private set; } = null!;

        /// <summary>
        /// Multiple security groups can be configured for a node pool. If both `security_group_ids` and `security_group_id` are configured, `security_group_ids` takes effect. This field cannot be modified.
        /// </summary>
        [Output("securityGroupIds")]
        public Output<ImmutableArray<string>> SecurityGroupIds { get; private set; } = null!;

        /// <summary>
        /// Whether enable worker node to support soc security reinforcement, its valid value `true` or `false`. Default to `false` and apply to AliyunLinux series. See [SOC Reinforcement](https://help.aliyun.com/document_detail/196148.html).  
        /// &gt; **NOTE:** It is forbidden to set both `cis_enabled` and `soc_enabled` to `true`at the same time.
        /// </summary>
        [Output("socEnabled")]
        public Output<bool?> SocEnabled { get; private set; } = null!;

        /// <summary>
        /// The maximum hourly price of the instance. This parameter takes effect only when `spot_strategy` is set to `SpotWithPriceLimit`. You could enable multiple spot instances by setting this field repeatedly.
        /// </summary>
        [Output("spotPriceLimits")]
        public Output<ImmutableArray<Outputs.NodePoolSpotPriceLimit>> SpotPriceLimits { get; private set; } = null!;

        /// <summary>
        /// The preemption policy for the pay-as-you-go instance. This parameter takes effect only when `instance_charge_type` is set to `PostPaid`. Valid value `SpotWithPriceLimit`,`SpotAsPriceGo` and `NoSpot`, default is `NoSpot`.
        /// </summary>
        [Output("spotStrategy")]
        public Output<string> SpotStrategy { get; private set; } = null!;

        /// <summary>
        /// The system disk category of worker node. Its valid value are `cloud_ssd`, `cloud_efficiency` and `cloud_essd`. Default to `cloud_efficiency`.
        /// </summary>
        [Output("systemDiskCategory")]
        public Output<string?> SystemDiskCategory { get; private set; } = null!;

        /// <summary>
        /// The encryption Algorithm for Encrypting System Disk. It takes effect when system_disk_encrypted is true. Valid values `aes-256` and `sm4-128`.
        /// </summary>
        [Output("systemDiskEncryptAlgorithm")]
        public Output<string?> SystemDiskEncryptAlgorithm { get; private set; } = null!;

        /// <summary>
        /// Whether to enable system disk encryption.
        /// </summary>
        [Output("systemDiskEncrypted")]
        public Output<bool?> SystemDiskEncrypted { get; private set; } = null!;

        /// <summary>
        /// The kms key id used to encrypt the system disk. It takes effect when system_disk_encrypted is true.
        /// </summary>
        [Output("systemDiskKmsKey")]
        public Output<string?> SystemDiskKmsKey { get; private set; } = null!;

        /// <summary>
        /// The performance of system disk, only valid for ESSD disk. You have to specify one of `PL0` `PL1` `PL2` `PL3` fields.
        /// </summary>
        [Output("systemDiskPerformanceLevel")]
        public Output<string?> SystemDiskPerformanceLevel { get; private set; } = null!;

        /// <summary>
        /// The system disk category of worker node. Its valid value range [40~500] in GB. Default to `120`.
        /// </summary>
        [Output("systemDiskSize")]
        public Output<int?> SystemDiskSize { get; private set; } = null!;

        /// <summary>
        /// The system disk snapshot policy id.
        /// </summary>
        [Output("systemDiskSnapshotPolicyId")]
        public Output<string?> SystemDiskSnapshotPolicyId { get; private set; } = null!;

        /// <summary>
        /// A Map of tags to assign to the resource. It will be applied for ECS instances finally. Detailed below.
        /// </summary>
        [Output("tags")]
        public Output<ImmutableDictionary<string, object>?> Tags { get; private set; } = null!;

        /// <summary>
        /// A List of Kubernetes taints to assign to the nodes. Detailed below. More information in [Taints and Toleration](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/).
        /// </summary>
        [Output("taints")]
        public Output<ImmutableArray<Outputs.NodePoolTaint>> Taints { get; private set; } = null!;

        /// <summary>
        /// Set the newly added node as unschedulable. If you want to open the scheduling option, you can open it in the node list of the console. If you are using an auto-scaling node pool, the setting will not take effect. Default is `false`.
        /// </summary>
        [Output("unschedulable")]
        public Output<bool?> Unschedulable { get; private set; } = null!;

        /// <summary>
        /// Windows instances support batch and PowerShell scripts. If your script file is larger than 1 KB, we recommend that you upload the script to Object Storage Service (OSS) and pull it through the internal endpoint of your OSS bucket.
        /// </summary>
        [Output("userData")]
        public Output<string?> UserData { get; private set; } = null!;

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

        /// <summary>
        /// The vswitches used by node pool workers.
        /// </summary>
        [Output("vswitchIds")]
        public Output<ImmutableArray<string>> VswitchIds { get; private set; } = null!;


        /// <summary>
        /// Create a NodePool 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 NodePool(string name, NodePoolArgs args, CustomResourceOptions? options = null)
            : base("alicloud:cs/nodePool:NodePool", name, args ?? new NodePoolArgs(), MakeResourceOptions(options, ""))
        {
        }

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

    public sealed class NodePoolArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable Node payment auto-renew, default is `false`.
        /// </summary>
        [Input("autoRenew")]
        public Input<bool>? AutoRenew { get; set; }

        /// <summary>
        /// Node payment auto-renew period, one of `1`, `2`, `3`,`6`, `12`.
        /// </summary>
        [Input("autoRenewPeriod")]
        public Input<int>? AutoRenewPeriod { get; set; }

        /// <summary>
        /// Whether enable worker node to support cis security reinforcement, its valid value `true` or `false`. Default to `false` and apply to AliyunLinux series. See [CIS Reinforcement](https://help.aliyun.com/document_detail/223744.html).
        /// </summary>
        [Input("cisEnabled")]
        public Input<bool>? CisEnabled { get; set; }

        /// <summary>
        /// The id of kubernetes cluster.
        /// </summary>
        [Input("clusterId", required: true)]
        public Input<string> ClusterId { get; set; } = null!;

        /// <summary>
        /// Kubelet cpu policy. For Kubernetes 1.12.6 and later, its valid value is either `static` or `none`. Default to `none` and modification is not supported.
        /// </summary>
        [Input("cpuPolicy")]
        public Input<string>? CpuPolicy { get; set; }

        [Input("dataDisks")]
        private InputList<Inputs.NodePoolDataDiskArgs>? _dataDisks;

        /// <summary>
        /// The data disk configurations of worker nodes, such as the disk type and disk size.
        /// </summary>
        public InputList<Inputs.NodePoolDataDiskArgs> DataDisks
        {
            get => _dataDisks ?? (_dataDisks = new InputList<Inputs.NodePoolDataDiskArgs>());
            set => _dataDisks = value;
        }

        /// <summary>
        /// The deployment set of node pool. Specify the deploymentSet to ensure that the nodes in the node pool can be distributed on different physical machines.
        /// </summary>
        [Input("deploymentSetId")]
        public Input<string>? DeploymentSetId { get; set; }

        /// <summary>
        /// The desired size of nodes of the node pool. From version 1.158.0, `desired_size` is not required.
        /// </summary>
        [Input("desiredSize")]
        public Input<int>? DesiredSize { get; set; }

        /// <summary>
        /// After you select this check box, if data disks have been attached to the specified ECS instances and the file system of the last data disk is uninitialized, the system automatically formats the last data disk to ext4 and mounts the data disk to /var/lib/docker and /var/lib/kubelet. The original data on the disk will be cleared. Make sure that you back up data in advance. If no data disk is mounted on the ECS instance, no new data disk will be purchased. Default is `false`.
        /// </summary>
        [Input("formatDisk")]
        public Input<bool>? FormatDisk { get; set; }

        /// <summary>
        /// Custom Image support. Must based on CentOS7 or AliyunLinux2.
        /// </summary>
        [Input("imageId")]
        public Input<string>? ImageId { get; set; }

        /// <summary>
        /// The image type, instead of `platform`. This field cannot be modified. One of `AliyunLinux`, `AliyunLinux3`, `AliyunLinux3Arm64`, `AliyunLinuxUEFI`, `CentOS`, `Windows`,`WindowsCore`,`AliyunLinux Qboot`,`ContainerOS`. If you select `Windows` or `WindowsCore`, the `passord` is required.
        /// </summary>
        [Input("imageType")]
        public Input<string>? ImageType { get; set; }

        /// <summary>
        /// Install the cloud monitoring plug-in on the node, and you can view the monitoring information of the instance through the cloud monitoring console. Default is `true`.
        /// </summary>
        [Input("installCloudMonitor")]
        public Input<bool>? InstallCloudMonitor { get; set; }

        /// <summary>
        /// Node payment type. Valid values: `PostPaid`, `PrePaid`, default is `PostPaid`. If value is `PrePaid`, the arguments `period`, `period_unit`, `auto_renew` and `auto_renew_period` are required.
        /// </summary>
        [Input("instanceChargeType")]
        public Input<string>? InstanceChargeType { get; set; }

        [Input("instanceTypes", required: true)]
        private InputList<string>? _instanceTypes;

        /// <summary>
        /// The instance type of worker node.
        /// </summary>
        public InputList<string> InstanceTypes
        {
            get => _instanceTypes ?? (_instanceTypes = new InputList<string>());
            set => _instanceTypes = value;
        }

        [Input("instances")]
        private InputList<string>? _instances;

        /// <summary>
        /// The instance list. Add existing nodes under the same cluster VPC to the node pool.
        /// </summary>
        public InputList<string> Instances
        {
            get => _instances ?? (_instances = new InputList<string>());
            set => _instances = value;
        }

        /// <summary>
        /// The billing method for network usage. Valid values `PayByBandwidth` and `PayByTraffic`. Conflict with `eip_internet_charge_type`, EIP and public network IP can only choose one.
        /// </summary>
        [Input("internetChargeType")]
        public Input<string>? InternetChargeType { get; set; }

        /// <summary>
        /// The maximum outbound bandwidth for the public network. Unit: Mbit/s. Valid values: 0 to 100.
        /// </summary>
        [Input("internetMaxBandwidthOut")]
        public Input<int>? InternetMaxBandwidthOut { get; set; }

        /// <summary>
        /// Add an existing instance to the node pool, whether to keep the original instance name. It is recommended to set to `true`.
        /// </summary>
        [Input("keepInstanceName")]
        public Input<bool>? KeepInstanceName { get; set; }

        /// <summary>
        /// The keypair of ssh login cluster node, you have to create it first. You have to specify one of `password` `key_name` `kms_encrypted_password` fields. Only `key_name` is supported in the management node pool.
        /// </summary>
        [Input("keyName")]
        public Input<string>? KeyName { get; set; }

        /// <summary>
        /// An KMS encrypts password used to a cs kubernetes. You have to specify one of `password` `key_name` `kms_encrypted_password` fields.
        /// </summary>
        [Input("kmsEncryptedPassword")]
        public Input<string>? KmsEncryptedPassword { get; set; }

        [Input("kmsEncryptionContext")]
        private InputMap<object>? _kmsEncryptionContext;

        /// <summary>
        /// An KMS encryption context used to decrypt `kms_encrypted_password` before creating or updating a cs kubernetes with `kms_encrypted_password`. See [Encryption Context](https://www.alibabacloud.com/help/doc-detail/42975.htm). It is valid when `kms_encrypted_password` is set.
        /// </summary>
        public InputMap<object> KmsEncryptionContext
        {
            get => _kmsEncryptionContext ?? (_kmsEncryptionContext = new InputMap<object>());
            set => _kmsEncryptionContext = value;
        }

        /// <summary>
        /// Kubelet configuration parameters for worker nodes. Detailed below. More information in [Kubelet Configuration](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/).
        /// </summary>
        [Input("kubeletConfiguration")]
        public Input<Inputs.NodePoolKubeletConfigurationArgs>? KubeletConfiguration { get; set; }

        [Input("labels")]
        private InputList<Inputs.NodePoolLabelArgs>? _labels;

        /// <summary>
        /// A List of Kubernetes labels to assign to the nodes . Only labels that are applied with the ACK API are managed by this argument. Detailed below. More information in [Labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/).
        /// </summary>
        public InputList<Inputs.NodePoolLabelArgs> Labels
        {
            get => _labels ?? (_labels = new InputList<Inputs.NodePoolLabelArgs>());
            set => _labels = value;
        }

        /// <summary>
        /// Managed node pool configuration. When using a managed node pool, the node key must use `key_name`. Detailed below.
        /// </summary>
        [Input("management")]
        public Input<Inputs.NodePoolManagementArgs>? Management { get; set; }

        /// <summary>
        /// The name of node pool.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// The worker node number of the node pool. From version 1.111.0, `node_count` is not required.
        /// </summary>
        [Input("nodeCount")]
        public Input<int>? NodeCount { get; set; }

        /// <summary>
        /// Each node name consists of a prefix, an IP substring, and a suffix, the input format is `customized,&lt;prefix&gt;,IPSubStringLen,&lt;suffix&gt;`. For example "customized,aliyun.com-,5,-test", if the node IP address is 192.168.59.176, the prefix is aliyun.com-, IP substring length is 5, and the suffix is -test, the node name will be aliyun.com-59176-test.
        /// </summary>
        [Input("nodeNameMode")]
        public Input<string>? NodeNameMode { get; set; }

        /// <summary>
        /// The password of ssh login cluster node. You have to specify one of `password` `key_name` `kms_encrypted_password` fields.
        /// </summary>
        [Input("password")]
        public Input<string>? Password { get; set; }

        /// <summary>
        /// Node payment period. Its valid value is one of {1, 2, 3, 6, 12, 24, 36, 48, 60}.
        /// </summary>
        [Input("period")]
        public Input<int>? Period { get; set; }

        /// <summary>
        /// Node payment period unit, valid value: `Month`. Default is `Month`.
        /// </summary>
        [Input("periodUnit")]
        public Input<string>? PeriodUnit { get; set; }

        /// <summary>
        /// The platform. One of `AliyunLinux`, `Windows`, `CentOS`, `WindowsCore`. If you select `Windows` or `WindowsCore`, the `passord` is required. Field `platform` has been deprecated from provider version 1.145.0. New field `image_type` instead.
        /// </summary>
        [Input("platform")]
        public Input<string>? Platform { get; set; }

        [Input("polardbIds")]
        private InputList<string>? _polardbIds;

        /// <summary>
        /// PolarDB id list, You can choose which PolarDB whitelist to add instances to.
        /// </summary>
        public InputList<string> PolardbIds
        {
            get => _polardbIds ?? (_polardbIds = new InputList<string>());
            set => _polardbIds = value;
        }

        [Input("rdsInstances")]
        private InputList<string>? _rdsInstances;

        /// <summary>
        /// RDS instance list, You can choose which RDS instances whitelist to add instances to.
        /// </summary>
        public InputList<string> RdsInstances
        {
            get => _rdsInstances ?? (_rdsInstances = new InputList<string>());
            set => _rdsInstances = value;
        }

        /// <summary>
        /// The ID of the resource group,by default these cloud resources are automatically assigned to the default resource group.
        /// </summary>
        [Input("resourceGroupId")]
        public Input<string>? ResourceGroupId { get; set; }

        /// <summary>
        /// Rolling policy is used to specify the strategy when the node pool is rolling update. This field works when nodepool updating.
        /// </summary>
        [Input("rollingPolicy")]
        public Input<Inputs.NodePoolRollingPolicyArgs>? RollingPolicy { get; set; }

        /// <summary>
        /// Rollout policy is used to specify the strategy when the node pool is rolling update. This field works when node pool updating. Please use `rolling_policy` to instead it from provider version 1.185.0.
        /// </summary>
        [Input("rolloutPolicy")]
        public Input<Inputs.NodePoolRolloutPolicyArgs>? RolloutPolicy { get; set; }

        /// <summary>
        /// The runtime name of containers. If not set, the cluster runtime will be used as the node pool runtime. If you select another container runtime, see [Comparison of Docker, containerd, and Sandboxed-Container](https://www.alibabacloud.com/help/doc-detail/160313.htm).
        /// </summary>
        [Input("runtimeName")]
        public Input<string>? RuntimeName { get; set; }

        /// <summary>
        /// The runtime version of containers. If not set, the cluster runtime will be used as the node pool runtime.
        /// </summary>
        [Input("runtimeVersion")]
        public Input<string>? RuntimeVersion { get; set; }

        /// <summary>
        /// Auto scaling node pool configuration. For more details, see `scaling_config`. With auto-scaling is enabled, the nodes in the node pool will be labeled with `k8s.aliyun.com=true` to prevent system pods such as coredns, metrics-servers from being scheduled to elastic nodes, and to prevent node shrinkage from causing business abnormalities.
        /// </summary>
        [Input("scalingConfig")]
        public Input<Inputs.NodePoolScalingConfigArgs>? ScalingConfig { get; set; }

        /// <summary>
        /// The scaling mode. Valid values: `release`, `recycle`, default is `release`. Standard mode(release): Create and release ECS instances based on requests.Swift mode(recycle): Create, stop, and restart ECS instances based on needs. New ECS instances are only created when no stopped ECS instance is avalible. This mode further accelerates the scaling process. Apart from ECS instances that use local storage, when an ECS instance is stopped, you are only chatged for storage space.
        /// </summary>
        [Input("scalingPolicy")]
        public Input<string>? ScalingPolicy { get; set; }

        /// <summary>
        /// The security group id for worker node. Field `security_group_id` has been deprecated from provider version 1.145.0. New field `security_group_ids` instead.
        /// </summary>
        [Input("securityGroupId")]
        public Input<string>? SecurityGroupId { get; set; }

        [Input("securityGroupIds")]
        private InputList<string>? _securityGroupIds;

        /// <summary>
        /// Multiple security groups can be configured for a node pool. If both `security_group_ids` and `security_group_id` are configured, `security_group_ids` takes effect. This field cannot be modified.
        /// </summary>
        public InputList<string> SecurityGroupIds
        {
            get => _securityGroupIds ?? (_securityGroupIds = new InputList<string>());
            set => _securityGroupIds = value;
        }

        /// <summary>
        /// Whether enable worker node to support soc security reinforcement, its valid value `true` or `false`. Default to `false` and apply to AliyunLinux series. See [SOC Reinforcement](https://help.aliyun.com/document_detail/196148.html).  
        /// &gt; **NOTE:** It is forbidden to set both `cis_enabled` and `soc_enabled` to `true`at the same time.
        /// </summary>
        [Input("socEnabled")]
        public Input<bool>? SocEnabled { get; set; }

        [Input("spotPriceLimits")]
        private InputList<Inputs.NodePoolSpotPriceLimitArgs>? _spotPriceLimits;

        /// <summary>
        /// The maximum hourly price of the instance. This parameter takes effect only when `spot_strategy` is set to `SpotWithPriceLimit`. You could enable multiple spot instances by setting this field repeatedly.
        /// </summary>
        public InputList<Inputs.NodePoolSpotPriceLimitArgs> SpotPriceLimits
        {
            get => _spotPriceLimits ?? (_spotPriceLimits = new InputList<Inputs.NodePoolSpotPriceLimitArgs>());
            set => _spotPriceLimits = value;
        }

        /// <summary>
        /// The preemption policy for the pay-as-you-go instance. This parameter takes effect only when `instance_charge_type` is set to `PostPaid`. Valid value `SpotWithPriceLimit`,`SpotAsPriceGo` and `NoSpot`, default is `NoSpot`.
        /// </summary>
        [Input("spotStrategy")]
        public Input<string>? SpotStrategy { get; set; }

        /// <summary>
        /// The system disk category of worker node. Its valid value are `cloud_ssd`, `cloud_efficiency` and `cloud_essd`. Default to `cloud_efficiency`.
        /// </summary>
        [Input("systemDiskCategory")]
        public Input<string>? SystemDiskCategory { get; set; }

        /// <summary>
        /// The encryption Algorithm for Encrypting System Disk. It takes effect when system_disk_encrypted is true. Valid values `aes-256` and `sm4-128`.
        /// </summary>
        [Input("systemDiskEncryptAlgorithm")]
        public Input<string>? SystemDiskEncryptAlgorithm { get; set; }

        /// <summary>
        /// Whether to enable system disk encryption.
        /// </summary>
        [Input("systemDiskEncrypted")]
        public Input<bool>? SystemDiskEncrypted { get; set; }

        /// <summary>
        /// The kms key id used to encrypt the system disk. It takes effect when system_disk_encrypted is true.
        /// </summary>
        [Input("systemDiskKmsKey")]
        public Input<string>? SystemDiskKmsKey { get; set; }

        /// <summary>
        /// The performance of system disk, only valid for ESSD disk. You have to specify one of `PL0` `PL1` `PL2` `PL3` fields.
        /// </summary>
        [Input("systemDiskPerformanceLevel")]
        public Input<string>? SystemDiskPerformanceLevel { get; set; }

        /// <summary>
        /// The system disk category of worker node. Its valid value range [40~500] in GB. Default to `120`.
        /// </summary>
        [Input("systemDiskSize")]
        public Input<int>? SystemDiskSize { get; set; }

        /// <summary>
        /// The system disk snapshot policy id.
        /// </summary>
        [Input("systemDiskSnapshotPolicyId")]
        public Input<string>? SystemDiskSnapshotPolicyId { get; set; }

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

        /// <summary>
        /// A Map of tags to assign to the resource. It will be applied for ECS instances finally. Detailed below.
        /// </summary>
        public InputMap<object> Tags
        {
            get => _tags ?? (_tags = new InputMap<object>());
            set => _tags = value;
        }

        [Input("taints")]
        private InputList<Inputs.NodePoolTaintArgs>? _taints;

        /// <summary>
        /// A List of Kubernetes taints to assign to the nodes. Detailed below. More information in [Taints and Toleration](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/).
        /// </summary>
        public InputList<Inputs.NodePoolTaintArgs> Taints
        {
            get => _taints ?? (_taints = new InputList<Inputs.NodePoolTaintArgs>());
            set => _taints = value;
        }

        /// <summary>
        /// Set the newly added node as unschedulable. If you want to open the scheduling option, you can open it in the node list of the console. If you are using an auto-scaling node pool, the setting will not take effect. Default is `false`.
        /// </summary>
        [Input("unschedulable")]
        public Input<bool>? Unschedulable { get; set; }

        /// <summary>
        /// Windows instances support batch and PowerShell scripts. If your script file is larger than 1 KB, we recommend that you upload the script to Object Storage Service (OSS) and pull it through the internal endpoint of your OSS bucket.
        /// </summary>
        [Input("userData")]
        public Input<string>? UserData { get; set; }

        [Input("vswitchIds", required: true)]
        private InputList<string>? _vswitchIds;

        /// <summary>
        /// The vswitches used by node pool workers.
        /// </summary>
        public InputList<string> VswitchIds
        {
            get => _vswitchIds ?? (_vswitchIds = new InputList<string>());
            set => _vswitchIds = value;
        }

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

    public sealed class NodePoolState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable Node payment auto-renew, default is `false`.
        /// </summary>
        [Input("autoRenew")]
        public Input<bool>? AutoRenew { get; set; }

        /// <summary>
        /// Node payment auto-renew period, one of `1`, `2`, `3`,`6`, `12`.
        /// </summary>
        [Input("autoRenewPeriod")]
        public Input<int>? AutoRenewPeriod { get; set; }

        /// <summary>
        /// Whether enable worker node to support cis security reinforcement, its valid value `true` or `false`. Default to `false` and apply to AliyunLinux series. See [CIS Reinforcement](https://help.aliyun.com/document_detail/223744.html).
        /// </summary>
        [Input("cisEnabled")]
        public Input<bool>? CisEnabled { get; set; }

        /// <summary>
        /// The id of kubernetes cluster.
        /// </summary>
        [Input("clusterId")]
        public Input<string>? ClusterId { get; set; }

        /// <summary>
        /// Kubelet cpu policy. For Kubernetes 1.12.6 and later, its valid value is either `static` or `none`. Default to `none` and modification is not supported.
        /// </summary>
        [Input("cpuPolicy")]
        public Input<string>? CpuPolicy { get; set; }

        [Input("dataDisks")]
        private InputList<Inputs.NodePoolDataDiskGetArgs>? _dataDisks;

        /// <summary>
        /// The data disk configurations of worker nodes, such as the disk type and disk size.
        /// </summary>
        public InputList<Inputs.NodePoolDataDiskGetArgs> DataDisks
        {
            get => _dataDisks ?? (_dataDisks = new InputList<Inputs.NodePoolDataDiskGetArgs>());
            set => _dataDisks = value;
        }

        /// <summary>
        /// The deployment set of node pool. Specify the deploymentSet to ensure that the nodes in the node pool can be distributed on different physical machines.
        /// </summary>
        [Input("deploymentSetId")]
        public Input<string>? DeploymentSetId { get; set; }

        /// <summary>
        /// The desired size of nodes of the node pool. From version 1.158.0, `desired_size` is not required.
        /// </summary>
        [Input("desiredSize")]
        public Input<int>? DesiredSize { get; set; }

        /// <summary>
        /// After you select this check box, if data disks have been attached to the specified ECS instances and the file system of the last data disk is uninitialized, the system automatically formats the last data disk to ext4 and mounts the data disk to /var/lib/docker and /var/lib/kubelet. The original data on the disk will be cleared. Make sure that you back up data in advance. If no data disk is mounted on the ECS instance, no new data disk will be purchased. Default is `false`.
        /// </summary>
        [Input("formatDisk")]
        public Input<bool>? FormatDisk { get; set; }

        /// <summary>
        /// Custom Image support. Must based on CentOS7 or AliyunLinux2.
        /// </summary>
        [Input("imageId")]
        public Input<string>? ImageId { get; set; }

        /// <summary>
        /// The image type, instead of `platform`. This field cannot be modified. One of `AliyunLinux`, `AliyunLinux3`, `AliyunLinux3Arm64`, `AliyunLinuxUEFI`, `CentOS`, `Windows`,`WindowsCore`,`AliyunLinux Qboot`,`ContainerOS`. If you select `Windows` or `WindowsCore`, the `passord` is required.
        /// </summary>
        [Input("imageType")]
        public Input<string>? ImageType { get; set; }

        /// <summary>
        /// Install the cloud monitoring plug-in on the node, and you can view the monitoring information of the instance through the cloud monitoring console. Default is `true`.
        /// </summary>
        [Input("installCloudMonitor")]
        public Input<bool>? InstallCloudMonitor { get; set; }

        /// <summary>
        /// Node payment type. Valid values: `PostPaid`, `PrePaid`, default is `PostPaid`. If value is `PrePaid`, the arguments `period`, `period_unit`, `auto_renew` and `auto_renew_period` are required.
        /// </summary>
        [Input("instanceChargeType")]
        public Input<string>? InstanceChargeType { get; set; }

        [Input("instanceTypes")]
        private InputList<string>? _instanceTypes;

        /// <summary>
        /// The instance type of worker node.
        /// </summary>
        public InputList<string> InstanceTypes
        {
            get => _instanceTypes ?? (_instanceTypes = new InputList<string>());
            set => _instanceTypes = value;
        }

        [Input("instances")]
        private InputList<string>? _instances;

        /// <summary>
        /// The instance list. Add existing nodes under the same cluster VPC to the node pool.
        /// </summary>
        public InputList<string> Instances
        {
            get => _instances ?? (_instances = new InputList<string>());
            set => _instances = value;
        }

        /// <summary>
        /// The billing method for network usage. Valid values `PayByBandwidth` and `PayByTraffic`. Conflict with `eip_internet_charge_type`, EIP and public network IP can only choose one.
        /// </summary>
        [Input("internetChargeType")]
        public Input<string>? InternetChargeType { get; set; }

        /// <summary>
        /// The maximum outbound bandwidth for the public network. Unit: Mbit/s. Valid values: 0 to 100.
        /// </summary>
        [Input("internetMaxBandwidthOut")]
        public Input<int>? InternetMaxBandwidthOut { get; set; }

        /// <summary>
        /// Add an existing instance to the node pool, whether to keep the original instance name. It is recommended to set to `true`.
        /// </summary>
        [Input("keepInstanceName")]
        public Input<bool>? KeepInstanceName { get; set; }

        /// <summary>
        /// The keypair of ssh login cluster node, you have to create it first. You have to specify one of `password` `key_name` `kms_encrypted_password` fields. Only `key_name` is supported in the management node pool.
        /// </summary>
        [Input("keyName")]
        public Input<string>? KeyName { get; set; }

        /// <summary>
        /// An KMS encrypts password used to a cs kubernetes. You have to specify one of `password` `key_name` `kms_encrypted_password` fields.
        /// </summary>
        [Input("kmsEncryptedPassword")]
        public Input<string>? KmsEncryptedPassword { get; set; }

        [Input("kmsEncryptionContext")]
        private InputMap<object>? _kmsEncryptionContext;

        /// <summary>
        /// An KMS encryption context used to decrypt `kms_encrypted_password` before creating or updating a cs kubernetes with `kms_encrypted_password`. See [Encryption Context](https://www.alibabacloud.com/help/doc-detail/42975.htm). It is valid when `kms_encrypted_password` is set.
        /// </summary>
        public InputMap<object> KmsEncryptionContext
        {
            get => _kmsEncryptionContext ?? (_kmsEncryptionContext = new InputMap<object>());
            set => _kmsEncryptionContext = value;
        }

        /// <summary>
        /// Kubelet configuration parameters for worker nodes. Detailed below. More information in [Kubelet Configuration](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/).
        /// </summary>
        [Input("kubeletConfiguration")]
        public Input<Inputs.NodePoolKubeletConfigurationGetArgs>? KubeletConfiguration { get; set; }

        [Input("labels")]
        private InputList<Inputs.NodePoolLabelGetArgs>? _labels;

        /// <summary>
        /// A List of Kubernetes labels to assign to the nodes . Only labels that are applied with the ACK API are managed by this argument. Detailed below. More information in [Labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/).
        /// </summary>
        public InputList<Inputs.NodePoolLabelGetArgs> Labels
        {
            get => _labels ?? (_labels = new InputList<Inputs.NodePoolLabelGetArgs>());
            set => _labels = value;
        }

        /// <summary>
        /// Managed node pool configuration. When using a managed node pool, the node key must use `key_name`. Detailed below.
        /// </summary>
        [Input("management")]
        public Input<Inputs.NodePoolManagementGetArgs>? Management { get; set; }

        /// <summary>
        /// The name of node pool.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// The worker node number of the node pool. From version 1.111.0, `node_count` is not required.
        /// </summary>
        [Input("nodeCount")]
        public Input<int>? NodeCount { get; set; }

        /// <summary>
        /// Each node name consists of a prefix, an IP substring, and a suffix, the input format is `customized,&lt;prefix&gt;,IPSubStringLen,&lt;suffix&gt;`. For example "customized,aliyun.com-,5,-test", if the node IP address is 192.168.59.176, the prefix is aliyun.com-, IP substring length is 5, and the suffix is -test, the node name will be aliyun.com-59176-test.
        /// </summary>
        [Input("nodeNameMode")]
        public Input<string>? NodeNameMode { get; set; }

        /// <summary>
        /// The password of ssh login cluster node. You have to specify one of `password` `key_name` `kms_encrypted_password` fields.
        /// </summary>
        [Input("password")]
        public Input<string>? Password { get; set; }

        /// <summary>
        /// Node payment period. Its valid value is one of {1, 2, 3, 6, 12, 24, 36, 48, 60}.
        /// </summary>
        [Input("period")]
        public Input<int>? Period { get; set; }

        /// <summary>
        /// Node payment period unit, valid value: `Month`. Default is `Month`.
        /// </summary>
        [Input("periodUnit")]
        public Input<string>? PeriodUnit { get; set; }

        /// <summary>
        /// The platform. One of `AliyunLinux`, `Windows`, `CentOS`, `WindowsCore`. If you select `Windows` or `WindowsCore`, the `passord` is required. Field `platform` has been deprecated from provider version 1.145.0. New field `image_type` instead.
        /// </summary>
        [Input("platform")]
        public Input<string>? Platform { get; set; }

        [Input("polardbIds")]
        private InputList<string>? _polardbIds;

        /// <summary>
        /// PolarDB id list, You can choose which PolarDB whitelist to add instances to.
        /// </summary>
        public InputList<string> PolardbIds
        {
            get => _polardbIds ?? (_polardbIds = new InputList<string>());
            set => _polardbIds = value;
        }

        [Input("rdsInstances")]
        private InputList<string>? _rdsInstances;

        /// <summary>
        /// RDS instance list, You can choose which RDS instances whitelist to add instances to.
        /// </summary>
        public InputList<string> RdsInstances
        {
            get => _rdsInstances ?? (_rdsInstances = new InputList<string>());
            set => _rdsInstances = value;
        }

        /// <summary>
        /// The ID of the resource group,by default these cloud resources are automatically assigned to the default resource group.
        /// </summary>
        [Input("resourceGroupId")]
        public Input<string>? ResourceGroupId { get; set; }

        /// <summary>
        /// Rolling policy is used to specify the strategy when the node pool is rolling update. This field works when nodepool updating.
        /// </summary>
        [Input("rollingPolicy")]
        public Input<Inputs.NodePoolRollingPolicyGetArgs>? RollingPolicy { get; set; }

        /// <summary>
        /// Rollout policy is used to specify the strategy when the node pool is rolling update. This field works when node pool updating. Please use `rolling_policy` to instead it from provider version 1.185.0.
        /// </summary>
        [Input("rolloutPolicy")]
        public Input<Inputs.NodePoolRolloutPolicyGetArgs>? RolloutPolicy { get; set; }

        /// <summary>
        /// The runtime name of containers. If not set, the cluster runtime will be used as the node pool runtime. If you select another container runtime, see [Comparison of Docker, containerd, and Sandboxed-Container](https://www.alibabacloud.com/help/doc-detail/160313.htm).
        /// </summary>
        [Input("runtimeName")]
        public Input<string>? RuntimeName { get; set; }

        /// <summary>
        /// The runtime version of containers. If not set, the cluster runtime will be used as the node pool runtime.
        /// </summary>
        [Input("runtimeVersion")]
        public Input<string>? RuntimeVersion { get; set; }

        /// <summary>
        /// Auto scaling node pool configuration. For more details, see `scaling_config`. With auto-scaling is enabled, the nodes in the node pool will be labeled with `k8s.aliyun.com=true` to prevent system pods such as coredns, metrics-servers from being scheduled to elastic nodes, and to prevent node shrinkage from causing business abnormalities.
        /// </summary>
        [Input("scalingConfig")]
        public Input<Inputs.NodePoolScalingConfigGetArgs>? ScalingConfig { get; set; }

        /// <summary>
        /// (Available in 1.105.0+) Id of the Scaling Group.
        /// </summary>
        [Input("scalingGroupId")]
        public Input<string>? ScalingGroupId { get; set; }

        /// <summary>
        /// The scaling mode. Valid values: `release`, `recycle`, default is `release`. Standard mode(release): Create and release ECS instances based on requests.Swift mode(recycle): Create, stop, and restart ECS instances based on needs. New ECS instances are only created when no stopped ECS instance is avalible. This mode further accelerates the scaling process. Apart from ECS instances that use local storage, when an ECS instance is stopped, you are only chatged for storage space.
        /// </summary>
        [Input("scalingPolicy")]
        public Input<string>? ScalingPolicy { get; set; }

        /// <summary>
        /// The security group id for worker node. Field `security_group_id` has been deprecated from provider version 1.145.0. New field `security_group_ids` instead.
        /// </summary>
        [Input("securityGroupId")]
        public Input<string>? SecurityGroupId { get; set; }

        [Input("securityGroupIds")]
        private InputList<string>? _securityGroupIds;

        /// <summary>
        /// Multiple security groups can be configured for a node pool. If both `security_group_ids` and `security_group_id` are configured, `security_group_ids` takes effect. This field cannot be modified.
        /// </summary>
        public InputList<string> SecurityGroupIds
        {
            get => _securityGroupIds ?? (_securityGroupIds = new InputList<string>());
            set => _securityGroupIds = value;
        }

        /// <summary>
        /// Whether enable worker node to support soc security reinforcement, its valid value `true` or `false`. Default to `false` and apply to AliyunLinux series. See [SOC Reinforcement](https://help.aliyun.com/document_detail/196148.html).  
        /// &gt; **NOTE:** It is forbidden to set both `cis_enabled` and `soc_enabled` to `true`at the same time.
        /// </summary>
        [Input("socEnabled")]
        public Input<bool>? SocEnabled { get; set; }

        [Input("spotPriceLimits")]
        private InputList<Inputs.NodePoolSpotPriceLimitGetArgs>? _spotPriceLimits;

        /// <summary>
        /// The maximum hourly price of the instance. This parameter takes effect only when `spot_strategy` is set to `SpotWithPriceLimit`. You could enable multiple spot instances by setting this field repeatedly.
        /// </summary>
        public InputList<Inputs.NodePoolSpotPriceLimitGetArgs> SpotPriceLimits
        {
            get => _spotPriceLimits ?? (_spotPriceLimits = new InputList<Inputs.NodePoolSpotPriceLimitGetArgs>());
            set => _spotPriceLimits = value;
        }

        /// <summary>
        /// The preemption policy for the pay-as-you-go instance. This parameter takes effect only when `instance_charge_type` is set to `PostPaid`. Valid value `SpotWithPriceLimit`,`SpotAsPriceGo` and `NoSpot`, default is `NoSpot`.
        /// </summary>
        [Input("spotStrategy")]
        public Input<string>? SpotStrategy { get; set; }

        /// <summary>
        /// The system disk category of worker node. Its valid value are `cloud_ssd`, `cloud_efficiency` and `cloud_essd`. Default to `cloud_efficiency`.
        /// </summary>
        [Input("systemDiskCategory")]
        public Input<string>? SystemDiskCategory { get; set; }

        /// <summary>
        /// The encryption Algorithm for Encrypting System Disk. It takes effect when system_disk_encrypted is true. Valid values `aes-256` and `sm4-128`.
        /// </summary>
        [Input("systemDiskEncryptAlgorithm")]
        public Input<string>? SystemDiskEncryptAlgorithm { get; set; }

        /// <summary>
        /// Whether to enable system disk encryption.
        /// </summary>
        [Input("systemDiskEncrypted")]
        public Input<bool>? SystemDiskEncrypted { get; set; }

        /// <summary>
        /// The kms key id used to encrypt the system disk. It takes effect when system_disk_encrypted is true.
        /// </summary>
        [Input("systemDiskKmsKey")]
        public Input<string>? SystemDiskKmsKey { get; set; }

        /// <summary>
        /// The performance of system disk, only valid for ESSD disk. You have to specify one of `PL0` `PL1` `PL2` `PL3` fields.
        /// </summary>
        [Input("systemDiskPerformanceLevel")]
        public Input<string>? SystemDiskPerformanceLevel { get; set; }

        /// <summary>
        /// The system disk category of worker node. Its valid value range [40~500] in GB. Default to `120`.
        /// </summary>
        [Input("systemDiskSize")]
        public Input<int>? SystemDiskSize { get; set; }

        /// <summary>
        /// The system disk snapshot policy id.
        /// </summary>
        [Input("systemDiskSnapshotPolicyId")]
        public Input<string>? SystemDiskSnapshotPolicyId { get; set; }

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

        /// <summary>
        /// A Map of tags to assign to the resource. It will be applied for ECS instances finally. Detailed below.
        /// </summary>
        public InputMap<object> Tags
        {
            get => _tags ?? (_tags = new InputMap<object>());
            set => _tags = value;
        }

        [Input("taints")]
        private InputList<Inputs.NodePoolTaintGetArgs>? _taints;

        /// <summary>
        /// A List of Kubernetes taints to assign to the nodes. Detailed below. More information in [Taints and Toleration](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/).
        /// </summary>
        public InputList<Inputs.NodePoolTaintGetArgs> Taints
        {
            get => _taints ?? (_taints = new InputList<Inputs.NodePoolTaintGetArgs>());
            set => _taints = value;
        }

        /// <summary>
        /// Set the newly added node as unschedulable. If you want to open the scheduling option, you can open it in the node list of the console. If you are using an auto-scaling node pool, the setting will not take effect. Default is `false`.
        /// </summary>
        [Input("unschedulable")]
        public Input<bool>? Unschedulable { get; set; }

        /// <summary>
        /// Windows instances support batch and PowerShell scripts. If your script file is larger than 1 KB, we recommend that you upload the script to Object Storage Service (OSS) and pull it through the internal endpoint of your OSS bucket.
        /// </summary>
        [Input("userData")]
        public Input<string>? UserData { get; set; }

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

        [Input("vswitchIds")]
        private InputList<string>? _vswitchIds;

        /// <summary>
        /// The vswitches used by node pool workers.
        /// </summary>
        public InputList<string> VswitchIds
        {
            get => _vswitchIds ?? (_vswitchIds = new InputList<string>());
            set => _vswitchIds = value;
        }

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