From: Sage Weil Date: Fri, 31 Jan 2020 14:35:26 +0000 (-0600) Subject: mgr/cephadm: prefix daemon ids with hostname X-Git-Tag: v15.1.1~566^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=1ad536ba40f86421d11d55d7b2413382bec0632d;p=ceph.git mgr/cephadm: prefix daemon ids with hostname This is friendlier to a human operator since they can immediately see where an instance is located, as with the legacy scheme, while still keeping the unique random suffix. Use a . to separate so that we can set per-host options. Signed-off-by: Sage Weil --- diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index a084635dece65..8c977eabf1aaf 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -734,7 +734,7 @@ class CephadmOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin): def notify(self, notify_type, notify_id): self.event.set() - def get_unique_name(self, existing, prefix=None, forcename=None): + def get_unique_name(self, host, existing, prefix=None, forcename=None): """ Generate a unique random service name """ @@ -743,12 +743,14 @@ class CephadmOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin): raise RuntimeError('specified name %s already in use', forcename) return forcename + if '.' in host: + host = host.split('.')[0] while True: if prefix: name = prefix + '.' else: name = '' - name += ''.join(random.choice(string.ascii_lowercase) + name += host + '.' + ''.join(random.choice(string.ascii_lowercase) for _ in range(6)) if len([d for d in existing if d.service_instance == name]): self.log('name %s exists, trying again', name) @@ -1722,8 +1724,8 @@ class CephadmOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin): args = [] for host_spec in spec.placement.hosts: - name = host_spec.name or self.get_unique_name(services) host = host_spec.hostname + name = host_spec.name or self.get_unique_name(host, services) args.append((host, name)) c = self._create_mgr(args) c.add_progress('Creating MGRs', self) @@ -1748,7 +1750,7 @@ class CephadmOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin): for host, _, name in spec.placement.hosts: if num_added >= spec.count: break - mds_id = self.get_unique_name(daemons, spec.name, name) + mds_id = self.get_unique_name(host, daemons, spec.name, name) self.log.debug('placing mds.%s on host %s' % (mds_id, host)) args.append((mds_id, host)) # add to daemon list so next name(s) will also be unique @@ -1814,7 +1816,7 @@ class CephadmOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin): for host, _, name in spec.placement.hosts: if num_added >= spec.count: break - rgw_id = self.get_unique_name(daemons, spec.name, name) + rgw_id = self.get_unique_name(host, daemons, spec.name, name) self.log.debug('placing rgw.%s on host %s' % (rgw_id, host)) args.append((rgw_id, host)) # add to daemon list so next name(s) will also be unique @@ -1868,7 +1870,7 @@ class CephadmOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin): for host, _, name in spec.placement.hosts: if num_added >= spec.count: break - daemon_id = self.get_unique_name(daemons, None, name) + daemon_id = self.get_unique_name(host, daemons, None, name) self.log.debug('placing rbd-mirror.%s on host %s' % (daemon_id, host)) args.append((daemon_id, host)) diff --git a/src/pybind/mgr/cephadm/tests/test_cephadm.py b/src/pybind/mgr/cephadm/tests/test_cephadm.py index d45c7addd2c69..cfc255ca810e5 100644 --- a/src/pybind/mgr/cephadm/tests/test_cephadm.py +++ b/src/pybind/mgr/cephadm/tests/test_cephadm.py @@ -45,9 +45,10 @@ class TestCephadm(object): existing = [ ServiceDescription(service_instance='mon.a') ] - new_mon = cephadm_module.get_unique_name(existing, 'mon') + new_mon = cephadm_module.get_unique_name('myhost', existing, 'mon') assert new_mon.startswith('mon.') assert new_mon != 'mon.a' + assert '.myhost.' in new_mon @mock.patch("cephadm.module.CephadmOrchestrator._get_connection") @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('[]'))