# type: (str, str, int, int) -> str
data_dir_base = os.path.join(data_dir, fsid)
makedirs(data_dir_base, uid, gid, DATA_DIR_MODE)
- makedirs(os.path.join(data_dir_base, 'crash'), uid, gid, DATA_DIR_MODE)
- makedirs(os.path.join(data_dir_base, 'crash', 'posted'), uid, gid,
- DATA_DIR_MODE)
return data_dir_base
-from .ceph import Ceph, OSD, CephExporter
+from .ceph import Ceph, OSD, CephExporter, Crash
from .custom import CustomContainer
from .ingress import HAproxy, Keepalived
from .iscsi import CephIscsi
__all__ = [
'Ceph',
'CephExporter',
+ 'Crash',
'CephIscsi',
'CephNvmeof',
'CustomContainer',
)
from ..daemon_form import register as register_daemon_form
from ..daemon_identity import DaemonIdentity
-from ..constants import DEFAULT_IMAGE
+from ..constants import (
+ DEFAULT_IMAGE,
+ DATA_DIR_MODE,
+)
from ..context import CephadmContext
from ..deployment_utils import to_deployment_container
from ..exceptions import Error
@classmethod
def for_daemon_type(cls, daemon_type: str) -> bool:
# TODO: figure out a way to un-special-case osd
- return daemon_type in cls._daemons and daemon_type != 'osd'
+ return daemon_type in cls._daemons and daemon_type not in ('osd', 'crash')
def __init__(self, ctx: CephadmContext, ident: DaemonIdentity) -> None:
self.ctx = ctx
def osd_fsid(self) -> Optional[str]:
return self._osd_fsid
+@register_daemon_form
+class Crash(Ceph):
+ @classmethod
+ def for_daemon_type(cls, daemon_type: str) -> bool:
+ return daemon_type == 'crash'
+
+ def __init__(
+ self,
+ ctx: CephadmContext,
+ ident: DaemonIdentity,
+ ) -> None:
+ super().__init__(ctx, ident)
+
+ @classmethod
+ def create(cls, ctx: CephadmContext, ident: DaemonIdentity) -> 'Ceph':
+ (uid, gid) = extract_uid_gid(ctx)
+ data_dir_base = f'{ctx.data_dir}/{ident.fsid}'
+ makedirs(os.path.join(data_dir_base, 'crash'), uid, gid, DATA_DIR_MODE)
+ makedirs(os.path.join(data_dir_base, 'crash', 'posted'), uid, gid,
+ DATA_DIR_MODE)
+ return cls(ctx, ident)
@register_daemon_form
class CephExporter(ContainerDaemonForm):