# coding: utf-8

"""
    Cloudbreak API

    Cloudbreak is a powerful left surf that breaks over a coral reef, a mile off southwest the island of Tavarua, Fiji. Cloudbreak is a cloud agnostic Hadoop as a Service API. Abstracts the provisioning and ease management and monitoring of on-demand clusters. SequenceIQ's Cloudbreak is a RESTful application development platform with the goal of helping developers to build solutions for deploying Hadoop YARN clusters in different environments. Once it is deployed in your favourite servlet container it exposes a REST API allowing to span up Hadoop clusters of arbitary sizes and cloud providers. Provisioning Hadoop has never been easier. Cloudbreak is built on the foundation of cloud providers API (Amazon AWS, Microsoft Azure, Google Cloud Platform, Openstack), Apache Ambari, Docker lightweight containers, Swarm and Consul. For further product documentation follow the link: <a href=\"http://hortonworks.com/apache/cloudbreak/\">http://hortonworks.com/apache/cloudbreak/</a>

    OpenAPI spec version: 2.7.1
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


from pprint import pformat
from six import iteritems
import re


class ClusterV2Request(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """


    """
    Attributes:
      swagger_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    swagger_types = {
        'email_needed': 'bool',
        'email_to': 'str',
        'ldap_config_name': 'str',
        'rds_config_names': 'list[str]',
        'proxy_name': 'str',
        'cloud_storage': 'CloudStorageRequest',
        'executor_type': 'str',
        'ambari': 'AmbariV2Request',
        'shared_service': 'SharedService'
    }

    attribute_map = {
        'email_needed': 'emailNeeded',
        'email_to': 'emailTo',
        'ldap_config_name': 'ldapConfigName',
        'rds_config_names': 'rdsConfigNames',
        'proxy_name': 'proxyName',
        'cloud_storage': 'cloudStorage',
        'executor_type': 'executorType',
        'ambari': 'ambari',
        'shared_service': 'sharedService'
    }

    def __init__(self, email_needed=False, email_to=None, ldap_config_name=None, rds_config_names=None, proxy_name=None, cloud_storage=None, executor_type=None, ambari=None, shared_service=None):
        """
        ClusterV2Request - a model defined in Swagger
        """

        self._email_needed = None
        self._email_to = None
        self._ldap_config_name = None
        self._rds_config_names = None
        self._proxy_name = None
        self._cloud_storage = None
        self._executor_type = None
        self._ambari = None
        self._shared_service = None

        if email_needed is not None:
          self.email_needed = email_needed
        if email_to is not None:
          self.email_to = email_to
        if ldap_config_name is not None:
          self.ldap_config_name = ldap_config_name
        if rds_config_names is not None:
          self.rds_config_names = rds_config_names
        if proxy_name is not None:
          self.proxy_name = proxy_name
        if cloud_storage is not None:
          self.cloud_storage = cloud_storage
        if executor_type is not None:
          self.executor_type = executor_type
        if ambari is not None:
          self.ambari = ambari
        if shared_service is not None:
          self.shared_service = shared_service

    @property
    def email_needed(self):
        """
        Gets the email_needed of this ClusterV2Request.
        send email about the result of the cluster installation

        :return: The email_needed of this ClusterV2Request.
        :rtype: bool
        """
        return self._email_needed

    @email_needed.setter
    def email_needed(self, email_needed):
        """
        Sets the email_needed of this ClusterV2Request.
        send email about the result of the cluster installation

        :param email_needed: The email_needed of this ClusterV2Request.
        :type: bool
        """

        self._email_needed = email_needed

    @property
    def email_to(self):
        """
        Gets the email_to of this ClusterV2Request.
        send email to the requested address

        :return: The email_to of this ClusterV2Request.
        :rtype: str
        """
        return self._email_to

    @email_to.setter
    def email_to(self, email_to):
        """
        Sets the email_to of this ClusterV2Request.
        send email to the requested address

        :param email_to: The email_to of this ClusterV2Request.
        :type: str
        """

        self._email_to = email_to

    @property
    def ldap_config_name(self):
        """
        Gets the ldap_config_name of this ClusterV2Request.
        LDAP config name for the cluster

        :return: The ldap_config_name of this ClusterV2Request.
        :rtype: str
        """
        return self._ldap_config_name

    @ldap_config_name.setter
    def ldap_config_name(self, ldap_config_name):
        """
        Sets the ldap_config_name of this ClusterV2Request.
        LDAP config name for the cluster

        :param ldap_config_name: The ldap_config_name of this ClusterV2Request.
        :type: str
        """

        self._ldap_config_name = ldap_config_name

    @property
    def rds_config_names(self):
        """
        Gets the rds_config_names of this ClusterV2Request.
        RDS configuration names for the cluster

        :return: The rds_config_names of this ClusterV2Request.
        :rtype: list[str]
        """
        return self._rds_config_names

    @rds_config_names.setter
    def rds_config_names(self, rds_config_names):
        """
        Sets the rds_config_names of this ClusterV2Request.
        RDS configuration names for the cluster

        :param rds_config_names: The rds_config_names of this ClusterV2Request.
        :type: list[str]
        """

        self._rds_config_names = rds_config_names

    @property
    def proxy_name(self):
        """
        Gets the proxy_name of this ClusterV2Request.
        proxy configuration name for the cluster

        :return: The proxy_name of this ClusterV2Request.
        :rtype: str
        """
        return self._proxy_name

    @proxy_name.setter
    def proxy_name(self, proxy_name):
        """
        Sets the proxy_name of this ClusterV2Request.
        proxy configuration name for the cluster

        :param proxy_name: The proxy_name of this ClusterV2Request.
        :type: str
        """

        self._proxy_name = proxy_name

    @property
    def cloud_storage(self):
        """
        Gets the cloud_storage of this ClusterV2Request.
        external cloud storage configuration

        :return: The cloud_storage of this ClusterV2Request.
        :rtype: CloudStorageRequest
        """
        return self._cloud_storage

    @cloud_storage.setter
    def cloud_storage(self, cloud_storage):
        """
        Sets the cloud_storage of this ClusterV2Request.
        external cloud storage configuration

        :param cloud_storage: The cloud_storage of this ClusterV2Request.
        :type: CloudStorageRequest
        """

        self._cloud_storage = cloud_storage

    @property
    def executor_type(self):
        """
        Gets the executor_type of this ClusterV2Request.
        executor type of cluster

        :return: The executor_type of this ClusterV2Request.
        :rtype: str
        """
        return self._executor_type

    @executor_type.setter
    def executor_type(self, executor_type):
        """
        Sets the executor_type of this ClusterV2Request.
        executor type of cluster

        :param executor_type: The executor_type of this ClusterV2Request.
        :type: str
        """
        allowed_values = ["CONTAINER", "DEFAULT"]
        if executor_type not in allowed_values:
            raise ValueError(
                "Invalid value for `executor_type` ({0}), must be one of {1}"
                .format(executor_type, allowed_values)
            )

        self._executor_type = executor_type

    @property
    def ambari(self):
        """
        Gets the ambari of this ClusterV2Request.
        ambari specific requests

        :return: The ambari of this ClusterV2Request.
        :rtype: AmbariV2Request
        """
        return self._ambari

    @ambari.setter
    def ambari(self, ambari):
        """
        Sets the ambari of this ClusterV2Request.
        ambari specific requests

        :param ambari: The ambari of this ClusterV2Request.
        :type: AmbariV2Request
        """

        self._ambari = ambari

    @property
    def shared_service(self):
        """
        Gets the shared_service of this ClusterV2Request.
        Shared service request

        :return: The shared_service of this ClusterV2Request.
        :rtype: SharedService
        """
        return self._shared_service

    @shared_service.setter
    def shared_service(self, shared_service):
        """
        Sets the shared_service of this ClusterV2Request.
        Shared service request

        :param shared_service: The shared_service of this ClusterV2Request.
        :type: SharedService
        """

        self._shared_service = shared_service

    def to_dict(self):
        """
        Returns the model properties as a dict
        """
        result = {}

        for attr, _ in iteritems(self.swagger_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value

        return result

    def to_str(self):
        """
        Returns the string representation of the model
        """
        return pformat(self.to_dict())

    def __repr__(self):
        """
        For `print` and `pprint`
        """
        return self.to_str()

    def __eq__(self, other):
        """
        Returns true if both objects are equal
        """
        if not isinstance(other, ClusterV2Request):
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """
        Returns true if both objects are not equal
        """
        return not self == other
