// *** 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>
    /// ## Import
    /// 
    /// Kubernetes managed cluster can be imported using the id, e.g. Then complete the main.tf accords to the result of `terraform plan`.
    /// 
    /// ```sh
    ///  $ pulumi import alicloud:cs/managedKubernetes:ManagedKubernetes main cluster_id
    /// ```
    /// </summary>
    [AliCloudResourceType("alicloud:cs/managedKubernetes:ManagedKubernetes")]
    public partial class ManagedKubernetes : global::Pulumi.CustomResource
    {
        /// <summary>
        /// The addon you want to install in cluster.
        /// </summary>
        [Output("addons")]
        public Output<ImmutableArray<Outputs.ManagedKubernetesAddon>> Addons { get; private set; } = null!;

        /// <summary>
        /// A list of API audiences for [Service Account Token Volume Projection](https://www.alibabacloud.com/help/doc-detail/160384.htm). Set this to `["https://kubernetes.default.svc"]` if you want to enable the Token Volume Projection feature (requires specifying `service_account_issuer` as well. From cluster version 1.22+, Service Account Token Volume Projection will be enabled by default.
        /// </summary>
        [Output("apiAudiences")]
        public Output<ImmutableArray<string>> ApiAudiences { get; private set; } = null!;

        /// <summary>
        /// The Zone where new kubernetes cluster will be located. If it is not be specified, the `vswitch_ids` should be set, its value will be vswitch's zone.
        /// </summary>
        [Output("availabilityZone")]
        public Output<string> AvailabilityZone { get; private set; } = null!;

        /// <summary>
        /// (Available in 1.105.0+) Nested attribute containing certificate authority data for your cluster.
        /// </summary>
        [Output("certificateAuthority")]
        public Output<Outputs.ManagedKubernetesCertificateAuthority> CertificateAuthority { get; private set; } = null!;

        /// <summary>
        /// The path of client certificate, like `~/.kube/client-cert.pem`.
        /// </summary>
        [Output("clientCert")]
        public Output<string?> ClientCert { get; private set; } = null!;

        /// <summary>
        /// The path of client key, like `~/.kube/client-key.pem`.
        /// </summary>
        [Output("clientKey")]
        public Output<string?> ClientKey { get; private set; } = null!;

        /// <summary>
        /// The path of cluster ca certificate, like `~/.kube/cluster-ca-cert.pem`
        /// </summary>
        [Output("clusterCaCert")]
        public Output<string?> ClusterCaCert { get; private set; } = null!;

        /// <summary>
        /// Cluster local domain name, Default to `cluster.local`. A domain name consists of one or more sections separated by a decimal point (.), each of which is up to 63 characters long, and can be lowercase, numerals, and underscores (-), and must be lowercase or numerals at the beginning and end.
        /// </summary>
        [Output("clusterDomain")]
        public Output<string?> ClusterDomain { get; private set; } = null!;

        /// <summary>
        /// The cluster specifications of kubernetes cluster,which can be empty. Valid values:
        /// * ack.standard : Standard managed clusters.
        /// * ack.pro.small : Professional managed clusters.
        /// </summary>
        [Output("clusterSpec")]
        public Output<string> ClusterSpec { get; private set; } = null!;

        /// <summary>
        /// Map of kubernetes cluster connection information.
        /// </summary>
        [Output("connections")]
        public Output<Outputs.ManagedKubernetesConnections> Connections { get; private set; } = null!;

        /// <summary>
        /// List of target components for which logs need to be collected. Supports `apiserver`, `kcm` and `scheduler`.
        /// </summary>
        [Output("controlPlaneLogComponents")]
        public Output<ImmutableArray<string>> ControlPlaneLogComponents { get; private set; } = null!;

        /// <summary>
        /// Control plane log project. If this field is not set, a log service project named k8s-log-{ClusterID} will be automatically created.
        /// </summary>
        [Output("controlPlaneLogProject")]
        public Output<string?> ControlPlaneLogProject { get; private set; } = null!;

        /// <summary>
        /// Control plane log retention duration (unit: day). Default `30`. If control plane logs are to be collected, `control_plane_log_ttl` and `control_plane_log_components` must be specified.
        /// </summary>
        [Output("controlPlaneLogTtl")]
        public Output<string?> ControlPlaneLogTtl { get; private set; } = null!;

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

        /// <summary>
        /// Customize the certificate SAN, multiple IP or domain names are separated by English commas (,).
        /// </summary>
        [Output("customSan")]
        public Output<string?> CustomSan { get; private set; } = null!;

        /// <summary>
        /// Whether to enable cluster deletion protection.
        /// </summary>
        [Output("deletionProtection")]
        public Output<bool?> DeletionProtection { get; private set; } = null!;

        /// <summary>
        /// Whether to enable cluster to support RRSA for version 1.22.3+. Default to `false`. Once the RRSA function is turned on, it is not allowed to turn off. If your cluster has enabled this function, please manually modify your tf file and add the rrsa configuration to the file, learn more [RAM Roles for Service Accounts](https://www.alibabacloud.com/help/zh/container-service-for-kubernetes/latest/use-rrsa-to-enforce-access-control).
        /// </summary>
        [Output("enableRrsa")]
        public Output<bool?> EnableRrsa { get; private set; } = null!;

        /// <summary>
        /// (Optional) Enable login to the node through SSH. Default to `false`.
        /// </summary>
        [Output("enableSsh")]
        public Output<bool?> EnableSsh { get; private set; } = null!;

        /// <summary>
        /// The disk encryption key.
        /// </summary>
        [Output("encryptionProviderKey")]
        public Output<string?> EncryptionProviderKey { get; private set; } = null!;

        /// <summary>
        /// (Optional, Available in 1.88.0+) Exclude autoscaler nodes from `worker_nodes`. Default to `false`.
        /// </summary>
        [Output("excludeAutoscalerNodes")]
        public Output<bool?> ExcludeAutoscalerNodes { get; private set; } = null!;

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

        /// <summary>
        /// (Optional) Install cloud monitor agent on ECS. Default to `true`.
        /// </summary>
        [Output("installCloudMonitor")]
        public Output<bool?> InstallCloudMonitor { get; private set; } = null!;

        /// <summary>
        /// Enable to create advanced security group. default: false. See [Advanced security group](https://www.alibabacloud.com/help/doc-detail/120621.htm).
        /// </summary>
        [Output("isEnterpriseSecurityGroup")]
        public Output<bool> IsEnterpriseSecurityGroup { get; private set; } = null!;

        /// <summary>
        /// (Optional) 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. From ersion 1.109.1, It is not necessary in the professional managed cluster.
        /// </summary>
        [Output("keyName")]
        public Output<string?> KeyName { get; private set; } = null!;

        /// <summary>
        /// (Optional, Available in 1.57.1+) 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>
        /// (Optional, MapString, Available in 1.57.1+) 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>
        /// The path of kube config, like `~/.kube/config`.
        /// </summary>
        [Output("kubeConfig")]
        public Output<string?> KubeConfig { get; private set; } = null!;

        /// <summary>
        /// The cluster api server load balance instance specification, default `slb.s1.small`. For more information on how to select a LB instance specification, see [SLB instance overview](https://help.aliyun.com/document_detail/85931.html).
        /// </summary>
        [Output("loadBalancerSpec")]
        public Output<string?> LoadBalancerSpec { get; private set; } = null!;

        /// <summary>
        /// The cluster maintenance window，effective only in the professional managed cluster. Managed node pool will use it. Detailed below.
        /// </summary>
        [Output("maintenanceWindow")]
        public Output<Outputs.ManagedKubernetesMaintenanceWindow> MaintenanceWindow { get; private set; } = null!;

        /// <summary>
        /// The kubernetes cluster's name. It is unique in one Alicloud account.
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        [Output("namePrefix")]
        public Output<string?> NamePrefix { get; private set; } = null!;

        /// <summary>
        /// The ID of nat gateway used to launch kubernetes cluster.
        /// </summary>
        [Output("natGatewayId")]
        public Output<string> NatGatewayId { get; private set; } = null!;

        /// <summary>
        /// Whether to create a new nat gateway while creating kubernetes cluster. Default to true. Then openapi in Alibaba Cloud are not all on intranet, So turn this option on is a good choice.
        /// </summary>
        [Output("newNatGateway")]
        public Output<bool?> NewNatGateway { get; private set; } = null!;

        /// <summary>
        /// The node cidr block to specific how many pods can run on single node. 24-28 is allowed. 24 means 2^(32-24)-1=255 and the node can run at most 255 pods. default: 24
        /// </summary>
        [Output("nodeCidrMask")]
        public Output<int?> NodeCidrMask { get; private set; } = null!;

        /// <summary>
        /// (Optional, Available in 1.88.0+) 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>
        /// (Optional, ForceNew, Available in 1.103.2+) The service port range of nodes, valid values: `30000` to `65535`. Default to `30000-32767`.
        /// </summary>
        [Output("nodePortRange")]
        public Output<string> NodePortRange { get; private set; } = null!;

        /// <summary>
        /// (Optional, ForceNew, Available in 1.103.2+) The operating system of the nodes that run pods, its valid value is either `Linux` or `Windows`. Default to `Linux`.
        /// </summary>
        [Output("osType")]
        public Output<string?> OsType { get; private set; } = null!;

        /// <summary>
        /// (Optional, Sensitive) The password of ssh login cluster node. You have to specify one of `password` `key_name` `kms_encrypted_password` fields. From ersion 1.109.1, It is not necessary in the professional managed cluster.
        /// </summary>
        [Output("password")]
        public Output<string?> Password { get; private set; } = null!;

        /// <summary>
        /// (Optional, ForceNew, Available in 1.103.2+) The architecture of the nodes that run pods, its valid value is either `CentOS` or `AliyunLinux`. Default to `CentOS`.
        /// </summary>
        [Output("platform")]
        public Output<string> Platform { get; private set; } = null!;

        /// <summary>
        /// - [Flannel Specific] The CIDR block for the pod network when using Flannel.
        /// </summary>
        [Output("podCidr")]
        public Output<string?> PodCidr { get; private set; } = null!;

        /// <summary>
        /// - [Terway Specific] The vswitches for the pod network when using Terway.Be careful the `pod_vswitch_ids` can not equal to `worker_vswitch_ids` or `master_vswitch_ids` but must be in same availability zones.
        /// </summary>
        [Output("podVswitchIds")]
        public Output<ImmutableArray<string>> PodVswitchIds { get; private set; } = null!;

        /// <summary>
        /// Proxy mode is option of kube-proxy. options: iptables|ipvs. default: ipvs.
        /// </summary>
        [Output("proxyMode")]
        public Output<string?> ProxyMode { get; private set; } = null!;

        /// <summary>
        /// (Optional, Available in 1.103.2+) 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!;

        [Output("retainResources")]
        public Output<ImmutableArray<string>> RetainResources { get; private set; } = null!;

        /// <summary>
        /// (Available in v1.185.0+) Nested attribute containing RRSA related data for your cluster.
        /// </summary>
        [Output("rrsaMetadata")]
        public Output<Outputs.ManagedKubernetesRrsaMetadata> RrsaMetadata { get; private set; } = null!;

        /// <summary>
        /// (Optional, Available in 1.103.2+) The runtime of containers. If you select another container runtime, see [Comparison of Docker, containerd, and Sandboxed-Container](https://www.alibabacloud.com/help/doc-detail/160313.htm). Detailed below.
        /// </summary>
        [Output("runtime")]
        public Output<Outputs.ManagedKubernetesRuntime?> Runtime { get; private set; } = null!;

        /// <summary>
        /// The ID of the security group to which the ECS instances in the cluster belong. If it is not specified, a new Security group will be built.
        /// </summary>
        [Output("securityGroupId")]
        public Output<string> SecurityGroupId { get; private set; } = null!;

        /// <summary>
        /// The issuer of the Service Account token for [Service Account Token Volume Projection](https://www.alibabacloud.com/help/doc-detail/160384.htm), corresponds to the `iss` field in the token payload. Set this to `"https://kubernetes.default.svc"` to enable the Token Volume Projection feature (requires specifying `api_audiences` as well). From cluster version 1.22+, Service Account Token Volume Projection will be enabled by default.
        /// </summary>
        [Output("serviceAccountIssuer")]
        public Output<string?> ServiceAccountIssuer { get; private set; } = null!;

        /// <summary>
        /// The CIDR block for the service network. It cannot be duplicated with the VPC CIDR and CIDR used by Kubernetes cluster in VPC, cannot be modified after creation.
        /// </summary>
        [Output("serviceCidr")]
        public Output<string?> ServiceCidr { get; private set; } = null!;

        /// <summary>
        /// The ID of load balancer.
        /// </summary>
        [Output("slbId")]
        public Output<string> SlbId { get; private set; } = null!;

        /// <summary>
        /// The public ip of load balancer.
        /// </summary>
        [Output("slbInternet")]
        public Output<string> SlbInternet { get; private set; } = null!;

        /// <summary>
        /// Whether to create internet load balancer for API Server. Default to true.
        /// </summary>
        [Output("slbInternetEnabled")]
        public Output<bool?> SlbInternetEnabled { get; private set; } = null!;

        /// <summary>
        /// The ID of private load balancer where the current cluster master node is located.
        /// </summary>
        [Output("slbIntranet")]
        public Output<string> SlbIntranet { get; private set; } = null!;

        /// <summary>
        /// Default nil, A map of tags assigned to the kubernetes cluster and work nodes. Detailed below.
        /// </summary>
        [Output("tags")]
        public Output<ImmutableDictionary<string, object>?> Tags { get; private set; } = null!;

        /// <summary>
        /// (Optional, Available in 1.103.2+) Taints ensure pods are not scheduled onto inappropriate nodes. One or more taints are applied to a node; this marks that the node should not accept any pods that do not tolerate the taints. For more information, see [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/). Detailed below.
        /// </summary>
        [Output("taints")]
        public Output<ImmutableArray<Outputs.ManagedKubernetesTaint>> Taints { get; private set; } = null!;

        /// <summary>
        /// When you create a cluster, set the time zones for the Master and Worker nodes. You can only change the managed node time zone if you create a cluster. Once the cluster is created, you can only change the time zone of the Worker node.
        /// </summary>
        [Output("timezone")]
        public Output<string?> Timezone { get; private set; } = null!;

        /// <summary>
        /// The path of customized CA cert, you can use this CA to sign client certs to connect your cluster.
        /// </summary>
        [Output("userCa")]
        public Output<string?> UserCa { get; private set; } = null!;

        /// <summary>
        /// (Optional, Available in 1.81.0+) Custom data that can execute on nodes. For more information, see [Prepare user data](https://www.alibabacloud.com/help/doc-detail/49121.htm).
        /// </summary>
        [Output("userData")]
        public Output<string?> UserData { get; private set; } = null!;

        /// <summary>
        /// Desired Kubernetes version. If you do not specify a value, the latest available version at resource creation is used and no upgrades will occur except you set a higher version number. The value must be configured and increased to upgrade the version when desired. Downgrades are not supported by ACK.
        /// </summary>
        [Output("version")]
        public Output<string> Version { get; private set; } = null!;

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

        /// <summary>
        /// (Optional) Enable worker payment auto-renew, defaults to false.
        /// </summary>
        [Output("workerAutoRenew")]
        public Output<bool?> WorkerAutoRenew { get; private set; } = null!;

        /// <summary>
        /// Worker payment auto-renew period, it can be one of {1, 2, 3, 6, 12}.
        /// </summary>
        [Output("workerAutoRenewPeriod")]
        public Output<int> WorkerAutoRenewPeriod { get; private set; } = null!;

        /// <summary>
        /// The data disk category of worker, use `worker_data_disks` to instead it.
        /// </summary>
        [Output("workerDataDiskCategory")]
        public Output<string?> WorkerDataDiskCategory { get; private set; } = null!;

        /// <summary>
        /// The data disk size of worker, use `worker_data_disks` to instead it.
        /// </summary>
        [Output("workerDataDiskSize")]
        public Output<int?> WorkerDataDiskSize { get; private set; } = null!;

        /// <summary>
        /// (Optional, Available in 1.91.0+) The data disk configurations of worker nodes, such as the disk type and disk size.
        /// </summary>
        [Output("workerDataDisks")]
        public Output<ImmutableArray<Outputs.ManagedKubernetesWorkerDataDisk>> WorkerDataDisks { get; private set; } = null!;

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

        /// <summary>
        /// (Optional, Available in 1.120.0+) Worker node system disk performance level, when `worker_disk_category` values `cloud_essd`, the optional values are `PL0`, `PL1`, `PL2` or `PL3`, but the specific performance level is related to the disk capacity. For more information, see [Enhanced SSDs](https://www.alibabacloud.com/help/doc-detail/122389.htm). Default is `PL1`.
        /// </summary>
        [Output("workerDiskPerformanceLevel")]
        public Output<string?> WorkerDiskPerformanceLevel { get; private set; } = null!;

        /// <summary>
        /// (Optional) The system disk size of worker node. Its valid value range [40~500] in GB.
        /// </summary>
        [Output("workerDiskSize")]
        public Output<int> WorkerDiskSize { get; private set; } = null!;

        /// <summary>
        /// (Optional, Available in 1.120.0+) Worker node system disk auto snapshot policy.
        /// </summary>
        [Output("workerDiskSnapshotPolicyId")]
        public Output<string?> WorkerDiskSnapshotPolicyId { get; private set; } = null!;

        /// <summary>
        /// (Optional) Worker payment type, its valid value is either or `PostPaid` or `PrePaid`. Defaults to `PostPaid`. If value is `PrePaid`, the files `worker_period`, `worker_period_unit`, `worker_auto_renew` and `worker_auto_renew_period` are required, default is `PostPaid`.
        /// </summary>
        [Output("workerInstanceChargeType")]
        public Output<string> WorkerInstanceChargeType { get; private set; } = null!;

        /// <summary>
        /// (Optional) The instance type of worker node. Specify one type for single AZ Cluster, three types for MultiAZ Cluster. From version 1.109.1, It is not necessary in the professional managed cluster, but it is necessary in other types of clusters.
        /// </summary>
        [Output("workerInstanceTypes")]
        public Output<ImmutableArray<string>> WorkerInstanceTypes { get; private set; } = null!;

        /// <summary>
        /// (Deprecated from version 1.177.0) List of cluster worker nodes.
        /// </summary>
        [Output("workerNodes")]
        public Output<ImmutableArray<Outputs.ManagedKubernetesWorkerNode>> WorkerNodes { get; private set; } = null!;

        /// <summary>
        /// (Optional) The worker node number of the kubernetes cluster. Default to 3. It is limited up to 50 and if you want to enlarge it, please apply white list or contact with us. From version 1.109.1, It is not necessary in the professional managed cluster, but it is necessary in other types of clusters.
        /// </summary>
        [Output("workerNumber")]
        public Output<int?> WorkerNumber { get; private set; } = null!;

        /// <summary>
        /// (Optional) Worker payment period. The unit is `Month`. Its valid value is one of {1, 2, 3, 6, 12, 24, 36, 48, 60}.
        /// </summary>
        [Output("workerPeriod")]
        public Output<int> WorkerPeriod { get; private set; } = null!;

        /// <summary>
        /// (Optional) Worker payment period unit, the valid value is `Month`.
        /// </summary>
        [Output("workerPeriodUnit")]
        public Output<string> WorkerPeriodUnit { get; private set; } = null!;

        /// <summary>
        /// The RamRole Name attached to worker node.
        /// </summary>
        [Output("workerRamRoleName")]
        public Output<string> WorkerRamRoleName { get; private set; } = null!;

        /// <summary>
        /// The vswitches used by control plane.
        /// </summary>
        [Output("workerVswitchIds")]
        public Output<ImmutableArray<string>> WorkerVswitchIds { get; private set; } = null!;


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

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

    public sealed class ManagedKubernetesArgs : global::Pulumi.ResourceArgs
    {
        [Input("addons")]
        private InputList<Inputs.ManagedKubernetesAddonArgs>? _addons;

        /// <summary>
        /// The addon you want to install in cluster.
        /// </summary>
        public InputList<Inputs.ManagedKubernetesAddonArgs> Addons
        {
            get => _addons ?? (_addons = new InputList<Inputs.ManagedKubernetesAddonArgs>());
            set => _addons = value;
        }

        [Input("apiAudiences")]
        private InputList<string>? _apiAudiences;

        /// <summary>
        /// A list of API audiences for [Service Account Token Volume Projection](https://www.alibabacloud.com/help/doc-detail/160384.htm). Set this to `["https://kubernetes.default.svc"]` if you want to enable the Token Volume Projection feature (requires specifying `service_account_issuer` as well. From cluster version 1.22+, Service Account Token Volume Projection will be enabled by default.
        /// </summary>
        public InputList<string> ApiAudiences
        {
            get => _apiAudiences ?? (_apiAudiences = new InputList<string>());
            set => _apiAudiences = value;
        }

        /// <summary>
        /// The Zone where new kubernetes cluster will be located. If it is not be specified, the `vswitch_ids` should be set, its value will be vswitch's zone.
        /// </summary>
        [Input("availabilityZone")]
        public Input<string>? AvailabilityZone { get; set; }

        /// <summary>
        /// The path of client certificate, like `~/.kube/client-cert.pem`.
        /// </summary>
        [Input("clientCert")]
        public Input<string>? ClientCert { get; set; }

        /// <summary>
        /// The path of client key, like `~/.kube/client-key.pem`.
        /// </summary>
        [Input("clientKey")]
        public Input<string>? ClientKey { get; set; }

        /// <summary>
        /// The path of cluster ca certificate, like `~/.kube/cluster-ca-cert.pem`
        /// </summary>
        [Input("clusterCaCert")]
        public Input<string>? ClusterCaCert { get; set; }

        /// <summary>
        /// Cluster local domain name, Default to `cluster.local`. A domain name consists of one or more sections separated by a decimal point (.), each of which is up to 63 characters long, and can be lowercase, numerals, and underscores (-), and must be lowercase or numerals at the beginning and end.
        /// </summary>
        [Input("clusterDomain")]
        public Input<string>? ClusterDomain { get; set; }

        /// <summary>
        /// The cluster specifications of kubernetes cluster,which can be empty. Valid values:
        /// * ack.standard : Standard managed clusters.
        /// * ack.pro.small : Professional managed clusters.
        /// </summary>
        [Input("clusterSpec")]
        public Input<string>? ClusterSpec { get; set; }

        [Input("controlPlaneLogComponents")]
        private InputList<string>? _controlPlaneLogComponents;

        /// <summary>
        /// List of target components for which logs need to be collected. Supports `apiserver`, `kcm` and `scheduler`.
        /// </summary>
        public InputList<string> ControlPlaneLogComponents
        {
            get => _controlPlaneLogComponents ?? (_controlPlaneLogComponents = new InputList<string>());
            set => _controlPlaneLogComponents = value;
        }

        /// <summary>
        /// Control plane log project. If this field is not set, a log service project named k8s-log-{ClusterID} will be automatically created.
        /// </summary>
        [Input("controlPlaneLogProject")]
        public Input<string>? ControlPlaneLogProject { get; set; }

        /// <summary>
        /// Control plane log retention duration (unit: day). Default `30`. If control plane logs are to be collected, `control_plane_log_ttl` and `control_plane_log_components` must be specified.
        /// </summary>
        [Input("controlPlaneLogTtl")]
        public Input<string>? ControlPlaneLogTtl { get; set; }

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

        /// <summary>
        /// Customize the certificate SAN, multiple IP or domain names are separated by English commas (,).
        /// </summary>
        [Input("customSan")]
        public Input<string>? CustomSan { get; set; }

        /// <summary>
        /// Whether to enable cluster deletion protection.
        /// </summary>
        [Input("deletionProtection")]
        public Input<bool>? DeletionProtection { get; set; }

        /// <summary>
        /// Whether to enable cluster to support RRSA for version 1.22.3+. Default to `false`. Once the RRSA function is turned on, it is not allowed to turn off. If your cluster has enabled this function, please manually modify your tf file and add the rrsa configuration to the file, learn more [RAM Roles for Service Accounts](https://www.alibabacloud.com/help/zh/container-service-for-kubernetes/latest/use-rrsa-to-enforce-access-control).
        /// </summary>
        [Input("enableRrsa")]
        public Input<bool>? EnableRrsa { get; set; }

        /// <summary>
        /// (Optional) Enable login to the node through SSH. Default to `false`.
        /// </summary>
        [Input("enableSsh")]
        public Input<bool>? EnableSsh { get; set; }

        /// <summary>
        /// The disk encryption key.
        /// </summary>
        [Input("encryptionProviderKey")]
        public Input<string>? EncryptionProviderKey { get; set; }

        /// <summary>
        /// (Optional, Available in 1.88.0+) Exclude autoscaler nodes from `worker_nodes`. Default to `false`.
        /// </summary>
        [Input("excludeAutoscalerNodes")]
        public Input<bool>? ExcludeAutoscalerNodes { get; set; }

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

        /// <summary>
        /// (Optional) Install cloud monitor agent on ECS. Default to `true`.
        /// </summary>
        [Input("installCloudMonitor")]
        public Input<bool>? InstallCloudMonitor { get; set; }

        /// <summary>
        /// Enable to create advanced security group. default: false. See [Advanced security group](https://www.alibabacloud.com/help/doc-detail/120621.htm).
        /// </summary>
        [Input("isEnterpriseSecurityGroup")]
        public Input<bool>? IsEnterpriseSecurityGroup { get; set; }

        /// <summary>
        /// (Optional) 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. From ersion 1.109.1, It is not necessary in the professional managed cluster.
        /// </summary>
        [Input("keyName")]
        public Input<string>? KeyName { get; set; }

        /// <summary>
        /// (Optional, Available in 1.57.1+) 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>
        /// (Optional, MapString, Available in 1.57.1+) 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>
        [Obsolete(@"Field 'kms_encryption_context' has been deprecated from provider version 1.177.0. Please use resource 'alicloud_cs_kubernetes_node_pool' to manage cluster nodes, by using field 'kms_encryption_context' to replace it")]
        public InputMap<object> KmsEncryptionContext
        {
            get => _kmsEncryptionContext ?? (_kmsEncryptionContext = new InputMap<object>());
            set => _kmsEncryptionContext = value;
        }

        /// <summary>
        /// The path of kube config, like `~/.kube/config`.
        /// </summary>
        [Input("kubeConfig")]
        public Input<string>? KubeConfig { get; set; }

        /// <summary>
        /// The cluster api server load balance instance specification, default `slb.s1.small`. For more information on how to select a LB instance specification, see [SLB instance overview](https://help.aliyun.com/document_detail/85931.html).
        /// </summary>
        [Input("loadBalancerSpec")]
        public Input<string>? LoadBalancerSpec { get; set; }

        /// <summary>
        /// The cluster maintenance window，effective only in the professional managed cluster. Managed node pool will use it. Detailed below.
        /// </summary>
        [Input("maintenanceWindow")]
        public Input<Inputs.ManagedKubernetesMaintenanceWindowArgs>? MaintenanceWindow { get; set; }

        /// <summary>
        /// The kubernetes cluster's name. It is unique in one Alicloud account.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        [Input("namePrefix")]
        public Input<string>? NamePrefix { get; set; }

        /// <summary>
        /// Whether to create a new nat gateway while creating kubernetes cluster. Default to true. Then openapi in Alibaba Cloud are not all on intranet, So turn this option on is a good choice.
        /// </summary>
        [Input("newNatGateway")]
        public Input<bool>? NewNatGateway { get; set; }

        /// <summary>
        /// The node cidr block to specific how many pods can run on single node. 24-28 is allowed. 24 means 2^(32-24)-1=255 and the node can run at most 255 pods. default: 24
        /// </summary>
        [Input("nodeCidrMask")]
        public Input<int>? NodeCidrMask { get; set; }

        /// <summary>
        /// (Optional, Available in 1.88.0+) 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>
        /// (Optional, ForceNew, Available in 1.103.2+) The service port range of nodes, valid values: `30000` to `65535`. Default to `30000-32767`.
        /// </summary>
        [Input("nodePortRange")]
        public Input<string>? NodePortRange { get; set; }

        /// <summary>
        /// (Optional, ForceNew, Available in 1.103.2+) The operating system of the nodes that run pods, its valid value is either `Linux` or `Windows`. Default to `Linux`.
        /// </summary>
        [Input("osType")]
        public Input<string>? OsType { get; set; }

        /// <summary>
        /// (Optional, Sensitive) The password of ssh login cluster node. You have to specify one of `password` `key_name` `kms_encrypted_password` fields. From ersion 1.109.1, It is not necessary in the professional managed cluster.
        /// </summary>
        [Input("password")]
        public Input<string>? Password { get; set; }

        /// <summary>
        /// (Optional, ForceNew, Available in 1.103.2+) The architecture of the nodes that run pods, its valid value is either `CentOS` or `AliyunLinux`. Default to `CentOS`.
        /// </summary>
        [Input("platform")]
        public Input<string>? Platform { get; set; }

        /// <summary>
        /// - [Flannel Specific] The CIDR block for the pod network when using Flannel.
        /// </summary>
        [Input("podCidr")]
        public Input<string>? PodCidr { get; set; }

        [Input("podVswitchIds")]
        private InputList<string>? _podVswitchIds;

        /// <summary>
        /// - [Terway Specific] The vswitches for the pod network when using Terway.Be careful the `pod_vswitch_ids` can not equal to `worker_vswitch_ids` or `master_vswitch_ids` but must be in same availability zones.
        /// </summary>
        public InputList<string> PodVswitchIds
        {
            get => _podVswitchIds ?? (_podVswitchIds = new InputList<string>());
            set => _podVswitchIds = value;
        }

        /// <summary>
        /// Proxy mode is option of kube-proxy. options: iptables|ipvs. default: ipvs.
        /// </summary>
        [Input("proxyMode")]
        public Input<string>? ProxyMode { get; set; }

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

        /// <summary>
        /// (Optional, Available in 1.103.2+) RDS instance list, You can choose which RDS instances whitelist to add instances to.
        /// </summary>
        [Obsolete(@"Field 'rds_instances' has been deprecated from provider version 1.177.0. Please use resource 'alicloud_cs_kubernetes_node_pool' to manage cluster nodes, by using field 'rds_instances' to replace it.")]
        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; }

        [Input("retainResources")]
        private InputList<string>? _retainResources;
        public InputList<string> RetainResources
        {
            get => _retainResources ?? (_retainResources = new InputList<string>());
            set => _retainResources = value;
        }

        /// <summary>
        /// (Available in v1.185.0+) Nested attribute containing RRSA related data for your cluster.
        /// </summary>
        [Input("rrsaMetadata")]
        public Input<Inputs.ManagedKubernetesRrsaMetadataArgs>? RrsaMetadata { get; set; }

        /// <summary>
        /// (Optional, Available in 1.103.2+) The runtime of containers. If you select another container runtime, see [Comparison of Docker, containerd, and Sandboxed-Container](https://www.alibabacloud.com/help/doc-detail/160313.htm). Detailed below.
        /// </summary>
        [Input("runtime")]
        public Input<Inputs.ManagedKubernetesRuntimeArgs>? Runtime { get; set; }

        /// <summary>
        /// The ID of the security group to which the ECS instances in the cluster belong. If it is not specified, a new Security group will be built.
        /// </summary>
        [Input("securityGroupId")]
        public Input<string>? SecurityGroupId { get; set; }

        /// <summary>
        /// The issuer of the Service Account token for [Service Account Token Volume Projection](https://www.alibabacloud.com/help/doc-detail/160384.htm), corresponds to the `iss` field in the token payload. Set this to `"https://kubernetes.default.svc"` to enable the Token Volume Projection feature (requires specifying `api_audiences` as well). From cluster version 1.22+, Service Account Token Volume Projection will be enabled by default.
        /// </summary>
        [Input("serviceAccountIssuer")]
        public Input<string>? ServiceAccountIssuer { get; set; }

        /// <summary>
        /// The CIDR block for the service network. It cannot be duplicated with the VPC CIDR and CIDR used by Kubernetes cluster in VPC, cannot be modified after creation.
        /// </summary>
        [Input("serviceCidr")]
        public Input<string>? ServiceCidr { get; set; }

        /// <summary>
        /// Whether to create internet load balancer for API Server. Default to true.
        /// </summary>
        [Input("slbInternetEnabled")]
        public Input<bool>? SlbInternetEnabled { get; set; }

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

        /// <summary>
        /// Default nil, A map of tags assigned to the kubernetes cluster and work nodes. Detailed below.
        /// </summary>
        public InputMap<object> Tags
        {
            get => _tags ?? (_tags = new InputMap<object>());
            set => _tags = value;
        }

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

        /// <summary>
        /// (Optional, Available in 1.103.2+) Taints ensure pods are not scheduled onto inappropriate nodes. One or more taints are applied to a node; this marks that the node should not accept any pods that do not tolerate the taints. For more information, see [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/). Detailed below.
        /// </summary>
        [Obsolete(@"Field 'taints' has been deprecated from provider version 1.177.0. Please use resource 'alicloud_cs_kubernetes_node_pool' to manage cluster nodes, by using field 'taints' to replace it.")]
        public InputList<Inputs.ManagedKubernetesTaintArgs> Taints
        {
            get => _taints ?? (_taints = new InputList<Inputs.ManagedKubernetesTaintArgs>());
            set => _taints = value;
        }

        /// <summary>
        /// When you create a cluster, set the time zones for the Master and Worker nodes. You can only change the managed node time zone if you create a cluster. Once the cluster is created, you can only change the time zone of the Worker node.
        /// </summary>
        [Input("timezone")]
        public Input<string>? Timezone { get; set; }

        /// <summary>
        /// The path of customized CA cert, you can use this CA to sign client certs to connect your cluster.
        /// </summary>
        [Input("userCa")]
        public Input<string>? UserCa { get; set; }

        /// <summary>
        /// (Optional, Available in 1.81.0+) Custom data that can execute on nodes. For more information, see [Prepare user data](https://www.alibabacloud.com/help/doc-detail/49121.htm).
        /// </summary>
        [Input("userData")]
        public Input<string>? UserData { get; set; }

        /// <summary>
        /// Desired Kubernetes version. If you do not specify a value, the latest available version at resource creation is used and no upgrades will occur except you set a higher version number. The value must be configured and increased to upgrade the version when desired. Downgrades are not supported by ACK.
        /// </summary>
        [Input("version")]
        public Input<string>? Version { get; set; }

        /// <summary>
        /// (Optional) Enable worker payment auto-renew, defaults to false.
        /// </summary>
        [Input("workerAutoRenew")]
        public Input<bool>? WorkerAutoRenew { get; set; }

        /// <summary>
        /// Worker payment auto-renew period, it can be one of {1, 2, 3, 6, 12}.
        /// </summary>
        [Input("workerAutoRenewPeriod")]
        public Input<int>? WorkerAutoRenewPeriod { get; set; }

        /// <summary>
        /// The data disk category of worker, use `worker_data_disks` to instead it.
        /// </summary>
        [Input("workerDataDiskCategory")]
        public Input<string>? WorkerDataDiskCategory { get; set; }

        /// <summary>
        /// The data disk size of worker, use `worker_data_disks` to instead it.
        /// </summary>
        [Input("workerDataDiskSize")]
        public Input<int>? WorkerDataDiskSize { get; set; }

        [Input("workerDataDisks")]
        private InputList<Inputs.ManagedKubernetesWorkerDataDiskArgs>? _workerDataDisks;

        /// <summary>
        /// (Optional, Available in 1.91.0+) The data disk configurations of worker nodes, such as the disk type and disk size.
        /// </summary>
        [Obsolete(@"Field 'worker_data_disks' has been deprecated from provider version 1.177.0. Please use resource 'alicloud_cs_kubernetes_node_pool' to manage cluster nodes, by using field 'data_disks' to replace it")]
        public InputList<Inputs.ManagedKubernetesWorkerDataDiskArgs> WorkerDataDisks
        {
            get => _workerDataDisks ?? (_workerDataDisks = new InputList<Inputs.ManagedKubernetesWorkerDataDiskArgs>());
            set => _workerDataDisks = value;
        }

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

        /// <summary>
        /// (Optional, Available in 1.120.0+) Worker node system disk performance level, when `worker_disk_category` values `cloud_essd`, the optional values are `PL0`, `PL1`, `PL2` or `PL3`, but the specific performance level is related to the disk capacity. For more information, see [Enhanced SSDs](https://www.alibabacloud.com/help/doc-detail/122389.htm). Default is `PL1`.
        /// </summary>
        [Input("workerDiskPerformanceLevel")]
        public Input<string>? WorkerDiskPerformanceLevel { get; set; }

        /// <summary>
        /// (Optional) The system disk size of worker node. Its valid value range [40~500] in GB.
        /// </summary>
        [Input("workerDiskSize")]
        public Input<int>? WorkerDiskSize { get; set; }

        /// <summary>
        /// (Optional, Available in 1.120.0+) Worker node system disk auto snapshot policy.
        /// </summary>
        [Input("workerDiskSnapshotPolicyId")]
        public Input<string>? WorkerDiskSnapshotPolicyId { get; set; }

        /// <summary>
        /// (Optional) Worker payment type, its valid value is either or `PostPaid` or `PrePaid`. Defaults to `PostPaid`. If value is `PrePaid`, the files `worker_period`, `worker_period_unit`, `worker_auto_renew` and `worker_auto_renew_period` are required, default is `PostPaid`.
        /// </summary>
        [Input("workerInstanceChargeType")]
        public Input<string>? WorkerInstanceChargeType { get; set; }

        [Input("workerInstanceTypes")]
        private InputList<string>? _workerInstanceTypes;

        /// <summary>
        /// (Optional) The instance type of worker node. Specify one type for single AZ Cluster, three types for MultiAZ Cluster. From version 1.109.1, It is not necessary in the professional managed cluster, but it is necessary in other types of clusters.
        /// </summary>
        [Obsolete(@"Field 'worker_instance_types' has been deprecated from provider version 1.177.0. Please use resource 'alicloud_cs_kubernetes_node_pool' to manage cluster nodes, by using field 'instance_types' to replace it.")]
        public InputList<string> WorkerInstanceTypes
        {
            get => _workerInstanceTypes ?? (_workerInstanceTypes = new InputList<string>());
            set => _workerInstanceTypes = value;
        }

        /// <summary>
        /// (Optional) The worker node number of the kubernetes cluster. Default to 3. It is limited up to 50 and if you want to enlarge it, please apply white list or contact with us. From version 1.109.1, It is not necessary in the professional managed cluster, but it is necessary in other types of clusters.
        /// </summary>
        [Input("workerNumber")]
        public Input<int>? WorkerNumber { get; set; }

        /// <summary>
        /// (Optional) Worker payment period. The unit is `Month`. Its valid value is one of {1, 2, 3, 6, 12, 24, 36, 48, 60}.
        /// </summary>
        [Input("workerPeriod")]
        public Input<int>? WorkerPeriod { get; set; }

        /// <summary>
        /// (Optional) Worker payment period unit, the valid value is `Month`.
        /// </summary>
        [Input("workerPeriodUnit")]
        public Input<string>? WorkerPeriodUnit { get; set; }

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

        /// <summary>
        /// The vswitches used by control plane.
        /// </summary>
        public InputList<string> WorkerVswitchIds
        {
            get => _workerVswitchIds ?? (_workerVswitchIds = new InputList<string>());
            set => _workerVswitchIds = value;
        }

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

    public sealed class ManagedKubernetesState : global::Pulumi.ResourceArgs
    {
        [Input("addons")]
        private InputList<Inputs.ManagedKubernetesAddonGetArgs>? _addons;

        /// <summary>
        /// The addon you want to install in cluster.
        /// </summary>
        public InputList<Inputs.ManagedKubernetesAddonGetArgs> Addons
        {
            get => _addons ?? (_addons = new InputList<Inputs.ManagedKubernetesAddonGetArgs>());
            set => _addons = value;
        }

        [Input("apiAudiences")]
        private InputList<string>? _apiAudiences;

        /// <summary>
        /// A list of API audiences for [Service Account Token Volume Projection](https://www.alibabacloud.com/help/doc-detail/160384.htm). Set this to `["https://kubernetes.default.svc"]` if you want to enable the Token Volume Projection feature (requires specifying `service_account_issuer` as well. From cluster version 1.22+, Service Account Token Volume Projection will be enabled by default.
        /// </summary>
        public InputList<string> ApiAudiences
        {
            get => _apiAudiences ?? (_apiAudiences = new InputList<string>());
            set => _apiAudiences = value;
        }

        /// <summary>
        /// The Zone where new kubernetes cluster will be located. If it is not be specified, the `vswitch_ids` should be set, its value will be vswitch's zone.
        /// </summary>
        [Input("availabilityZone")]
        public Input<string>? AvailabilityZone { get; set; }

        /// <summary>
        /// (Available in 1.105.0+) Nested attribute containing certificate authority data for your cluster.
        /// </summary>
        [Input("certificateAuthority")]
        public Input<Inputs.ManagedKubernetesCertificateAuthorityGetArgs>? CertificateAuthority { get; set; }

        /// <summary>
        /// The path of client certificate, like `~/.kube/client-cert.pem`.
        /// </summary>
        [Input("clientCert")]
        public Input<string>? ClientCert { get; set; }

        /// <summary>
        /// The path of client key, like `~/.kube/client-key.pem`.
        /// </summary>
        [Input("clientKey")]
        public Input<string>? ClientKey { get; set; }

        /// <summary>
        /// The path of cluster ca certificate, like `~/.kube/cluster-ca-cert.pem`
        /// </summary>
        [Input("clusterCaCert")]
        public Input<string>? ClusterCaCert { get; set; }

        /// <summary>
        /// Cluster local domain name, Default to `cluster.local`. A domain name consists of one or more sections separated by a decimal point (.), each of which is up to 63 characters long, and can be lowercase, numerals, and underscores (-), and must be lowercase or numerals at the beginning and end.
        /// </summary>
        [Input("clusterDomain")]
        public Input<string>? ClusterDomain { get; set; }

        /// <summary>
        /// The cluster specifications of kubernetes cluster,which can be empty. Valid values:
        /// * ack.standard : Standard managed clusters.
        /// * ack.pro.small : Professional managed clusters.
        /// </summary>
        [Input("clusterSpec")]
        public Input<string>? ClusterSpec { get; set; }

        /// <summary>
        /// Map of kubernetes cluster connection information.
        /// </summary>
        [Input("connections")]
        public Input<Inputs.ManagedKubernetesConnectionsGetArgs>? Connections { get; set; }

        [Input("controlPlaneLogComponents")]
        private InputList<string>? _controlPlaneLogComponents;

        /// <summary>
        /// List of target components for which logs need to be collected. Supports `apiserver`, `kcm` and `scheduler`.
        /// </summary>
        public InputList<string> ControlPlaneLogComponents
        {
            get => _controlPlaneLogComponents ?? (_controlPlaneLogComponents = new InputList<string>());
            set => _controlPlaneLogComponents = value;
        }

        /// <summary>
        /// Control plane log project. If this field is not set, a log service project named k8s-log-{ClusterID} will be automatically created.
        /// </summary>
        [Input("controlPlaneLogProject")]
        public Input<string>? ControlPlaneLogProject { get; set; }

        /// <summary>
        /// Control plane log retention duration (unit: day). Default `30`. If control plane logs are to be collected, `control_plane_log_ttl` and `control_plane_log_components` must be specified.
        /// </summary>
        [Input("controlPlaneLogTtl")]
        public Input<string>? ControlPlaneLogTtl { get; set; }

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

        /// <summary>
        /// Customize the certificate SAN, multiple IP or domain names are separated by English commas (,).
        /// </summary>
        [Input("customSan")]
        public Input<string>? CustomSan { get; set; }

        /// <summary>
        /// Whether to enable cluster deletion protection.
        /// </summary>
        [Input("deletionProtection")]
        public Input<bool>? DeletionProtection { get; set; }

        /// <summary>
        /// Whether to enable cluster to support RRSA for version 1.22.3+. Default to `false`. Once the RRSA function is turned on, it is not allowed to turn off. If your cluster has enabled this function, please manually modify your tf file and add the rrsa configuration to the file, learn more [RAM Roles for Service Accounts](https://www.alibabacloud.com/help/zh/container-service-for-kubernetes/latest/use-rrsa-to-enforce-access-control).
        /// </summary>
        [Input("enableRrsa")]
        public Input<bool>? EnableRrsa { get; set; }

        /// <summary>
        /// (Optional) Enable login to the node through SSH. Default to `false`.
        /// </summary>
        [Input("enableSsh")]
        public Input<bool>? EnableSsh { get; set; }

        /// <summary>
        /// The disk encryption key.
        /// </summary>
        [Input("encryptionProviderKey")]
        public Input<string>? EncryptionProviderKey { get; set; }

        /// <summary>
        /// (Optional, Available in 1.88.0+) Exclude autoscaler nodes from `worker_nodes`. Default to `false`.
        /// </summary>
        [Input("excludeAutoscalerNodes")]
        public Input<bool>? ExcludeAutoscalerNodes { get; set; }

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

        /// <summary>
        /// (Optional) Install cloud monitor agent on ECS. Default to `true`.
        /// </summary>
        [Input("installCloudMonitor")]
        public Input<bool>? InstallCloudMonitor { get; set; }

        /// <summary>
        /// Enable to create advanced security group. default: false. See [Advanced security group](https://www.alibabacloud.com/help/doc-detail/120621.htm).
        /// </summary>
        [Input("isEnterpriseSecurityGroup")]
        public Input<bool>? IsEnterpriseSecurityGroup { get; set; }

        /// <summary>
        /// (Optional) 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. From ersion 1.109.1, It is not necessary in the professional managed cluster.
        /// </summary>
        [Input("keyName")]
        public Input<string>? KeyName { get; set; }

        /// <summary>
        /// (Optional, Available in 1.57.1+) 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>
        /// (Optional, MapString, Available in 1.57.1+) 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>
        [Obsolete(@"Field 'kms_encryption_context' has been deprecated from provider version 1.177.0. Please use resource 'alicloud_cs_kubernetes_node_pool' to manage cluster nodes, by using field 'kms_encryption_context' to replace it")]
        public InputMap<object> KmsEncryptionContext
        {
            get => _kmsEncryptionContext ?? (_kmsEncryptionContext = new InputMap<object>());
            set => _kmsEncryptionContext = value;
        }

        /// <summary>
        /// The path of kube config, like `~/.kube/config`.
        /// </summary>
        [Input("kubeConfig")]
        public Input<string>? KubeConfig { get; set; }

        /// <summary>
        /// The cluster api server load balance instance specification, default `slb.s1.small`. For more information on how to select a LB instance specification, see [SLB instance overview](https://help.aliyun.com/document_detail/85931.html).
        /// </summary>
        [Input("loadBalancerSpec")]
        public Input<string>? LoadBalancerSpec { get; set; }

        /// <summary>
        /// The cluster maintenance window，effective only in the professional managed cluster. Managed node pool will use it. Detailed below.
        /// </summary>
        [Input("maintenanceWindow")]
        public Input<Inputs.ManagedKubernetesMaintenanceWindowGetArgs>? MaintenanceWindow { get; set; }

        /// <summary>
        /// The kubernetes cluster's name. It is unique in one Alicloud account.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        [Input("namePrefix")]
        public Input<string>? NamePrefix { get; set; }

        /// <summary>
        /// The ID of nat gateway used to launch kubernetes cluster.
        /// </summary>
        [Input("natGatewayId")]
        public Input<string>? NatGatewayId { get; set; }

        /// <summary>
        /// Whether to create a new nat gateway while creating kubernetes cluster. Default to true. Then openapi in Alibaba Cloud are not all on intranet, So turn this option on is a good choice.
        /// </summary>
        [Input("newNatGateway")]
        public Input<bool>? NewNatGateway { get; set; }

        /// <summary>
        /// The node cidr block to specific how many pods can run on single node. 24-28 is allowed. 24 means 2^(32-24)-1=255 and the node can run at most 255 pods. default: 24
        /// </summary>
        [Input("nodeCidrMask")]
        public Input<int>? NodeCidrMask { get; set; }

        /// <summary>
        /// (Optional, Available in 1.88.0+) 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>
        /// (Optional, ForceNew, Available in 1.103.2+) The service port range of nodes, valid values: `30000` to `65535`. Default to `30000-32767`.
        /// </summary>
        [Input("nodePortRange")]
        public Input<string>? NodePortRange { get; set; }

        /// <summary>
        /// (Optional, ForceNew, Available in 1.103.2+) The operating system of the nodes that run pods, its valid value is either `Linux` or `Windows`. Default to `Linux`.
        /// </summary>
        [Input("osType")]
        public Input<string>? OsType { get; set; }

        /// <summary>
        /// (Optional, Sensitive) The password of ssh login cluster node. You have to specify one of `password` `key_name` `kms_encrypted_password` fields. From ersion 1.109.1, It is not necessary in the professional managed cluster.
        /// </summary>
        [Input("password")]
        public Input<string>? Password { get; set; }

        /// <summary>
        /// (Optional, ForceNew, Available in 1.103.2+) The architecture of the nodes that run pods, its valid value is either `CentOS` or `AliyunLinux`. Default to `CentOS`.
        /// </summary>
        [Input("platform")]
        public Input<string>? Platform { get; set; }

        /// <summary>
        /// - [Flannel Specific] The CIDR block for the pod network when using Flannel.
        /// </summary>
        [Input("podCidr")]
        public Input<string>? PodCidr { get; set; }

        [Input("podVswitchIds")]
        private InputList<string>? _podVswitchIds;

        /// <summary>
        /// - [Terway Specific] The vswitches for the pod network when using Terway.Be careful the `pod_vswitch_ids` can not equal to `worker_vswitch_ids` or `master_vswitch_ids` but must be in same availability zones.
        /// </summary>
        public InputList<string> PodVswitchIds
        {
            get => _podVswitchIds ?? (_podVswitchIds = new InputList<string>());
            set => _podVswitchIds = value;
        }

        /// <summary>
        /// Proxy mode is option of kube-proxy. options: iptables|ipvs. default: ipvs.
        /// </summary>
        [Input("proxyMode")]
        public Input<string>? ProxyMode { get; set; }

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

        /// <summary>
        /// (Optional, Available in 1.103.2+) RDS instance list, You can choose which RDS instances whitelist to add instances to.
        /// </summary>
        [Obsolete(@"Field 'rds_instances' has been deprecated from provider version 1.177.0. Please use resource 'alicloud_cs_kubernetes_node_pool' to manage cluster nodes, by using field 'rds_instances' to replace it.")]
        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; }

        [Input("retainResources")]
        private InputList<string>? _retainResources;
        public InputList<string> RetainResources
        {
            get => _retainResources ?? (_retainResources = new InputList<string>());
            set => _retainResources = value;
        }

        /// <summary>
        /// (Available in v1.185.0+) Nested attribute containing RRSA related data for your cluster.
        /// </summary>
        [Input("rrsaMetadata")]
        public Input<Inputs.ManagedKubernetesRrsaMetadataGetArgs>? RrsaMetadata { get; set; }

        /// <summary>
        /// (Optional, Available in 1.103.2+) The runtime of containers. If you select another container runtime, see [Comparison of Docker, containerd, and Sandboxed-Container](https://www.alibabacloud.com/help/doc-detail/160313.htm). Detailed below.
        /// </summary>
        [Input("runtime")]
        public Input<Inputs.ManagedKubernetesRuntimeGetArgs>? Runtime { get; set; }

        /// <summary>
        /// The ID of the security group to which the ECS instances in the cluster belong. If it is not specified, a new Security group will be built.
        /// </summary>
        [Input("securityGroupId")]
        public Input<string>? SecurityGroupId { get; set; }

        /// <summary>
        /// The issuer of the Service Account token for [Service Account Token Volume Projection](https://www.alibabacloud.com/help/doc-detail/160384.htm), corresponds to the `iss` field in the token payload. Set this to `"https://kubernetes.default.svc"` to enable the Token Volume Projection feature (requires specifying `api_audiences` as well). From cluster version 1.22+, Service Account Token Volume Projection will be enabled by default.
        /// </summary>
        [Input("serviceAccountIssuer")]
        public Input<string>? ServiceAccountIssuer { get; set; }

        /// <summary>
        /// The CIDR block for the service network. It cannot be duplicated with the VPC CIDR and CIDR used by Kubernetes cluster in VPC, cannot be modified after creation.
        /// </summary>
        [Input("serviceCidr")]
        public Input<string>? ServiceCidr { get; set; }

        /// <summary>
        /// The ID of load balancer.
        /// </summary>
        [Input("slbId")]
        public Input<string>? SlbId { get; set; }

        /// <summary>
        /// The public ip of load balancer.
        /// </summary>
        [Input("slbInternet")]
        public Input<string>? SlbInternet { get; set; }

        /// <summary>
        /// Whether to create internet load balancer for API Server. Default to true.
        /// </summary>
        [Input("slbInternetEnabled")]
        public Input<bool>? SlbInternetEnabled { get; set; }

        /// <summary>
        /// The ID of private load balancer where the current cluster master node is located.
        /// </summary>
        [Input("slbIntranet")]
        public Input<string>? SlbIntranet { get; set; }

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

        /// <summary>
        /// Default nil, A map of tags assigned to the kubernetes cluster and work nodes. Detailed below.
        /// </summary>
        public InputMap<object> Tags
        {
            get => _tags ?? (_tags = new InputMap<object>());
            set => _tags = value;
        }

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

        /// <summary>
        /// (Optional, Available in 1.103.2+) Taints ensure pods are not scheduled onto inappropriate nodes. One or more taints are applied to a node; this marks that the node should not accept any pods that do not tolerate the taints. For more information, see [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/). Detailed below.
        /// </summary>
        [Obsolete(@"Field 'taints' has been deprecated from provider version 1.177.0. Please use resource 'alicloud_cs_kubernetes_node_pool' to manage cluster nodes, by using field 'taints' to replace it.")]
        public InputList<Inputs.ManagedKubernetesTaintGetArgs> Taints
        {
            get => _taints ?? (_taints = new InputList<Inputs.ManagedKubernetesTaintGetArgs>());
            set => _taints = value;
        }

        /// <summary>
        /// When you create a cluster, set the time zones for the Master and Worker nodes. You can only change the managed node time zone if you create a cluster. Once the cluster is created, you can only change the time zone of the Worker node.
        /// </summary>
        [Input("timezone")]
        public Input<string>? Timezone { get; set; }

        /// <summary>
        /// The path of customized CA cert, you can use this CA to sign client certs to connect your cluster.
        /// </summary>
        [Input("userCa")]
        public Input<string>? UserCa { get; set; }

        /// <summary>
        /// (Optional, Available in 1.81.0+) Custom data that can execute on nodes. For more information, see [Prepare user data](https://www.alibabacloud.com/help/doc-detail/49121.htm).
        /// </summary>
        [Input("userData")]
        public Input<string>? UserData { get; set; }

        /// <summary>
        /// Desired Kubernetes version. If you do not specify a value, the latest available version at resource creation is used and no upgrades will occur except you set a higher version number. The value must be configured and increased to upgrade the version when desired. Downgrades are not supported by ACK.
        /// </summary>
        [Input("version")]
        public Input<string>? Version { get; set; }

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

        /// <summary>
        /// (Optional) Enable worker payment auto-renew, defaults to false.
        /// </summary>
        [Input("workerAutoRenew")]
        public Input<bool>? WorkerAutoRenew { get; set; }

        /// <summary>
        /// Worker payment auto-renew period, it can be one of {1, 2, 3, 6, 12}.
        /// </summary>
        [Input("workerAutoRenewPeriod")]
        public Input<int>? WorkerAutoRenewPeriod { get; set; }

        /// <summary>
        /// The data disk category of worker, use `worker_data_disks` to instead it.
        /// </summary>
        [Input("workerDataDiskCategory")]
        public Input<string>? WorkerDataDiskCategory { get; set; }

        /// <summary>
        /// The data disk size of worker, use `worker_data_disks` to instead it.
        /// </summary>
        [Input("workerDataDiskSize")]
        public Input<int>? WorkerDataDiskSize { get; set; }

        [Input("workerDataDisks")]
        private InputList<Inputs.ManagedKubernetesWorkerDataDiskGetArgs>? _workerDataDisks;

        /// <summary>
        /// (Optional, Available in 1.91.0+) The data disk configurations of worker nodes, such as the disk type and disk size.
        /// </summary>
        [Obsolete(@"Field 'worker_data_disks' has been deprecated from provider version 1.177.0. Please use resource 'alicloud_cs_kubernetes_node_pool' to manage cluster nodes, by using field 'data_disks' to replace it")]
        public InputList<Inputs.ManagedKubernetesWorkerDataDiskGetArgs> WorkerDataDisks
        {
            get => _workerDataDisks ?? (_workerDataDisks = new InputList<Inputs.ManagedKubernetesWorkerDataDiskGetArgs>());
            set => _workerDataDisks = value;
        }

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

        /// <summary>
        /// (Optional, Available in 1.120.0+) Worker node system disk performance level, when `worker_disk_category` values `cloud_essd`, the optional values are `PL0`, `PL1`, `PL2` or `PL3`, but the specific performance level is related to the disk capacity. For more information, see [Enhanced SSDs](https://www.alibabacloud.com/help/doc-detail/122389.htm). Default is `PL1`.
        /// </summary>
        [Input("workerDiskPerformanceLevel")]
        public Input<string>? WorkerDiskPerformanceLevel { get; set; }

        /// <summary>
        /// (Optional) The system disk size of worker node. Its valid value range [40~500] in GB.
        /// </summary>
        [Input("workerDiskSize")]
        public Input<int>? WorkerDiskSize { get; set; }

        /// <summary>
        /// (Optional, Available in 1.120.0+) Worker node system disk auto snapshot policy.
        /// </summary>
        [Input("workerDiskSnapshotPolicyId")]
        public Input<string>? WorkerDiskSnapshotPolicyId { get; set; }

        /// <summary>
        /// (Optional) Worker payment type, its valid value is either or `PostPaid` or `PrePaid`. Defaults to `PostPaid`. If value is `PrePaid`, the files `worker_period`, `worker_period_unit`, `worker_auto_renew` and `worker_auto_renew_period` are required, default is `PostPaid`.
        /// </summary>
        [Input("workerInstanceChargeType")]
        public Input<string>? WorkerInstanceChargeType { get; set; }

        [Input("workerInstanceTypes")]
        private InputList<string>? _workerInstanceTypes;

        /// <summary>
        /// (Optional) The instance type of worker node. Specify one type for single AZ Cluster, three types for MultiAZ Cluster. From version 1.109.1, It is not necessary in the professional managed cluster, but it is necessary in other types of clusters.
        /// </summary>
        [Obsolete(@"Field 'worker_instance_types' has been deprecated from provider version 1.177.0. Please use resource 'alicloud_cs_kubernetes_node_pool' to manage cluster nodes, by using field 'instance_types' to replace it.")]
        public InputList<string> WorkerInstanceTypes
        {
            get => _workerInstanceTypes ?? (_workerInstanceTypes = new InputList<string>());
            set => _workerInstanceTypes = value;
        }

        [Input("workerNodes")]
        private InputList<Inputs.ManagedKubernetesWorkerNodeGetArgs>? _workerNodes;

        /// <summary>
        /// (Deprecated from version 1.177.0) List of cluster worker nodes.
        /// </summary>
        [Obsolete(@"Field 'worker_nodes' has been deprecated from provider version 1.177.0. Please use resource 'alicloud_cs_kubernetes_node_pool' to manage cluster nodes.")]
        public InputList<Inputs.ManagedKubernetesWorkerNodeGetArgs> WorkerNodes
        {
            get => _workerNodes ?? (_workerNodes = new InputList<Inputs.ManagedKubernetesWorkerNodeGetArgs>());
            set => _workerNodes = value;
        }

        /// <summary>
        /// (Optional) The worker node number of the kubernetes cluster. Default to 3. It is limited up to 50 and if you want to enlarge it, please apply white list or contact with us. From version 1.109.1, It is not necessary in the professional managed cluster, but it is necessary in other types of clusters.
        /// </summary>
        [Input("workerNumber")]
        public Input<int>? WorkerNumber { get; set; }

        /// <summary>
        /// (Optional) Worker payment period. The unit is `Month`. Its valid value is one of {1, 2, 3, 6, 12, 24, 36, 48, 60}.
        /// </summary>
        [Input("workerPeriod")]
        public Input<int>? WorkerPeriod { get; set; }

        /// <summary>
        /// (Optional) Worker payment period unit, the valid value is `Month`.
        /// </summary>
        [Input("workerPeriodUnit")]
        public Input<string>? WorkerPeriodUnit { get; set; }

        /// <summary>
        /// The RamRole Name attached to worker node.
        /// </summary>
        [Input("workerRamRoleName")]
        public Input<string>? WorkerRamRoleName { get; set; }

        [Input("workerVswitchIds")]
        private InputList<string>? _workerVswitchIds;

        /// <summary>
        /// The vswitches used by control plane.
        /// </summary>
        public InputList<string> WorkerVswitchIds
        {
            get => _workerVswitchIds ?? (_workerVswitchIds = new InputList<string>());
            set => _workerVswitchIds = value;
        }

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