]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/orchestrator: suport yaml spec for jaeger-tracing services
authorOmri Zeneva <ozeneva@redhat.com>
Tue, 3 May 2022 08:39:10 +0000 (04:39 -0400)
committerOmri Zeneva <ozeneva@redhat.com>
Thu, 16 Jun 2022 09:28:17 +0000 (12:28 +0300)
cleanup for the apply_jaeger func so they both generate the specs with the same function get_tracing_specs

Signed-off-by: Omri Zeneva <ozeneva@redhat.com>
src/pybind/mgr/orchestrator/_interface.py
src/pybind/mgr/orchestrator/module.py
src/python-common/ceph/deployment/service_spec.py

index f09e077bf2d098f603abc5cf1f1c5d2d5629e7e5..7f8b63e6af851b6acd6c1dbe5f1e9e0632bd2d6f 100644 (file)
@@ -777,7 +777,8 @@ def service_to_daemon_types(stype: str) -> List[str]:
         'elasticsearch': ['elasticsearch'],
         'jaeger-agent': ['jaeger-agent'],
         'jaeger-collector': ['jaeger-collector'],
-        'jaeger-query': ['jaeger-query']
+        'jaeger-query': ['jaeger-query'],
+        'jaeger-tracing': ['elasticsearch', 'jaeger-query', 'jaeger-collector', 'jaeger-agent']
     }
     return mapping[stype]
 
index 4298fd62291815249fcaa51fc35dc79e732a2b6b..3bc9a6529eaaa9c18eb329f607accce50292e2b4 100644 (file)
@@ -1070,6 +1070,10 @@ Usage:
 
                 if dry_run and not isinstance(spec, HostSpec):
                     spec.preview_only = dry_run
+
+                if isinstance(spec, TracingSpec) and spec.service_type == 'jaeger-tracing':
+                    specs.extend(spec.get_tracing_specs())
+                    continue
                 specs.append(spec)
         else:
             placementspec = PlacementSpec.from_string(placement)
@@ -1271,25 +1275,12 @@ Usage:
         if inbuf:
             raise OrchestratorValidationError('unrecognized command -i; -h or --help for usage')
 
-        specs: List[ServiceSpec] = []
-
-        if es_nodes == None:
-            specs.append(TracingSpec(service_type="elasticsearch",
-                         unmanaged=unmanaged, preview_only=dry_run))
-        if not without_query:
-            specs.append(TracingSpec(service_type="jaeger-query",
-                                    es_nodes=es_nodes,
-                                    unmanaged=unmanaged,
-                                    preview_only=dry_run))
-        specs.append(TracingSpec(service_type="jaeger-collector",
-                                 es_nodes=es_nodes,
-                                 placement=PlacementSpec.from_string(placement),
-                                 unmanaged=unmanaged,
-                                 preview_only=dry_run))
-        specs.append(TracingSpec(service_type="jaeger-agent",
-            unmanaged=unmanaged,
-            preview_only=dry_run))
-
+        spec = TracingSpec(service_type='jaeger-tracing',
+                           es_nodes=es_nodes,
+                           without_query=without_query,
+                           placement=PlacementSpec.from_string(placement),
+                           unmanaged=unmanaged)
+        specs: List[ServiceSpec] = spec.get_tracing_specs()
         return self._apply_misc(specs, dry_run, format, no_overwrite)
 
     @_cli_write_command('orch set backend')
index 975465ed35192f247e307b2a4511519136485b77..c02d271ba62b8d7bfac5f7d3d512d0fce10f891c 100644 (file)
@@ -445,7 +445,7 @@ class ServiceSpec(object):
     """
     KNOWN_SERVICE_TYPES = 'alertmanager crash grafana iscsi loki promtail mds mgr mon nfs ' \
                           'node-exporter osd prometheus rbd-mirror rgw agent ' \
-                          'container ingress cephfs-mirror snmp-gateway ' \
+                          'container ingress cephfs-mirror snmp-gateway jaeger-tracing ' \
                           'elasticsearch jaeger-agent jaeger-collector jaeger-query'.split()
     REQUIRES_SERVICE_ID = 'iscsi mds nfs rgw container ingress '.split()
     MANAGED_CONFIG_OPTIONS = [
@@ -475,6 +475,7 @@ class ServiceSpec(object):
             'jaeger-agent': TracingSpec,
             'jaeger-collector': TracingSpec,
             'jaeger-query': TracingSpec,
+            'jaeger-tracing': TracingSpec,
         }.get(service_type, cls)
         if ret == ServiceSpec and not service_type:
             raise SpecValidationError('Spec needs a "service_type" key.')
@@ -1362,18 +1363,20 @@ class MDSSpec(ServiceSpec):
 yaml.add_representer(MDSSpec, ServiceSpec.yaml_representer)
 
 class TracingSpec(ServiceSpec):
+    SERVICE_TYPES = ['elasticsearch', 'jaeger-collector', 'jaeger-query', 'jaeger-agent']
+
     def __init__(self,
                  service_type: str,
                  es_nodes: Optional[str] = None,
+                 without_query: bool = False,
                  service_id: Optional[str] = None,
                  config: Optional[Dict[str, str]] = None,
                  networks: Optional[List[str]] = None,
                  placement: Optional[PlacementSpec] = None,
                  unmanaged: bool = False,
-                 preview_only: bool = False,
-                 port: Optional[int] = None,
+                 preview_only: bool = False
                  ):
-        assert service_type in ['elasticsearch', 'jaeger-agent', 'jaeger-collector', 'jaeger-query']
+        assert service_type in TracingSpec.SERVICE_TYPES + ['jaeger-tracing']
 
         super(TracingSpec, self).__init__(
             service_type, service_id,
@@ -1381,19 +1384,41 @@ class TracingSpec(ServiceSpec):
             preview_only=preview_only, config=config,
             networks=networks)
         self.service_type = service_type
+        self.without_query = without_query
         self.es_nodes = es_nodes
-        self.port = port
 
     def get_port_start(self) -> List[int]:
         return [self.get_port()]
 
     def get_port(self) -> int:
-        if self.port:
-            return self.port
-        else:
-            return {'elasticsearch':9200,
-                    'jaeger-agent': 6831,
-                    'jaeger-collector': 14250,
-                    'jaeger-query': 16686}[self.service_type]
-
-yaml.add_representer(TracingSpec, ServiceSpec.yaml_representer)
\ No newline at end of file
+        return {'elasticsearch': 9200,
+                'jaeger-agent': 6831,
+                'jaeger-collector': 14250,
+                'jaeger-query': 16686}[self.service_type]
+
+    def get_tracing_specs(self) -> List[ServiceSpec]:
+        assert self.service_type == 'jaeger-tracing'
+        specs: List[ServiceSpec] = []
+        daemons: Dict[str, Optional[PlacementSpec]] = {
+            daemon: None for daemon in TracingSpec.SERVICE_TYPES}
+
+        if self.es_nodes:
+            del daemons['elasticsearch']
+        if self.without_query:
+            del daemons['jaeger-query']
+        if self.placement:
+            daemons.update({'jaeger-collector': self.placement})
+
+        for daemon, daemon_placement in daemons.items():
+            specs.append(TracingSpec(service_type=daemon,
+                                     es_nodes=self.es_nodes,
+                                     placement=daemon_placement,
+                                     unmanaged=self.unmanaged,
+                                     config=self.config,
+                                     networks=self.networks,
+                                     preview_only=self.preview_only
+                                     ))
+        return specs
+
+
+yaml.add_representer(TracingSpec, ServiceSpec.yaml_representer)