"""
This file is automatically generated.
Do not modify.
"""

try:
    from typing import Any, Optional, Union, List
except ImportError:
    pass

from .._helper import _omit, CrdObject, CrdObjectList, CrdClass

class Dashboard(CrdObject):
    _properties = [
        ('localAddr', 'localAddr', str, False, False)
    ]        

    def __init__(self,
                 localAddr=_omit,  # type: Optional[str]
                 ):
        super(Dashboard, self).__init__(
            localAddr=localAddr,
        )

    @property
    def localAddr(self):
        # type: () -> str
        return self._property_impl('localAddr')
    
    @localAddr.setter
    def localAddr(self, new_val):
        # type: (Optional[str]) -> None
        self._localAddr = new_val


class Network(CrdObject):
    _properties = [
        ('serverIfName', 'serverIfName', str, False, False),
        ('brokerIfName', 'brokerIfName', str, False, False)
    ]        

    def __init__(self,
                 serverIfName=_omit,  # type: Optional[str]
                 brokerIfName=_omit,  # type: Optional[str]
                 ):
        super(Network, self).__init__(
            serverIfName=serverIfName,
            brokerIfName=brokerIfName,
        )

    @property
    def serverIfName(self):
        # type: () -> str
        return self._property_impl('serverIfName')
    
    @serverIfName.setter
    def serverIfName(self, new_val):
        # type: (Optional[str]) -> None
        self._serverIfName = new_val
    
    @property
    def brokerIfName(self):
        # type: () -> str
        return self._property_impl('brokerIfName')
    
    @brokerIfName.setter
    def brokerIfName(self, new_val):
        # type: (Optional[str]) -> None
        self._brokerIfName = new_val


class NodesList(CrdObjectList):
    _items_type = None


class Storage(CrdObject):
    _properties = [
        ('nodes', 'nodes', NodesList, False, False),
        ('useAllDevices', 'useAllDevices', object, False, False),
        ('useAllNodes', 'useAllNodes', bool, False, False)
    ]        

    def __init__(self,
                 nodes=_omit,  # type: Optional[Union[List[Any], CrdObjectList]]
                 useAllDevices=_omit,  # type: Optional[Any]
                 useAllNodes=_omit,  # type: Optional[bool]
                 ):
        super(Storage, self).__init__(
            nodes=nodes,
            useAllDevices=useAllDevices,
            useAllNodes=useAllNodes,
        )

    @property
    def nodes(self):
        # type: () -> Union[List[Any], CrdObjectList]
        return self._property_impl('nodes')
    
    @nodes.setter
    def nodes(self, new_val):
        # type: (Optional[Union[List[Any], CrdObjectList]]) -> None
        self._nodes = new_val
    
    @property
    def useAllDevices(self):
        # type: () -> Any
        return self._property_impl('useAllDevices')
    
    @useAllDevices.setter
    def useAllDevices(self, new_val):
        # type: (Optional[Any]) -> None
        self._useAllDevices = new_val
    
    @property
    def useAllNodes(self):
        # type: () -> bool
        return self._property_impl('useAllNodes')
    
    @useAllNodes.setter
    def useAllNodes(self, new_val):
        # type: (Optional[bool]) -> None
        self._useAllNodes = new_val


class Spec(CrdObject):
    _properties = [
        ('edgefsImageName', 'edgefsImageName', str, True, False),
        ('dataDirHostPath', 'dataDirHostPath', str, True, False),
        ('devicesResurrectMode', 'devicesResurrectMode', str, False, False),
        ('dashboard', 'dashboard', Dashboard, False, False),
        ('network', 'network', Network, False, False),
        ('skipHostPrepare', 'skipHostPrepare', bool, False, False),
        ('storage', 'storage', Storage, False, False)
    ]        

    def __init__(self,
                 edgefsImageName,  # type: str
                 dataDirHostPath,  # type: str
                 devicesResurrectMode=_omit,  # type: Optional[str]
                 dashboard=_omit,  # type: Optional[Dashboard]
                 network=_omit,  # type: Optional[Network]
                 skipHostPrepare=_omit,  # type: Optional[bool]
                 storage=_omit,  # type: Optional[Storage]
                 ):
        super(Spec, self).__init__(
            edgefsImageName=edgefsImageName,
            dataDirHostPath=dataDirHostPath,
            devicesResurrectMode=devicesResurrectMode,
            dashboard=dashboard,
            network=network,
            skipHostPrepare=skipHostPrepare,
            storage=storage,
        )

    @property
    def edgefsImageName(self):
        # type: () -> str
        return self._property_impl('edgefsImageName')
    
    @edgefsImageName.setter
    def edgefsImageName(self, new_val):
        # type: (str) -> None
        self._edgefsImageName = new_val
    
    @property
    def dataDirHostPath(self):
        # type: () -> str
        return self._property_impl('dataDirHostPath')
    
    @dataDirHostPath.setter
    def dataDirHostPath(self, new_val):
        # type: (str) -> None
        self._dataDirHostPath = new_val
    
    @property
    def devicesResurrectMode(self):
        # type: () -> str
        return self._property_impl('devicesResurrectMode')
    
    @devicesResurrectMode.setter
    def devicesResurrectMode(self, new_val):
        # type: (Optional[str]) -> None
        self._devicesResurrectMode = new_val
    
    @property
    def dashboard(self):
        # type: () -> Dashboard
        return self._property_impl('dashboard')
    
    @dashboard.setter
    def dashboard(self, new_val):
        # type: (Optional[Dashboard]) -> None
        self._dashboard = new_val
    
    @property
    def network(self):
        # type: () -> Network
        return self._property_impl('network')
    
    @network.setter
    def network(self, new_val):
        # type: (Optional[Network]) -> None
        self._network = new_val
    
    @property
    def skipHostPrepare(self):
        # type: () -> bool
        return self._property_impl('skipHostPrepare')
    
    @skipHostPrepare.setter
    def skipHostPrepare(self, new_val):
        # type: (Optional[bool]) -> None
        self._skipHostPrepare = new_val
    
    @property
    def storage(self):
        # type: () -> Storage
        return self._property_impl('storage')
    
    @storage.setter
    def storage(self, new_val):
        # type: (Optional[Storage]) -> None
        self._storage = new_val


class Cluster(CrdClass):
    _properties = [
        ('apiVersion', 'apiVersion', str, True, False),
        ('metadata', 'metadata', object, True, False),
        ('status', 'status', object, False, False),
        ('spec', 'spec', Spec, True, False)
    ]        

    def __init__(self,
                 apiVersion,  # type: str
                 metadata,  # type: Any
                 spec,  # type: Spec
                 status=_omit,  # type: Optional[Any]
                 ):
        super(Cluster, self).__init__(
            apiVersion=apiVersion,
            metadata=metadata,
            spec=spec,
            status=status,
        )

    @property
    def apiVersion(self):
        # type: () -> str
        return self._property_impl('apiVersion')
    
    @apiVersion.setter
    def apiVersion(self, new_val):
        # type: (str) -> None
        self._apiVersion = new_val
    
    @property
    def metadata(self):
        # type: () -> Any
        return self._property_impl('metadata')
    
    @metadata.setter
    def metadata(self, new_val):
        # type: (Any) -> None
        self._metadata = new_val
    
    @property
    def status(self):
        # type: () -> Any
        return self._property_impl('status')
    
    @status.setter
    def status(self, new_val):
        # type: (Optional[Any]) -> None
        self._status = new_val
    
    @property
    def spec(self):
        # type: () -> Spec
        return self._property_impl('spec')
    
    @spec.setter
    def spec(self, new_val):
        # type: (Spec) -> None
        self._spec = new_val
