# 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

__all__ = [
    'GetNodeGroupResult',
    'AwaitableGetNodeGroupResult',
    'get_node_group',
    'get_node_group_output',
]

@pulumi.output_type
class GetNodeGroupResult:
    """
    A collection of values returned by getNodeGroup.
    """
    def __init__(__self__, application_layouts=None, charge_pre_config=None, charge_type=None, cluster_id=None, created_time=None, data_disks=None, ecs_instance_types=None, id=None, layout_component_names=None, node_count=None, node_group_id=None, node_group_name=None, node_group_state=None, node_group_type=None, nodes=None, subnet_ids=None, system_disk=None, target_disk_size=None, terminate_time=None, with_public_ip=None, zone_id=None):
        if application_layouts and not isinstance(application_layouts, list):
            raise TypeError("Expected argument 'application_layouts' to be a list")
        pulumi.set(__self__, "application_layouts", application_layouts)
        if charge_pre_config and not isinstance(charge_pre_config, dict):
            raise TypeError("Expected argument 'charge_pre_config' to be a dict")
        pulumi.set(__self__, "charge_pre_config", charge_pre_config)
        if charge_type and not isinstance(charge_type, str):
            raise TypeError("Expected argument 'charge_type' to be a str")
        pulumi.set(__self__, "charge_type", charge_type)
        if cluster_id and not isinstance(cluster_id, str):
            raise TypeError("Expected argument 'cluster_id' to be a str")
        pulumi.set(__self__, "cluster_id", cluster_id)
        if created_time and not isinstance(created_time, int):
            raise TypeError("Expected argument 'created_time' to be a int")
        pulumi.set(__self__, "created_time", created_time)
        if data_disks and not isinstance(data_disks, list):
            raise TypeError("Expected argument 'data_disks' to be a list")
        pulumi.set(__self__, "data_disks", data_disks)
        if ecs_instance_types and not isinstance(ecs_instance_types, list):
            raise TypeError("Expected argument 'ecs_instance_types' to be a list")
        pulumi.set(__self__, "ecs_instance_types", ecs_instance_types)
        if id and not isinstance(id, str):
            raise TypeError("Expected argument 'id' to be a str")
        pulumi.set(__self__, "id", id)
        if layout_component_names and not isinstance(layout_component_names, list):
            raise TypeError("Expected argument 'layout_component_names' to be a list")
        pulumi.set(__self__, "layout_component_names", layout_component_names)
        if node_count and not isinstance(node_count, int):
            raise TypeError("Expected argument 'node_count' to be a int")
        pulumi.set(__self__, "node_count", node_count)
        if node_group_id and not isinstance(node_group_id, str):
            raise TypeError("Expected argument 'node_group_id' to be a str")
        pulumi.set(__self__, "node_group_id", node_group_id)
        if node_group_name and not isinstance(node_group_name, str):
            raise TypeError("Expected argument 'node_group_name' to be a str")
        pulumi.set(__self__, "node_group_name", node_group_name)
        if node_group_state and not isinstance(node_group_state, str):
            raise TypeError("Expected argument 'node_group_state' to be a str")
        pulumi.set(__self__, "node_group_state", node_group_state)
        if node_group_type and not isinstance(node_group_type, str):
            raise TypeError("Expected argument 'node_group_type' to be a str")
        pulumi.set(__self__, "node_group_type", node_group_type)
        if nodes and not isinstance(nodes, list):
            raise TypeError("Expected argument 'nodes' to be a list")
        pulumi.set(__self__, "nodes", nodes)
        if subnet_ids and not isinstance(subnet_ids, list):
            raise TypeError("Expected argument 'subnet_ids' to be a list")
        pulumi.set(__self__, "subnet_ids", subnet_ids)
        if system_disk and not isinstance(system_disk, dict):
            raise TypeError("Expected argument 'system_disk' to be a dict")
        pulumi.set(__self__, "system_disk", system_disk)
        if target_disk_size and not isinstance(target_disk_size, int):
            raise TypeError("Expected argument 'target_disk_size' to be a int")
        pulumi.set(__self__, "target_disk_size", target_disk_size)
        if terminate_time and not isinstance(terminate_time, str):
            raise TypeError("Expected argument 'terminate_time' to be a str")
        pulumi.set(__self__, "terminate_time", terminate_time)
        if with_public_ip and not isinstance(with_public_ip, bool):
            raise TypeError("Expected argument 'with_public_ip' to be a bool")
        pulumi.set(__self__, "with_public_ip", with_public_ip)
        if zone_id and not isinstance(zone_id, str):
            raise TypeError("Expected argument 'zone_id' to be a str")
        pulumi.set(__self__, "zone_id", zone_id)

    @property
    @pulumi.getter(name="applicationLayouts")
    def application_layouts(self) -> Sequence['outputs.GetNodeGroupApplicationLayoutResult']:
        """
        当前节点组可布局的组件名称列表。
        """
        return pulumi.get(self, "application_layouts")

    @property
    @pulumi.getter(name="chargePreConfig")
    def charge_pre_config(self) -> 'outputs.GetNodeGroupChargePreConfigResult':
        """
        包周期付费配置。
        """
        return pulumi.get(self, "charge_pre_config")

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

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

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

    @property
    @pulumi.getter(name="dataDisks")
    def data_disks(self) -> Sequence['outputs.GetNodeGroupDataDiskResult']:
        """
        数据盘配置。
        """
        return pulumi.get(self, "data_disks")

    @property
    @pulumi.getter(name="ecsInstanceTypes")
    def ecs_instance_types(self) -> Sequence[builtins.str]:
        """
        ECS实例规格列表。当前修改仅支持单个实例规格。
        """
        return pulumi.get(self, "ecs_instance_types")

    @property
    @pulumi.getter
    def id(self) -> builtins.str:
        """
        Uniquely identifies the resource.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="layoutComponentNames")
    def layout_component_names(self) -> Sequence[builtins.str]:
        """
        返回的节点组组件的自定义配置参数列表。
        """
        return pulumi.get(self, "layout_component_names")

    @property
    @pulumi.getter(name="nodeCount")
    def node_count(self) -> builtins.int:
        """
        节点数量。取值范围：1~1000。
        """
        return pulumi.get(self, "node_count")

    @property
    @pulumi.getter(name="nodeGroupId")
    def node_group_id(self) -> builtins.str:
        """
        节点组ID。
        """
        return pulumi.get(self, "node_group_id")

    @property
    @pulumi.getter(name="nodeGroupName")
    def node_group_name(self) -> builtins.str:
        """
        节点组名称。
        """
        return pulumi.get(self, "node_group_name")

    @property
    @pulumi.getter(name="nodeGroupState")
    def node_group_state(self) -> builtins.str:
        """
        节点组状态。RUNNING：运行中。EXTENDING：扩容中。REDUCING：缩容中。DISK_EXTENDING：磁盘扩容中。MODIFYING：变配中。
        """
        return pulumi.get(self, "node_group_state")

    @property
    @pulumi.getter(name="nodeGroupType")
    def node_group_type(self) -> builtins.str:
        """
        节点组类型。
        """
        return pulumi.get(self, "node_group_type")

    @property
    @pulumi.getter
    def nodes(self) -> Sequence['outputs.GetNodeGroupNodeResult']:
        """
        节点列表。
        """
        return pulumi.get(self, "nodes")

    @property
    @pulumi.getter(name="subnetIds")
    def subnet_ids(self) -> Sequence[builtins.str]:
        """
        子网ID列表。
        """
        return pulumi.get(self, "subnet_ids")

    @property
    @pulumi.getter(name="systemDisk")
    def system_disk(self) -> 'outputs.GetNodeGroupSystemDiskResult':
        """
        系统盘。
        """
        return pulumi.get(self, "system_disk")

    @property
    @pulumi.getter(name="targetDiskSize")
    def target_disk_size(self) -> builtins.int:
        """
        待扩容的目标磁盘大小，最小60GB，最大2048GB，单位GB。
        """
        return pulumi.get(self, "target_disk_size")

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

    @property
    @pulumi.getter(name="withPublicIp")
    def with_public_ip(self) -> builtins.bool:
        """
        ECS是否附带公网IP。
        """
        return pulumi.get(self, "with_public_ip")

    @property
    @pulumi.getter(name="zoneId")
    def zone_id(self) -> builtins.str:
        """
        zoneId，为空时默认复用集群的zoneId。
        """
        return pulumi.get(self, "zone_id")


class AwaitableGetNodeGroupResult(GetNodeGroupResult):
    # pylint: disable=using-constant-test
    def __await__(self):
        if False:
            yield self
        return GetNodeGroupResult(
            application_layouts=self.application_layouts,
            charge_pre_config=self.charge_pre_config,
            charge_type=self.charge_type,
            cluster_id=self.cluster_id,
            created_time=self.created_time,
            data_disks=self.data_disks,
            ecs_instance_types=self.ecs_instance_types,
            id=self.id,
            layout_component_names=self.layout_component_names,
            node_count=self.node_count,
            node_group_id=self.node_group_id,
            node_group_name=self.node_group_name,
            node_group_state=self.node_group_state,
            node_group_type=self.node_group_type,
            nodes=self.nodes,
            subnet_ids=self.subnet_ids,
            system_disk=self.system_disk,
            target_disk_size=self.target_disk_size,
            terminate_time=self.terminate_time,
            with_public_ip=self.with_public_ip,
            zone_id=self.zone_id)


def get_node_group(id: Optional[builtins.str] = None,
                   opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetNodeGroupResult:
    """
    Data Source schema for Byteplus::EMR::NodeGroup


    :param builtins.str id: Uniquely identifies the resource.
    """
    __args__ = dict()
    __args__['id'] = id
    opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
    __ret__ = pulumi.runtime.invoke('bytepluscc:emr/getNodeGroup:getNodeGroup', __args__, opts=opts, typ=GetNodeGroupResult).value

    return AwaitableGetNodeGroupResult(
        application_layouts=pulumi.get(__ret__, 'application_layouts'),
        charge_pre_config=pulumi.get(__ret__, 'charge_pre_config'),
        charge_type=pulumi.get(__ret__, 'charge_type'),
        cluster_id=pulumi.get(__ret__, 'cluster_id'),
        created_time=pulumi.get(__ret__, 'created_time'),
        data_disks=pulumi.get(__ret__, 'data_disks'),
        ecs_instance_types=pulumi.get(__ret__, 'ecs_instance_types'),
        id=pulumi.get(__ret__, 'id'),
        layout_component_names=pulumi.get(__ret__, 'layout_component_names'),
        node_count=pulumi.get(__ret__, 'node_count'),
        node_group_id=pulumi.get(__ret__, 'node_group_id'),
        node_group_name=pulumi.get(__ret__, 'node_group_name'),
        node_group_state=pulumi.get(__ret__, 'node_group_state'),
        node_group_type=pulumi.get(__ret__, 'node_group_type'),
        nodes=pulumi.get(__ret__, 'nodes'),
        subnet_ids=pulumi.get(__ret__, 'subnet_ids'),
        system_disk=pulumi.get(__ret__, 'system_disk'),
        target_disk_size=pulumi.get(__ret__, 'target_disk_size'),
        terminate_time=pulumi.get(__ret__, 'terminate_time'),
        with_public_ip=pulumi.get(__ret__, 'with_public_ip'),
        zone_id=pulumi.get(__ret__, 'zone_id'))
def get_node_group_output(id: Optional[pulumi.Input[builtins.str]] = None,
                          opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetNodeGroupResult]:
    """
    Data Source schema for Byteplus::EMR::NodeGroup


    :param builtins.str id: Uniquely identifies the resource.
    """
    __args__ = dict()
    __args__['id'] = id
    opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
    __ret__ = pulumi.runtime.invoke_output('bytepluscc:emr/getNodeGroup:getNodeGroup', __args__, opts=opts, typ=GetNodeGroupResult)
    return __ret__.apply(lambda __response__: GetNodeGroupResult(
        application_layouts=pulumi.get(__response__, 'application_layouts'),
        charge_pre_config=pulumi.get(__response__, 'charge_pre_config'),
        charge_type=pulumi.get(__response__, 'charge_type'),
        cluster_id=pulumi.get(__response__, 'cluster_id'),
        created_time=pulumi.get(__response__, 'created_time'),
        data_disks=pulumi.get(__response__, 'data_disks'),
        ecs_instance_types=pulumi.get(__response__, 'ecs_instance_types'),
        id=pulumi.get(__response__, 'id'),
        layout_component_names=pulumi.get(__response__, 'layout_component_names'),
        node_count=pulumi.get(__response__, 'node_count'),
        node_group_id=pulumi.get(__response__, 'node_group_id'),
        node_group_name=pulumi.get(__response__, 'node_group_name'),
        node_group_state=pulumi.get(__response__, 'node_group_state'),
        node_group_type=pulumi.get(__response__, 'node_group_type'),
        nodes=pulumi.get(__response__, 'nodes'),
        subnet_ids=pulumi.get(__response__, 'subnet_ids'),
        system_disk=pulumi.get(__response__, 'system_disk'),
        target_disk_size=pulumi.get(__response__, 'target_disk_size'),
        terminate_time=pulumi.get(__response__, 'terminate_time'),
        with_public_ip=pulumi.get(__response__, 'with_public_ip'),
        zone_id=pulumi.get(__response__, 'zone_id')))
