# coding: utf-8

"""
    Zadara Provisioning Portal API

     # Overview  This document outlines the methods available for creation and high-level administration of Zadara Storage VPSAs via a Zadara Storage Provisioning Portal. This API supports form-encoded requests, and can return either JSON or XML responses.  ## Endpoint  The base URL for the requests is the Provisioning Portal URL you created your VPSA through - for example: https://manage.zadarastorage.com/, and all APIs will be prefixed with /api as noted in the documentation below.  ## Authentication  To use this API, an authentication token is required. The API for retrieving this token can be found below in the Authentication section. You may pass this token in requests either via the the X-Token header or via basic authentication (base64 encoded) in Authorization header.  ## Questions  If you have any questions or need support involving the REST API, please contact for assistance.   # noqa: E501

    OpenAPI spec version: 23.09-sp2
    Contact: support@zadarastorage.com
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


import pprint
import re  # noqa: F401

import six

from ProvisioningPortal.configuration import Configuration


class Vpsa(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 = {
        'allocation_zones': 'list[str]',
        'cache': 'VpsaCache',
        'app_engine': 'VpsaAppEngine',
        'status': 'str',
        'description': 'str',
        'fibre_channel': 'bool',
        'drives': 'VpsaDrives',
        'drive_count': 'int',
        'engine': 'InlineResponse20028DataEngine',
        'nova_id': 'int',
        'management_url': 'str',
        'initial_passcode': 'str',
        'ip_address': 'str',
        'id': 'int',
        'time_created_gmt': 'str',
        'name': 'str',
        'locked_down': 'bool',
        'provider': 'InlineResponse20028DataProvider',
        'product': 'str',
        'type': 'str',
        'virtual_network_interfaces': 'list[VpsaVirtualNetworkInterfaces]',
        'file_lifecycle': 'bool',
        'iscsi_dual_target': 'bool',
        'scheduled_upgrade_capable': 'bool',
        'update_available': 'bool',
        'upgrade_when': 'str',
        'upgrade_target': 'str',
        'upgrade_initiator': 'str',
        'cancel_scheduled_upgrade_capable': 'bool',
        'created_at': 'str'
    }

    attribute_map = {
        'allocation_zones': 'allocation-zones',
        'cache': 'cache',
        'app_engine': 'app_engine',
        'status': 'status',
        'description': 'description',
        'fibre_channel': 'fibre_channel',
        'drives': 'drives',
        'drive_count': 'drive_count',
        'engine': 'engine',
        'nova_id': 'nova_id',
        'management_url': 'management_url',
        'initial_passcode': 'initial_passcode',
        'ip_address': 'ip_address',
        'id': 'id',
        'time_created_gmt': 'time_created_gmt',
        'name': 'name',
        'locked_down': 'locked_down',
        'provider': 'provider',
        'product': 'product',
        'type': 'type',
        'virtual_network_interfaces': 'virtual_network_interfaces',
        'file_lifecycle': 'file_lifecycle',
        'iscsi_dual_target': 'iscsi_dual_target',
        'scheduled_upgrade_capable': 'scheduled_upgrade_capable',
        'update_available': 'update_available',
        'upgrade_when': 'upgrade_when',
        'upgrade_target': 'upgrade_target',
        'upgrade_initiator': 'upgrade_initiator',
        'cancel_scheduled_upgrade_capable': 'cancel_scheduled_upgrade_capable',
        'created_at': 'created_at'
    }

    def __init__(self, allocation_zones=None, cache=None, app_engine=None, status=None, description=None, fibre_channel=None, drives=None, drive_count=None, engine=None, nova_id=None, management_url=None, initial_passcode=None, ip_address=None, id=None, time_created_gmt=None, name=None, locked_down=None, provider=None, product=None, type=None, virtual_network_interfaces=None, file_lifecycle=None, iscsi_dual_target=None, scheduled_upgrade_capable=None, update_available=None, upgrade_when=None, upgrade_target=None, upgrade_initiator=None, cancel_scheduled_upgrade_capable=None, created_at=None, _configuration=None):  # noqa: E501
        """Vpsa - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._allocation_zones = None
        self._cache = None
        self._app_engine = None
        self._status = None
        self._description = None
        self._fibre_channel = None
        self._drives = None
        self._drive_count = None
        self._engine = None
        self._nova_id = None
        self._management_url = None
        self._initial_passcode = None
        self._ip_address = None
        self._id = None
        self._time_created_gmt = None
        self._name = None
        self._locked_down = None
        self._provider = None
        self._product = None
        self._type = None
        self._virtual_network_interfaces = None
        self._file_lifecycle = None
        self._iscsi_dual_target = None
        self._scheduled_upgrade_capable = None
        self._update_available = None
        self._upgrade_when = None
        self._upgrade_target = None
        self._upgrade_initiator = None
        self._cancel_scheduled_upgrade_capable = None
        self._created_at = None
        self.discriminator = None

        if allocation_zones is not None:
            self.allocation_zones = allocation_zones
        if cache is not None:
            self.cache = cache
        if app_engine is not None:
            self.app_engine = app_engine
        if status is not None:
            self.status = status
        if description is not None:
            self.description = description
        if fibre_channel is not None:
            self.fibre_channel = fibre_channel
        if drives is not None:
            self.drives = drives
        if drive_count is not None:
            self.drive_count = drive_count
        if engine is not None:
            self.engine = engine
        if nova_id is not None:
            self.nova_id = nova_id
        if management_url is not None:
            self.management_url = management_url
        if initial_passcode is not None:
            self.initial_passcode = initial_passcode
        if ip_address is not None:
            self.ip_address = ip_address
        if id is not None:
            self.id = id
        if time_created_gmt is not None:
            self.time_created_gmt = time_created_gmt
        if name is not None:
            self.name = name
        if locked_down is not None:
            self.locked_down = locked_down
        if provider is not None:
            self.provider = provider
        if product is not None:
            self.product = product
        if type is not None:
            self.type = type
        if virtual_network_interfaces is not None:
            self.virtual_network_interfaces = virtual_network_interfaces
        if file_lifecycle is not None:
            self.file_lifecycle = file_lifecycle
        if iscsi_dual_target is not None:
            self.iscsi_dual_target = iscsi_dual_target
        if scheduled_upgrade_capable is not None:
            self.scheduled_upgrade_capable = scheduled_upgrade_capable
        if update_available is not None:
            self.update_available = update_available
        if upgrade_when is not None:
            self.upgrade_when = upgrade_when
        if upgrade_target is not None:
            self.upgrade_target = upgrade_target
        if upgrade_initiator is not None:
            self.upgrade_initiator = upgrade_initiator
        if cancel_scheduled_upgrade_capable is not None:
            self.cancel_scheduled_upgrade_capable = cancel_scheduled_upgrade_capable
        if created_at is not None:
            self.created_at = created_at

    @property
    def allocation_zones(self):
        """Gets the allocation_zones of this Vpsa.  # noqa: E501


        :return: The allocation_zones of this Vpsa.  # noqa: E501
        :rtype: list[str]
        """
        return self._allocation_zones

    @allocation_zones.setter
    def allocation_zones(self, allocation_zones):
        """Sets the allocation_zones of this Vpsa.


        :param allocation_zones: The allocation_zones of this Vpsa.  # noqa: E501
        :type: list[str]
        """

        self._allocation_zones = allocation_zones

    @property
    def cache(self):
        """Gets the cache of this Vpsa.  # noqa: E501


        :return: The cache of this Vpsa.  # noqa: E501
        :rtype: VpsaCache
        """
        return self._cache

    @cache.setter
    def cache(self, cache):
        """Sets the cache of this Vpsa.


        :param cache: The cache of this Vpsa.  # noqa: E501
        :type: VpsaCache
        """

        self._cache = cache

    @property
    def app_engine(self):
        """Gets the app_engine of this Vpsa.  # noqa: E501


        :return: The app_engine of this Vpsa.  # noqa: E501
        :rtype: VpsaAppEngine
        """
        return self._app_engine

    @app_engine.setter
    def app_engine(self, app_engine):
        """Sets the app_engine of this Vpsa.


        :param app_engine: The app_engine of this Vpsa.  # noqa: E501
        :type: VpsaAppEngine
        """

        self._app_engine = app_engine

    @property
    def status(self):
        """Gets the status of this Vpsa.  # noqa: E501


        :return: The status of this Vpsa.  # noqa: E501
        :rtype: str
        """
        return self._status

    @status.setter
    def status(self, status):
        """Sets the status of this Vpsa.


        :param status: The status of this Vpsa.  # noqa: E501
        :type: str
        """

        self._status = status

    @property
    def description(self):
        """Gets the description of this Vpsa.  # noqa: E501


        :return: The description of this Vpsa.  # noqa: E501
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description):
        """Sets the description of this Vpsa.


        :param description: The description of this Vpsa.  # noqa: E501
        :type: str
        """

        self._description = description

    @property
    def fibre_channel(self):
        """Gets the fibre_channel of this Vpsa.  # noqa: E501


        :return: The fibre_channel of this Vpsa.  # noqa: E501
        :rtype: bool
        """
        return self._fibre_channel

    @fibre_channel.setter
    def fibre_channel(self, fibre_channel):
        """Sets the fibre_channel of this Vpsa.


        :param fibre_channel: The fibre_channel of this Vpsa.  # noqa: E501
        :type: bool
        """

        self._fibre_channel = fibre_channel

    @property
    def drives(self):
        """Gets the drives of this Vpsa.  # noqa: E501


        :return: The drives of this Vpsa.  # noqa: E501
        :rtype: VpsaDrives
        """
        return self._drives

    @drives.setter
    def drives(self, drives):
        """Sets the drives of this Vpsa.


        :param drives: The drives of this Vpsa.  # noqa: E501
        :type: VpsaDrives
        """

        self._drives = drives

    @property
    def drive_count(self):
        """Gets the drive_count of this Vpsa.  # noqa: E501


        :return: The drive_count of this Vpsa.  # noqa: E501
        :rtype: int
        """
        return self._drive_count

    @drive_count.setter
    def drive_count(self, drive_count):
        """Sets the drive_count of this Vpsa.


        :param drive_count: The drive_count of this Vpsa.  # noqa: E501
        :type: int
        """

        self._drive_count = drive_count

    @property
    def engine(self):
        """Gets the engine of this Vpsa.  # noqa: E501


        :return: The engine of this Vpsa.  # noqa: E501
        :rtype: InlineResponse20028DataEngine
        """
        return self._engine

    @engine.setter
    def engine(self, engine):
        """Sets the engine of this Vpsa.


        :param engine: The engine of this Vpsa.  # noqa: E501
        :type: InlineResponse20028DataEngine
        """

        self._engine = engine

    @property
    def nova_id(self):
        """Gets the nova_id of this Vpsa.  # noqa: E501


        :return: The nova_id of this Vpsa.  # noqa: E501
        :rtype: int
        """
        return self._nova_id

    @nova_id.setter
    def nova_id(self, nova_id):
        """Sets the nova_id of this Vpsa.


        :param nova_id: The nova_id of this Vpsa.  # noqa: E501
        :type: int
        """

        self._nova_id = nova_id

    @property
    def management_url(self):
        """Gets the management_url of this Vpsa.  # noqa: E501


        :return: The management_url of this Vpsa.  # noqa: E501
        :rtype: str
        """
        return self._management_url

    @management_url.setter
    def management_url(self, management_url):
        """Sets the management_url of this Vpsa.


        :param management_url: The management_url of this Vpsa.  # noqa: E501
        :type: str
        """

        self._management_url = management_url

    @property
    def initial_passcode(self):
        """Gets the initial_passcode of this Vpsa.  # noqa: E501


        :return: The initial_passcode of this Vpsa.  # noqa: E501
        :rtype: str
        """
        return self._initial_passcode

    @initial_passcode.setter
    def initial_passcode(self, initial_passcode):
        """Sets the initial_passcode of this Vpsa.


        :param initial_passcode: The initial_passcode of this Vpsa.  # noqa: E501
        :type: str
        """

        self._initial_passcode = initial_passcode

    @property
    def ip_address(self):
        """Gets the ip_address of this Vpsa.  # noqa: E501


        :return: The ip_address of this Vpsa.  # noqa: E501
        :rtype: str
        """
        return self._ip_address

    @ip_address.setter
    def ip_address(self, ip_address):
        """Sets the ip_address of this Vpsa.


        :param ip_address: The ip_address of this Vpsa.  # noqa: E501
        :type: str
        """

        self._ip_address = ip_address

    @property
    def id(self):
        """Gets the id of this Vpsa.  # noqa: E501


        :return: The id of this Vpsa.  # noqa: E501
        :rtype: int
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this Vpsa.


        :param id: The id of this Vpsa.  # noqa: E501
        :type: int
        """

        self._id = id

    @property
    def time_created_gmt(self):
        """Gets the time_created_gmt of this Vpsa.  # noqa: E501


        :return: The time_created_gmt of this Vpsa.  # noqa: E501
        :rtype: str
        """
        return self._time_created_gmt

    @time_created_gmt.setter
    def time_created_gmt(self, time_created_gmt):
        """Sets the time_created_gmt of this Vpsa.


        :param time_created_gmt: The time_created_gmt of this Vpsa.  # noqa: E501
        :type: str
        """

        self._time_created_gmt = time_created_gmt

    @property
    def name(self):
        """Gets the name of this Vpsa.  # noqa: E501


        :return: The name of this Vpsa.  # noqa: E501
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name):
        """Sets the name of this Vpsa.


        :param name: The name of this Vpsa.  # noqa: E501
        :type: str
        """

        self._name = name

    @property
    def locked_down(self):
        """Gets the locked_down of this Vpsa.  # noqa: E501


        :return: The locked_down of this Vpsa.  # noqa: E501
        :rtype: bool
        """
        return self._locked_down

    @locked_down.setter
    def locked_down(self, locked_down):
        """Sets the locked_down of this Vpsa.


        :param locked_down: The locked_down of this Vpsa.  # noqa: E501
        :type: bool
        """

        self._locked_down = locked_down

    @property
    def provider(self):
        """Gets the provider of this Vpsa.  # noqa: E501


        :return: The provider of this Vpsa.  # noqa: E501
        :rtype: InlineResponse20028DataProvider
        """
        return self._provider

    @provider.setter
    def provider(self, provider):
        """Sets the provider of this Vpsa.


        :param provider: The provider of this Vpsa.  # noqa: E501
        :type: InlineResponse20028DataProvider
        """

        self._provider = provider

    @property
    def product(self):
        """Gets the product of this Vpsa.  # noqa: E501


        :return: The product of this Vpsa.  # noqa: E501
        :rtype: str
        """
        return self._product

    @product.setter
    def product(self, product):
        """Sets the product of this Vpsa.


        :param product: The product of this Vpsa.  # noqa: E501
        :type: str
        """

        self._product = product

    @property
    def type(self):
        """Gets the type of this Vpsa.  # noqa: E501


        :return: The type of this Vpsa.  # noqa: E501
        :rtype: str
        """
        return self._type

    @type.setter
    def type(self, type):
        """Sets the type of this Vpsa.


        :param type: The type of this Vpsa.  # noqa: E501
        :type: str
        """

        self._type = type

    @property
    def virtual_network_interfaces(self):
        """Gets the virtual_network_interfaces of this Vpsa.  # noqa: E501


        :return: The virtual_network_interfaces of this Vpsa.  # noqa: E501
        :rtype: list[VpsaVirtualNetworkInterfaces]
        """
        return self._virtual_network_interfaces

    @virtual_network_interfaces.setter
    def virtual_network_interfaces(self, virtual_network_interfaces):
        """Sets the virtual_network_interfaces of this Vpsa.


        :param virtual_network_interfaces: The virtual_network_interfaces of this Vpsa.  # noqa: E501
        :type: list[VpsaVirtualNetworkInterfaces]
        """

        self._virtual_network_interfaces = virtual_network_interfaces

    @property
    def file_lifecycle(self):
        """Gets the file_lifecycle of this Vpsa.  # noqa: E501


        :return: The file_lifecycle of this Vpsa.  # noqa: E501
        :rtype: bool
        """
        return self._file_lifecycle

    @file_lifecycle.setter
    def file_lifecycle(self, file_lifecycle):
        """Sets the file_lifecycle of this Vpsa.


        :param file_lifecycle: The file_lifecycle of this Vpsa.  # noqa: E501
        :type: bool
        """

        self._file_lifecycle = file_lifecycle

    @property
    def iscsi_dual_target(self):
        """Gets the iscsi_dual_target of this Vpsa.  # noqa: E501


        :return: The iscsi_dual_target of this Vpsa.  # noqa: E501
        :rtype: bool
        """
        return self._iscsi_dual_target

    @iscsi_dual_target.setter
    def iscsi_dual_target(self, iscsi_dual_target):
        """Sets the iscsi_dual_target of this Vpsa.


        :param iscsi_dual_target: The iscsi_dual_target of this Vpsa.  # noqa: E501
        :type: bool
        """

        self._iscsi_dual_target = iscsi_dual_target

    @property
    def scheduled_upgrade_capable(self):
        """Gets the scheduled_upgrade_capable of this Vpsa.  # noqa: E501


        :return: The scheduled_upgrade_capable of this Vpsa.  # noqa: E501
        :rtype: bool
        """
        return self._scheduled_upgrade_capable

    @scheduled_upgrade_capable.setter
    def scheduled_upgrade_capable(self, scheduled_upgrade_capable):
        """Sets the scheduled_upgrade_capable of this Vpsa.


        :param scheduled_upgrade_capable: The scheduled_upgrade_capable of this Vpsa.  # noqa: E501
        :type: bool
        """

        self._scheduled_upgrade_capable = scheduled_upgrade_capable

    @property
    def update_available(self):
        """Gets the update_available of this Vpsa.  # noqa: E501


        :return: The update_available of this Vpsa.  # noqa: E501
        :rtype: bool
        """
        return self._update_available

    @update_available.setter
    def update_available(self, update_available):
        """Sets the update_available of this Vpsa.


        :param update_available: The update_available of this Vpsa.  # noqa: E501
        :type: bool
        """

        self._update_available = update_available

    @property
    def upgrade_when(self):
        """Gets the upgrade_when of this Vpsa.  # noqa: E501

        When the VPSA software version is scheduled to be upgraded. \"now\" means immediate upgrade. \"manual\" means upgrade will occur after resume. Or a scheduled time when the upgrade will apply.  # noqa: E501

        :return: The upgrade_when of this Vpsa.  # noqa: E501
        :rtype: str
        """
        return self._upgrade_when

    @upgrade_when.setter
    def upgrade_when(self, upgrade_when):
        """Sets the upgrade_when of this Vpsa.

        When the VPSA software version is scheduled to be upgraded. \"now\" means immediate upgrade. \"manual\" means upgrade will occur after resume. Or a scheduled time when the upgrade will apply.  # noqa: E501

        :param upgrade_when: The upgrade_when of this Vpsa.  # noqa: E501
        :type: str
        """

        self._upgrade_when = upgrade_when

    @property
    def upgrade_target(self):
        """Gets the upgrade_target of this Vpsa.  # noqa: E501

        VPSA software upgrade target version  # noqa: E501

        :return: The upgrade_target of this Vpsa.  # noqa: E501
        :rtype: str
        """
        return self._upgrade_target

    @upgrade_target.setter
    def upgrade_target(self, upgrade_target):
        """Sets the upgrade_target of this Vpsa.

        VPSA software upgrade target version  # noqa: E501

        :param upgrade_target: The upgrade_target of this Vpsa.  # noqa: E501
        :type: str
        """

        self._upgrade_target = upgrade_target

    @property
    def upgrade_initiator(self):
        """Gets the upgrade_initiator of this Vpsa.  # noqa: E501

        VPSA software upgrade initiator, \"cc\" represents Command Center user, \"pp\" represents Provisioning Portal user.  # noqa: E501

        :return: The upgrade_initiator of this Vpsa.  # noqa: E501
        :rtype: str
        """
        return self._upgrade_initiator

    @upgrade_initiator.setter
    def upgrade_initiator(self, upgrade_initiator):
        """Sets the upgrade_initiator of this Vpsa.

        VPSA software upgrade initiator, \"cc\" represents Command Center user, \"pp\" represents Provisioning Portal user.  # noqa: E501

        :param upgrade_initiator: The upgrade_initiator of this Vpsa.  # noqa: E501
        :type: str
        """

        self._upgrade_initiator = upgrade_initiator

    @property
    def cancel_scheduled_upgrade_capable(self):
        """Gets the cancel_scheduled_upgrade_capable of this Vpsa.  # noqa: E501

        VPSA capable of processing cancellation of scheduled software version upgrade.  # noqa: E501

        :return: The cancel_scheduled_upgrade_capable of this Vpsa.  # noqa: E501
        :rtype: bool
        """
        return self._cancel_scheduled_upgrade_capable

    @cancel_scheduled_upgrade_capable.setter
    def cancel_scheduled_upgrade_capable(self, cancel_scheduled_upgrade_capable):
        """Sets the cancel_scheduled_upgrade_capable of this Vpsa.

        VPSA capable of processing cancellation of scheduled software version upgrade.  # noqa: E501

        :param cancel_scheduled_upgrade_capable: The cancel_scheduled_upgrade_capable of this Vpsa.  # noqa: E501
        :type: bool
        """

        self._cancel_scheduled_upgrade_capable = cancel_scheduled_upgrade_capable

    @property
    def created_at(self):
        """Gets the created_at of this Vpsa.  # noqa: E501


        :return: The created_at of this Vpsa.  # noqa: E501
        :rtype: str
        """
        return self._created_at

    @created_at.setter
    def created_at(self, created_at):
        """Sets the created_at of this Vpsa.


        :param created_at: The created_at of this Vpsa.  # noqa: E501
        :type: str
        """

        self._created_at = created_at

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

        for attr, _ in six.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
        if issubclass(Vpsa, dict):
            for key, value in self.items():
                result[key] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.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, Vpsa):
            return False

        return self.to_dict() == other.to_dict()

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

        return self.to_dict() != other.to_dict()
