]> git.apps.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)
committerSage Weil <sage@newdream.net>
Thu, 25 Feb 2021 19:44:26 +0000 (14:44 -0500)
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>
src/pybind/mgr/cephadm/serve.py
src/pybind/mgr/cephadm/tests/test_cephadm.py
src/pybind/mgr/orchestrator/_interface.py

index 5d8de604ce91dacffb19e7afa38a7f5d67bf3c0c..001c26a3a06d9e4a76c8090212fd5486e8d0f172 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 310c763827542dfe07ab3ae81f0be7ac7cccfa2c..58d10e8fd7f14393d881cfdeba531cea10732d28 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 6fdfeea5c5a4db96cda65dc74bef4d5a2276199f..0865b00ed33c76687138ac221c9556f82fe69c06 100644 (file)
@@ -1290,6 +1290,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
@@ -1314,6 +1315,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
 
@@ -1358,6 +1361,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: "
@@ -1405,6 +1414,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()}'