# Licensed to Apache Software Foundation (ASF) under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Apache Software Foundation (ASF) licenses this file to you 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: {{ .Name }}-oap
  namespace: {{ .Namespace }}
  labels:
    app: oap
    operator.skywalking.apache.org/oap-server-name: {{ .Name }}
    operator.skywalking.apache.org/application: oapserver
    operator.skywalking.apache.org/component: deployment
spec:
  replicas: {{ .Spec.Instances }}
  minReadySeconds: 5
  selector:
    matchLabels:
      app: oap
      operator.skywalking.apache.org/oap-server-name: {{ .Name }}
  template:
    metadata:
      labels:
        app: oap
        operator.skywalking.apache.org/oap-server-name: {{ .Name }}
        operator.skywalking.apache.org/application: oapserver
        operator.skywalking.apache.org/component: pod
    spec:
      serviceAccountName: {{ .Name }}-oap
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            podAffinityTerm:
              topologyKey: kubernetes.io/hostname
              labelSelector:
                matchLabels:
                  app: oap
                  operator.skywalking.apache.org/oap-server-name: {{ .Name }}
      containers:
      - name: oap
        image: {{ .Spec.Image }}
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 11800
          name: grpc
        - containerPort: 12800
          name: rest
        - containerPort: 1234
          name: http-monitoring
        livenessProbe:
          initialDelaySeconds: 10
          timeoutSeconds: 10
          periodSeconds: 30
          failureThreshold: 10
          successThreshold: 1
          exec:
            command:
              - /skywalking/bin/swctl
              - ch
        readinessProbe:
          initialDelaySeconds: 10
          timeoutSeconds: 10
          periodSeconds: 30
          failureThreshold: 10
          successThreshold: 1
          exec:
            command:
              - /skywalking/bin/swctl
              - ch
        env:
        - name: JAVA_OPTS
          value: -Xmx2048M
        - name: SW_CLUSTER
          value: kubernetes
        - name: SW_CLUSTER_K8S_NAMESPACE
          value: "{{ .Namespace }}"
        - name: SW_CLUSTER_K8S_LABEL
          value: "app=oap,operator.skywalking.apache.org/oap-server-name={{ .Name }}"
        - name: SKYWALKING_COLLECTOR_UID
          valueFrom:
            fieldRef:
              fieldPath: metadata.uid
        - name: SW_TELEMETRY
          value: prometheus
        - name: SW_HEALTH_CHECKER
          value: default
        {{range .Spec.Config}}
        - name: {{ .Name }}
          value: {{ .Value }}
        {{end}}

