"""
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 Gateway(CrdObject):
    _properties = [
        ('type', 'type', str, False, False),
        ('sslCertificateRef', 'sslCertificateRef', object, False, False),
        ('port', 'port', int, False, False),
        ('securePort', 'securePort', object, False, False),
        ('instances', 'instances', int, False, False),
        ('annotations', 'annotations', object, False, False),
        ('placement', 'placement', object, False, False),
        ('resources', 'resources', object, False, False)
    ]        

    def __init__(self,
                 type=_omit,  # type: Optional[str]
                 sslCertificateRef=_omit,  # type: Optional[Any]
                 port=_omit,  # type: Optional[int]
                 securePort=_omit,  # type: Optional[Any]
                 instances=_omit,  # type: Optional[int]
                 annotations=_omit,  # type: Optional[Any]
                 placement=_omit,  # type: Optional[Any]
                 resources=_omit,  # type: Optional[Any]
                 ):
        super(Gateway, self).__init__(
            type=type,
            sslCertificateRef=sslCertificateRef,
            port=port,
            securePort=securePort,
            instances=instances,
            annotations=annotations,
            placement=placement,
            resources=resources,
        )

    @property
    def type(self):
        # type: () -> str
        return self._property_impl('type')
    
    @type.setter
    def type(self, new_val):
        # type: (Optional[str]) -> None
        self._type = new_val
    
    @property
    def sslCertificateRef(self):
        # type: () -> Any
        return self._property_impl('sslCertificateRef')
    
    @sslCertificateRef.setter
    def sslCertificateRef(self, new_val):
        # type: (Optional[Any]) -> None
        self._sslCertificateRef = new_val
    
    @property
    def port(self):
        # type: () -> int
        return self._property_impl('port')
    
    @port.setter
    def port(self, new_val):
        # type: (Optional[int]) -> None
        self._port = new_val
    
    @property
    def securePort(self):
        # type: () -> Any
        return self._property_impl('securePort')
    
    @securePort.setter
    def securePort(self, new_val):
        # type: (Optional[Any]) -> None
        self._securePort = new_val
    
    @property
    def instances(self):
        # type: () -> int
        return self._property_impl('instances')
    
    @instances.setter
    def instances(self, new_val):
        # type: (Optional[int]) -> None
        self._instances = new_val
    
    @property
    def annotations(self):
        # type: () -> Any
        return self._property_impl('annotations')
    
    @annotations.setter
    def annotations(self, new_val):
        # type: (Optional[Any]) -> None
        self._annotations = new_val
    
    @property
    def placement(self):
        # type: () -> Any
        return self._property_impl('placement')
    
    @placement.setter
    def placement(self, new_val):
        # type: (Optional[Any]) -> None
        self._placement = new_val
    
    @property
    def resources(self):
        # type: () -> Any
        return self._property_impl('resources')
    
    @resources.setter
    def resources(self, new_val):
        # type: (Optional[Any]) -> None
        self._resources = new_val


class Replicated(CrdObject):
    _properties = [
        ('size', 'size', int, False, False)
    ]        

    def __init__(self,
                 size=_omit,  # type: Optional[int]
                 ):
        super(Replicated, self).__init__(
            size=size,
        )

    @property
    def size(self):
        # type: () -> int
        return self._property_impl('size')
    
    @size.setter
    def size(self, new_val):
        # type: (Optional[int]) -> None
        self._size = new_val


class ErasureCoded(CrdObject):
    _properties = [
        ('dataChunks', 'dataChunks', int, False, False),
        ('codingChunks', 'codingChunks', int, False, False)
    ]        

    def __init__(self,
                 dataChunks=_omit,  # type: Optional[int]
                 codingChunks=_omit,  # type: Optional[int]
                 ):
        super(ErasureCoded, self).__init__(
            dataChunks=dataChunks,
            codingChunks=codingChunks,
        )

    @property
    def dataChunks(self):
        # type: () -> int
        return self._property_impl('dataChunks')
    
    @dataChunks.setter
    def dataChunks(self, new_val):
        # type: (Optional[int]) -> None
        self._dataChunks = new_val
    
    @property
    def codingChunks(self):
        # type: () -> int
        return self._property_impl('codingChunks')
    
    @codingChunks.setter
    def codingChunks(self, new_val):
        # type: (Optional[int]) -> None
        self._codingChunks = new_val


class MetadataPool(CrdObject):
    _properties = [
        ('failureDomain', 'failureDomain', str, False, False),
        ('replicated', 'replicated', Replicated, False, False),
        ('erasureCoded', 'erasureCoded', ErasureCoded, False, False)
    ]        

    def __init__(self,
                 failureDomain=_omit,  # type: Optional[str]
                 replicated=_omit,  # type: Optional[Replicated]
                 erasureCoded=_omit,  # type: Optional[ErasureCoded]
                 ):
        super(MetadataPool, self).__init__(
            failureDomain=failureDomain,
            replicated=replicated,
            erasureCoded=erasureCoded,
        )

    @property
    def failureDomain(self):
        # type: () -> str
        return self._property_impl('failureDomain')
    
    @failureDomain.setter
    def failureDomain(self, new_val):
        # type: (Optional[str]) -> None
        self._failureDomain = new_val
    
    @property
    def replicated(self):
        # type: () -> Replicated
        return self._property_impl('replicated')
    
    @replicated.setter
    def replicated(self, new_val):
        # type: (Optional[Replicated]) -> None
        self._replicated = new_val
    
    @property
    def erasureCoded(self):
        # type: () -> ErasureCoded
        return self._property_impl('erasureCoded')
    
    @erasureCoded.setter
    def erasureCoded(self, new_val):
        # type: (Optional[ErasureCoded]) -> None
        self._erasureCoded = new_val


class DataPool(CrdObject):
    _properties = [
        ('failureDomain', 'failureDomain', str, False, False),
        ('replicated', 'replicated', Replicated, False, False),
        ('erasureCoded', 'erasureCoded', ErasureCoded, False, False)
    ]        

    def __init__(self,
                 failureDomain=_omit,  # type: Optional[str]
                 replicated=_omit,  # type: Optional[Replicated]
                 erasureCoded=_omit,  # type: Optional[ErasureCoded]
                 ):
        super(DataPool, self).__init__(
            failureDomain=failureDomain,
            replicated=replicated,
            erasureCoded=erasureCoded,
        )

    @property
    def failureDomain(self):
        # type: () -> str
        return self._property_impl('failureDomain')
    
    @failureDomain.setter
    def failureDomain(self, new_val):
        # type: (Optional[str]) -> None
        self._failureDomain = new_val
    
    @property
    def replicated(self):
        # type: () -> Replicated
        return self._property_impl('replicated')
    
    @replicated.setter
    def replicated(self, new_val):
        # type: (Optional[Replicated]) -> None
        self._replicated = new_val
    
    @property
    def erasureCoded(self):
        # type: () -> ErasureCoded
        return self._property_impl('erasureCoded')
    
    @erasureCoded.setter
    def erasureCoded(self, new_val):
        # type: (Optional[ErasureCoded]) -> None
        self._erasureCoded = new_val


class Spec(CrdObject):
    _properties = [
        ('gateway', 'gateway', Gateway, False, False),
        ('metadataPool', 'metadataPool', MetadataPool, False, False),
        ('dataPool', 'dataPool', DataPool, False, False),
        ('preservePoolsOnDelete', 'preservePoolsOnDelete', bool, False, False)
    ]        

    def __init__(self,
                 gateway=_omit,  # type: Optional[Gateway]
                 metadataPool=_omit,  # type: Optional[MetadataPool]
                 dataPool=_omit,  # type: Optional[DataPool]
                 preservePoolsOnDelete=_omit,  # type: Optional[bool]
                 ):
        super(Spec, self).__init__(
            gateway=gateway,
            metadataPool=metadataPool,
            dataPool=dataPool,
            preservePoolsOnDelete=preservePoolsOnDelete,
        )

    @property
    def gateway(self):
        # type: () -> Gateway
        return self._property_impl('gateway')
    
    @gateway.setter
    def gateway(self, new_val):
        # type: (Optional[Gateway]) -> None
        self._gateway = new_val
    
    @property
    def metadataPool(self):
        # type: () -> MetadataPool
        return self._property_impl('metadataPool')
    
    @metadataPool.setter
    def metadataPool(self, new_val):
        # type: (Optional[MetadataPool]) -> None
        self._metadataPool = new_val
    
    @property
    def dataPool(self):
        # type: () -> DataPool
        return self._property_impl('dataPool')
    
    @dataPool.setter
    def dataPool(self, new_val):
        # type: (Optional[DataPool]) -> None
        self._dataPool = new_val
    
    @property
    def preservePoolsOnDelete(self):
        # type: () -> bool
        return self._property_impl('preservePoolsOnDelete')
    
    @preservePoolsOnDelete.setter
    def preservePoolsOnDelete(self, new_val):
        # type: (Optional[bool]) -> None
        self._preservePoolsOnDelete = new_val


class CephObjectStore(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(CephObjectStore, 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
