self.log.debug('Placing %s.%s on host %s' % (
daemon_type, daemon_id, host))
- self.cephadm_services[daemon_type].create(daemon_spec)
+ daemon_spec = self.cephadm_services[daemon_type].prepare_create(daemon_spec)
+
+ self._create_daemon(daemon_spec)
# add to daemon list so next name(s) will also be unique
sd = orchestrator.DaemonDescription(
self._get_cephadm_service(daemon_type).daemon_check_post(daemon_descs)
def _add_daemon(self, daemon_type, spec,
- create_func: Callable[..., T], config_func=None) -> List[T]:
+ create_func: Callable[..., CephadmDaemonSpec], config_func=None) -> List[str]:
"""
Add (and place) a daemon. Require explicit host placement. Do not
schedule, and do not apply the related scheduling limitations.
def _create_daemons(self, daemon_type, spec, daemons,
hosts, count,
- create_func: Callable[..., T], config_func=None) -> List[T]:
+ create_func: Callable[..., CephadmDaemonSpec], config_func=None) -> List[str]:
if count > len(hosts):
raise OrchestratorError('too few hosts: want %d, have %s' % (
count, hosts))
@forall_hosts
def create_func_map(*args):
- return create_func(*args)
+ daemon_spec = create_func(*args)
+ return self._create_daemon(daemon_spec)
return create_func_map(args)
@trivial_completion
def add_mon(self, spec):
# type: (ServiceSpec) -> List[str]
- return self._add_daemon('mon', spec, self.mon_service.create)
+ return self._add_daemon('mon', spec, self.mon_service.prepare_create)
@trivial_completion
def add_mgr(self, spec):
# type: (ServiceSpec) -> List[str]
- return self._add_daemon('mgr', spec, self.mgr_service.create)
+ return self._add_daemon('mgr', spec, self.mgr_service.prepare_create)
def _apply(self, spec: GenericSpec) -> str:
self.migration.verify_no_migration()
@trivial_completion
def add_mds(self, spec: ServiceSpec) -> List[str]:
- return self._add_daemon('mds', spec, self.mds_service.create, self.mds_service.config)
+ return self._add_daemon('mds', spec, self.mds_service.prepare_create, self.mds_service.config)
@trivial_completion
def apply_mds(self, spec: ServiceSpec) -> str:
@trivial_completion
def add_rgw(self, spec) -> List[str]:
- return self._add_daemon('rgw', spec, self.rgw_service.create, self.rgw_service.config)
+ return self._add_daemon('rgw', spec, self.rgw_service.prepare_create, self.rgw_service.config)
@trivial_completion
def apply_rgw(self, spec) -> str:
@trivial_completion
def add_iscsi(self, spec):
# type: (ServiceSpec) -> List[str]
- return self._add_daemon('iscsi', spec, self.iscsi_service.create, self.iscsi_service.config)
+ return self._add_daemon('iscsi', spec, self.iscsi_service.prepare_create, self.iscsi_service.config)
@trivial_completion
def apply_iscsi(self, spec) -> str:
@trivial_completion
def add_rbd_mirror(self, spec) -> List[str]:
- return self._add_daemon('rbd-mirror', spec, self.rbd_mirror_service.create)
+ return self._add_daemon('rbd-mirror', spec, self.rbd_mirror_service.prepare_create)
@trivial_completion
def apply_rbd_mirror(self, spec) -> str:
@trivial_completion
def add_nfs(self, spec) -> List[str]:
- return self._add_daemon('nfs', spec, self.nfs_service.create, self.nfs_service.config)
+ return self._add_daemon('nfs', spec, self.nfs_service.prepare_create, self.nfs_service.config)
@trivial_completion
def apply_nfs(self, spec) -> str:
@trivial_completion
def add_prometheus(self, spec) -> List[str]:
- return self._add_daemon('prometheus', spec, self.prometheus_service.create)
+ return self._add_daemon('prometheus', spec, self.prometheus_service.prepare_create)
@trivial_completion
def apply_prometheus(self, spec) -> str:
def add_node_exporter(self, spec):
# type: (ServiceSpec) -> List[str]
return self._add_daemon('node-exporter', spec,
- self.node_exporter_service.create)
+ self.node_exporter_service.prepare_create)
@trivial_completion
def apply_node_exporter(self, spec) -> str:
def add_crash(self, spec):
# type: (ServiceSpec) -> List[str]
return self._add_daemon('crash', spec,
- self.crash_service.create)
+ self.crash_service.prepare_create)
@trivial_completion
def apply_crash(self, spec) -> str:
@trivial_completion
def add_grafana(self, spec):
# type: (ServiceSpec) -> List[str]
- return self._add_daemon('grafana', spec, self.grafana_service.create)
+ return self._add_daemon('grafana', spec, self.grafana_service.prepare_create)
@trivial_completion
def apply_grafana(self, spec: ServiceSpec) -> str:
@trivial_completion
def add_alertmanager(self, spec):
# type: (ServiceSpec) -> List[str]
- return self._add_daemon('alertmanager', spec, self.alertmanager_service.create)
+ return self._add_daemon('alertmanager', spec, self.alertmanager_service.prepare_create)
@trivial_completion
def apply_alertmanager(self, spec: ServiceSpec) -> str:
network=netowrk
)
- def create(self, daemon_spec: CephadmDaemonSpec):
+ def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
raise NotImplementedError()
def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
class MonService(CephService):
TYPE = 'mon'
- def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+ def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
"""
Create a new monitor on the given host.
"""
daemon_spec.extra_config = {'config': extra_config}
daemon_spec.keyring = keyring
- return self.mgr._create_daemon(daemon_spec)
+ return daemon_spec
def _check_safe_to_destroy(self, mon_id: str) -> None:
ret, out, err = self.mgr.check_mon_command({
class MgrService(CephService):
TYPE = 'mgr'
- def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+ def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
"""
Create a new manager instance on a host.
"""
daemon_spec.keyring = keyring
- return self.mgr._create_daemon(daemon_spec)
+ return daemon_spec
def get_active_daemon(self, daemon_descrs: List[DaemonDescription]) -> DaemonDescription:
for daemon in daemon_descrs:
'value': spec.service_id,
})
- def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+ def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
assert self.TYPE == daemon_spec.daemon_type
mds_id, host = daemon_spec.daemon_id, daemon_spec.host
})
daemon_spec.keyring = keyring
- return self.mgr._create_daemon(daemon_spec)
+ return daemon_spec
def get_active_daemon(self, daemon_descrs: List[DaemonDescription]) -> DaemonDescription:
active_mds_strs = list()
spec.service_name(), spec.placement.pretty_str()))
self.mgr.spec_store.save(spec)
- def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+ def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
assert self.TYPE == daemon_spec.daemon_type
rgw_id, host = daemon_spec.daemon_id, daemon_spec.host
daemon_spec.keyring = keyring
- return self.mgr._create_daemon(daemon_spec)
+ return daemon_spec
def get_keyring(self, rgw_id: str):
ret, keyring, err = self.mgr.check_mon_command({
class RbdMirrorService(CephService):
TYPE = 'rbd-mirror'
- def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+ def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
assert self.TYPE == daemon_spec.daemon_type
daemon_id, host = daemon_spec.daemon_id, daemon_spec.host
daemon_spec.keyring = keyring
- return self.mgr._create_daemon(daemon_spec)
+ return daemon_spec
class CrashService(CephService):
TYPE = 'crash'
- def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+ def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
assert self.TYPE == daemon_spec.daemon_type
daemon_id, host = daemon_spec.daemon_id, daemon_spec.host
daemon_spec.keyring = keyring
- return self.mgr._create_daemon(daemon_spec)
+ return daemon_spec
spec.service_name(), spec.placement.pretty_str()))
self.mgr.spec_store.save(spec)
- def create(self, daemon_spec: CephadmDaemonSpec[IscsiServiceSpec]) -> str:
+ def prepare_create(self, daemon_spec: CephadmDaemonSpec[IscsiServiceSpec]) -> CephadmDaemonSpec:
assert self.TYPE == daemon_spec.daemon_type
assert daemon_spec.spec
daemon_spec.keyring = keyring
daemon_spec.extra_config = {'iscsi-gateway.cfg': igw_conf}
- return self.mgr._create_daemon(daemon_spec)
+ return daemon_spec
def config_dashboard(self, daemon_descrs: List[DaemonDescription]):
def get_set_cmd_dicts(out: str) -> List[dict]:
TYPE = 'grafana'
DEFAULT_SERVICE_PORT = 3000
- def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+ def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
assert self.TYPE == daemon_spec.daemon_type
- return self.mgr._create_daemon(daemon_spec)
+ return daemon_spec
def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
assert self.TYPE == daemon_spec.daemon_type
TYPE = 'alertmanager'
DEFAULT_SERVICE_PORT = 9093
- def create(self, daemon_spec: CephadmDaemonSpec[AlertManagerSpec]) -> str:
+ def prepare_create(self, daemon_spec: CephadmDaemonSpec[AlertManagerSpec]) -> CephadmDaemonSpec:
assert self.TYPE == daemon_spec.daemon_type
assert daemon_spec.spec
- return self.mgr._create_daemon(daemon_spec)
+ return daemon_spec
def generate_config(self, daemon_spec: CephadmDaemonSpec[AlertManagerSpec]) -> Tuple[Dict[str, Any], List[str]]:
assert self.TYPE == daemon_spec.daemon_type
def config_dashboard(self, daemon_descrs: List[DaemonDescription]):
dd = self.get_active_daemon(daemon_descrs)
- service_url = 'http://{}:{}'.format(self._inventory_get_addr(dd.hostname), self.DEFAULT_SERVICE_PORT)
+ service_url = 'http://{}:{}'.format(self._inventory_get_addr(dd.hostname),
+ self.DEFAULT_SERVICE_PORT)
self._set_service_url_on_dashboard(
'AlertManager',
'dashboard get-alertmanager-api-host',
TYPE = 'prometheus'
DEFAULT_SERVICE_PORT = 9095
- def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+ def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
assert self.TYPE == daemon_spec.daemon_type
- return self.mgr._create_daemon(daemon_spec)
+ return daemon_spec
def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
assert self.TYPE == daemon_spec.daemon_type
class NodeExporterService(CephadmService):
TYPE = 'node-exporter'
- def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+ def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
assert self.TYPE == daemon_spec.daemon_type
- return self.mgr._create_daemon(daemon_spec)
+ return daemon_spec
def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
assert self.TYPE == daemon_spec.daemon_type
spec.service_name(), spec.placement.pretty_str()))
self.mgr.spec_store.save(spec)
- def create(self, daemon_spec: CephadmDaemonSpec[NFSServiceSpec]) -> str:
+ def prepare_create(self, daemon_spec: CephadmDaemonSpec[NFSServiceSpec]) -> CephadmDaemonSpec:
assert self.TYPE == daemon_spec.daemon_type
assert daemon_spec.spec
logger.info('Create daemon %s on host %s with spec %s' % (
daemon_id, host, spec))
- return self.mgr._create_daemon(daemon_spec)
+ return daemon_spec
def generate_config(self, daemon_spec: CephadmDaemonSpec[NFSServiceSpec]) -> Tuple[Dict[str, Any], List[str]]:
assert self.TYPE == daemon_spec.daemon_type