# Copyright 2020-2024 Open Networking Foundation (ONF) and the ONF Contributors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: "{{ template "fullname" . }}-jaeger"
  namespace: "{{ .Release.Namespace }}"
  labels:
    app: jaeger
    release: "{{ .Release.Name }}"
    app.kubernetes.io/name: jaeger
    app.kubernetes.io/component: all-in-one
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: jaeger
      release: "{{ .Release.Name }}"
  template:
    metadata:
      namespace: "{{ .Release.Namespace }}"
      labels:
        app: jaeger
        release: "{{ .Release.Name }}"
        app.kubernetes.io/name: jaeger
        app.kubernetes.io/version: {{ quote .Chart.Version }}
        app.kubernetes.io/component: all-in-one
      annotations:
        prometheus.io/scrape: "false"
    spec:
      {{- if .Values.securityContext.enabled }}
      securityContext:
        runAsUser: {{ .Values.securityContext.runAsUser }}
        runAsGroup: {{ .Values.securityContext.runAsGroup }}
        fsGroup: {{ .Values.securityContext.fsGroup }}
      {{- end }}
      containers:
        - name: jaeger
          image: '{{ .Values.tracing.image.repository }}:{{ .Values.tracing.image.tag }}'
          imagePullPolicy: '{{ .Values.tracing.image.pullPolicy }}'
          args: ["--memory.max-traces", '{{ .Values.tracing.maxTraces }}']
          ports:
            - containerPort: 6831
              protocol: UDP
            - containerPort: 5778
              protocol: TCP
            - containerPort: 16686
              protocol: TCP
          {{- if .Values.securityContext.enabled }}
          securityContext:
            allowPrivilegeEscalation: false
          {{- end }}
          readinessProbe:
            httpGet:
              path: "/"
              port: 14269
            initialDelaySeconds: 5
