from ceph.deployment import inventory, translate
from ceph.deployment.drive_group import DriveGroupSpec
from ceph.deployment.drive_selection import selector
-from ceph.deployment.service_spec import HostPlacementSpec, ServiceSpec
+from ceph.deployment.service_spec import HostPlacementSpec, ServiceSpec, PlacementSpec
from mgr_module import MgrModule
import orchestrator
if spec.placement.is_empty():
# fill in default placement
defaults = {
- 'mon': orchestrator.PlacementSpec(count=5),
- 'mgr': orchestrator.PlacementSpec(count=2),
- 'mds': orchestrator.PlacementSpec(count=2),
- 'rgw': orchestrator.PlacementSpec(count=2),
- 'rbd-mirror': orchestrator.PlacementSpec(count=2),
- 'grafana': orchestrator.PlacementSpec(count=1),
- 'alertmanager': orchestrator.PlacementSpec(count=1),
- 'prometheus': orchestrator.PlacementSpec(count=1),
- 'node-exporter': orchestrator.PlacementSpec(all_hosts=True),
- 'crash': orchestrator.PlacementSpec(all_hosts=True),
+ 'mon': PlacementSpec(count=5),
+ 'mgr': PlacementSpec(count=2),
+ 'mds': PlacementSpec(count=2),
+ 'rgw': PlacementSpec(count=2),
+ 'rbd-mirror': PlacementSpec(count=2),
+ 'grafana': PlacementSpec(count=1),
+ 'alertmanager': PlacementSpec(count=1),
+ 'prometheus': PlacementSpec(count=1),
+ 'node-exporter': PlacementSpec(all_hosts=True),
+ 'crash': PlacementSpec(all_hosts=True),
}
spec.placement = defaults[spec.service_type]
self.log.info('Saving service %s spec with placement %s' % (
"""
def __init__(self, placement_spec):
- # type: (orchestrator.PlacementSpec) -> None
+ # type: (PlacementSpec) -> None
self.placement_spec = placement_spec
def place(self, host_pool, count=None):
self.service_name = spec.service_name()
def place(self):
- # type: () -> List[orchestrator.HostPlacementSpec]
+ # type: () -> List[HostPlacementSpec]
"""
Load hosts into the spec.placement.hosts container.
"""
import os
from ceph.deployment import inventory
+from ceph.deployment.service_spec import ServiceSpec, NFSServiceSpec, RGWSpec
try:
from typing import List, Dict, Optional, Callable, Any
)
def add_mds(self, spec):
- # type: (orchestrator.ServiceSpec) -> RookCompletion
+ # type: (ServiceSpec) -> RookCompletion
return self._service_add_decorate('MDS', spec,
self.rook_cluster.add_filesystem)
def add_rgw(self, spec):
- # type: (orchestrator.RGWSpec) -> RookCompletion
+ # type: (RGWSpec) -> RookCompletion
return self._service_add_decorate('RGW', spec,
self.rook_cluster.add_objectstore)
def add_nfs(self, spec):
- # type: (orchestrator.NFSServiceSpec) -> RookCompletion
+ # type: (NFSServiceSpec) -> RookCompletion
return self._service_add_decorate("NFS", spec,
self.rook_cluster.add_nfsgw)
)
def apply_mon(self, spec):
- # type: (orchestrator.ServiceSpec) -> RookCompletion
+ # type: (ServiceSpec) -> RookCompletion
if spec.placement.hosts or spec.placement.label:
raise RuntimeError("Host list or label is not supported by rook.")
)
def apply_mds(self, spec):
- # type: (orchestrator.ServiceSpec) -> RookCompletion
+ # type: (ServiceSpec) -> RookCompletion
num = spec.placement.count
return write_completion(
lambda: self.rook_cluster.update_mds_count(spec.service_id, num),
)
def apply_nfs(self, spec):
- # type: (orchestrator.NFSServiceSpec) -> RookCompletion
+ # type: (NFSServiceSpec) -> RookCompletion
num = spec.placement.count
return write_completion(
lambda: self.rook_cluster.update_nfs_count(spec.service_id, num),
from urllib3.exceptions import ProtocolError
from ceph.deployment.drive_group import DriveGroupSpec
+from ceph.deployment.service_spec import ServiceSpec
from mgr_util import merge_dicts
try:
raise
def add_filesystem(self, spec):
- # type: (orchestrator.ServiceSpec) -> None
+ # type: (ServiceSpec) -> None
# TODO use spec.placement
# TODO warn if spec.extended has entries we don't kow how
# to action.
import functools
import itertools
from subprocess import check_output, CalledProcessError
+
+from ceph.deployment.service_spec import NFSServiceSpec, ServiceSpec
+
try:
from typing import Callable, List, Tuple
except ImportError:
@deferred_write("Adding NFS service")
def add_nfs(self, spec):
- # type: (orchestrator.NFSServiceSpec) -> None
+ # type: (NFSServiceSpec) -> None
assert isinstance(spec.pool, str)
@deferred_write("apply_nfs")
@deferred_write("apply_mgr")
def apply_mgr(self, spec):
- # type: (orchestrator.ServiceSpec) -> None
+ # type: (ServiceSpec) -> None
assert not spec.placement.hosts or len(spec.placement.hosts) == spec.placement.count
assert all([isinstance(h, str) for h in spec.placement.hosts])
@deferred_write("apply_mon")
def apply_mon(self, spec):
- # type: (orchestrator.ServiceSpec) -> None
+ # type: (ServiceSpec) -> None
assert not spec.placement.hosts or len(spec.placement.hosts) == spec.placement.count
assert all([isinstance(h[0], str) for h in spec.placement.hosts])
import errno
import logging
+from ceph.deployment.service_spec import ServiceSpec, PlacementSpec
+
import cephfs
import orchestrator
return mgr.mon_command(command)
def create_mds(mgr, fs_name, placement):
- spec = orchestrator.ServiceSpec(service_type='mds',
+ spec = ServiceSpec(service_type='mds',
service_id=fs_name,
- placement=orchestrator.PlacementSpec.from_string(placement))
+ placement=PlacementSpec.from_string(placement))
try:
completion = mgr.apply_mds(spec)
mgr._orchestrator_wait([completion])