From 4dee88f24985c41bb26b1bb1b5f06df426ae8285 Mon Sep 17 00:00:00 2001 From: Sebastian Wagner Date: Thu, 19 Mar 2020 12:57:08 +0100 Subject: [PATCH] mgr/orch: ServiceDescription: change json representation In order to match the new paradigm Signed-off-by: Sebastian Wagner (cherry picked from commit 24e375a53687ff4ff7e92cbb0b3e8e4a382a8e0c) --- src/pybind/mgr/orchestrator/_interface.py | 30 +++++++++++++---------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/pybind/mgr/orchestrator/_interface.py b/src/pybind/mgr/orchestrator/_interface.py index a50fae7facb1a..2a7ff288e1f24 100644 --- a/src/pybind/mgr/orchestrator/_interface.py +++ b/src/pybind/mgr/orchestrator/_interface.py @@ -1366,40 +1366,44 @@ class ServiceDescription(object): self.last_refresh = last_refresh # type: Optional[datetime.datetime] self.created = created # type: Optional[datetime.datetime] - self.spec = spec + self.spec: ServiceSpec = spec def service_type(self): - if self.service_name: - return self.service_name.split('.')[0] - return None + return self.spec.service_type def __repr__(self): - return "({name})".format(name=self.service_name) + return f"" def to_json(self): - out = { + out = self.spec.to_json() + status = { 'container_image_id': self.container_image_id, 'container_image_name': self.container_image_name, - 'service_name': self.service_name, 'rados_config_location': self.rados_config_location, 'service_url': self.service_url, 'size': self.size, 'running': self.running, - 'spec': self.spec.to_json() if self.spec is not None else None + 'last_refresh': self.last_refresh, + 'created': self.created } for k in ['last_refresh', 'created']: if getattr(self, k): - out[k] = getattr(self, k).strftime(DATEFMT) - return {k: v for (k, v) in out.items() if v is not None} + status[k] = getattr(self, k).strftime(DATEFMT) + status = {k: v for (k, v) in status.items() if v is not None} + out['status'] = status + return out @classmethod @handle_type_error - def from_json(cls, data): - c = data.copy() + def from_json(cls, data: dict): + status = data.pop('status', {}) + spec = ServiceSpec.from_json(data) + + c = status.copy() for k in ['last_refresh', 'created']: if k in c: c[k] = datetime.datetime.strptime(c[k], DATEFMT) - return cls(**c) + return cls(spec=spec, **c) class InventoryFilter(object): -- 2.39.5