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)
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')
"""
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 = [
'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.')
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,
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)