From 0562f512100d724c03228e6c53442eec02acef8a Mon Sep 17 00:00:00 2001 From: Sebastian Wagner Date: Fri, 20 Mar 2020 11:25:35 +0100 Subject: [PATCH] python-common: add `service_name` to `ServiceSpec.to_json` To make it compatible to `Orchestrator.describe_service`. Otherwise we have the awkward situation that users need to pass `service_name` to `describe_service`, but `service_id` to apply Signed-off-by: Sebastian Wagner (cherry picked from commit 6bffff2f1be55f09b43b7abdb36646f0939f1f98) --- src/pybind/mgr/cephadm/tests/test_cephadm.py | 2 ++ .../ceph/deployment/drive_group.py | 1 + .../ceph/deployment/service_spec.py | 18 ++++++++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/pybind/mgr/cephadm/tests/test_cephadm.py b/src/pybind/mgr/cephadm/tests/test_cephadm.py index a0be9a1426382..49bcafbce4aa9 100644 --- a/src/pybind/mgr/cephadm/tests/test_cephadm.py +++ b/src/pybind/mgr/cephadm/tests/test_cephadm.py @@ -102,6 +102,7 @@ class TestCephadm(object): { 'placement': {'hosts': [{'hostname': 'test', 'name': '', 'network': ''}]}, 'service_id': 'name', + 'service_name': 'mds.name', 'service_type': 'mds', 'status': {'running': 1, 'size': 0}, 'unmanaged': True @@ -114,6 +115,7 @@ class TestCephadm(object): 'rgw_realm': 'r', 'rgw_zone': 'z', 'service_id': 'r.z', + 'service_name': 'rgw.r.z', 'service_type': 'rgw', 'status': {'running': 0, 'size': 1} } diff --git a/src/python-common/ceph/deployment/drive_group.py b/src/python-common/ceph/deployment/drive_group.py index 0f25afd0b392a..595428a2778c9 100644 --- a/src/python-common/ceph/deployment/drive_group.py +++ b/src/python-common/ceph/deployment/drive_group.py @@ -282,6 +282,7 @@ class DriveGroupSpec(ServiceSpec): c['db_devices'] = self.db_devices.to_json() if self.wal_devices: c['wal_devices'] = self.wal_devices.to_json() + c['service_name'] = self.service_name() return c def __eq__(self, other): diff --git a/src/python-common/ceph/deployment/service_spec.py b/src/python-common/ceph/deployment/service_spec.py index b94be2549d84d..13bc2dd542678 100644 --- a/src/python-common/ceph/deployment/service_spec.py +++ b/src/python-common/ceph/deployment/service_spec.py @@ -395,10 +395,22 @@ class ServiceSpec(object): :param json_spec: A valid dict with ServiceSpec """ - service_type = json_spec.get('service_type', '') + c = json_spec.copy() + + # kludge to make `from_json` compatible to `Orchestrator.describe_service` + # Open question: Remove `service_id` form to_json? + if c.get('service_name', ''): + service_type_id = c['service_name'].split('.', 1) + + if not c.get('service_type', ''): + c['service_type'] = service_type_id[0] + if not c.get('service_id', '') and len(service_type_id) > 1: + c['service_id'] = service_type_id[1] + del c['service_name'] + + service_type = c.get('service_type', '') _cls = cls._cls(service_type) - c = json_spec.copy() if 'status' in c: del c['status'] # kludge to make us compatible to `ServiceDescription.to_json()` @@ -430,6 +442,8 @@ class ServiceSpec(object): val = val.to_json() if val: c[key] = val + + c['service_name'] = self.service_name() return c def validate(self): -- 2.39.5