// *** 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.Tctest.Tke
{
    [TctestResourceType("tctest:Tke/cluster:Cluster")]
    public partial class Cluster : Pulumi.CustomResource
    {
        /// <summary>
        /// If set to true, it will acquire the ClusterRole tke:admin. NOTE: this arguments cannot revoke to `false` after acquired.
        /// </summary>
        [Output("acquireClusterAdminRole")]
        public Output<bool?> AcquireClusterAdminRole { get; private set; } = null!;

        /// <summary>
        /// Specify cluster authentication configuration. Only available for managed cluster and `cluster_version` &gt;= 1.20.
        /// </summary>
        [Output("authOptions")]
        public Output<Outputs.ClusterAuthOptions?> AuthOptions { get; private set; } = null!;

        /// <summary>
        /// Whether the cluster level auto upgraded, valid for managed cluster.
        /// </summary>
        [Output("autoUpgradeClusterLevel")]
        public Output<bool?> AutoUpgradeClusterLevel { get; private set; } = null!;

        /// <summary>
        /// The number of basic pods. valid when enable_customized_pod_cidr=true.
        /// </summary>
        [Output("basePodNum")]
        public Output<int?> BasePodNum { get; private set; } = null!;

        /// <summary>
        /// The certificate used for access.
        /// </summary>
        [Output("certificationAuthority")]
        public Output<string> CertificationAuthority { get; private set; } = null!;

        /// <summary>
        /// Claim expired seconds to recycle ENI. This field can only set when field `network_type` is 'VPC-CNI'.
        /// `claim_expired_seconds` must greater or equal than 300 and less than 15768000.
        /// </summary>
        [Output("claimExpiredSeconds")]
        public Output<int?> ClaimExpiredSeconds { get; private set; } = null!;

        /// <summary>
        /// Indicates whether to enable cluster node auto scaling. Default is false.
        /// </summary>
        [Output("clusterAsEnabled")]
        public Output<bool?> ClusterAsEnabled { get; private set; } = null!;

        /// <summary>
        /// Specify Cluster Audit config. NOTE: Please make sure your TKE CamRole have permission to access CLS service.
        /// </summary>
        [Output("clusterAudit")]
        public Output<Outputs.ClusterClusterAudit?> ClusterAudit { get; private set; } = null!;

        /// <summary>
        /// A network address block of the cluster. Different from vpc cidr and cidr of other clusters within this vpc. Must be in
        /// 10./192.168/172.[16-31] segments.
        /// </summary>
        [Output("clusterCidr")]
        public Output<string?> ClusterCidr { get; private set; } = null!;

        /// <summary>
        /// Deployment type of the cluster, the available values include: 'MANAGED_CLUSTER' and 'INDEPENDENT_CLUSTER'. Default is
        /// 'MANAGED_CLUSTER'.
        /// </summary>
        [Output("clusterDeployType")]
        public Output<string?> ClusterDeployType { get; private set; } = null!;

        /// <summary>
        /// Description of the cluster.
        /// </summary>
        [Output("clusterDesc")]
        public Output<string?> ClusterDesc { get; private set; } = null!;

        /// <summary>
        /// External network address to access.
        /// </summary>
        [Output("clusterExternalEndpoint")]
        public Output<string> ClusterExternalEndpoint { get; private set; } = null!;

        /// <summary>
        /// Customized parameters for master component,such as kube-apiserver, kube-controller-manager, kube-scheduler.
        /// </summary>
        [Output("clusterExtraArgs")]
        public Output<Outputs.ClusterClusterExtraArgs?> ClusterExtraArgs { get; private set; } = null!;

        /// <summary>
        /// Open internet access or not. If this field is set 'true', the field below `worker_config` must be set. Because only
        /// cluster with node is allowed enable access endpoint.
        /// </summary>
        [Output("clusterInternet")]
        public Output<bool?> ClusterInternet { get; private set; } = null!;

        /// <summary>
        /// Open intranet access or not. If this field is set 'true', the field below `worker_config` must be set. Because only
        /// cluster with node is allowed enable access endpoint.
        /// </summary>
        [Output("clusterIntranet")]
        public Output<bool?> ClusterIntranet { get; private set; } = null!;

        /// <summary>
        /// Subnet id who can access this independent cluster, this field must and can only set when `cluster_intranet` is true.
        /// `cluster_intranet_subnet_id` can not modify once be set.
        /// </summary>
        [Output("clusterIntranetSubnetId")]
        public Output<string?> ClusterIntranetSubnetId { get; private set; } = null!;

        /// <summary>
        /// Indicates whether `ipvs` is enabled. Default is true. False means `iptables` is enabled.
        /// </summary>
        [Output("clusterIpvs")]
        public Output<bool?> ClusterIpvs { get; private set; } = null!;

        /// <summary>
        /// Specify cluster level, valid for managed cluster, use data source `tencentcloud_kubernetes_cluster_levels` to query
        /// available levels. Available value examples `L5`, `LL20`, `L50`, `L100`, etc.
        /// </summary>
        [Output("clusterLevel")]
        public Output<string?> ClusterLevel { get; private set; } = null!;

        /// <summary>
        /// The maximum number of Pods per node in the cluster. Default is 256. The minimum value is 4. When its power unequal to 2,
        /// it will round upward to the closest power of 2.
        /// </summary>
        [Output("clusterMaxPodNum")]
        public Output<int?> ClusterMaxPodNum { get; private set; } = null!;

        /// <summary>
        /// The maximum number of services in the cluster. Default is 256. The range is from 32 to 32768. When its power unequal to
        /// 2, it will round upward to the closest power of 2.
        /// </summary>
        [Output("clusterMaxServiceNum")]
        public Output<int?> ClusterMaxServiceNum { get; private set; } = null!;

        /// <summary>
        /// Name of the cluster.
        /// </summary>
        [Output("clusterName")]
        public Output<string?> ClusterName { get; private set; } = null!;

        /// <summary>
        /// Number of nodes in the cluster.
        /// </summary>
        [Output("clusterNodeNum")]
        public Output<int> ClusterNodeNum { get; private set; } = null!;

        /// <summary>
        /// Operating system of the cluster, the available values include:
        /// 'centos7.6.0_x64','ubuntu18.04.1x86_64','tlinux2.4x86_64'. Default is 'tlinux2.4x86_64'.
        /// </summary>
        [Output("clusterOs")]
        public Output<string?> ClusterOs { get; private set; } = null!;

        /// <summary>
        /// Image type of the cluster os, the available values include: 'GENERAL'. Default is 'GENERAL'.
        /// </summary>
        [Output("clusterOsType")]
        public Output<string?> ClusterOsType { get; private set; } = null!;

        /// <summary>
        /// Version of the cluster, Default is '1.10.5'.
        /// </summary>
        [Output("clusterVersion")]
        public Output<string?> ClusterVersion { get; private set; } = null!;

        /// <summary>
        /// Runtime type of the cluster, the available values include: 'docker' and 'containerd'. Default is 'docker'.
        /// </summary>
        [Output("containerRuntime")]
        public Output<string?> ContainerRuntime { get; private set; } = null!;

        /// <summary>
        /// Indicates whether cluster deletion protection is enabled. Default is false.
        /// </summary>
        [Output("deletionProtection")]
        public Output<bool?> DeletionProtection { get; private set; } = null!;

        /// <summary>
        /// Docker graph path. Default is `/var/lib/docker`.
        /// </summary>
        [Output("dockerGraphPath")]
        public Output<string?> DockerGraphPath { get; private set; } = null!;

        /// <summary>
        /// Domain name for access.
        /// </summary>
        [Output("domain")]
        public Output<string> Domain { get; private set; } = null!;

        /// <summary>
        /// Whether to enable the custom mode of node podCIDR size. Default is false.
        /// </summary>
        [Output("enableCustomizedPodCidr")]
        public Output<bool?> EnableCustomizedPodCidr { get; private set; } = null!;

        /// <summary>
        /// Subnet Ids for cluster with VPC-CNI network mode. This field can only set when field `network_type` is 'VPC-CNI'.
        /// `eni_subnet_ids` can not empty once be set.
        /// </summary>
        [Output("eniSubnetIds")]
        public Output<ImmutableArray<string>> EniSubnetIds { get; private set; } = null!;

        /// <summary>
        /// Specify cluster Event Persistence config. NOTE: Please make sure your TKE CamRole have permission to access CLS service.
        /// </summary>
        [Output("eventPersistence")]
        public Output<Outputs.ClusterEventPersistence?> EventPersistence { get; private set; } = null!;

        /// <summary>
        /// create tke cluster by existed instances.
        /// </summary>
        [Output("existInstances")]
        public Output<ImmutableArray<Outputs.ClusterExistInstance>> ExistInstances { get; private set; } = null!;

        /// <summary>
        /// Information of the add-on to be installed.
        /// </summary>
        [Output("extensionAddons")]
        public Output<ImmutableArray<Outputs.ClusterExtensionAddon>> ExtensionAddons { get; private set; } = null!;

        /// <summary>
        /// Custom parameter information related to the node.
        /// </summary>
        [Output("extraArgs")]
        public Output<ImmutableArray<string>> ExtraArgs { get; private set; } = null!;

        /// <summary>
        /// Indicate to set desired pod number in node. valid when enable_customized_pod_cidr=true, and it takes effect for all
        /// nodes.
        /// </summary>
        [Output("globeDesiredPodNum")]
        public Output<int?> GlobeDesiredPodNum { get; private set; } = null!;

        /// <summary>
        /// Indicates whether to ignore the cluster cidr conflict error. Default is false.
        /// </summary>
        [Output("ignoreClusterCidrConflict")]
        public Output<bool?> IgnoreClusterCidrConflict { get; private set; } = null!;

        /// <summary>
        /// Indicates whether non-static ip mode is enabled. Default is false.
        /// </summary>
        [Output("isNonStaticIpMode")]
        public Output<bool?> IsNonStaticIpMode { get; private set; } = null!;

        /// <summary>
        /// kubernetes config.
        /// </summary>
        [Output("kubeConfig")]
        public Output<string> KubeConfig { get; private set; } = null!;

        /// <summary>
        /// Cluster kube-proxy mode, the available values include: 'kube-proxy-bpf'. Default is not set.When set to kube-proxy-bpf,
        /// cluster version greater than 1.14 and with Tencent Linux 2.4 is required.
        /// </summary>
        [Output("kubeProxyMode")]
        public Output<string?> KubeProxyMode { get; private set; } = null!;

        /// <summary>
        /// Labels of tke cluster nodes.
        /// </summary>
        [Output("labels")]
        public Output<ImmutableDictionary<string, object>?> Labels { get; private set; } = null!;

        /// <summary>
        /// Specify cluster log agent config.
        /// </summary>
        [Output("logAgent")]
        public Output<Outputs.ClusterLogAgent?> LogAgent { get; private set; } = null!;

        /// <summary>
        /// Security policies for managed cluster internet, like:'192.168.1.0/24' or '192.168.127.12', '0.0.0.0/0' means all. This
        /// field can only set when field `cluster_deploy_type` is 'MANAGED_CLUSTER' and `cluster_internet` is true.
        /// `managed_cluster_internet_security_policies` can not delete or empty once be set.
        /// </summary>
        [Output("managedClusterInternetSecurityPolicies")]
        public Output<ImmutableArray<string>> ManagedClusterInternetSecurityPolicies { get; private set; } = null!;

        /// <summary>
        /// Deploy the machine configuration information of the 'MASTER_ETCD' service, and create &lt;=7 units for common users.
        /// </summary>
        [Output("masterConfigs")]
        public Output<ImmutableArray<Outputs.ClusterMasterConfig>> MasterConfigs { get; private set; } = null!;

        /// <summary>
        /// Mount target. Default is not mounting.
        /// </summary>
        [Output("mountTarget")]
        public Output<string?> MountTarget { get; private set; } = null!;

        /// <summary>
        /// Cluster network type, GR or VPC-CNI. Default is GR.
        /// </summary>
        [Output("networkType")]
        public Output<string?> NetworkType { get; private set; } = null!;

        /// <summary>
        /// Node name type of Cluster, the available values include: 'lan-ip' and 'hostname', Default is 'lan-ip'.
        /// </summary>
        [Output("nodeNameType")]
        public Output<string?> NodeNameType { get; private set; } = null!;

        /// <summary>
        /// Global config effective for all node pools.
        /// </summary>
        [Output("nodePoolGlobalConfigs")]
        public Output<ImmutableArray<Outputs.ClusterNodePoolGlobalConfig>> NodePoolGlobalConfigs { get; private set; } = null!;

        /// <summary>
        /// Password of account.
        /// </summary>
        [Output("password")]
        public Output<string> Password { get; private set; } = null!;

        /// <summary>
        /// The Intranet address used for access.
        /// </summary>
        [Output("pgwEndpoint")]
        public Output<string> PgwEndpoint { get; private set; } = null!;

        /// <summary>
        /// Project ID, default value is 0.
        /// </summary>
        [Output("projectId")]
        public Output<int?> ProjectId { get; private set; } = null!;

        /// <summary>
        /// Container Runtime version.
        /// </summary>
        [Output("runtimeVersion")]
        public Output<string?> RuntimeVersion { get; private set; } = null!;

        /// <summary>
        /// Access policy.
        /// </summary>
        [Output("securityPolicies")]
        public Output<ImmutableArray<string>> SecurityPolicies { get; private set; } = null!;

        /// <summary>
        /// A network address block of the service. Different from vpc cidr and cidr of other clusters within this vpc. Must be in
        /// 10./192.168/172.[16-31] segments.
        /// </summary>
        [Output("serviceCidr")]
        public Output<string?> ServiceCidr { get; private set; } = null!;

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

        /// <summary>
        /// Sets whether the joining node participates in the schedule. Default is '0'. Participate in scheduling.
        /// </summary>
        [Output("unschedulable")]
        public Output<int?> Unschedulable { get; private set; } = null!;

        /// <summary>
        /// Indicates whether upgrade all instances when cluster_version change. Default is false.
        /// </summary>
        [Output("upgradeInstancesFollowCluster")]
        public Output<bool?> UpgradeInstancesFollowCluster { get; private set; } = null!;

        /// <summary>
        /// User name of account.
        /// </summary>
        [Output("userName")]
        public Output<string> UserName { get; private set; } = null!;

        /// <summary>
        /// Vpc Id of the cluster.
        /// </summary>
        [Output("vpcId")]
        public Output<string> VpcId { get; private set; } = null!;

        /// <summary>
        /// Deploy the machine configuration information of the 'WORKER' service, and create &lt;=20 units for common users. The other
        /// 'WORK' service are added by 'tencentcloud_kubernetes_worker'.
        /// </summary>
        [Output("workerConfigs")]
        public Output<ImmutableArray<Outputs.ClusterWorkerConfig>> WorkerConfigs { get; private set; } = null!;

        /// <summary>
        /// An information list of cvm within the 'WORKER' clusters. Each element contains the following attributes:
        /// </summary>
        [Output("workerInstancesLists")]
        public Output<ImmutableArray<Outputs.ClusterWorkerInstancesList>> WorkerInstancesLists { get; private set; } = null!;


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

        private Cluster(string name, Input<string> id, ClusterState? state = null, CustomResourceOptions? options = null)
            : base("tctest:Tke/cluster:Cluster", name, state, MakeResourceOptions(options, id))
        {
        }

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

    public sealed class ClusterArgs : Pulumi.ResourceArgs
    {
        /// <summary>
        /// If set to true, it will acquire the ClusterRole tke:admin. NOTE: this arguments cannot revoke to `false` after acquired.
        /// </summary>
        [Input("acquireClusterAdminRole")]
        public Input<bool>? AcquireClusterAdminRole { get; set; }

        /// <summary>
        /// Specify cluster authentication configuration. Only available for managed cluster and `cluster_version` &gt;= 1.20.
        /// </summary>
        [Input("authOptions")]
        public Input<Inputs.ClusterAuthOptionsArgs>? AuthOptions { get; set; }

        /// <summary>
        /// Whether the cluster level auto upgraded, valid for managed cluster.
        /// </summary>
        [Input("autoUpgradeClusterLevel")]
        public Input<bool>? AutoUpgradeClusterLevel { get; set; }

        /// <summary>
        /// The number of basic pods. valid when enable_customized_pod_cidr=true.
        /// </summary>
        [Input("basePodNum")]
        public Input<int>? BasePodNum { get; set; }

        /// <summary>
        /// Claim expired seconds to recycle ENI. This field can only set when field `network_type` is 'VPC-CNI'.
        /// `claim_expired_seconds` must greater or equal than 300 and less than 15768000.
        /// </summary>
        [Input("claimExpiredSeconds")]
        public Input<int>? ClaimExpiredSeconds { get; set; }

        /// <summary>
        /// Indicates whether to enable cluster node auto scaling. Default is false.
        /// </summary>
        [Input("clusterAsEnabled")]
        public Input<bool>? ClusterAsEnabled { get; set; }

        /// <summary>
        /// Specify Cluster Audit config. NOTE: Please make sure your TKE CamRole have permission to access CLS service.
        /// </summary>
        [Input("clusterAudit")]
        public Input<Inputs.ClusterClusterAuditArgs>? ClusterAudit { get; set; }

        /// <summary>
        /// A network address block of the cluster. Different from vpc cidr and cidr of other clusters within this vpc. Must be in
        /// 10./192.168/172.[16-31] segments.
        /// </summary>
        [Input("clusterCidr")]
        public Input<string>? ClusterCidr { get; set; }

        /// <summary>
        /// Deployment type of the cluster, the available values include: 'MANAGED_CLUSTER' and 'INDEPENDENT_CLUSTER'. Default is
        /// 'MANAGED_CLUSTER'.
        /// </summary>
        [Input("clusterDeployType")]
        public Input<string>? ClusterDeployType { get; set; }

        /// <summary>
        /// Description of the cluster.
        /// </summary>
        [Input("clusterDesc")]
        public Input<string>? ClusterDesc { get; set; }

        /// <summary>
        /// Customized parameters for master component,such as kube-apiserver, kube-controller-manager, kube-scheduler.
        /// </summary>
        [Input("clusterExtraArgs")]
        public Input<Inputs.ClusterClusterExtraArgsArgs>? ClusterExtraArgs { get; set; }

        /// <summary>
        /// Open internet access or not. If this field is set 'true', the field below `worker_config` must be set. Because only
        /// cluster with node is allowed enable access endpoint.
        /// </summary>
        [Input("clusterInternet")]
        public Input<bool>? ClusterInternet { get; set; }

        /// <summary>
        /// Open intranet access or not. If this field is set 'true', the field below `worker_config` must be set. Because only
        /// cluster with node is allowed enable access endpoint.
        /// </summary>
        [Input("clusterIntranet")]
        public Input<bool>? ClusterIntranet { get; set; }

        /// <summary>
        /// Subnet id who can access this independent cluster, this field must and can only set when `cluster_intranet` is true.
        /// `cluster_intranet_subnet_id` can not modify once be set.
        /// </summary>
        [Input("clusterIntranetSubnetId")]
        public Input<string>? ClusterIntranetSubnetId { get; set; }

        /// <summary>
        /// Indicates whether `ipvs` is enabled. Default is true. False means `iptables` is enabled.
        /// </summary>
        [Input("clusterIpvs")]
        public Input<bool>? ClusterIpvs { get; set; }

        /// <summary>
        /// Specify cluster level, valid for managed cluster, use data source `tencentcloud_kubernetes_cluster_levels` to query
        /// available levels. Available value examples `L5`, `LL20`, `L50`, `L100`, etc.
        /// </summary>
        [Input("clusterLevel")]
        public Input<string>? ClusterLevel { get; set; }

        /// <summary>
        /// The maximum number of Pods per node in the cluster. Default is 256. The minimum value is 4. When its power unequal to 2,
        /// it will round upward to the closest power of 2.
        /// </summary>
        [Input("clusterMaxPodNum")]
        public Input<int>? ClusterMaxPodNum { get; set; }

        /// <summary>
        /// The maximum number of services in the cluster. Default is 256. The range is from 32 to 32768. When its power unequal to
        /// 2, it will round upward to the closest power of 2.
        /// </summary>
        [Input("clusterMaxServiceNum")]
        public Input<int>? ClusterMaxServiceNum { get; set; }

        /// <summary>
        /// Name of the cluster.
        /// </summary>
        [Input("clusterName")]
        public Input<string>? ClusterName { get; set; }

        /// <summary>
        /// Operating system of the cluster, the available values include:
        /// 'centos7.6.0_x64','ubuntu18.04.1x86_64','tlinux2.4x86_64'. Default is 'tlinux2.4x86_64'.
        /// </summary>
        [Input("clusterOs")]
        public Input<string>? ClusterOs { get; set; }

        /// <summary>
        /// Image type of the cluster os, the available values include: 'GENERAL'. Default is 'GENERAL'.
        /// </summary>
        [Input("clusterOsType")]
        public Input<string>? ClusterOsType { get; set; }

        /// <summary>
        /// Version of the cluster, Default is '1.10.5'.
        /// </summary>
        [Input("clusterVersion")]
        public Input<string>? ClusterVersion { get; set; }

        /// <summary>
        /// Runtime type of the cluster, the available values include: 'docker' and 'containerd'. Default is 'docker'.
        /// </summary>
        [Input("containerRuntime")]
        public Input<string>? ContainerRuntime { get; set; }

        /// <summary>
        /// Indicates whether cluster deletion protection is enabled. Default is false.
        /// </summary>
        [Input("deletionProtection")]
        public Input<bool>? DeletionProtection { get; set; }

        /// <summary>
        /// Docker graph path. Default is `/var/lib/docker`.
        /// </summary>
        [Input("dockerGraphPath")]
        public Input<string>? DockerGraphPath { get; set; }

        /// <summary>
        /// Whether to enable the custom mode of node podCIDR size. Default is false.
        /// </summary>
        [Input("enableCustomizedPodCidr")]
        public Input<bool>? EnableCustomizedPodCidr { get; set; }

        [Input("eniSubnetIds")]
        private InputList<string>? _eniSubnetIds;

        /// <summary>
        /// Subnet Ids for cluster with VPC-CNI network mode. This field can only set when field `network_type` is 'VPC-CNI'.
        /// `eni_subnet_ids` can not empty once be set.
        /// </summary>
        public InputList<string> EniSubnetIds
        {
            get => _eniSubnetIds ?? (_eniSubnetIds = new InputList<string>());
            set => _eniSubnetIds = value;
        }

        /// <summary>
        /// Specify cluster Event Persistence config. NOTE: Please make sure your TKE CamRole have permission to access CLS service.
        /// </summary>
        [Input("eventPersistence")]
        public Input<Inputs.ClusterEventPersistenceArgs>? EventPersistence { get; set; }

        [Input("existInstances")]
        private InputList<Inputs.ClusterExistInstanceArgs>? _existInstances;

        /// <summary>
        /// create tke cluster by existed instances.
        /// </summary>
        public InputList<Inputs.ClusterExistInstanceArgs> ExistInstances
        {
            get => _existInstances ?? (_existInstances = new InputList<Inputs.ClusterExistInstanceArgs>());
            set => _existInstances = value;
        }

        [Input("extensionAddons")]
        private InputList<Inputs.ClusterExtensionAddonArgs>? _extensionAddons;

        /// <summary>
        /// Information of the add-on to be installed.
        /// </summary>
        public InputList<Inputs.ClusterExtensionAddonArgs> ExtensionAddons
        {
            get => _extensionAddons ?? (_extensionAddons = new InputList<Inputs.ClusterExtensionAddonArgs>());
            set => _extensionAddons = value;
        }

        [Input("extraArgs")]
        private InputList<string>? _extraArgs;

        /// <summary>
        /// Custom parameter information related to the node.
        /// </summary>
        public InputList<string> ExtraArgs
        {
            get => _extraArgs ?? (_extraArgs = new InputList<string>());
            set => _extraArgs = value;
        }

        /// <summary>
        /// Indicate to set desired pod number in node. valid when enable_customized_pod_cidr=true, and it takes effect for all
        /// nodes.
        /// </summary>
        [Input("globeDesiredPodNum")]
        public Input<int>? GlobeDesiredPodNum { get; set; }

        /// <summary>
        /// Indicates whether to ignore the cluster cidr conflict error. Default is false.
        /// </summary>
        [Input("ignoreClusterCidrConflict")]
        public Input<bool>? IgnoreClusterCidrConflict { get; set; }

        /// <summary>
        /// Indicates whether non-static ip mode is enabled. Default is false.
        /// </summary>
        [Input("isNonStaticIpMode")]
        public Input<bool>? IsNonStaticIpMode { get; set; }

        /// <summary>
        /// Cluster kube-proxy mode, the available values include: 'kube-proxy-bpf'. Default is not set.When set to kube-proxy-bpf,
        /// cluster version greater than 1.14 and with Tencent Linux 2.4 is required.
        /// </summary>
        [Input("kubeProxyMode")]
        public Input<string>? KubeProxyMode { get; set; }

        [Input("labels")]
        private InputMap<object>? _labels;

        /// <summary>
        /// Labels of tke cluster nodes.
        /// </summary>
        public InputMap<object> Labels
        {
            get => _labels ?? (_labels = new InputMap<object>());
            set => _labels = value;
        }

        /// <summary>
        /// Specify cluster log agent config.
        /// </summary>
        [Input("logAgent")]
        public Input<Inputs.ClusterLogAgentArgs>? LogAgent { get; set; }

        [Input("managedClusterInternetSecurityPolicies")]
        private InputList<string>? _managedClusterInternetSecurityPolicies;

        /// <summary>
        /// Security policies for managed cluster internet, like:'192.168.1.0/24' or '192.168.127.12', '0.0.0.0/0' means all. This
        /// field can only set when field `cluster_deploy_type` is 'MANAGED_CLUSTER' and `cluster_internet` is true.
        /// `managed_cluster_internet_security_policies` can not delete or empty once be set.
        /// </summary>
        public InputList<string> ManagedClusterInternetSecurityPolicies
        {
            get => _managedClusterInternetSecurityPolicies ?? (_managedClusterInternetSecurityPolicies = new InputList<string>());
            set => _managedClusterInternetSecurityPolicies = value;
        }

        [Input("masterConfigs")]
        private InputList<Inputs.ClusterMasterConfigArgs>? _masterConfigs;

        /// <summary>
        /// Deploy the machine configuration information of the 'MASTER_ETCD' service, and create &lt;=7 units for common users.
        /// </summary>
        public InputList<Inputs.ClusterMasterConfigArgs> MasterConfigs
        {
            get => _masterConfigs ?? (_masterConfigs = new InputList<Inputs.ClusterMasterConfigArgs>());
            set => _masterConfigs = value;
        }

        /// <summary>
        /// Mount target. Default is not mounting.
        /// </summary>
        [Input("mountTarget")]
        public Input<string>? MountTarget { get; set; }

        /// <summary>
        /// Cluster network type, GR or VPC-CNI. Default is GR.
        /// </summary>
        [Input("networkType")]
        public Input<string>? NetworkType { get; set; }

        /// <summary>
        /// Node name type of Cluster, the available values include: 'lan-ip' and 'hostname', Default is 'lan-ip'.
        /// </summary>
        [Input("nodeNameType")]
        public Input<string>? NodeNameType { get; set; }

        [Input("nodePoolGlobalConfigs")]
        private InputList<Inputs.ClusterNodePoolGlobalConfigArgs>? _nodePoolGlobalConfigs;

        /// <summary>
        /// Global config effective for all node pools.
        /// </summary>
        public InputList<Inputs.ClusterNodePoolGlobalConfigArgs> NodePoolGlobalConfigs
        {
            get => _nodePoolGlobalConfigs ?? (_nodePoolGlobalConfigs = new InputList<Inputs.ClusterNodePoolGlobalConfigArgs>());
            set => _nodePoolGlobalConfigs = value;
        }

        /// <summary>
        /// Project ID, default value is 0.
        /// </summary>
        [Input("projectId")]
        public Input<int>? ProjectId { get; set; }

        /// <summary>
        /// Container Runtime version.
        /// </summary>
        [Input("runtimeVersion")]
        public Input<string>? RuntimeVersion { get; set; }

        /// <summary>
        /// A network address block of the service. Different from vpc cidr and cidr of other clusters within this vpc. Must be in
        /// 10./192.168/172.[16-31] segments.
        /// </summary>
        [Input("serviceCidr")]
        public Input<string>? ServiceCidr { get; set; }

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

        /// <summary>
        /// The tags of the cluster.
        /// </summary>
        public InputMap<object> Tags
        {
            get => _tags ?? (_tags = new InputMap<object>());
            set => _tags = value;
        }

        /// <summary>
        /// Sets whether the joining node participates in the schedule. Default is '0'. Participate in scheduling.
        /// </summary>
        [Input("unschedulable")]
        public Input<int>? Unschedulable { get; set; }

        /// <summary>
        /// Indicates whether upgrade all instances when cluster_version change. Default is false.
        /// </summary>
        [Input("upgradeInstancesFollowCluster")]
        public Input<bool>? UpgradeInstancesFollowCluster { get; set; }

        /// <summary>
        /// Vpc Id of the cluster.
        /// </summary>
        [Input("vpcId", required: true)]
        public Input<string> VpcId { get; set; } = null!;

        [Input("workerConfigs")]
        private InputList<Inputs.ClusterWorkerConfigArgs>? _workerConfigs;

        /// <summary>
        /// Deploy the machine configuration information of the 'WORKER' service, and create &lt;=20 units for common users. The other
        /// 'WORK' service are added by 'tencentcloud_kubernetes_worker'.
        /// </summary>
        public InputList<Inputs.ClusterWorkerConfigArgs> WorkerConfigs
        {
            get => _workerConfigs ?? (_workerConfigs = new InputList<Inputs.ClusterWorkerConfigArgs>());
            set => _workerConfigs = value;
        }

        public ClusterArgs()
        {
        }
    }

    public sealed class ClusterState : Pulumi.ResourceArgs
    {
        /// <summary>
        /// If set to true, it will acquire the ClusterRole tke:admin. NOTE: this arguments cannot revoke to `false` after acquired.
        /// </summary>
        [Input("acquireClusterAdminRole")]
        public Input<bool>? AcquireClusterAdminRole { get; set; }

        /// <summary>
        /// Specify cluster authentication configuration. Only available for managed cluster and `cluster_version` &gt;= 1.20.
        /// </summary>
        [Input("authOptions")]
        public Input<Inputs.ClusterAuthOptionsGetArgs>? AuthOptions { get; set; }

        /// <summary>
        /// Whether the cluster level auto upgraded, valid for managed cluster.
        /// </summary>
        [Input("autoUpgradeClusterLevel")]
        public Input<bool>? AutoUpgradeClusterLevel { get; set; }

        /// <summary>
        /// The number of basic pods. valid when enable_customized_pod_cidr=true.
        /// </summary>
        [Input("basePodNum")]
        public Input<int>? BasePodNum { get; set; }

        /// <summary>
        /// The certificate used for access.
        /// </summary>
        [Input("certificationAuthority")]
        public Input<string>? CertificationAuthority { get; set; }

        /// <summary>
        /// Claim expired seconds to recycle ENI. This field can only set when field `network_type` is 'VPC-CNI'.
        /// `claim_expired_seconds` must greater or equal than 300 and less than 15768000.
        /// </summary>
        [Input("claimExpiredSeconds")]
        public Input<int>? ClaimExpiredSeconds { get; set; }

        /// <summary>
        /// Indicates whether to enable cluster node auto scaling. Default is false.
        /// </summary>
        [Input("clusterAsEnabled")]
        public Input<bool>? ClusterAsEnabled { get; set; }

        /// <summary>
        /// Specify Cluster Audit config. NOTE: Please make sure your TKE CamRole have permission to access CLS service.
        /// </summary>
        [Input("clusterAudit")]
        public Input<Inputs.ClusterClusterAuditGetArgs>? ClusterAudit { get; set; }

        /// <summary>
        /// A network address block of the cluster. Different from vpc cidr and cidr of other clusters within this vpc. Must be in
        /// 10./192.168/172.[16-31] segments.
        /// </summary>
        [Input("clusterCidr")]
        public Input<string>? ClusterCidr { get; set; }

        /// <summary>
        /// Deployment type of the cluster, the available values include: 'MANAGED_CLUSTER' and 'INDEPENDENT_CLUSTER'. Default is
        /// 'MANAGED_CLUSTER'.
        /// </summary>
        [Input("clusterDeployType")]
        public Input<string>? ClusterDeployType { get; set; }

        /// <summary>
        /// Description of the cluster.
        /// </summary>
        [Input("clusterDesc")]
        public Input<string>? ClusterDesc { get; set; }

        /// <summary>
        /// External network address to access.
        /// </summary>
        [Input("clusterExternalEndpoint")]
        public Input<string>? ClusterExternalEndpoint { get; set; }

        /// <summary>
        /// Customized parameters for master component,such as kube-apiserver, kube-controller-manager, kube-scheduler.
        /// </summary>
        [Input("clusterExtraArgs")]
        public Input<Inputs.ClusterClusterExtraArgsGetArgs>? ClusterExtraArgs { get; set; }

        /// <summary>
        /// Open internet access or not. If this field is set 'true', the field below `worker_config` must be set. Because only
        /// cluster with node is allowed enable access endpoint.
        /// </summary>
        [Input("clusterInternet")]
        public Input<bool>? ClusterInternet { get; set; }

        /// <summary>
        /// Open intranet access or not. If this field is set 'true', the field below `worker_config` must be set. Because only
        /// cluster with node is allowed enable access endpoint.
        /// </summary>
        [Input("clusterIntranet")]
        public Input<bool>? ClusterIntranet { get; set; }

        /// <summary>
        /// Subnet id who can access this independent cluster, this field must and can only set when `cluster_intranet` is true.
        /// `cluster_intranet_subnet_id` can not modify once be set.
        /// </summary>
        [Input("clusterIntranetSubnetId")]
        public Input<string>? ClusterIntranetSubnetId { get; set; }

        /// <summary>
        /// Indicates whether `ipvs` is enabled. Default is true. False means `iptables` is enabled.
        /// </summary>
        [Input("clusterIpvs")]
        public Input<bool>? ClusterIpvs { get; set; }

        /// <summary>
        /// Specify cluster level, valid for managed cluster, use data source `tencentcloud_kubernetes_cluster_levels` to query
        /// available levels. Available value examples `L5`, `LL20`, `L50`, `L100`, etc.
        /// </summary>
        [Input("clusterLevel")]
        public Input<string>? ClusterLevel { get; set; }

        /// <summary>
        /// The maximum number of Pods per node in the cluster. Default is 256. The minimum value is 4. When its power unequal to 2,
        /// it will round upward to the closest power of 2.
        /// </summary>
        [Input("clusterMaxPodNum")]
        public Input<int>? ClusterMaxPodNum { get; set; }

        /// <summary>
        /// The maximum number of services in the cluster. Default is 256. The range is from 32 to 32768. When its power unequal to
        /// 2, it will round upward to the closest power of 2.
        /// </summary>
        [Input("clusterMaxServiceNum")]
        public Input<int>? ClusterMaxServiceNum { get; set; }

        /// <summary>
        /// Name of the cluster.
        /// </summary>
        [Input("clusterName")]
        public Input<string>? ClusterName { get; set; }

        /// <summary>
        /// Number of nodes in the cluster.
        /// </summary>
        [Input("clusterNodeNum")]
        public Input<int>? ClusterNodeNum { get; set; }

        /// <summary>
        /// Operating system of the cluster, the available values include:
        /// 'centos7.6.0_x64','ubuntu18.04.1x86_64','tlinux2.4x86_64'. Default is 'tlinux2.4x86_64'.
        /// </summary>
        [Input("clusterOs")]
        public Input<string>? ClusterOs { get; set; }

        /// <summary>
        /// Image type of the cluster os, the available values include: 'GENERAL'. Default is 'GENERAL'.
        /// </summary>
        [Input("clusterOsType")]
        public Input<string>? ClusterOsType { get; set; }

        /// <summary>
        /// Version of the cluster, Default is '1.10.5'.
        /// </summary>
        [Input("clusterVersion")]
        public Input<string>? ClusterVersion { get; set; }

        /// <summary>
        /// Runtime type of the cluster, the available values include: 'docker' and 'containerd'. Default is 'docker'.
        /// </summary>
        [Input("containerRuntime")]
        public Input<string>? ContainerRuntime { get; set; }

        /// <summary>
        /// Indicates whether cluster deletion protection is enabled. Default is false.
        /// </summary>
        [Input("deletionProtection")]
        public Input<bool>? DeletionProtection { get; set; }

        /// <summary>
        /// Docker graph path. Default is `/var/lib/docker`.
        /// </summary>
        [Input("dockerGraphPath")]
        public Input<string>? DockerGraphPath { get; set; }

        /// <summary>
        /// Domain name for access.
        /// </summary>
        [Input("domain")]
        public Input<string>? Domain { get; set; }

        /// <summary>
        /// Whether to enable the custom mode of node podCIDR size. Default is false.
        /// </summary>
        [Input("enableCustomizedPodCidr")]
        public Input<bool>? EnableCustomizedPodCidr { get; set; }

        [Input("eniSubnetIds")]
        private InputList<string>? _eniSubnetIds;

        /// <summary>
        /// Subnet Ids for cluster with VPC-CNI network mode. This field can only set when field `network_type` is 'VPC-CNI'.
        /// `eni_subnet_ids` can not empty once be set.
        /// </summary>
        public InputList<string> EniSubnetIds
        {
            get => _eniSubnetIds ?? (_eniSubnetIds = new InputList<string>());
            set => _eniSubnetIds = value;
        }

        /// <summary>
        /// Specify cluster Event Persistence config. NOTE: Please make sure your TKE CamRole have permission to access CLS service.
        /// </summary>
        [Input("eventPersistence")]
        public Input<Inputs.ClusterEventPersistenceGetArgs>? EventPersistence { get; set; }

        [Input("existInstances")]
        private InputList<Inputs.ClusterExistInstanceGetArgs>? _existInstances;

        /// <summary>
        /// create tke cluster by existed instances.
        /// </summary>
        public InputList<Inputs.ClusterExistInstanceGetArgs> ExistInstances
        {
            get => _existInstances ?? (_existInstances = new InputList<Inputs.ClusterExistInstanceGetArgs>());
            set => _existInstances = value;
        }

        [Input("extensionAddons")]
        private InputList<Inputs.ClusterExtensionAddonGetArgs>? _extensionAddons;

        /// <summary>
        /// Information of the add-on to be installed.
        /// </summary>
        public InputList<Inputs.ClusterExtensionAddonGetArgs> ExtensionAddons
        {
            get => _extensionAddons ?? (_extensionAddons = new InputList<Inputs.ClusterExtensionAddonGetArgs>());
            set => _extensionAddons = value;
        }

        [Input("extraArgs")]
        private InputList<string>? _extraArgs;

        /// <summary>
        /// Custom parameter information related to the node.
        /// </summary>
        public InputList<string> ExtraArgs
        {
            get => _extraArgs ?? (_extraArgs = new InputList<string>());
            set => _extraArgs = value;
        }

        /// <summary>
        /// Indicate to set desired pod number in node. valid when enable_customized_pod_cidr=true, and it takes effect for all
        /// nodes.
        /// </summary>
        [Input("globeDesiredPodNum")]
        public Input<int>? GlobeDesiredPodNum { get; set; }

        /// <summary>
        /// Indicates whether to ignore the cluster cidr conflict error. Default is false.
        /// </summary>
        [Input("ignoreClusterCidrConflict")]
        public Input<bool>? IgnoreClusterCidrConflict { get; set; }

        /// <summary>
        /// Indicates whether non-static ip mode is enabled. Default is false.
        /// </summary>
        [Input("isNonStaticIpMode")]
        public Input<bool>? IsNonStaticIpMode { get; set; }

        /// <summary>
        /// kubernetes config.
        /// </summary>
        [Input("kubeConfig")]
        public Input<string>? KubeConfig { get; set; }

        /// <summary>
        /// Cluster kube-proxy mode, the available values include: 'kube-proxy-bpf'. Default is not set.When set to kube-proxy-bpf,
        /// cluster version greater than 1.14 and with Tencent Linux 2.4 is required.
        /// </summary>
        [Input("kubeProxyMode")]
        public Input<string>? KubeProxyMode { get; set; }

        [Input("labels")]
        private InputMap<object>? _labels;

        /// <summary>
        /// Labels of tke cluster nodes.
        /// </summary>
        public InputMap<object> Labels
        {
            get => _labels ?? (_labels = new InputMap<object>());
            set => _labels = value;
        }

        /// <summary>
        /// Specify cluster log agent config.
        /// </summary>
        [Input("logAgent")]
        public Input<Inputs.ClusterLogAgentGetArgs>? LogAgent { get; set; }

        [Input("managedClusterInternetSecurityPolicies")]
        private InputList<string>? _managedClusterInternetSecurityPolicies;

        /// <summary>
        /// Security policies for managed cluster internet, like:'192.168.1.0/24' or '192.168.127.12', '0.0.0.0/0' means all. This
        /// field can only set when field `cluster_deploy_type` is 'MANAGED_CLUSTER' and `cluster_internet` is true.
        /// `managed_cluster_internet_security_policies` can not delete or empty once be set.
        /// </summary>
        public InputList<string> ManagedClusterInternetSecurityPolicies
        {
            get => _managedClusterInternetSecurityPolicies ?? (_managedClusterInternetSecurityPolicies = new InputList<string>());
            set => _managedClusterInternetSecurityPolicies = value;
        }

        [Input("masterConfigs")]
        private InputList<Inputs.ClusterMasterConfigGetArgs>? _masterConfigs;

        /// <summary>
        /// Deploy the machine configuration information of the 'MASTER_ETCD' service, and create &lt;=7 units for common users.
        /// </summary>
        public InputList<Inputs.ClusterMasterConfigGetArgs> MasterConfigs
        {
            get => _masterConfigs ?? (_masterConfigs = new InputList<Inputs.ClusterMasterConfigGetArgs>());
            set => _masterConfigs = value;
        }

        /// <summary>
        /// Mount target. Default is not mounting.
        /// </summary>
        [Input("mountTarget")]
        public Input<string>? MountTarget { get; set; }

        /// <summary>
        /// Cluster network type, GR or VPC-CNI. Default is GR.
        /// </summary>
        [Input("networkType")]
        public Input<string>? NetworkType { get; set; }

        /// <summary>
        /// Node name type of Cluster, the available values include: 'lan-ip' and 'hostname', Default is 'lan-ip'.
        /// </summary>
        [Input("nodeNameType")]
        public Input<string>? NodeNameType { get; set; }

        [Input("nodePoolGlobalConfigs")]
        private InputList<Inputs.ClusterNodePoolGlobalConfigGetArgs>? _nodePoolGlobalConfigs;

        /// <summary>
        /// Global config effective for all node pools.
        /// </summary>
        public InputList<Inputs.ClusterNodePoolGlobalConfigGetArgs> NodePoolGlobalConfigs
        {
            get => _nodePoolGlobalConfigs ?? (_nodePoolGlobalConfigs = new InputList<Inputs.ClusterNodePoolGlobalConfigGetArgs>());
            set => _nodePoolGlobalConfigs = value;
        }

        /// <summary>
        /// Password of account.
        /// </summary>
        [Input("password")]
        public Input<string>? Password { get; set; }

        /// <summary>
        /// The Intranet address used for access.
        /// </summary>
        [Input("pgwEndpoint")]
        public Input<string>? PgwEndpoint { get; set; }

        /// <summary>
        /// Project ID, default value is 0.
        /// </summary>
        [Input("projectId")]
        public Input<int>? ProjectId { get; set; }

        /// <summary>
        /// Container Runtime version.
        /// </summary>
        [Input("runtimeVersion")]
        public Input<string>? RuntimeVersion { get; set; }

        [Input("securityPolicies")]
        private InputList<string>? _securityPolicies;

        /// <summary>
        /// Access policy.
        /// </summary>
        public InputList<string> SecurityPolicies
        {
            get => _securityPolicies ?? (_securityPolicies = new InputList<string>());
            set => _securityPolicies = value;
        }

        /// <summary>
        /// A network address block of the service. Different from vpc cidr and cidr of other clusters within this vpc. Must be in
        /// 10./192.168/172.[16-31] segments.
        /// </summary>
        [Input("serviceCidr")]
        public Input<string>? ServiceCidr { get; set; }

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

        /// <summary>
        /// The tags of the cluster.
        /// </summary>
        public InputMap<object> Tags
        {
            get => _tags ?? (_tags = new InputMap<object>());
            set => _tags = value;
        }

        /// <summary>
        /// Sets whether the joining node participates in the schedule. Default is '0'. Participate in scheduling.
        /// </summary>
        [Input("unschedulable")]
        public Input<int>? Unschedulable { get; set; }

        /// <summary>
        /// Indicates whether upgrade all instances when cluster_version change. Default is false.
        /// </summary>
        [Input("upgradeInstancesFollowCluster")]
        public Input<bool>? UpgradeInstancesFollowCluster { get; set; }

        /// <summary>
        /// User name of account.
        /// </summary>
        [Input("userName")]
        public Input<string>? UserName { get; set; }

        /// <summary>
        /// Vpc Id of the cluster.
        /// </summary>
        [Input("vpcId")]
        public Input<string>? VpcId { get; set; }

        [Input("workerConfigs")]
        private InputList<Inputs.ClusterWorkerConfigGetArgs>? _workerConfigs;

        /// <summary>
        /// Deploy the machine configuration information of the 'WORKER' service, and create &lt;=20 units for common users. The other
        /// 'WORK' service are added by 'tencentcloud_kubernetes_worker'.
        /// </summary>
        public InputList<Inputs.ClusterWorkerConfigGetArgs> WorkerConfigs
        {
            get => _workerConfigs ?? (_workerConfigs = new InputList<Inputs.ClusterWorkerConfigGetArgs>());
            set => _workerConfigs = value;
        }

        [Input("workerInstancesLists")]
        private InputList<Inputs.ClusterWorkerInstancesListGetArgs>? _workerInstancesLists;

        /// <summary>
        /// An information list of cvm within the 'WORKER' clusters. Each element contains the following attributes:
        /// </summary>
        public InputList<Inputs.ClusterWorkerInstancesListGetArgs> WorkerInstancesLists
        {
            get => _workerInstancesLists ?? (_workerInstancesLists = new InputList<Inputs.ClusterWorkerInstancesListGetArgs>());
            set => _workerInstancesLists = value;
        }

        public ClusterState()
        {
        }
    }
}
