]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: put service_name in unit.meta and use it when available
authorSage Weil <sage@newdream.net>
Tue, 23 Feb 2021 17:28:27 +0000 (12:28 -0500)
committerSebastian Wagner <sebastian.wagner@suse.com>
Tue, 9 Mar 2021 14:29:32 +0000 (15:29 +0100)
Inferring service_name from the daemon name is error-prone.

Fixes: https://tracker.ceph.com/issues/46219
Signed-off-by: Sage Weil <sage@newdream.net>
(cherry picked from commit 852ca83933bd49a5b0df0be37a2cd1574bbc2ea7)

src/pybind/mgr/cephadm/serve.py
src/pybind/mgr/cephadm/tests/test_cephadm.py
src/pybind/mgr/orchestrator/_interface.py

index 527b85d34b0b2e74199b99a1aafafc67793d8319..978517dd891e7d8b2345afb8fe628d3155e1bcf2 100644 (file)
@@ -274,6 +274,7 @@ class CephadmServe:
             sd.memory_usage = d.get('memory_usage')
             sd.memory_request = d.get('memory_request')
             sd.memory_limit = d.get('memory_limit')
+            sd._service_name = d.get('service_name')
             sd.version = d.get('version')
             if sd.daemon_type == 'osd':
                 sd.osdspec_affinity = self.mgr.osd_service.get_osdspec_affinity(sd.daemon_id)
@@ -799,8 +800,6 @@ class CephadmServe:
                     self._registry_login(daemon_spec.host, self.mgr.registry_url,
                                          self.mgr.registry_username, self.mgr.registry_password)
 
-                daemon_spec.extra_args.extend(['--config-json', '-'])
-
                 self.log.info('%s daemon %s on %s' % (
                     'Reconfiguring' if reconfig else 'Deploying',
                     daemon_spec.name(), daemon_spec.host))
@@ -809,6 +808,10 @@ class CephadmServe:
                     daemon_spec.host, daemon_spec.name(), 'deploy',
                     [
                         '--name', daemon_spec.name(),
+                        '--meta-json', json.dumps({
+                            'service_name': daemon_spec.service_name,
+                        }),
+                        '--config-json', '-',
                     ] + daemon_spec.extra_args,
                     stdin=json.dumps(daemon_spec.final_config),
                     image=image)
index e899ed58934d0d40826fe6b56d42057770d5b281..1060728e380bf2da889b995379430dec4c9c3537 100644 (file)
@@ -291,11 +291,16 @@ class TestCephadm(object):
 
                 CephadmServe(cephadm_module)._check_daemons()
 
-                _run_cephadm.assert_called_with('test', 'mon.test', 'deploy', [
-                                                '--name', 'mon.test', '--reconfig', '--config-json', '-'],
-                                                stdin='{"config": "\\n\\n[mon]\\nk=v\\n[mon.test]\\npublic network = 127.0.0.0/8\\n", '
-                                                + '"keyring": "", "files": {"config": "[mon.test]\\npublic network = 127.0.0.0/8\\n"}}',
-                                                image='')
+                _run_cephadm.assert_called_with(
+                    'test', 'mon.test', 'deploy', [
+                        '--name', 'mon.test',
+                        '--meta-json', '{"service_name": "mon"}',
+                        '--config-json', '-',
+                        '--reconfig',
+                    ],
+                    stdin='{"config": "\\n\\n[mon]\\nk=v\\n[mon.test]\\npublic network = 127.0.0.0/8\\n", '
+                    + '"keyring": "", "files": {"config": "[mon.test]\\npublic network = 127.0.0.0/8\\n"}}',
+                    image='')
 
     @mock.patch("cephadm.serve.CephadmServe._run_cephadm", _run_cephadm('{}'))
     def test_daemon_check_post(self, cephadm_module: CephadmOrchestrator):
index 1f881f9e2dcf8fc210837b4587ab683de57eb3b4..798f70f83c35ae7907adc0c331528f1592102e78 100644 (file)
@@ -1297,6 +1297,7 @@ class DaemonDescription(object):
                  memory_usage: Optional[int] = None,
                  memory_request: Optional[int] = None,
                  memory_limit: Optional[int] = None,
+                 service_name: Optional[str] = None,
                  ) -> None:
 
         # Host is at the same granularity as InventoryHost
@@ -1321,6 +1322,8 @@ class DaemonDescription(object):
         # in the FSMap/ServiceMap.
         self.daemon_id: Optional[str] = daemon_id
 
+        self._service_name: Optional[str] = service_name
+
         # Service version that was deployed
         self.version = version
 
@@ -1365,6 +1368,12 @@ class DaemonDescription(object):
         if self.daemon_type == 'osd' and self.osdspec_affinity:
             return self.osdspec_affinity
 
+        if self._service_name:
+            if '.' in self._service_name:
+                return self._service_name.split('.', 1)[1]
+            else:
+                return ''
+
         def _match() -> str:
             assert self.daemon_id is not None
             err = OrchestratorError("DaemonDescription: Cannot calculate service_id: "
@@ -1412,6 +1421,8 @@ class DaemonDescription(object):
         return self.daemon_id
 
     def service_name(self) -> str:
+        if self._service_name:
+            return self._service_name
         assert self.daemon_type is not None
         if daemon_type_to_service(self.daemon_type) in ServiceSpec.REQUIRES_SERVICE_ID:
             return f'{daemon_type_to_service(self.daemon_type)}.{self.service_id()}'