# 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 copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from . import _utilities
from . import outputs
from ._inputs import *

__all__ = [
    'GetClusterResult',
    'AwaitableGetClusterResult',
    'get_cluster',
    'get_cluster_output',
]

@pulumi.output_type
class GetClusterResult:
    """
    A collection of values returned by getCluster.
    """
    def __init__(__self__, advanced_settings_json=None, cloud_provider=None, credentials_id=None, description=None, disk_size=None, features=None, id=None, instance_type=None, kubernetes_mode=None, max_running_nodes=None, min_running_nodes=None, name=None, organization_id=None, region=None, routing_tables=None, state=None):
        if advanced_settings_json and not isinstance(advanced_settings_json, str):
            raise TypeError("Expected argument 'advanced_settings_json' to be a str")
        pulumi.set(__self__, "advanced_settings_json", advanced_settings_json)
        if cloud_provider and not isinstance(cloud_provider, str):
            raise TypeError("Expected argument 'cloud_provider' to be a str")
        pulumi.set(__self__, "cloud_provider", cloud_provider)
        if credentials_id and not isinstance(credentials_id, str):
            raise TypeError("Expected argument 'credentials_id' to be a str")
        pulumi.set(__self__, "credentials_id", credentials_id)
        if description and not isinstance(description, str):
            raise TypeError("Expected argument 'description' to be a str")
        pulumi.set(__self__, "description", description)
        if disk_size and not isinstance(disk_size, int):
            raise TypeError("Expected argument 'disk_size' to be a int")
        pulumi.set(__self__, "disk_size", disk_size)
        if features and not isinstance(features, dict):
            raise TypeError("Expected argument 'features' to be a dict")
        pulumi.set(__self__, "features", features)
        if id and not isinstance(id, str):
            raise TypeError("Expected argument 'id' to be a str")
        pulumi.set(__self__, "id", id)
        if instance_type and not isinstance(instance_type, str):
            raise TypeError("Expected argument 'instance_type' to be a str")
        pulumi.set(__self__, "instance_type", instance_type)
        if kubernetes_mode and not isinstance(kubernetes_mode, str):
            raise TypeError("Expected argument 'kubernetes_mode' to be a str")
        pulumi.set(__self__, "kubernetes_mode", kubernetes_mode)
        if max_running_nodes and not isinstance(max_running_nodes, int):
            raise TypeError("Expected argument 'max_running_nodes' to be a int")
        pulumi.set(__self__, "max_running_nodes", max_running_nodes)
        if min_running_nodes and not isinstance(min_running_nodes, int):
            raise TypeError("Expected argument 'min_running_nodes' to be a int")
        pulumi.set(__self__, "min_running_nodes", min_running_nodes)
        if name and not isinstance(name, str):
            raise TypeError("Expected argument 'name' to be a str")
        pulumi.set(__self__, "name", name)
        if organization_id and not isinstance(organization_id, str):
            raise TypeError("Expected argument 'organization_id' to be a str")
        pulumi.set(__self__, "organization_id", organization_id)
        if region and not isinstance(region, str):
            raise TypeError("Expected argument 'region' to be a str")
        pulumi.set(__self__, "region", region)
        if routing_tables and not isinstance(routing_tables, list):
            raise TypeError("Expected argument 'routing_tables' to be a list")
        pulumi.set(__self__, "routing_tables", routing_tables)
        if state and not isinstance(state, str):
            raise TypeError("Expected argument 'state' to be a str")
        pulumi.set(__self__, "state", state)

    @property
    @pulumi.getter(name="advancedSettingsJson")
    def advanced_settings_json(self) -> str:
        return pulumi.get(self, "advanced_settings_json")

    @property
    @pulumi.getter(name="cloudProvider")
    def cloud_provider(self) -> str:
        return pulumi.get(self, "cloud_provider")

    @property
    @pulumi.getter(name="credentialsId")
    def credentials_id(self) -> str:
        return pulumi.get(self, "credentials_id")

    @property
    @pulumi.getter
    def description(self) -> str:
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="diskSize")
    def disk_size(self) -> int:
        return pulumi.get(self, "disk_size")

    @property
    @pulumi.getter
    def features(self) -> 'outputs.GetClusterFeaturesResult':
        return pulumi.get(self, "features")

    @property
    @pulumi.getter
    def id(self) -> str:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> str:
        return pulumi.get(self, "instance_type")

    @property
    @pulumi.getter(name="kubernetesMode")
    def kubernetes_mode(self) -> str:
        return pulumi.get(self, "kubernetes_mode")

    @property
    @pulumi.getter(name="maxRunningNodes")
    def max_running_nodes(self) -> int:
        return pulumi.get(self, "max_running_nodes")

    @property
    @pulumi.getter(name="minRunningNodes")
    def min_running_nodes(self) -> int:
        return pulumi.get(self, "min_running_nodes")

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="organizationId")
    def organization_id(self) -> str:
        return pulumi.get(self, "organization_id")

    @property
    @pulumi.getter
    def region(self) -> str:
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="routingTables")
    def routing_tables(self) -> Sequence['outputs.GetClusterRoutingTableResult']:
        return pulumi.get(self, "routing_tables")

    @property
    @pulumi.getter
    def state(self) -> str:
        return pulumi.get(self, "state")


class AwaitableGetClusterResult(GetClusterResult):
    # pylint: disable=using-constant-test
    def __await__(self):
        if False:
            yield self
        return GetClusterResult(
            advanced_settings_json=self.advanced_settings_json,
            cloud_provider=self.cloud_provider,
            credentials_id=self.credentials_id,
            description=self.description,
            disk_size=self.disk_size,
            features=self.features,
            id=self.id,
            instance_type=self.instance_type,
            kubernetes_mode=self.kubernetes_mode,
            max_running_nodes=self.max_running_nodes,
            min_running_nodes=self.min_running_nodes,
            name=self.name,
            organization_id=self.organization_id,
            region=self.region,
            routing_tables=self.routing_tables,
            state=self.state)


def get_cluster(advanced_settings_json: Optional[str] = None,
                description: Optional[str] = None,
                disk_size: Optional[int] = None,
                features: Optional[pulumi.InputType['GetClusterFeaturesArgs']] = None,
                id: Optional[str] = None,
                kubernetes_mode: Optional[str] = None,
                max_running_nodes: Optional[int] = None,
                min_running_nodes: Optional[int] = None,
                organization_id: Optional[str] = None,
                routing_tables: Optional[Sequence[pulumi.InputType['GetClusterRoutingTableArgs']]] = None,
                state: Optional[str] = None,
                opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetClusterResult:
    """
    ## # Cluster (Data Source)

    Provides a Qovery cluster resource. This can be used to create and manage Qovery cluster.
    ## Example Usage

    ```python
    import pulumi
    import pulumi_qovery as qovery

    my_cluster = qovery.get_cluster(id="<cluster_id>",
        organization_id="<organization_id>")
    ```
    """
    __args__ = dict()
    __args__['advancedSettingsJson'] = advanced_settings_json
    __args__['description'] = description
    __args__['diskSize'] = disk_size
    __args__['features'] = features
    __args__['id'] = id
    __args__['kubernetesMode'] = kubernetes_mode
    __args__['maxRunningNodes'] = max_running_nodes
    __args__['minRunningNodes'] = min_running_nodes
    __args__['organizationId'] = organization_id
    __args__['routingTables'] = routing_tables
    __args__['state'] = state
    opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
    __ret__ = pulumi.runtime.invoke('qovery:index/getCluster:getCluster', __args__, opts=opts, typ=GetClusterResult).value

    return AwaitableGetClusterResult(
        advanced_settings_json=pulumi.get(__ret__, 'advanced_settings_json'),
        cloud_provider=pulumi.get(__ret__, 'cloud_provider'),
        credentials_id=pulumi.get(__ret__, 'credentials_id'),
        description=pulumi.get(__ret__, 'description'),
        disk_size=pulumi.get(__ret__, 'disk_size'),
        features=pulumi.get(__ret__, 'features'),
        id=pulumi.get(__ret__, 'id'),
        instance_type=pulumi.get(__ret__, 'instance_type'),
        kubernetes_mode=pulumi.get(__ret__, 'kubernetes_mode'),
        max_running_nodes=pulumi.get(__ret__, 'max_running_nodes'),
        min_running_nodes=pulumi.get(__ret__, 'min_running_nodes'),
        name=pulumi.get(__ret__, 'name'),
        organization_id=pulumi.get(__ret__, 'organization_id'),
        region=pulumi.get(__ret__, 'region'),
        routing_tables=pulumi.get(__ret__, 'routing_tables'),
        state=pulumi.get(__ret__, 'state'))


@_utilities.lift_output_func(get_cluster)
def get_cluster_output(advanced_settings_json: Optional[pulumi.Input[Optional[str]]] = None,
                       description: Optional[pulumi.Input[Optional[str]]] = None,
                       disk_size: Optional[pulumi.Input[Optional[int]]] = None,
                       features: Optional[pulumi.Input[Optional[pulumi.InputType['GetClusterFeaturesArgs']]]] = None,
                       id: Optional[pulumi.Input[str]] = None,
                       kubernetes_mode: Optional[pulumi.Input[Optional[str]]] = None,
                       max_running_nodes: Optional[pulumi.Input[Optional[int]]] = None,
                       min_running_nodes: Optional[pulumi.Input[Optional[int]]] = None,
                       organization_id: Optional[pulumi.Input[str]] = None,
                       routing_tables: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetClusterRoutingTableArgs']]]]] = None,
                       state: Optional[pulumi.Input[Optional[str]]] = None,
                       opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetClusterResult]:
    """
    ## # Cluster (Data Source)

    Provides a Qovery cluster resource. This can be used to create and manage Qovery cluster.
    ## Example Usage

    ```python
    import pulumi
    import pulumi_qovery as qovery

    my_cluster = qovery.get_cluster(id="<cluster_id>",
        organization_id="<organization_id>")
    ```
    """
    ...
