# coding=utf-8
# *** 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! ***

import builtins
import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities
from . import outputs
from ._inputs import *

__all__ = ['ClusterArgs', 'Cluster']

@pulumi.input_type
class ClusterArgs:
    def __init__(__self__, *,
                 charge_type: pulumi.Input[builtins.str],
                 cluster_name: pulumi.Input[builtins.str],
                 cluster_type: pulumi.Input[builtins.str],
                 node_attribute: pulumi.Input['ClusterNodeAttributeArgs'],
                 release_version: pulumi.Input[builtins.str],
                 security_group_id: pulumi.Input[builtins.str],
                 vpc_id: pulumi.Input[builtins.str],
                 application_extras: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterApplicationExtraArgs']]]] = None,
                 application_names: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 bootstrap_scripts: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterBootstrapScriptArgs']]]] = None,
                 charge_pre_config: Optional[pulumi.Input['ClusterChargePreConfigArgs']] = None,
                 deploy_mode: Optional[pulumi.Input[builtins.str]] = None,
                 history_server_mode: Optional[pulumi.Input[builtins.str]] = None,
                 node_group_attributes: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodeGroupAttributeArgs']]]] = None,
                 project_name: Optional[pulumi.Input[builtins.str]] = None,
                 security_mode: Optional[pulumi.Input[builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterTagArgs']]]] = None):
        """
        The set of arguments for constructing a Cluster resource.
        :param pulumi.Input[builtins.str] charge_type: 付费类型，PRE表示包月，POST表示按量计费。
        :param pulumi.Input[builtins.str] cluster_name: 集群名称。
        :param pulumi.Input[builtins.str] cluster_type: 集群类型。
        :param pulumi.Input['ClusterNodeAttributeArgs'] node_attribute: 集群全局的节点信息。
        :param pulumi.Input[builtins.str] release_version: 集群版本。
        :param pulumi.Input[builtins.str] security_group_id: 集群全局安全组ID，所有节点组下的ecs都会加入该安全组。
        :param pulumi.Input[builtins.str] vpc_id: Vpc ID。
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] application_names: 集群安装的服务名称列表。创建字段。
        :param pulumi.Input['ClusterChargePreConfigArgs'] charge_pre_config: 包月的配置参数，当chargeType=PRE时，必选。
        :param pulumi.Input[builtins.str] deploy_mode: 部署模式。SIMPLE表示简单模式，HIGH_AVAILABLE表示高可用模式。
        :param pulumi.Input[builtins.str] history_server_mode: HistoryServer模式，LOCAL将活动数据存储于集群内，PHS将活动数据存储于集群外。
        :param pulumi.Input[builtins.str] project_name: 资源所属项目，默认为default。一个资源只能归属于一个项目。只能包含字母、数字、下划线“_”、点“.”和中划线“-”。长度限制在64个字符以内。
        :param pulumi.Input[builtins.str] security_mode: 安全模式。
        """
        pulumi.set(__self__, "charge_type", charge_type)
        pulumi.set(__self__, "cluster_name", cluster_name)
        pulumi.set(__self__, "cluster_type", cluster_type)
        pulumi.set(__self__, "node_attribute", node_attribute)
        pulumi.set(__self__, "release_version", release_version)
        pulumi.set(__self__, "security_group_id", security_group_id)
        pulumi.set(__self__, "vpc_id", vpc_id)
        if application_extras is not None:
            pulumi.set(__self__, "application_extras", application_extras)
        if application_names is not None:
            pulumi.set(__self__, "application_names", application_names)
        if bootstrap_scripts is not None:
            pulumi.set(__self__, "bootstrap_scripts", bootstrap_scripts)
        if charge_pre_config is not None:
            pulumi.set(__self__, "charge_pre_config", charge_pre_config)
        if deploy_mode is not None:
            pulumi.set(__self__, "deploy_mode", deploy_mode)
        if history_server_mode is not None:
            pulumi.set(__self__, "history_server_mode", history_server_mode)
        if node_group_attributes is not None:
            pulumi.set(__self__, "node_group_attributes", node_group_attributes)
        if project_name is not None:
            pulumi.set(__self__, "project_name", project_name)
        if security_mode is not None:
            pulumi.set(__self__, "security_mode", security_mode)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter(name="chargeType")
    def charge_type(self) -> pulumi.Input[builtins.str]:
        """
        付费类型，PRE表示包月，POST表示按量计费。
        """
        return pulumi.get(self, "charge_type")

    @charge_type.setter
    def charge_type(self, value: pulumi.Input[builtins.str]):
        pulumi.set(self, "charge_type", value)

    @property
    @pulumi.getter(name="clusterName")
    def cluster_name(self) -> pulumi.Input[builtins.str]:
        """
        集群名称。
        """
        return pulumi.get(self, "cluster_name")

    @cluster_name.setter
    def cluster_name(self, value: pulumi.Input[builtins.str]):
        pulumi.set(self, "cluster_name", value)

    @property
    @pulumi.getter(name="clusterType")
    def cluster_type(self) -> pulumi.Input[builtins.str]:
        """
        集群类型。
        """
        return pulumi.get(self, "cluster_type")

    @cluster_type.setter
    def cluster_type(self, value: pulumi.Input[builtins.str]):
        pulumi.set(self, "cluster_type", value)

    @property
    @pulumi.getter(name="nodeAttribute")
    def node_attribute(self) -> pulumi.Input['ClusterNodeAttributeArgs']:
        """
        集群全局的节点信息。
        """
        return pulumi.get(self, "node_attribute")

    @node_attribute.setter
    def node_attribute(self, value: pulumi.Input['ClusterNodeAttributeArgs']):
        pulumi.set(self, "node_attribute", value)

    @property
    @pulumi.getter(name="releaseVersion")
    def release_version(self) -> pulumi.Input[builtins.str]:
        """
        集群版本。
        """
        return pulumi.get(self, "release_version")

    @release_version.setter
    def release_version(self, value: pulumi.Input[builtins.str]):
        pulumi.set(self, "release_version", value)

    @property
    @pulumi.getter(name="securityGroupId")
    def security_group_id(self) -> pulumi.Input[builtins.str]:
        """
        集群全局安全组ID，所有节点组下的ecs都会加入该安全组。
        """
        return pulumi.get(self, "security_group_id")

    @security_group_id.setter
    def security_group_id(self, value: pulumi.Input[builtins.str]):
        pulumi.set(self, "security_group_id", value)

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> pulumi.Input[builtins.str]:
        """
        Vpc ID。
        """
        return pulumi.get(self, "vpc_id")

    @vpc_id.setter
    def vpc_id(self, value: pulumi.Input[builtins.str]):
        pulumi.set(self, "vpc_id", value)

    @property
    @pulumi.getter(name="applicationExtras")
    def application_extras(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterApplicationExtraArgs']]]]:
        return pulumi.get(self, "application_extras")

    @application_extras.setter
    def application_extras(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterApplicationExtraArgs']]]]):
        pulumi.set(self, "application_extras", value)

    @property
    @pulumi.getter(name="applicationNames")
    def application_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]:
        """
        集群安装的服务名称列表。创建字段。
        """
        return pulumi.get(self, "application_names")

    @application_names.setter
    def application_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]):
        pulumi.set(self, "application_names", value)

    @property
    @pulumi.getter(name="bootstrapScripts")
    def bootstrap_scripts(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterBootstrapScriptArgs']]]]:
        return pulumi.get(self, "bootstrap_scripts")

    @bootstrap_scripts.setter
    def bootstrap_scripts(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterBootstrapScriptArgs']]]]):
        pulumi.set(self, "bootstrap_scripts", value)

    @property
    @pulumi.getter(name="chargePreConfig")
    def charge_pre_config(self) -> Optional[pulumi.Input['ClusterChargePreConfigArgs']]:
        """
        包月的配置参数，当chargeType=PRE时，必选。
        """
        return pulumi.get(self, "charge_pre_config")

    @charge_pre_config.setter
    def charge_pre_config(self, value: Optional[pulumi.Input['ClusterChargePreConfigArgs']]):
        pulumi.set(self, "charge_pre_config", value)

    @property
    @pulumi.getter(name="deployMode")
    def deploy_mode(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        部署模式。SIMPLE表示简单模式，HIGH_AVAILABLE表示高可用模式。
        """
        return pulumi.get(self, "deploy_mode")

    @deploy_mode.setter
    def deploy_mode(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "deploy_mode", value)

    @property
    @pulumi.getter(name="historyServerMode")
    def history_server_mode(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        HistoryServer模式，LOCAL将活动数据存储于集群内，PHS将活动数据存储于集群外。
        """
        return pulumi.get(self, "history_server_mode")

    @history_server_mode.setter
    def history_server_mode(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "history_server_mode", value)

    @property
    @pulumi.getter(name="nodeGroupAttributes")
    def node_group_attributes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodeGroupAttributeArgs']]]]:
        return pulumi.get(self, "node_group_attributes")

    @node_group_attributes.setter
    def node_group_attributes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodeGroupAttributeArgs']]]]):
        pulumi.set(self, "node_group_attributes", value)

    @property
    @pulumi.getter(name="projectName")
    def project_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        资源所属项目，默认为default。一个资源只能归属于一个项目。只能包含字母、数字、下划线“_”、点“.”和中划线“-”。长度限制在64个字符以内。
        """
        return pulumi.get(self, "project_name")

    @project_name.setter
    def project_name(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "project_name", value)

    @property
    @pulumi.getter(name="securityMode")
    def security_mode(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        安全模式。
        """
        return pulumi.get(self, "security_mode")

    @security_mode.setter
    def security_mode(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "security_mode", value)

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterTagArgs']]]]:
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterTagArgs']]]]):
        pulumi.set(self, "tags", value)


@pulumi.input_type
class _ClusterState:
    def __init__(__self__, *,
                 account_id: Optional[pulumi.Input[builtins.int]] = None,
                 application_extras: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterApplicationExtraArgs']]]] = None,
                 application_names: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 applications: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterApplicationArgs']]]] = None,
                 bootstrap_scripts: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterBootstrapScriptArgs']]]] = None,
                 charge_pre_config: Optional[pulumi.Input['ClusterChargePreConfigArgs']] = None,
                 charge_type: Optional[pulumi.Input[builtins.str]] = None,
                 cluster_domain_names: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 cluster_id: Optional[pulumi.Input[builtins.str]] = None,
                 cluster_name: Optional[pulumi.Input[builtins.str]] = None,
                 cluster_state: Optional[pulumi.Input[builtins.str]] = None,
                 cluster_type: Optional[pulumi.Input[builtins.str]] = None,
                 created_time: Optional[pulumi.Input[builtins.int]] = None,
                 creator_id: Optional[pulumi.Input[builtins.int]] = None,
                 creator_name: Optional[pulumi.Input[builtins.str]] = None,
                 deploy_mode: Optional[pulumi.Input[builtins.str]] = None,
                 ecs_image_id: Optional[pulumi.Input[builtins.str]] = None,
                 expire_time: Optional[pulumi.Input[builtins.int]] = None,
                 history_server_mode: Optional[pulumi.Input[builtins.str]] = None,
                 node_attribute: Optional[pulumi.Input['ClusterNodeAttributeArgs']] = None,
                 node_group_attributes: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodeGroupAttributeArgs']]]] = None,
                 project_name: Optional[pulumi.Input[builtins.str]] = None,
                 ready_time: Optional[pulumi.Input[builtins.int]] = None,
                 release_version: Optional[pulumi.Input[builtins.str]] = None,
                 security_group_id: Optional[pulumi.Input[builtins.str]] = None,
                 security_mode: Optional[pulumi.Input[builtins.str]] = None,
                 state_change_reason: Optional[pulumi.Input['ClusterStateChangeReasonArgs']] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterTagArgs']]]] = None,
                 terminate_time: Optional[pulumi.Input[builtins.int]] = None,
                 vpc_id: Optional[pulumi.Input[builtins.str]] = None):
        """
        Input properties used for looking up and filtering Cluster resources.
        :param pulumi.Input[builtins.int] account_id: 账号ID。
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] application_names: 集群安装的服务名称列表。创建字段。
        :param pulumi.Input['ClusterChargePreConfigArgs'] charge_pre_config: 包月的配置参数，当chargeType=PRE时，必选。
        :param pulumi.Input[builtins.str] charge_type: 付费类型，PRE表示包月，POST表示按量计费。
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] cluster_domain_names: 集群dns域名后缀列表。
        :param pulumi.Input[builtins.str] cluster_id: 集群ID。
        :param pulumi.Input[builtins.str] cluster_name: 集群名称。
        :param pulumi.Input[builtins.str] cluster_state: 集群状态。
        :param pulumi.Input[builtins.str] cluster_type: 集群类型。
        :param pulumi.Input[builtins.int] created_time: 集群创建时间。
        :param pulumi.Input[builtins.int] creator_id: 创建者ID。
        :param pulumi.Input[builtins.str] creator_name: 创建者名称。
        :param pulumi.Input[builtins.str] deploy_mode: 部署模式。SIMPLE表示简单模式，HIGH_AVAILABLE表示高可用模式。
        :param pulumi.Input[builtins.str] ecs_image_id: ECS镜像ID。
        :param pulumi.Input[builtins.int] expire_time: 集群过期时间。
        :param pulumi.Input[builtins.str] history_server_mode: HistoryServer模式，LOCAL将活动数据存储于集群内，PHS将活动数据存储于集群外。
        :param pulumi.Input['ClusterNodeAttributeArgs'] node_attribute: 集群全局的节点信息。
        :param pulumi.Input[builtins.str] project_name: 资源所属项目，默认为default。一个资源只能归属于一个项目。只能包含字母、数字、下划线“_”、点“.”和中划线“-”。长度限制在64个字符以内。
        :param pulumi.Input[builtins.int] ready_time: 集群创建完成时间。
        :param pulumi.Input[builtins.str] release_version: 集群版本。
        :param pulumi.Input[builtins.str] security_group_id: 集群全局安全组ID，所有节点组下的ecs都会加入该安全组。
        :param pulumi.Input[builtins.str] security_mode: 安全模式。
        :param pulumi.Input['ClusterStateChangeReasonArgs'] state_change_reason: 状态变更原因。
        :param pulumi.Input[builtins.int] terminate_time: 集群终止时间。
        :param pulumi.Input[builtins.str] vpc_id: Vpc ID。
        """
        if account_id is not None:
            pulumi.set(__self__, "account_id", account_id)
        if application_extras is not None:
            pulumi.set(__self__, "application_extras", application_extras)
        if application_names is not None:
            pulumi.set(__self__, "application_names", application_names)
        if applications is not None:
            pulumi.set(__self__, "applications", applications)
        if bootstrap_scripts is not None:
            pulumi.set(__self__, "bootstrap_scripts", bootstrap_scripts)
        if charge_pre_config is not None:
            pulumi.set(__self__, "charge_pre_config", charge_pre_config)
        if charge_type is not None:
            pulumi.set(__self__, "charge_type", charge_type)
        if cluster_domain_names is not None:
            pulumi.set(__self__, "cluster_domain_names", cluster_domain_names)
        if cluster_id is not None:
            pulumi.set(__self__, "cluster_id", cluster_id)
        if cluster_name is not None:
            pulumi.set(__self__, "cluster_name", cluster_name)
        if cluster_state is not None:
            pulumi.set(__self__, "cluster_state", cluster_state)
        if cluster_type is not None:
            pulumi.set(__self__, "cluster_type", cluster_type)
        if created_time is not None:
            pulumi.set(__self__, "created_time", created_time)
        if creator_id is not None:
            pulumi.set(__self__, "creator_id", creator_id)
        if creator_name is not None:
            pulumi.set(__self__, "creator_name", creator_name)
        if deploy_mode is not None:
            pulumi.set(__self__, "deploy_mode", deploy_mode)
        if ecs_image_id is not None:
            pulumi.set(__self__, "ecs_image_id", ecs_image_id)
        if expire_time is not None:
            pulumi.set(__self__, "expire_time", expire_time)
        if history_server_mode is not None:
            pulumi.set(__self__, "history_server_mode", history_server_mode)
        if node_attribute is not None:
            pulumi.set(__self__, "node_attribute", node_attribute)
        if node_group_attributes is not None:
            pulumi.set(__self__, "node_group_attributes", node_group_attributes)
        if project_name is not None:
            pulumi.set(__self__, "project_name", project_name)
        if ready_time is not None:
            pulumi.set(__self__, "ready_time", ready_time)
        if release_version is not None:
            pulumi.set(__self__, "release_version", release_version)
        if security_group_id is not None:
            pulumi.set(__self__, "security_group_id", security_group_id)
        if security_mode is not None:
            pulumi.set(__self__, "security_mode", security_mode)
        if state_change_reason is not None:
            pulumi.set(__self__, "state_change_reason", state_change_reason)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if terminate_time is not None:
            pulumi.set(__self__, "terminate_time", terminate_time)
        if vpc_id is not None:
            pulumi.set(__self__, "vpc_id", vpc_id)

    @property
    @pulumi.getter(name="accountId")
    def account_id(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        账号ID。
        """
        return pulumi.get(self, "account_id")

    @account_id.setter
    def account_id(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "account_id", value)

    @property
    @pulumi.getter(name="applicationExtras")
    def application_extras(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterApplicationExtraArgs']]]]:
        return pulumi.get(self, "application_extras")

    @application_extras.setter
    def application_extras(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterApplicationExtraArgs']]]]):
        pulumi.set(self, "application_extras", value)

    @property
    @pulumi.getter(name="applicationNames")
    def application_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]:
        """
        集群安装的服务名称列表。创建字段。
        """
        return pulumi.get(self, "application_names")

    @application_names.setter
    def application_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]):
        pulumi.set(self, "application_names", value)

    @property
    @pulumi.getter
    def applications(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterApplicationArgs']]]]:
        return pulumi.get(self, "applications")

    @applications.setter
    def applications(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterApplicationArgs']]]]):
        pulumi.set(self, "applications", value)

    @property
    @pulumi.getter(name="bootstrapScripts")
    def bootstrap_scripts(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterBootstrapScriptArgs']]]]:
        return pulumi.get(self, "bootstrap_scripts")

    @bootstrap_scripts.setter
    def bootstrap_scripts(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterBootstrapScriptArgs']]]]):
        pulumi.set(self, "bootstrap_scripts", value)

    @property
    @pulumi.getter(name="chargePreConfig")
    def charge_pre_config(self) -> Optional[pulumi.Input['ClusterChargePreConfigArgs']]:
        """
        包月的配置参数，当chargeType=PRE时，必选。
        """
        return pulumi.get(self, "charge_pre_config")

    @charge_pre_config.setter
    def charge_pre_config(self, value: Optional[pulumi.Input['ClusterChargePreConfigArgs']]):
        pulumi.set(self, "charge_pre_config", value)

    @property
    @pulumi.getter(name="chargeType")
    def charge_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        付费类型，PRE表示包月，POST表示按量计费。
        """
        return pulumi.get(self, "charge_type")

    @charge_type.setter
    def charge_type(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "charge_type", value)

    @property
    @pulumi.getter(name="clusterDomainNames")
    def cluster_domain_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]:
        """
        集群dns域名后缀列表。
        """
        return pulumi.get(self, "cluster_domain_names")

    @cluster_domain_names.setter
    def cluster_domain_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]):
        pulumi.set(self, "cluster_domain_names", value)

    @property
    @pulumi.getter(name="clusterId")
    def cluster_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        集群ID。
        """
        return pulumi.get(self, "cluster_id")

    @cluster_id.setter
    def cluster_id(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "cluster_id", value)

    @property
    @pulumi.getter(name="clusterName")
    def cluster_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        集群名称。
        """
        return pulumi.get(self, "cluster_name")

    @cluster_name.setter
    def cluster_name(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "cluster_name", value)

    @property
    @pulumi.getter(name="clusterState")
    def cluster_state(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        集群状态。
        """
        return pulumi.get(self, "cluster_state")

    @cluster_state.setter
    def cluster_state(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "cluster_state", value)

    @property
    @pulumi.getter(name="clusterType")
    def cluster_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        集群类型。
        """
        return pulumi.get(self, "cluster_type")

    @cluster_type.setter
    def cluster_type(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "cluster_type", value)

    @property
    @pulumi.getter(name="createdTime")
    def created_time(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        集群创建时间。
        """
        return pulumi.get(self, "created_time")

    @created_time.setter
    def created_time(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "created_time", value)

    @property
    @pulumi.getter(name="creatorId")
    def creator_id(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        创建者ID。
        """
        return pulumi.get(self, "creator_id")

    @creator_id.setter
    def creator_id(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "creator_id", value)

    @property
    @pulumi.getter(name="creatorName")
    def creator_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        创建者名称。
        """
        return pulumi.get(self, "creator_name")

    @creator_name.setter
    def creator_name(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "creator_name", value)

    @property
    @pulumi.getter(name="deployMode")
    def deploy_mode(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        部署模式。SIMPLE表示简单模式，HIGH_AVAILABLE表示高可用模式。
        """
        return pulumi.get(self, "deploy_mode")

    @deploy_mode.setter
    def deploy_mode(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "deploy_mode", value)

    @property
    @pulumi.getter(name="ecsImageId")
    def ecs_image_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        ECS镜像ID。
        """
        return pulumi.get(self, "ecs_image_id")

    @ecs_image_id.setter
    def ecs_image_id(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "ecs_image_id", value)

    @property
    @pulumi.getter(name="expireTime")
    def expire_time(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        集群过期时间。
        """
        return pulumi.get(self, "expire_time")

    @expire_time.setter
    def expire_time(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "expire_time", value)

    @property
    @pulumi.getter(name="historyServerMode")
    def history_server_mode(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        HistoryServer模式，LOCAL将活动数据存储于集群内，PHS将活动数据存储于集群外。
        """
        return pulumi.get(self, "history_server_mode")

    @history_server_mode.setter
    def history_server_mode(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "history_server_mode", value)

    @property
    @pulumi.getter(name="nodeAttribute")
    def node_attribute(self) -> Optional[pulumi.Input['ClusterNodeAttributeArgs']]:
        """
        集群全局的节点信息。
        """
        return pulumi.get(self, "node_attribute")

    @node_attribute.setter
    def node_attribute(self, value: Optional[pulumi.Input['ClusterNodeAttributeArgs']]):
        pulumi.set(self, "node_attribute", value)

    @property
    @pulumi.getter(name="nodeGroupAttributes")
    def node_group_attributes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodeGroupAttributeArgs']]]]:
        return pulumi.get(self, "node_group_attributes")

    @node_group_attributes.setter
    def node_group_attributes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodeGroupAttributeArgs']]]]):
        pulumi.set(self, "node_group_attributes", value)

    @property
    @pulumi.getter(name="projectName")
    def project_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        资源所属项目，默认为default。一个资源只能归属于一个项目。只能包含字母、数字、下划线“_”、点“.”和中划线“-”。长度限制在64个字符以内。
        """
        return pulumi.get(self, "project_name")

    @project_name.setter
    def project_name(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "project_name", value)

    @property
    @pulumi.getter(name="readyTime")
    def ready_time(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        集群创建完成时间。
        """
        return pulumi.get(self, "ready_time")

    @ready_time.setter
    def ready_time(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "ready_time", value)

    @property
    @pulumi.getter(name="releaseVersion")
    def release_version(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        集群版本。
        """
        return pulumi.get(self, "release_version")

    @release_version.setter
    def release_version(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "release_version", value)

    @property
    @pulumi.getter(name="securityGroupId")
    def security_group_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        集群全局安全组ID，所有节点组下的ecs都会加入该安全组。
        """
        return pulumi.get(self, "security_group_id")

    @security_group_id.setter
    def security_group_id(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "security_group_id", value)

    @property
    @pulumi.getter(name="securityMode")
    def security_mode(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        安全模式。
        """
        return pulumi.get(self, "security_mode")

    @security_mode.setter
    def security_mode(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "security_mode", value)

    @property
    @pulumi.getter(name="stateChangeReason")
    def state_change_reason(self) -> Optional[pulumi.Input['ClusterStateChangeReasonArgs']]:
        """
        状态变更原因。
        """
        return pulumi.get(self, "state_change_reason")

    @state_change_reason.setter
    def state_change_reason(self, value: Optional[pulumi.Input['ClusterStateChangeReasonArgs']]):
        pulumi.set(self, "state_change_reason", value)

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterTagArgs']]]]:
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterTagArgs']]]]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter(name="terminateTime")
    def terminate_time(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        集群终止时间。
        """
        return pulumi.get(self, "terminate_time")

    @terminate_time.setter
    def terminate_time(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "terminate_time", value)

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        Vpc ID。
        """
        return pulumi.get(self, "vpc_id")

    @vpc_id.setter
    def vpc_id(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "vpc_id", value)


@pulumi.type_token("bytepluscc:emr/cluster:Cluster")
class Cluster(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 application_extras: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterApplicationExtraArgs', 'ClusterApplicationExtraArgsDict']]]]] = None,
                 application_names: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 bootstrap_scripts: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterBootstrapScriptArgs', 'ClusterBootstrapScriptArgsDict']]]]] = None,
                 charge_pre_config: Optional[pulumi.Input[Union['ClusterChargePreConfigArgs', 'ClusterChargePreConfigArgsDict']]] = None,
                 charge_type: Optional[pulumi.Input[builtins.str]] = None,
                 cluster_name: Optional[pulumi.Input[builtins.str]] = None,
                 cluster_type: Optional[pulumi.Input[builtins.str]] = None,
                 deploy_mode: Optional[pulumi.Input[builtins.str]] = None,
                 history_server_mode: Optional[pulumi.Input[builtins.str]] = None,
                 node_attribute: Optional[pulumi.Input[Union['ClusterNodeAttributeArgs', 'ClusterNodeAttributeArgsDict']]] = None,
                 node_group_attributes: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterNodeGroupAttributeArgs', 'ClusterNodeGroupAttributeArgsDict']]]]] = None,
                 project_name: Optional[pulumi.Input[builtins.str]] = None,
                 release_version: Optional[pulumi.Input[builtins.str]] = None,
                 security_group_id: Optional[pulumi.Input[builtins.str]] = None,
                 security_mode: Optional[pulumi.Input[builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterTagArgs', 'ClusterTagArgsDict']]]]] = None,
                 vpc_id: Optional[pulumi.Input[builtins.str]] = None,
                 __props__=None):
        """
        E-MapReduce（EMR）是开源 Hadoop 生态的企业级大数据分析系统，完全兼容开源，为您提供 Hadoop、Spark、Hive、Hudi、Iceberg 等生态组件集成和管理。

        ## Import

        ```sh
        $ pulumi import bytepluscc:emr/cluster:Cluster example "cluster_id"
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] application_names: 集群安装的服务名称列表。创建字段。
        :param pulumi.Input[Union['ClusterChargePreConfigArgs', 'ClusterChargePreConfigArgsDict']] charge_pre_config: 包月的配置参数，当chargeType=PRE时，必选。
        :param pulumi.Input[builtins.str] charge_type: 付费类型，PRE表示包月，POST表示按量计费。
        :param pulumi.Input[builtins.str] cluster_name: 集群名称。
        :param pulumi.Input[builtins.str] cluster_type: 集群类型。
        :param pulumi.Input[builtins.str] deploy_mode: 部署模式。SIMPLE表示简单模式，HIGH_AVAILABLE表示高可用模式。
        :param pulumi.Input[builtins.str] history_server_mode: HistoryServer模式，LOCAL将活动数据存储于集群内，PHS将活动数据存储于集群外。
        :param pulumi.Input[Union['ClusterNodeAttributeArgs', 'ClusterNodeAttributeArgsDict']] node_attribute: 集群全局的节点信息。
        :param pulumi.Input[builtins.str] project_name: 资源所属项目，默认为default。一个资源只能归属于一个项目。只能包含字母、数字、下划线“_”、点“.”和中划线“-”。长度限制在64个字符以内。
        :param pulumi.Input[builtins.str] release_version: 集群版本。
        :param pulumi.Input[builtins.str] security_group_id: 集群全局安全组ID，所有节点组下的ecs都会加入该安全组。
        :param pulumi.Input[builtins.str] security_mode: 安全模式。
        :param pulumi.Input[builtins.str] vpc_id: Vpc ID。
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: ClusterArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        E-MapReduce（EMR）是开源 Hadoop 生态的企业级大数据分析系统，完全兼容开源，为您提供 Hadoop、Spark、Hive、Hudi、Iceberg 等生态组件集成和管理。

        ## Import

        ```sh
        $ pulumi import bytepluscc:emr/cluster:Cluster example "cluster_id"
        ```

        :param str resource_name: The name of the resource.
        :param ClusterArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(ClusterArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 application_extras: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterApplicationExtraArgs', 'ClusterApplicationExtraArgsDict']]]]] = None,
                 application_names: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 bootstrap_scripts: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterBootstrapScriptArgs', 'ClusterBootstrapScriptArgsDict']]]]] = None,
                 charge_pre_config: Optional[pulumi.Input[Union['ClusterChargePreConfigArgs', 'ClusterChargePreConfigArgsDict']]] = None,
                 charge_type: Optional[pulumi.Input[builtins.str]] = None,
                 cluster_name: Optional[pulumi.Input[builtins.str]] = None,
                 cluster_type: Optional[pulumi.Input[builtins.str]] = None,
                 deploy_mode: Optional[pulumi.Input[builtins.str]] = None,
                 history_server_mode: Optional[pulumi.Input[builtins.str]] = None,
                 node_attribute: Optional[pulumi.Input[Union['ClusterNodeAttributeArgs', 'ClusterNodeAttributeArgsDict']]] = None,
                 node_group_attributes: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterNodeGroupAttributeArgs', 'ClusterNodeGroupAttributeArgsDict']]]]] = None,
                 project_name: Optional[pulumi.Input[builtins.str]] = None,
                 release_version: Optional[pulumi.Input[builtins.str]] = None,
                 security_group_id: Optional[pulumi.Input[builtins.str]] = None,
                 security_mode: Optional[pulumi.Input[builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterTagArgs', 'ClusterTagArgsDict']]]]] = None,
                 vpc_id: Optional[pulumi.Input[builtins.str]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = ClusterArgs.__new__(ClusterArgs)

            __props__.__dict__["application_extras"] = application_extras
            __props__.__dict__["application_names"] = application_names
            __props__.__dict__["bootstrap_scripts"] = bootstrap_scripts
            __props__.__dict__["charge_pre_config"] = charge_pre_config
            if charge_type is None and not opts.urn:
                raise TypeError("Missing required property 'charge_type'")
            __props__.__dict__["charge_type"] = charge_type
            if cluster_name is None and not opts.urn:
                raise TypeError("Missing required property 'cluster_name'")
            __props__.__dict__["cluster_name"] = cluster_name
            if cluster_type is None and not opts.urn:
                raise TypeError("Missing required property 'cluster_type'")
            __props__.__dict__["cluster_type"] = cluster_type
            __props__.__dict__["deploy_mode"] = deploy_mode
            __props__.__dict__["history_server_mode"] = history_server_mode
            if node_attribute is None and not opts.urn:
                raise TypeError("Missing required property 'node_attribute'")
            __props__.__dict__["node_attribute"] = node_attribute
            __props__.__dict__["node_group_attributes"] = node_group_attributes
            __props__.__dict__["project_name"] = project_name
            if release_version is None and not opts.urn:
                raise TypeError("Missing required property 'release_version'")
            __props__.__dict__["release_version"] = release_version
            if security_group_id is None and not opts.urn:
                raise TypeError("Missing required property 'security_group_id'")
            __props__.__dict__["security_group_id"] = security_group_id
            __props__.__dict__["security_mode"] = security_mode
            __props__.__dict__["tags"] = tags
            if vpc_id is None and not opts.urn:
                raise TypeError("Missing required property 'vpc_id'")
            __props__.__dict__["vpc_id"] = vpc_id
            __props__.__dict__["account_id"] = None
            __props__.__dict__["applications"] = None
            __props__.__dict__["cluster_domain_names"] = None
            __props__.__dict__["cluster_id"] = None
            __props__.__dict__["cluster_state"] = None
            __props__.__dict__["created_time"] = None
            __props__.__dict__["creator_id"] = None
            __props__.__dict__["creator_name"] = None
            __props__.__dict__["ecs_image_id"] = None
            __props__.__dict__["expire_time"] = None
            __props__.__dict__["ready_time"] = None
            __props__.__dict__["state_change_reason"] = None
            __props__.__dict__["terminate_time"] = None
        super(Cluster, __self__).__init__(
            'bytepluscc:emr/cluster:Cluster',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            account_id: Optional[pulumi.Input[builtins.int]] = None,
            application_extras: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterApplicationExtraArgs', 'ClusterApplicationExtraArgsDict']]]]] = None,
            application_names: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
            applications: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterApplicationArgs', 'ClusterApplicationArgsDict']]]]] = None,
            bootstrap_scripts: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterBootstrapScriptArgs', 'ClusterBootstrapScriptArgsDict']]]]] = None,
            charge_pre_config: Optional[pulumi.Input[Union['ClusterChargePreConfigArgs', 'ClusterChargePreConfigArgsDict']]] = None,
            charge_type: Optional[pulumi.Input[builtins.str]] = None,
            cluster_domain_names: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
            cluster_id: Optional[pulumi.Input[builtins.str]] = None,
            cluster_name: Optional[pulumi.Input[builtins.str]] = None,
            cluster_state: Optional[pulumi.Input[builtins.str]] = None,
            cluster_type: Optional[pulumi.Input[builtins.str]] = None,
            created_time: Optional[pulumi.Input[builtins.int]] = None,
            creator_id: Optional[pulumi.Input[builtins.int]] = None,
            creator_name: Optional[pulumi.Input[builtins.str]] = None,
            deploy_mode: Optional[pulumi.Input[builtins.str]] = None,
            ecs_image_id: Optional[pulumi.Input[builtins.str]] = None,
            expire_time: Optional[pulumi.Input[builtins.int]] = None,
            history_server_mode: Optional[pulumi.Input[builtins.str]] = None,
            node_attribute: Optional[pulumi.Input[Union['ClusterNodeAttributeArgs', 'ClusterNodeAttributeArgsDict']]] = None,
            node_group_attributes: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterNodeGroupAttributeArgs', 'ClusterNodeGroupAttributeArgsDict']]]]] = None,
            project_name: Optional[pulumi.Input[builtins.str]] = None,
            ready_time: Optional[pulumi.Input[builtins.int]] = None,
            release_version: Optional[pulumi.Input[builtins.str]] = None,
            security_group_id: Optional[pulumi.Input[builtins.str]] = None,
            security_mode: Optional[pulumi.Input[builtins.str]] = None,
            state_change_reason: Optional[pulumi.Input[Union['ClusterStateChangeReasonArgs', 'ClusterStateChangeReasonArgsDict']]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterTagArgs', 'ClusterTagArgsDict']]]]] = None,
            terminate_time: Optional[pulumi.Input[builtins.int]] = None,
            vpc_id: Optional[pulumi.Input[builtins.str]] = None) -> 'Cluster':
        """
        Get an existing Cluster resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[builtins.int] account_id: 账号ID。
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] application_names: 集群安装的服务名称列表。创建字段。
        :param pulumi.Input[Union['ClusterChargePreConfigArgs', 'ClusterChargePreConfigArgsDict']] charge_pre_config: 包月的配置参数，当chargeType=PRE时，必选。
        :param pulumi.Input[builtins.str] charge_type: 付费类型，PRE表示包月，POST表示按量计费。
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] cluster_domain_names: 集群dns域名后缀列表。
        :param pulumi.Input[builtins.str] cluster_id: 集群ID。
        :param pulumi.Input[builtins.str] cluster_name: 集群名称。
        :param pulumi.Input[builtins.str] cluster_state: 集群状态。
        :param pulumi.Input[builtins.str] cluster_type: 集群类型。
        :param pulumi.Input[builtins.int] created_time: 集群创建时间。
        :param pulumi.Input[builtins.int] creator_id: 创建者ID。
        :param pulumi.Input[builtins.str] creator_name: 创建者名称。
        :param pulumi.Input[builtins.str] deploy_mode: 部署模式。SIMPLE表示简单模式，HIGH_AVAILABLE表示高可用模式。
        :param pulumi.Input[builtins.str] ecs_image_id: ECS镜像ID。
        :param pulumi.Input[builtins.int] expire_time: 集群过期时间。
        :param pulumi.Input[builtins.str] history_server_mode: HistoryServer模式，LOCAL将活动数据存储于集群内，PHS将活动数据存储于集群外。
        :param pulumi.Input[Union['ClusterNodeAttributeArgs', 'ClusterNodeAttributeArgsDict']] node_attribute: 集群全局的节点信息。
        :param pulumi.Input[builtins.str] project_name: 资源所属项目，默认为default。一个资源只能归属于一个项目。只能包含字母、数字、下划线“_”、点“.”和中划线“-”。长度限制在64个字符以内。
        :param pulumi.Input[builtins.int] ready_time: 集群创建完成时间。
        :param pulumi.Input[builtins.str] release_version: 集群版本。
        :param pulumi.Input[builtins.str] security_group_id: 集群全局安全组ID，所有节点组下的ecs都会加入该安全组。
        :param pulumi.Input[builtins.str] security_mode: 安全模式。
        :param pulumi.Input[Union['ClusterStateChangeReasonArgs', 'ClusterStateChangeReasonArgsDict']] state_change_reason: 状态变更原因。
        :param pulumi.Input[builtins.int] terminate_time: 集群终止时间。
        :param pulumi.Input[builtins.str] vpc_id: Vpc ID。
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _ClusterState.__new__(_ClusterState)

        __props__.__dict__["account_id"] = account_id
        __props__.__dict__["application_extras"] = application_extras
        __props__.__dict__["application_names"] = application_names
        __props__.__dict__["applications"] = applications
        __props__.__dict__["bootstrap_scripts"] = bootstrap_scripts
        __props__.__dict__["charge_pre_config"] = charge_pre_config
        __props__.__dict__["charge_type"] = charge_type
        __props__.__dict__["cluster_domain_names"] = cluster_domain_names
        __props__.__dict__["cluster_id"] = cluster_id
        __props__.__dict__["cluster_name"] = cluster_name
        __props__.__dict__["cluster_state"] = cluster_state
        __props__.__dict__["cluster_type"] = cluster_type
        __props__.__dict__["created_time"] = created_time
        __props__.__dict__["creator_id"] = creator_id
        __props__.__dict__["creator_name"] = creator_name
        __props__.__dict__["deploy_mode"] = deploy_mode
        __props__.__dict__["ecs_image_id"] = ecs_image_id
        __props__.__dict__["expire_time"] = expire_time
        __props__.__dict__["history_server_mode"] = history_server_mode
        __props__.__dict__["node_attribute"] = node_attribute
        __props__.__dict__["node_group_attributes"] = node_group_attributes
        __props__.__dict__["project_name"] = project_name
        __props__.__dict__["ready_time"] = ready_time
        __props__.__dict__["release_version"] = release_version
        __props__.__dict__["security_group_id"] = security_group_id
        __props__.__dict__["security_mode"] = security_mode
        __props__.__dict__["state_change_reason"] = state_change_reason
        __props__.__dict__["tags"] = tags
        __props__.__dict__["terminate_time"] = terminate_time
        __props__.__dict__["vpc_id"] = vpc_id
        return Cluster(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="accountId")
    def account_id(self) -> pulumi.Output[builtins.int]:
        """
        账号ID。
        """
        return pulumi.get(self, "account_id")

    @property
    @pulumi.getter(name="applicationExtras")
    def application_extras(self) -> pulumi.Output[Sequence['outputs.ClusterApplicationExtra']]:
        return pulumi.get(self, "application_extras")

    @property
    @pulumi.getter(name="applicationNames")
    def application_names(self) -> pulumi.Output[Sequence[builtins.str]]:
        """
        集群安装的服务名称列表。创建字段。
        """
        return pulumi.get(self, "application_names")

    @property
    @pulumi.getter
    def applications(self) -> pulumi.Output[Sequence['outputs.ClusterApplication']]:
        return pulumi.get(self, "applications")

    @property
    @pulumi.getter(name="bootstrapScripts")
    def bootstrap_scripts(self) -> pulumi.Output[Sequence['outputs.ClusterBootstrapScript']]:
        return pulumi.get(self, "bootstrap_scripts")

    @property
    @pulumi.getter(name="chargePreConfig")
    def charge_pre_config(self) -> pulumi.Output['outputs.ClusterChargePreConfig']:
        """
        包月的配置参数，当chargeType=PRE时，必选。
        """
        return pulumi.get(self, "charge_pre_config")

    @property
    @pulumi.getter(name="chargeType")
    def charge_type(self) -> pulumi.Output[builtins.str]:
        """
        付费类型，PRE表示包月，POST表示按量计费。
        """
        return pulumi.get(self, "charge_type")

    @property
    @pulumi.getter(name="clusterDomainNames")
    def cluster_domain_names(self) -> pulumi.Output[Sequence[builtins.str]]:
        """
        集群dns域名后缀列表。
        """
        return pulumi.get(self, "cluster_domain_names")

    @property
    @pulumi.getter(name="clusterId")
    def cluster_id(self) -> pulumi.Output[builtins.str]:
        """
        集群ID。
        """
        return pulumi.get(self, "cluster_id")

    @property
    @pulumi.getter(name="clusterName")
    def cluster_name(self) -> pulumi.Output[builtins.str]:
        """
        集群名称。
        """
        return pulumi.get(self, "cluster_name")

    @property
    @pulumi.getter(name="clusterState")
    def cluster_state(self) -> pulumi.Output[builtins.str]:
        """
        集群状态。
        """
        return pulumi.get(self, "cluster_state")

    @property
    @pulumi.getter(name="clusterType")
    def cluster_type(self) -> pulumi.Output[builtins.str]:
        """
        集群类型。
        """
        return pulumi.get(self, "cluster_type")

    @property
    @pulumi.getter(name="createdTime")
    def created_time(self) -> pulumi.Output[builtins.int]:
        """
        集群创建时间。
        """
        return pulumi.get(self, "created_time")

    @property
    @pulumi.getter(name="creatorId")
    def creator_id(self) -> pulumi.Output[builtins.int]:
        """
        创建者ID。
        """
        return pulumi.get(self, "creator_id")

    @property
    @pulumi.getter(name="creatorName")
    def creator_name(self) -> pulumi.Output[builtins.str]:
        """
        创建者名称。
        """
        return pulumi.get(self, "creator_name")

    @property
    @pulumi.getter(name="deployMode")
    def deploy_mode(self) -> pulumi.Output[builtins.str]:
        """
        部署模式。SIMPLE表示简单模式，HIGH_AVAILABLE表示高可用模式。
        """
        return pulumi.get(self, "deploy_mode")

    @property
    @pulumi.getter(name="ecsImageId")
    def ecs_image_id(self) -> pulumi.Output[builtins.str]:
        """
        ECS镜像ID。
        """
        return pulumi.get(self, "ecs_image_id")

    @property
    @pulumi.getter(name="expireTime")
    def expire_time(self) -> pulumi.Output[builtins.int]:
        """
        集群过期时间。
        """
        return pulumi.get(self, "expire_time")

    @property
    @pulumi.getter(name="historyServerMode")
    def history_server_mode(self) -> pulumi.Output[builtins.str]:
        """
        HistoryServer模式，LOCAL将活动数据存储于集群内，PHS将活动数据存储于集群外。
        """
        return pulumi.get(self, "history_server_mode")

    @property
    @pulumi.getter(name="nodeAttribute")
    def node_attribute(self) -> pulumi.Output['outputs.ClusterNodeAttribute']:
        """
        集群全局的节点信息。
        """
        return pulumi.get(self, "node_attribute")

    @property
    @pulumi.getter(name="nodeGroupAttributes")
    def node_group_attributes(self) -> pulumi.Output[Sequence['outputs.ClusterNodeGroupAttribute']]:
        return pulumi.get(self, "node_group_attributes")

    @property
    @pulumi.getter(name="projectName")
    def project_name(self) -> pulumi.Output[builtins.str]:
        """
        资源所属项目，默认为default。一个资源只能归属于一个项目。只能包含字母、数字、下划线“_”、点“.”和中划线“-”。长度限制在64个字符以内。
        """
        return pulumi.get(self, "project_name")

    @property
    @pulumi.getter(name="readyTime")
    def ready_time(self) -> pulumi.Output[builtins.int]:
        """
        集群创建完成时间。
        """
        return pulumi.get(self, "ready_time")

    @property
    @pulumi.getter(name="releaseVersion")
    def release_version(self) -> pulumi.Output[builtins.str]:
        """
        集群版本。
        """
        return pulumi.get(self, "release_version")

    @property
    @pulumi.getter(name="securityGroupId")
    def security_group_id(self) -> pulumi.Output[builtins.str]:
        """
        集群全局安全组ID，所有节点组下的ecs都会加入该安全组。
        """
        return pulumi.get(self, "security_group_id")

    @property
    @pulumi.getter(name="securityMode")
    def security_mode(self) -> pulumi.Output[builtins.str]:
        """
        安全模式。
        """
        return pulumi.get(self, "security_mode")

    @property
    @pulumi.getter(name="stateChangeReason")
    def state_change_reason(self) -> pulumi.Output['outputs.ClusterStateChangeReason']:
        """
        状态变更原因。
        """
        return pulumi.get(self, "state_change_reason")

    @property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Sequence['outputs.ClusterTag']]:
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter(name="terminateTime")
    def terminate_time(self) -> pulumi.Output[builtins.int]:
        """
        集群终止时间。
        """
        return pulumi.get(self, "terminate_time")

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> pulumi.Output[builtins.str]:
        """
        Vpc ID。
        """
        return pulumi.get(self, "vpc_id")

