{{- if (hasKey .Values.scheduler "create" | ternary .Values.scheduler.create true) }}
{{- $lgK8sV119 := (semverCompare ">=1.19.0-0" .Capabilities.KubeVersion.GitVersion) }}
apiVersion: apps/v1
kind: Deployment
metadata:
  {{- if eq .Values.appendReleaseSuffix true}}
  name: {{ .Values.scheduler.schedulerName }}-{{.Release.Name}}
  {{- else }}
  name: {{ .Values.scheduler.schedulerName }}
  {{- end }}
  namespace: {{ .Release.Namespace }}
  labels:
    app.kubernetes.io/name: {{ template "chart.name" . }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/component: scheduler
    helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+"  "_" }}
spec:
  replicas: {{ .Values.scheduler.replicas }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ template "chart.name" . }}
      app.kubernetes.io/instance: {{ .Release.Name }}
      app.kubernetes.io/component: scheduler
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ template "chart.name" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        app.kubernetes.io/component: scheduler
{{- if .Values.scheduler.podAnnotations }}
      annotations:
{{ toYaml .Values.scheduler.podAnnotations | indent 8 }}
{{ end }}
    spec:
    {{- if .Values.scheduler.serviceAccount }}
      {{- if eq .Values.appendReleaseSuffix true}}
      serviceAccount: {{ .Values.scheduler.serviceAccount }}-{{ .Release.Name }}
      {{- else }}
      serviceAccount: {{ .Values.scheduler.serviceAccount }}
      {{- end }}
    {{- end }}
    {{- if .Values.imagePullSecrets }}
      imagePullSecrets:
  {{ toYaml .Values.imagePullSecrets | indent 6 }}
    {{- end }}
      containers:
      - name: {{ .Values.scheduler.schedulerName }}
        image: {{ .Values.operatorImage }}
        imagePullPolicy: {{ .Values.imagePullPolicy | default "IfNotPresent" }}
        resources:
{{ toYaml .Values.scheduler.resources | indent 12 }}
        command:
          - /usr/local/bin/tidb-scheduler
          - -v={{ .Values.scheduler.logLevel }}
          - -port=10262
        {{- if .Values.features }}
          - -features={{ join "," .Values.features }}
        {{- end }}
      {{- if and (ne .Values.timezone "UTC") (ne .Values.timezone "") }}
        env:
        - name: TZ
          value: {{ .Values.timezone | default "UTC" }}
      {{- end }}
      - name: kube-scheduler
        image: {{ required "scheduler.kubeSchedulerImageName is required" .Values.scheduler.kubeSchedulerImageName }}:{{- template "kube-scheduler.image_tag" . }}
        imagePullPolicy: {{ .Values.imagePullPolicy | default "IfNotPresent" }}
        resources:
{{ toYaml .Values.scheduler.resources | indent 12 }}
        command:
        - kube-scheduler
        - --v={{ .Values.scheduler.logLevel }}
        {{- if $lgK8sV119 }}
        - --config=/etc/kubernetes/scheduler-config.yaml
        {{- else }}
        - --port=10261
        - --leader-elect=true
        - --lock-object-namespace={{ .Release.Namespace }}
        - --policy-configmap-namespace={{ .Release.Namespace }}
          {{- if eq .Values.appendReleaseSuffix true}}
        - --lock-object-name={{ .Values.scheduler.schedulerName }}-{{.Release.Name}}
        - --scheduler-name={{ .Values.scheduler.schedulerName }}-{{.Release.Name}}
        - --policy-configmap={{ .Values.scheduler.schedulerName }}-policy-{{.Release.Name}}
          {{- else }}
        - --lock-object-name={{ .Values.scheduler.schedulerName }}
        - --scheduler-name={{ .Values.scheduler.schedulerName }}
        - --policy-configmap={{ .Values.scheduler.schedulerName }}-policy
          {{- end }}
        {{- end }}
      {{- if and (ne .Values.timezone "UTC") (ne .Values.timezone "") }}
        env:
        - name: TZ
          value: {{ .Values.timezone | default "UTC" }}
      {{- end }}
      {{- if $lgK8sV119 }}
        volumeMounts:
        - name: scheduler-config
          mountPath: /etc/kubernetes
      {{- end }}
    {{- with .Values.scheduler.nodeSelector }}
      nodeSelector:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.scheduler.affinity }}
      affinity:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.scheduler.tolerations }}
      tolerations:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.scheduler.securityContext }}
      securityContext:
{{ toYaml . | indent 8 }}
    {{- end}}
    {{- if $lgK8sV119 }}
      volumes:
      - name: scheduler-config
        configMap:
          {{- if eq .Values.appendReleaseSuffix true}}
          name: {{ .Values.scheduler.schedulerName }}-config-{{.Release.Name}}
          {{- else }}
          name: {{ .Values.scheduler.schedulerName }}-config
          {{- end }}
    {{- end }}
{{- end }}
