# coding: utf-8

"""
    Resource manager API

    Manage Cloud Computing resources via API.

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

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
"""

from pprint import pformat
from six import iteritems
import re


class Cluster(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self, id=None, name=None, uuid=None, hints=None, credential=None, public_key=None, status=None, hosts_ids=None, targeted_slaves_count=None, current_slaves_count=None, hosts_ips=None, master_node_id=None, master_node_ip=None, user_id=None, appliance=None, appliance_impl=None):
        """
        Cluster - a model defined in Swagger

        :param dict swaggerTypes: The key is attribute name
                                  and the value is attribute type.
        :param dict attributeMap: The key is attribute name
                                  and the value is json key in definition.
        """
        self.swagger_types = {
            'id': 'int',
            'name': 'str',
            'uuid': 'str',
            'hints': 'str',
            'credential': 'str',
            'public_key': 'str',
            'status': 'str',
            'hosts_ids': 'list[str]',
            'targeted_slaves_count': 'int',
            'current_slaves_count': 'int',
            'hosts_ips': 'list[str]',
            'master_node_id': 'int',
            'master_node_ip': 'str',
            'user_id': 'int',
            'appliance': 'str',
            'appliance_impl': 'str'
        }

        self.attribute_map = {
            'id': 'id',
            'name': 'name',
            'uuid': 'uuid',
            'hints': 'hints',
            'credential': 'credential',
            'public_key': 'public_key',
            'status': 'status',
            'hosts_ids': 'hosts_ids',
            'targeted_slaves_count': 'targeted_slaves_count',
            'current_slaves_count': 'current_slaves_count',
            'hosts_ips': 'hosts_ips',
            'master_node_id': 'master_node_id',
            'master_node_ip': 'master_node_ip',
            'user_id': 'user_id',
            'appliance': 'appliance',
            'appliance_impl': 'appliance_impl'
        }

        self._id = id
        self._name = name
        self._uuid = uuid
        self._hints = hints
        self._credential = credential
        self._public_key = public_key
        self._status = status
        self._hosts_ids = hosts_ids
        self._targeted_slaves_count = targeted_slaves_count
        self._current_slaves_count = current_slaves_count
        self._hosts_ips = hosts_ips
        self._master_node_id = master_node_id
        self._master_node_ip = master_node_ip
        self._user_id = user_id
        self._appliance = appliance
        self._appliance_impl = appliance_impl


    @property
    def id(self):
        """
        Gets the id of this Cluster.
        Unique ID of the cluster

        :return: The id of this Cluster.
        :rtype: int
        """
        return self._id

    @id.setter
    def id(self, id):
        """
        Sets the id of this Cluster.
        Unique ID of the cluster

        :param id: The id of this Cluster.
        :type: int
        """

        self._id = id

    @property
    def name(self):
        """
        Gets the name of this Cluster.
        Name given to the cluster

        :return: The name of this Cluster.
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name):
        """
        Sets the name of this Cluster.
        Name given to the cluster

        :param name: The name of this Cluster.
        :type: str
        """

        self._name = name

    @property
    def uuid(self):
        """
        Gets the uuid of this Cluster.
        Internal UUID given to the cluster

        :return: The uuid of this Cluster.
        :rtype: str
        """
        return self._uuid

    @uuid.setter
    def uuid(self, uuid):
        """
        Sets the uuid of this Cluster.
        Internal UUID given to the cluster

        :param uuid: The uuid of this Cluster.
        :type: str
        """

        self._uuid = uuid

    @property
    def hints(self):
        """
        Gets the hints of this Cluster.
        hints that will be used to select the infrastructure that will host cluster's nodes

        :return: The hints of this Cluster.
        :rtype: str
        """
        return self._hints

    @hints.setter
    def hints(self, hints):
        """
        Sets the hints of this Cluster.
        hints that will be used to select the infrastructure that will host cluster's nodes

        :param hints: The hints of this Cluster.
        :type: str
        """

        self._hints = hints

    @property
    def credential(self):
        """
        Gets the credential of this Cluster.
        hints that will be used to select the infrastructure that will host cluster's nodes

        :return: The credential of this Cluster.
        :rtype: str
        """
        return self._credential

    @credential.setter
    def credential(self, credential):
        """
        Sets the credential of this Cluster.
        hints that will be used to select the infrastructure that will host cluster's nodes

        :param credential: The credential of this Cluster.
        :type: str
        """

        self._credential = credential

    @property
    def public_key(self):
        """
        Gets the public_key of this Cluster.
        Public key used to identify nodes of the cluster

        :return: The public_key of this Cluster.
        :rtype: str
        """
        return self._public_key

    @public_key.setter
    def public_key(self, public_key):
        """
        Sets the public_key of this Cluster.
        Public key used to identify nodes of the cluster

        :param public_key: The public_key of this Cluster.
        :type: str
        """

        self._public_key = public_key

    @property
    def status(self):
        """
        Gets the status of this Cluster.
        Status of the cluster

        :return: The status of this Cluster.
        :rtype: str
        """
        return self._status

    @status.setter
    def status(self, status):
        """
        Sets the status of this Cluster.
        Status of the cluster

        :param status: The status of this Cluster.
        :type: str
        """

        self._status = status

    @property
    def hosts_ids(self):
        """
        Gets the hosts_ids of this Cluster.
        IDs of nodes of the cluster (can be null)

        :return: The hosts_ids of this Cluster.
        :rtype: list[str]
        """
        return self._hosts_ids

    @hosts_ids.setter
    def hosts_ids(self, hosts_ids):
        """
        Sets the hosts_ids of this Cluster.
        IDs of nodes of the cluster (can be null)

        :param hosts_ids: The hosts_ids of this Cluster.
        :type: list[str]
        """

        self._hosts_ids = hosts_ids

    @property
    def targeted_slaves_count(self):
        """
        Gets the targeted_slaves_count of this Cluster.
        targeted number of slaves in the cluster

        :return: The targeted_slaves_count of this Cluster.
        :rtype: int
        """
        return self._targeted_slaves_count

    @targeted_slaves_count.setter
    def targeted_slaves_count(self, targeted_slaves_count):
        """
        Sets the targeted_slaves_count of this Cluster.
        targeted number of slaves in the cluster

        :param targeted_slaves_count: The targeted_slaves_count of this Cluster.
        :type: int
        """

        self._targeted_slaves_count = targeted_slaves_count

    @property
    def current_slaves_count(self):
        """
        Gets the current_slaves_count of this Cluster.
        current number of slaves in the cluster

        :return: The current_slaves_count of this Cluster.
        :rtype: int
        """
        return self._current_slaves_count

    @current_slaves_count.setter
    def current_slaves_count(self, current_slaves_count):
        """
        Sets the current_slaves_count of this Cluster.
        current number of slaves in the cluster

        :param current_slaves_count: The current_slaves_count of this Cluster.
        :type: int
        """

        self._current_slaves_count = current_slaves_count

    @property
    def hosts_ips(self):
        """
        Gets the hosts_ips of this Cluster.
        IP addresses of nodes of the cluster (can be null)

        :return: The hosts_ips of this Cluster.
        :rtype: list[str]
        """
        return self._hosts_ips

    @hosts_ips.setter
    def hosts_ips(self, hosts_ips):
        """
        Sets the hosts_ips of this Cluster.
        IP addresses of nodes of the cluster (can be null)

        :param hosts_ips: The hosts_ips of this Cluster.
        :type: list[str]
        """

        self._hosts_ips = hosts_ips

    @property
    def master_node_id(self):
        """
        Gets the master_node_id of this Cluster.
        ID of the master node of the cluster (can be null)

        :return: The master_node_id of this Cluster.
        :rtype: int
        """
        return self._master_node_id

    @master_node_id.setter
    def master_node_id(self, master_node_id):
        """
        Sets the master_node_id of this Cluster.
        ID of the master node of the cluster (can be null)

        :param master_node_id: The master_node_id of this Cluster.
        :type: int
        """

        self._master_node_id = master_node_id

    @property
    def master_node_ip(self):
        """
        Gets the master_node_ip of this Cluster.
        IP address of the master node of the cluster (can be null)

        :return: The master_node_ip of this Cluster.
        :rtype: str
        """
        return self._master_node_ip

    @master_node_ip.setter
    def master_node_ip(self, master_node_ip):
        """
        Sets the master_node_ip of this Cluster.
        IP address of the master node of the cluster (can be null)

        :param master_node_ip: The master_node_ip of this Cluster.
        :type: str
        """

        self._master_node_ip = master_node_ip

    @property
    def user_id(self):
        """
        Gets the user_id of this Cluster.
        ID of the user that created the cluster

        :return: The user_id of this Cluster.
        :rtype: int
        """
        return self._user_id

    @user_id.setter
    def user_id(self, user_id):
        """
        Sets the user_id of this Cluster.
        ID of the user that created the cluster

        :param user_id: The user_id of this Cluster.
        :type: int
        """

        self._user_id = user_id

    @property
    def appliance(self):
        """
        Gets the appliance of this Cluster.
        Appliance of the cluster

        :return: The appliance of this Cluster.
        :rtype: str
        """
        return self._appliance

    @appliance.setter
    def appliance(self, appliance):
        """
        Sets the appliance of this Cluster.
        Appliance of the cluster

        :param appliance: The appliance of this Cluster.
        :type: str
        """

        self._appliance = appliance

    @property
    def appliance_impl(self):
        """
        Gets the appliance_impl of this Cluster.
        Appliance of the cluster

        :return: The appliance_impl of this Cluster.
        :rtype: str
        """
        return self._appliance_impl

    @appliance_impl.setter
    def appliance_impl(self, appliance_impl):
        """
        Sets the appliance_impl of this Cluster.
        Appliance of the cluster

        :param appliance_impl: The appliance_impl of this Cluster.
        :type: str
        """

        self._appliance_impl = appliance_impl

    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
        """
        return self.__dict__ == other.__dict__

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