]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: prefix daemon ids with hostname 33012/head
authorSage Weil <sage@redhat.com>
Fri, 31 Jan 2020 14:35:26 +0000 (08:35 -0600)
committerSage Weil <sage@redhat.com>
Mon, 3 Feb 2020 14:23:37 +0000 (08:23 -0600)
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 <sage@redhat.com>
src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/tests/test_cephadm.py

index a084635dece65e516a50b3c371d03435e2de314a..8c977eabf1aafedc4a236ad30135c1638cb55d26 100644 (file)
@@ -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))
index d45c7addd2c69d31e6093e223203865b01007a2b..cfc255ca810e5f64cd2ebe40d83a834a14c20136 100644 (file)
@@ -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('[]'))