# coding: utf-8

"""
    external/v1/external_session_service.proto

    No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)  # noqa: E501

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

    NOTE
    ----
    standard swagger-codegen-cli for this python client has been modified
    by custom templates. The purpose of these templates is to include
    typing information in the API and Model code. Please refer to the
    main grid repository for more info
"""


import pprint
import re  # noqa: F401
from typing import TYPE_CHECKING

import six

from grid.openapi.configuration import Configuration

if TYPE_CHECKING:
    from datetime import datetime
    from grid.openapi.models import *

class V1KubernetesClusterDriver(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 = {
        'aws': 'V1AWSClusterDriverSpec',
        'azure': 'V1AzureClusterDriverSpec',
        'extra_gridlet_env_var': 'dict(str, str)',
        'gridlet_resources': 'V1ContainerResources',
        'kubeconfig': 'V1ExternalKubeconfig',
        'kubernetes_only_mode': 'bool',
        'namespace': 'str',
        'private_ssh_gateway': 'bool',
        'root_domain_name': 'str'
    }

    attribute_map = {
        'aws': 'aws',
        'azure': 'azure',
        'extra_gridlet_env_var': 'extraGridletEnvVar',
        'gridlet_resources': 'gridletResources',
        'kubeconfig': 'kubeconfig',
        'kubernetes_only_mode': 'kubernetesOnlyMode',
        'namespace': 'namespace',
        'private_ssh_gateway': 'privateSshGateway',
        'root_domain_name': 'rootDomainName'
    }

    def __init__(self, aws: 'V1AWSClusterDriverSpec' = None, azure: 'V1AzureClusterDriverSpec' = None, extra_gridlet_env_var: 'dict(str, str)' = None, gridlet_resources: 'V1ContainerResources' = None, kubeconfig: 'V1ExternalKubeconfig' = None, kubernetes_only_mode: 'bool' = None, namespace: 'str' = None, private_ssh_gateway: 'bool' = None, root_domain_name: 'str' = None, _configuration=None):  # noqa: E501
        """V1KubernetesClusterDriver - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._aws = None
        self._azure = None
        self._extra_gridlet_env_var = None
        self._gridlet_resources = None
        self._kubeconfig = None
        self._kubernetes_only_mode = None
        self._namespace = None
        self._private_ssh_gateway = None
        self._root_domain_name = None
        self.discriminator = None

        if aws is not None:
            self.aws = aws
        if azure is not None:
            self.azure = azure
        if extra_gridlet_env_var is not None:
            self.extra_gridlet_env_var = extra_gridlet_env_var
        if gridlet_resources is not None:
            self.gridlet_resources = gridlet_resources
        if kubeconfig is not None:
            self.kubeconfig = kubeconfig
        if kubernetes_only_mode is not None:
            self.kubernetes_only_mode = kubernetes_only_mode
        if namespace is not None:
            self.namespace = namespace
        if private_ssh_gateway is not None:
            self.private_ssh_gateway = private_ssh_gateway
        if root_domain_name is not None:
            self.root_domain_name = root_domain_name

    @property
    def aws(self) -> 'V1AWSClusterDriverSpec':
        """Gets the aws of this V1KubernetesClusterDriver.  # noqa: E501


        :return: The aws of this V1KubernetesClusterDriver.  # noqa: E501
        :rtype: V1AWSClusterDriverSpec
        """
        return self._aws

    @aws.setter
    def aws(self, aws: 'V1AWSClusterDriverSpec'):
        """Sets the aws of this V1KubernetesClusterDriver.


        :param aws: The aws of this V1KubernetesClusterDriver.  # noqa: E501
        :type: V1AWSClusterDriverSpec
        """

        self._aws = aws

    @property
    def azure(self) -> 'V1AzureClusterDriverSpec':
        """Gets the azure of this V1KubernetesClusterDriver.  # noqa: E501


        :return: The azure of this V1KubernetesClusterDriver.  # noqa: E501
        :rtype: V1AzureClusterDriverSpec
        """
        return self._azure

    @azure.setter
    def azure(self, azure: 'V1AzureClusterDriverSpec'):
        """Sets the azure of this V1KubernetesClusterDriver.


        :param azure: The azure of this V1KubernetesClusterDriver.  # noqa: E501
        :type: V1AzureClusterDriverSpec
        """

        self._azure = azure

    @property
    def extra_gridlet_env_var(self) -> 'dict(str, str)':
        """Gets the extra_gridlet_env_var of this V1KubernetesClusterDriver.  # noqa: E501


        :return: The extra_gridlet_env_var of this V1KubernetesClusterDriver.  # noqa: E501
        :rtype: dict(str, str)
        """
        return self._extra_gridlet_env_var

    @extra_gridlet_env_var.setter
    def extra_gridlet_env_var(self, extra_gridlet_env_var: 'dict(str, str)'):
        """Sets the extra_gridlet_env_var of this V1KubernetesClusterDriver.


        :param extra_gridlet_env_var: The extra_gridlet_env_var of this V1KubernetesClusterDriver.  # noqa: E501
        :type: dict(str, str)
        """

        self._extra_gridlet_env_var = extra_gridlet_env_var

    @property
    def gridlet_resources(self) -> 'V1ContainerResources':
        """Gets the gridlet_resources of this V1KubernetesClusterDriver.  # noqa: E501


        :return: The gridlet_resources of this V1KubernetesClusterDriver.  # noqa: E501
        :rtype: V1ContainerResources
        """
        return self._gridlet_resources

    @gridlet_resources.setter
    def gridlet_resources(self, gridlet_resources: 'V1ContainerResources'):
        """Sets the gridlet_resources of this V1KubernetesClusterDriver.


        :param gridlet_resources: The gridlet_resources of this V1KubernetesClusterDriver.  # noqa: E501
        :type: V1ContainerResources
        """

        self._gridlet_resources = gridlet_resources

    @property
    def kubeconfig(self) -> 'V1ExternalKubeconfig':
        """Gets the kubeconfig of this V1KubernetesClusterDriver.  # noqa: E501


        :return: The kubeconfig of this V1KubernetesClusterDriver.  # noqa: E501
        :rtype: V1ExternalKubeconfig
        """
        return self._kubeconfig

    @kubeconfig.setter
    def kubeconfig(self, kubeconfig: 'V1ExternalKubeconfig'):
        """Sets the kubeconfig of this V1KubernetesClusterDriver.


        :param kubeconfig: The kubeconfig of this V1KubernetesClusterDriver.  # noqa: E501
        :type: V1ExternalKubeconfig
        """

        self._kubeconfig = kubeconfig

    @property
    def kubernetes_only_mode(self) -> 'bool':
        """Gets the kubernetes_only_mode of this V1KubernetesClusterDriver.  # noqa: E501


        :return: The kubernetes_only_mode of this V1KubernetesClusterDriver.  # noqa: E501
        :rtype: bool
        """
        return self._kubernetes_only_mode

    @kubernetes_only_mode.setter
    def kubernetes_only_mode(self, kubernetes_only_mode: 'bool'):
        """Sets the kubernetes_only_mode of this V1KubernetesClusterDriver.


        :param kubernetes_only_mode: The kubernetes_only_mode of this V1KubernetesClusterDriver.  # noqa: E501
        :type: bool
        """

        self._kubernetes_only_mode = kubernetes_only_mode

    @property
    def namespace(self) -> 'str':
        """Gets the namespace of this V1KubernetesClusterDriver.  # noqa: E501


        :return: The namespace of this V1KubernetesClusterDriver.  # noqa: E501
        :rtype: str
        """
        return self._namespace

    @namespace.setter
    def namespace(self, namespace: 'str'):
        """Sets the namespace of this V1KubernetesClusterDriver.


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

        self._namespace = namespace

    @property
    def private_ssh_gateway(self) -> 'bool':
        """Gets the private_ssh_gateway of this V1KubernetesClusterDriver.  # noqa: E501

        Make gridlet load balancer be within the private subnets. This is cloud specific, thus for AWS the load balancer will be created in the private VPC subnet. The byoc administrator is responsible for VPN solution, that is networking between clients and the gridlet load balancer, that is private subnets on the cloud provider.  # noqa: E501

        :return: The private_ssh_gateway of this V1KubernetesClusterDriver.  # noqa: E501
        :rtype: bool
        """
        return self._private_ssh_gateway

    @private_ssh_gateway.setter
    def private_ssh_gateway(self, private_ssh_gateway: 'bool'):
        """Sets the private_ssh_gateway of this V1KubernetesClusterDriver.

        Make gridlet load balancer be within the private subnets. This is cloud specific, thus for AWS the load balancer will be created in the private VPC subnet. The byoc administrator is responsible for VPN solution, that is networking between clients and the gridlet load balancer, that is private subnets on the cloud provider.  # noqa: E501

        :param private_ssh_gateway: The private_ssh_gateway of this V1KubernetesClusterDriver.  # noqa: E501
        :type: bool
        """

        self._private_ssh_gateway = private_ssh_gateway

    @property
    def root_domain_name(self) -> 'str':
        """Gets the root_domain_name of this V1KubernetesClusterDriver.  # noqa: E501


        :return: The root_domain_name of this V1KubernetesClusterDriver.  # noqa: E501
        :rtype: str
        """
        return self._root_domain_name

    @root_domain_name.setter
    def root_domain_name(self, root_domain_name: 'str'):
        """Sets the root_domain_name of this V1KubernetesClusterDriver.


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

        self._root_domain_name = root_domain_name

    def to_dict(self) -> dict:
        """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(V1KubernetesClusterDriver, dict):
            for key, value in self.items():
                result[key] = value

        return result

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

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

    def __eq__(self, other: 'V1KubernetesClusterDriver') -> bool:
        """Returns true if both objects are equal"""
        if not isinstance(other, V1KubernetesClusterDriver):
            return False

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

    def __ne__(self, other: 'V1KubernetesClusterDriver') -> bool:
        """Returns true if both objects are not equal"""
        if not isinstance(other, V1KubernetesClusterDriver):
            return True

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