"""
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 ErasureCoded(CrdObject):
    _properties = [
        ('algorithm', 'algorithm', str, False, False),
        ('codingChunks', 'codingChunks', int, True, False),
        ('dataChunks', 'dataChunks', int, True, False)
    ]        

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

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


class SnapshotSchedulesItem(CrdObject):
    _properties = [
        ('image', 'image', str, False, False),
        ('items', 'items', 'ItemsList', False, False),
        ('namespace', 'namespace', str, False, False),
        ('pool', 'pool', str, False, False),
        ('interval', 'interval', str, False, False),
        ('startTime', 'startTime', str, False, False)
    ]        

    def __init__(self,
                 image=_omit,  # type: Optional[str]
                 items=_omit,  # type: Optional[Union[List[ItemsItem], CrdObjectList]]
                 namespace=_omit,  # type: Optional[str]
                 pool=_omit,  # type: Optional[str]
                 interval=_omit,  # type: Optional[str]
                 startTime=_omit,  # type: Optional[str]
                 ):
        super(SnapshotSchedulesItem, self).__init__(
            image=image,
            items=items,
            namespace=namespace,
            pool=pool,
            interval=interval,
            startTime=startTime,
        )

    @property
    def image(self):
        # type: () -> str
        return self._property_impl('image')
    
    @image.setter
    def image(self, new_val):
        # type: (Optional[str]) -> None
        self._image = new_val
    
    @property
    def items(self):
        # type: () -> Union[List[ItemsItem], CrdObjectList]
        return self._property_impl('items')
    
    @items.setter
    def items(self, new_val):
        # type: (Optional[Union[List[ItemsItem], CrdObjectList]]) -> None
        self._items = new_val
    
    @property
    def namespace(self):
        # type: () -> str
        return self._property_impl('namespace')
    
    @namespace.setter
    def namespace(self, new_val):
        # type: (Optional[str]) -> None
        self._namespace = new_val
    
    @property
    def pool(self):
        # type: () -> str
        return self._property_impl('pool')
    
    @pool.setter
    def pool(self, new_val):
        # type: (Optional[str]) -> None
        self._pool = new_val
    
    @property
    def interval(self):
        # type: () -> str
        return self._property_impl('interval')
    
    @interval.setter
    def interval(self, new_val):
        # type: (Optional[str]) -> None
        self._interval = new_val
    
    @property
    def startTime(self):
        # type: () -> str
        return self._property_impl('startTime')
    
    @startTime.setter
    def startTime(self, new_val):
        # type: (Optional[str]) -> None
        self._startTime = new_val


class SnapshotSchedulesList(CrdObjectList):
    _items_type = SnapshotSchedulesItem


class Mirroring(CrdObject):
    _properties = [
        ('enabled', 'enabled', bool, False, False),
        ('mode', 'mode', str, False, False),
        ('snapshotSchedules', 'snapshotSchedules', 'SnapshotSchedulesList', False, False)
    ]        

    def __init__(self,
                 enabled=_omit,  # type: Optional[bool]
                 mode=_omit,  # type: Optional[str]
                 snapshotSchedules=_omit,  # type: Optional[Union[List[SnapshotSchedulesItem], CrdObjectList]]
                 ):
        super(Mirroring, self).__init__(
            enabled=enabled,
            mode=mode,
            snapshotSchedules=snapshotSchedules,
        )

    @property
    def enabled(self):
        # type: () -> bool
        return self._property_impl('enabled')
    
    @enabled.setter
    def enabled(self, new_val):
        # type: (Optional[bool]) -> None
        self._enabled = new_val
    
    @property
    def mode(self):
        # type: () -> str
        return self._property_impl('mode')
    
    @mode.setter
    def mode(self, new_val):
        # type: (Optional[str]) -> None
        self._mode = new_val
    
    @property
    def snapshotSchedules(self):
        # type: () -> Union[List[SnapshotSchedulesItem], CrdObjectList]
        return self._property_impl('snapshotSchedules')
    
    @snapshotSchedules.setter
    def snapshotSchedules(self, new_val):
        # type: (Optional[Union[List[SnapshotSchedulesItem], CrdObjectList]]) -> None
        self._snapshotSchedules = new_val


class Quotas(CrdObject):
    _properties = [
        ('maxBytes', 'maxBytes', int, False, False),
        ('maxObjects', 'maxObjects', int, False, False),
        ('maxSize', 'maxSize', str, False, False)
    ]        

    def __init__(self,
                 maxBytes=_omit,  # type: Optional[int]
                 maxObjects=_omit,  # type: Optional[int]
                 maxSize=_omit,  # type: Optional[str]
                 ):
        super(Quotas, self).__init__(
            maxBytes=maxBytes,
            maxObjects=maxObjects,
            maxSize=maxSize,
        )

    @property
    def maxBytes(self):
        # type: () -> int
        return self._property_impl('maxBytes')
    
    @maxBytes.setter
    def maxBytes(self, new_val):
        # type: (Optional[int]) -> None
        self._maxBytes = new_val
    
    @property
    def maxObjects(self):
        # type: () -> int
        return self._property_impl('maxObjects')
    
    @maxObjects.setter
    def maxObjects(self, new_val):
        # type: (Optional[int]) -> None
        self._maxObjects = new_val
    
    @property
    def maxSize(self):
        # type: () -> str
        return self._property_impl('maxSize')
    
    @maxSize.setter
    def maxSize(self, new_val):
        # type: (Optional[str]) -> None
        self._maxSize = new_val


class Replicated(CrdObject):
    _properties = [
        ('replicasPerFailureDomain', 'replicasPerFailureDomain', int, False, False),
        ('requireSafeReplicaSize', 'requireSafeReplicaSize', bool, False, False),
        ('size', 'size', int, True, False),
        ('subFailureDomain', 'subFailureDomain', str, False, False),
        ('targetSizeRatio', 'targetSizeRatio', float, False, False)
    ]        

    def __init__(self,
                 size,  # type: int
                 replicasPerFailureDomain=_omit,  # type: Optional[int]
                 requireSafeReplicaSize=_omit,  # type: Optional[bool]
                 subFailureDomain=_omit,  # type: Optional[str]
                 targetSizeRatio=_omit,  # type: Optional[float]
                 ):
        super(Replicated, self).__init__(
            size=size,
            replicasPerFailureDomain=replicasPerFailureDomain,
            requireSafeReplicaSize=requireSafeReplicaSize,
            subFailureDomain=subFailureDomain,
            targetSizeRatio=targetSizeRatio,
        )

    @property
    def replicasPerFailureDomain(self):
        # type: () -> int
        return self._property_impl('replicasPerFailureDomain')
    
    @replicasPerFailureDomain.setter
    def replicasPerFailureDomain(self, new_val):
        # type: (Optional[int]) -> None
        self._replicasPerFailureDomain = new_val
    
    @property
    def requireSafeReplicaSize(self):
        # type: () -> bool
        return self._property_impl('requireSafeReplicaSize')
    
    @requireSafeReplicaSize.setter
    def requireSafeReplicaSize(self, new_val):
        # type: (Optional[bool]) -> None
        self._requireSafeReplicaSize = new_val
    
    @property
    def size(self):
        # type: () -> int
        return self._property_impl('size')
    
    @size.setter
    def size(self, new_val):
        # type: (int) -> None
        self._size = new_val
    
    @property
    def subFailureDomain(self):
        # type: () -> str
        return self._property_impl('subFailureDomain')
    
    @subFailureDomain.setter
    def subFailureDomain(self, new_val):
        # type: (Optional[str]) -> None
        self._subFailureDomain = new_val
    
    @property
    def targetSizeRatio(self):
        # type: () -> float
        return self._property_impl('targetSizeRatio')
    
    @targetSizeRatio.setter
    def targetSizeRatio(self, new_val):
        # type: (Optional[float]) -> None
        self._targetSizeRatio = new_val


class Mirror(CrdObject):
    _properties = [
        ('disabled', 'disabled', bool, False, False),
        ('interval', 'interval', str, False, False),
        ('timeout', 'timeout', str, False, False)
    ]        

    def __init__(self,
                 disabled=_omit,  # type: Optional[bool]
                 interval=_omit,  # type: Optional[str]
                 timeout=_omit,  # type: Optional[str]
                 ):
        super(Mirror, self).__init__(
            disabled=disabled,
            interval=interval,
            timeout=timeout,
        )

    @property
    def disabled(self):
        # type: () -> bool
        return self._property_impl('disabled')
    
    @disabled.setter
    def disabled(self, new_val):
        # type: (Optional[bool]) -> None
        self._disabled = new_val
    
    @property
    def interval(self):
        # type: () -> str
        return self._property_impl('interval')
    
    @interval.setter
    def interval(self, new_val):
        # type: (Optional[str]) -> None
        self._interval = new_val
    
    @property
    def timeout(self):
        # type: () -> str
        return self._property_impl('timeout')
    
    @timeout.setter
    def timeout(self, new_val):
        # type: (Optional[str]) -> None
        self._timeout = new_val


class StatusCheck(CrdObject):
    _properties = [
        ('mirror', 'mirror', 'Mirror', False, True)
    ]        

    def __init__(self,
                 mirror=_omit,  # type: Optional[Mirror]
                 ):
        super(StatusCheck, self).__init__(
            mirror=mirror,
        )

    @property
    def mirror(self):
        # type: () -> Optional[Mirror]
        return self._property_impl('mirror')
    
    @mirror.setter
    def mirror(self, new_val):
        # type: (Optional[Mirror]) -> None
        self._mirror = new_val


class Spec(CrdObject):
    _properties = [
        ('compressionMode', 'compressionMode', str, False, True),
        ('crushRoot', 'crushRoot', str, False, True),
        ('deviceClass', 'deviceClass', str, False, True),
        ('enableRBDStats', 'enableRBDStats', bool, False, False),
        ('erasureCoded', 'erasureCoded', 'ErasureCoded', False, False),
        ('failureDomain', 'failureDomain', str, False, False),
        ('mirroring', 'mirroring', 'Mirroring', False, False),
        ('parameters', 'parameters', object, False, True),
        ('quotas', 'quotas', 'Quotas', False, True),
        ('replicated', 'replicated', 'Replicated', False, False),
        ('statusCheck', 'statusCheck', 'StatusCheck', False, False)
    ]        

    def __init__(self,
                 compressionMode=_omit,  # type: Optional[str]
                 crushRoot=_omit,  # type: Optional[str]
                 deviceClass=_omit,  # type: Optional[str]
                 enableRBDStats=_omit,  # type: Optional[bool]
                 erasureCoded=_omit,  # type: Optional[ErasureCoded]
                 failureDomain=_omit,  # type: Optional[str]
                 mirroring=_omit,  # type: Optional[Mirroring]
                 parameters=_omit,  # type: Optional[Any]
                 quotas=_omit,  # type: Optional[Quotas]
                 replicated=_omit,  # type: Optional[Replicated]
                 statusCheck=_omit,  # type: Optional[StatusCheck]
                 ):
        super(Spec, self).__init__(
            compressionMode=compressionMode,
            crushRoot=crushRoot,
            deviceClass=deviceClass,
            enableRBDStats=enableRBDStats,
            erasureCoded=erasureCoded,
            failureDomain=failureDomain,
            mirroring=mirroring,
            parameters=parameters,
            quotas=quotas,
            replicated=replicated,
            statusCheck=statusCheck,
        )

    @property
    def compressionMode(self):
        # type: () -> Optional[str]
        return self._property_impl('compressionMode')
    
    @compressionMode.setter
    def compressionMode(self, new_val):
        # type: (Optional[str]) -> None
        self._compressionMode = new_val
    
    @property
    def crushRoot(self):
        # type: () -> Optional[str]
        return self._property_impl('crushRoot')
    
    @crushRoot.setter
    def crushRoot(self, new_val):
        # type: (Optional[str]) -> None
        self._crushRoot = new_val
    
    @property
    def deviceClass(self):
        # type: () -> Optional[str]
        return self._property_impl('deviceClass')
    
    @deviceClass.setter
    def deviceClass(self, new_val):
        # type: (Optional[str]) -> None
        self._deviceClass = new_val
    
    @property
    def enableRBDStats(self):
        # type: () -> bool
        return self._property_impl('enableRBDStats')
    
    @enableRBDStats.setter
    def enableRBDStats(self, new_val):
        # type: (Optional[bool]) -> None
        self._enableRBDStats = 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
    
    @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 mirroring(self):
        # type: () -> Mirroring
        return self._property_impl('mirroring')
    
    @mirroring.setter
    def mirroring(self, new_val):
        # type: (Optional[Mirroring]) -> None
        self._mirroring = new_val
    
    @property
    def parameters(self):
        # type: () -> Optional[Any]
        return self._property_impl('parameters')
    
    @parameters.setter
    def parameters(self, new_val):
        # type: (Optional[Any]) -> None
        self._parameters = new_val
    
    @property
    def quotas(self):
        # type: () -> Optional[Quotas]
        return self._property_impl('quotas')
    
    @quotas.setter
    def quotas(self, new_val):
        # type: (Optional[Quotas]) -> None
        self._quotas = 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 statusCheck(self):
        # type: () -> StatusCheck
        return self._property_impl('statusCheck')
    
    @statusCheck.setter
    def statusCheck(self, new_val):
        # type: (Optional[StatusCheck]) -> None
        self._statusCheck = new_val


class PeersItem(CrdObject):
    _properties = [
        ('client_name', 'client_name', str, False, False),
        ('direction', 'direction', str, False, False),
        ('mirror_uuid', 'mirror_uuid', str, False, False),
        ('site_name', 'site_name', str, False, False),
        ('uuid', 'uuid', str, False, False)
    ]        

    def __init__(self,
                 client_name=_omit,  # type: Optional[str]
                 direction=_omit,  # type: Optional[str]
                 mirror_uuid=_omit,  # type: Optional[str]
                 site_name=_omit,  # type: Optional[str]
                 uuid=_omit,  # type: Optional[str]
                 ):
        super(PeersItem, self).__init__(
            client_name=client_name,
            direction=direction,
            mirror_uuid=mirror_uuid,
            site_name=site_name,
            uuid=uuid,
        )

    @property
    def client_name(self):
        # type: () -> str
        return self._property_impl('client_name')
    
    @client_name.setter
    def client_name(self, new_val):
        # type: (Optional[str]) -> None
        self._client_name = new_val
    
    @property
    def direction(self):
        # type: () -> str
        return self._property_impl('direction')
    
    @direction.setter
    def direction(self, new_val):
        # type: (Optional[str]) -> None
        self._direction = new_val
    
    @property
    def mirror_uuid(self):
        # type: () -> str
        return self._property_impl('mirror_uuid')
    
    @mirror_uuid.setter
    def mirror_uuid(self, new_val):
        # type: (Optional[str]) -> None
        self._mirror_uuid = new_val
    
    @property
    def site_name(self):
        # type: () -> str
        return self._property_impl('site_name')
    
    @site_name.setter
    def site_name(self, new_val):
        # type: (Optional[str]) -> None
        self._site_name = new_val
    
    @property
    def uuid(self):
        # type: () -> str
        return self._property_impl('uuid')
    
    @uuid.setter
    def uuid(self, new_val):
        # type: (Optional[str]) -> None
        self._uuid = new_val


class PeersList(CrdObjectList):
    _items_type = PeersItem


class MirroringInfo(CrdObject):
    _properties = [
        ('details', 'details', str, False, False),
        ('lastChanged', 'lastChanged', str, False, False),
        ('lastChecked', 'lastChecked', str, False, False),
        ('mode', 'mode', str, False, False),
        ('peers', 'peers', 'PeersList', False, False),
        ('site_name', 'site_name', str, False, False)
    ]        

    def __init__(self,
                 details=_omit,  # type: Optional[str]
                 lastChanged=_omit,  # type: Optional[str]
                 lastChecked=_omit,  # type: Optional[str]
                 mode=_omit,  # type: Optional[str]
                 peers=_omit,  # type: Optional[Union[List[PeersItem], CrdObjectList]]
                 site_name=_omit,  # type: Optional[str]
                 ):
        super(MirroringInfo, self).__init__(
            details=details,
            lastChanged=lastChanged,
            lastChecked=lastChecked,
            mode=mode,
            peers=peers,
            site_name=site_name,
        )

    @property
    def details(self):
        # type: () -> str
        return self._property_impl('details')
    
    @details.setter
    def details(self, new_val):
        # type: (Optional[str]) -> None
        self._details = new_val
    
    @property
    def lastChanged(self):
        # type: () -> str
        return self._property_impl('lastChanged')
    
    @lastChanged.setter
    def lastChanged(self, new_val):
        # type: (Optional[str]) -> None
        self._lastChanged = new_val
    
    @property
    def lastChecked(self):
        # type: () -> str
        return self._property_impl('lastChecked')
    
    @lastChecked.setter
    def lastChecked(self, new_val):
        # type: (Optional[str]) -> None
        self._lastChecked = new_val
    
    @property
    def mode(self):
        # type: () -> str
        return self._property_impl('mode')
    
    @mode.setter
    def mode(self, new_val):
        # type: (Optional[str]) -> None
        self._mode = new_val
    
    @property
    def peers(self):
        # type: () -> Union[List[PeersItem], CrdObjectList]
        return self._property_impl('peers')
    
    @peers.setter
    def peers(self, new_val):
        # type: (Optional[Union[List[PeersItem], CrdObjectList]]) -> None
        self._peers = new_val
    
    @property
    def site_name(self):
        # type: () -> str
        return self._property_impl('site_name')
    
    @site_name.setter
    def site_name(self, new_val):
        # type: (Optional[str]) -> None
        self._site_name = new_val


class States(CrdObject):
    _properties = [
        ('error', 'error', int, False, False),
        ('replaying', 'replaying', int, False, False),
        ('starting_replay', 'starting_replay', int, False, False),
        ('stopped', 'stopped', int, False, False),
        ('stopping_replay', 'stopping_replay', int, False, False),
        ('syncing', 'syncing', int, False, False),
        ('unknown', 'unknown', int, False, False)
    ]        

    def __init__(self,
                 error=_omit,  # type: Optional[int]
                 replaying=_omit,  # type: Optional[int]
                 starting_replay=_omit,  # type: Optional[int]
                 stopped=_omit,  # type: Optional[int]
                 stopping_replay=_omit,  # type: Optional[int]
                 syncing=_omit,  # type: Optional[int]
                 unknown=_omit,  # type: Optional[int]
                 ):
        super(States, self).__init__(
            error=error,
            replaying=replaying,
            starting_replay=starting_replay,
            stopped=stopped,
            stopping_replay=stopping_replay,
            syncing=syncing,
            unknown=unknown,
        )

    @property
    def error(self):
        # type: () -> int
        return self._property_impl('error')
    
    @error.setter
    def error(self, new_val):
        # type: (Optional[int]) -> None
        self._error = new_val
    
    @property
    def replaying(self):
        # type: () -> int
        return self._property_impl('replaying')
    
    @replaying.setter
    def replaying(self, new_val):
        # type: (Optional[int]) -> None
        self._replaying = new_val
    
    @property
    def starting_replay(self):
        # type: () -> int
        return self._property_impl('starting_replay')
    
    @starting_replay.setter
    def starting_replay(self, new_val):
        # type: (Optional[int]) -> None
        self._starting_replay = new_val
    
    @property
    def stopped(self):
        # type: () -> int
        return self._property_impl('stopped')
    
    @stopped.setter
    def stopped(self, new_val):
        # type: (Optional[int]) -> None
        self._stopped = new_val
    
    @property
    def stopping_replay(self):
        # type: () -> int
        return self._property_impl('stopping_replay')
    
    @stopping_replay.setter
    def stopping_replay(self, new_val):
        # type: (Optional[int]) -> None
        self._stopping_replay = new_val
    
    @property
    def syncing(self):
        # type: () -> int
        return self._property_impl('syncing')
    
    @syncing.setter
    def syncing(self, new_val):
        # type: (Optional[int]) -> None
        self._syncing = new_val
    
    @property
    def unknown(self):
        # type: () -> int
        return self._property_impl('unknown')
    
    @unknown.setter
    def unknown(self, new_val):
        # type: (Optional[int]) -> None
        self._unknown = new_val


class Summary(CrdObject):
    _properties = [
        ('daemon_health', 'daemon_health', str, False, False),
        ('health', 'health', str, False, False),
        ('image_health', 'image_health', str, False, False),
        ('states', 'states', 'States', False, True)
    ]        

    def __init__(self,
                 daemon_health=_omit,  # type: Optional[str]
                 health=_omit,  # type: Optional[str]
                 image_health=_omit,  # type: Optional[str]
                 states=_omit,  # type: Optional[States]
                 ):
        super(Summary, self).__init__(
            daemon_health=daemon_health,
            health=health,
            image_health=image_health,
            states=states,
        )

    @property
    def daemon_health(self):
        # type: () -> str
        return self._property_impl('daemon_health')
    
    @daemon_health.setter
    def daemon_health(self, new_val):
        # type: (Optional[str]) -> None
        self._daemon_health = new_val
    
    @property
    def health(self):
        # type: () -> str
        return self._property_impl('health')
    
    @health.setter
    def health(self, new_val):
        # type: (Optional[str]) -> None
        self._health = new_val
    
    @property
    def image_health(self):
        # type: () -> str
        return self._property_impl('image_health')
    
    @image_health.setter
    def image_health(self, new_val):
        # type: (Optional[str]) -> None
        self._image_health = new_val
    
    @property
    def states(self):
        # type: () -> Optional[States]
        return self._property_impl('states')
    
    @states.setter
    def states(self, new_val):
        # type: (Optional[States]) -> None
        self._states = new_val


class MirroringStatus(CrdObject):
    _properties = [
        ('details', 'details', str, False, False),
        ('lastChanged', 'lastChanged', str, False, False),
        ('lastChecked', 'lastChecked', str, False, False),
        ('summary', 'summary', 'Summary', False, False)
    ]        

    def __init__(self,
                 details=_omit,  # type: Optional[str]
                 lastChanged=_omit,  # type: Optional[str]
                 lastChecked=_omit,  # type: Optional[str]
                 summary=_omit,  # type: Optional[Summary]
                 ):
        super(MirroringStatus, self).__init__(
            details=details,
            lastChanged=lastChanged,
            lastChecked=lastChecked,
            summary=summary,
        )

    @property
    def details(self):
        # type: () -> str
        return self._property_impl('details')
    
    @details.setter
    def details(self, new_val):
        # type: (Optional[str]) -> None
        self._details = new_val
    
    @property
    def lastChanged(self):
        # type: () -> str
        return self._property_impl('lastChanged')
    
    @lastChanged.setter
    def lastChanged(self, new_val):
        # type: (Optional[str]) -> None
        self._lastChanged = new_val
    
    @property
    def lastChecked(self):
        # type: () -> str
        return self._property_impl('lastChecked')
    
    @lastChecked.setter
    def lastChecked(self, new_val):
        # type: (Optional[str]) -> None
        self._lastChecked = new_val
    
    @property
    def summary(self):
        # type: () -> Summary
        return self._property_impl('summary')
    
    @summary.setter
    def summary(self, new_val):
        # type: (Optional[Summary]) -> None
        self._summary = new_val


class ItemsItem(CrdObject):
    _properties = [
        ('interval', 'interval', str, False, False),
        ('start_time', 'start_time', str, False, False)
    ]        

    def __init__(self,
                 interval=_omit,  # type: Optional[str]
                 start_time=_omit,  # type: Optional[str]
                 ):
        super(ItemsItem, self).__init__(
            interval=interval,
            start_time=start_time,
        )

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


class ItemsList(CrdObjectList):
    _items_type = ItemsItem


class SnapshotScheduleStatus(CrdObject):
    _properties = [
        ('details', 'details', str, False, False),
        ('lastChanged', 'lastChanged', str, False, False),
        ('lastChecked', 'lastChecked', str, False, False),
        ('snapshotSchedules', 'snapshotSchedules', 'SnapshotSchedulesList', False, True)
    ]        

    def __init__(self,
                 details=_omit,  # type: Optional[str]
                 lastChanged=_omit,  # type: Optional[str]
                 lastChecked=_omit,  # type: Optional[str]
                 snapshotSchedules=_omit,  # type: Optional[Union[List[SnapshotSchedulesItem], CrdObjectList]]
                 ):
        super(SnapshotScheduleStatus, self).__init__(
            details=details,
            lastChanged=lastChanged,
            lastChecked=lastChecked,
            snapshotSchedules=snapshotSchedules,
        )

    @property
    def details(self):
        # type: () -> str
        return self._property_impl('details')
    
    @details.setter
    def details(self, new_val):
        # type: (Optional[str]) -> None
        self._details = new_val
    
    @property
    def lastChanged(self):
        # type: () -> str
        return self._property_impl('lastChanged')
    
    @lastChanged.setter
    def lastChanged(self, new_val):
        # type: (Optional[str]) -> None
        self._lastChanged = new_val
    
    @property
    def lastChecked(self):
        # type: () -> str
        return self._property_impl('lastChecked')
    
    @lastChecked.setter
    def lastChecked(self, new_val):
        # type: (Optional[str]) -> None
        self._lastChecked = new_val
    
    @property
    def snapshotSchedules(self):
        # type: () -> Optional[Union[List[SnapshotSchedulesItem], CrdObjectList]]
        return self._property_impl('snapshotSchedules')
    
    @snapshotSchedules.setter
    def snapshotSchedules(self, new_val):
        # type: (Optional[Union[List[SnapshotSchedulesItem], CrdObjectList]]) -> None
        self._snapshotSchedules = new_val


class Status(CrdObject):
    _properties = [
        ('info', 'info', object, False, True),
        ('mirroringInfo', 'mirroringInfo', 'MirroringInfo', False, False),
        ('mirroringStatus', 'mirroringStatus', 'MirroringStatus', False, False),
        ('phase', 'phase', str, False, False),
        ('snapshotScheduleStatus', 'snapshotScheduleStatus', 'SnapshotScheduleStatus', False, False)
    ]        

    def __init__(self,
                 info=_omit,  # type: Optional[Any]
                 mirroringInfo=_omit,  # type: Optional[MirroringInfo]
                 mirroringStatus=_omit,  # type: Optional[MirroringStatus]
                 phase=_omit,  # type: Optional[str]
                 snapshotScheduleStatus=_omit,  # type: Optional[SnapshotScheduleStatus]
                 ):
        super(Status, self).__init__(
            info=info,
            mirroringInfo=mirroringInfo,
            mirroringStatus=mirroringStatus,
            phase=phase,
            snapshotScheduleStatus=snapshotScheduleStatus,
        )

    @property
    def info(self):
        # type: () -> Optional[Any]
        return self._property_impl('info')
    
    @info.setter
    def info(self, new_val):
        # type: (Optional[Any]) -> None
        self._info = new_val
    
    @property
    def mirroringInfo(self):
        # type: () -> MirroringInfo
        return self._property_impl('mirroringInfo')
    
    @mirroringInfo.setter
    def mirroringInfo(self, new_val):
        # type: (Optional[MirroringInfo]) -> None
        self._mirroringInfo = new_val
    
    @property
    def mirroringStatus(self):
        # type: () -> MirroringStatus
        return self._property_impl('mirroringStatus')
    
    @mirroringStatus.setter
    def mirroringStatus(self, new_val):
        # type: (Optional[MirroringStatus]) -> None
        self._mirroringStatus = new_val
    
    @property
    def phase(self):
        # type: () -> str
        return self._property_impl('phase')
    
    @phase.setter
    def phase(self, new_val):
        # type: (Optional[str]) -> None
        self._phase = new_val
    
    @property
    def snapshotScheduleStatus(self):
        # type: () -> SnapshotScheduleStatus
        return self._property_impl('snapshotScheduleStatus')
    
    @snapshotScheduleStatus.setter
    def snapshotScheduleStatus(self, new_val):
        # type: (Optional[SnapshotScheduleStatus]) -> None
        self._snapshotScheduleStatus = new_val


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

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

    @property
    def apiVersion(self):
        # type: () -> str
        return self._property_impl('apiVersion')
    
    @apiVersion.setter
    def apiVersion(self, new_val):
        # type: (Optional[str]) -> None
        self._apiVersion = new_val
    
    @property
    def kind(self):
        # type: () -> str
        return self._property_impl('kind')
    
    @kind.setter
    def kind(self, new_val):
        # type: (Optional[str]) -> None
        self._kind = new_val
    
    @property
    def metadata(self):
        # type: () -> Any
        return self._property_impl('metadata')
    
    @metadata.setter
    def metadata(self, new_val):
        # type: (Optional[Any]) -> None
        self._metadata = 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
    
    @property
    def status(self):
        # type: () -> Status
        return self._property_impl('status')
    
    @status.setter
    def status(self, new_val):
        # type: (Optional[Status]) -> None
        self._status = new_val
