From 1ad536ba40f86421d11d55d7b2413382bec0632d Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 31 Jan 2020 08:35:26 -0600 Subject: [PATCH] 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 --- src/pybind/mgr/cephadm/module.py | 14 ++++++++------ src/pybind/mgr/cephadm/tests/test_cephadm.py | 3 ++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index a084635dece6..8c977eabf1aa 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 d45c7addd2c6..cfc255ca810e 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('[]')) -- 2.47.3