apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "falcosidekick.fullname" . }}
  labels:
    app.kubernetes.io/name: {{ include "falcosidekick.name" . }}
    helm.sh/chart: {{ include "falcosidekick.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ include "falcosidekick.name" . }}
      app.kubernetes.io/instance: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ include "falcosidekick.name" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
    spec:
      serviceAccountName: {{ include "falcosidekick.fullname" . }}
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - name: http
              containerPort: 2801
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /ping
              port: http
            initialDelaySeconds: 10
            periodSeconds: 5
          readinessProbe:
            httpGet:
              path: /ping
              port: http
            initialDelaySeconds: 10
            periodSeconds: 5
          env:
            - name: DEBUG
              value: {{ .Values.config.debug | quote }}
            - name: CUSTOMFIELDS
              value: {{ .Values.config.customfields | quote }}
            {{- if .Values.config.slack.webhookurl }}
            - name: SLACK_WEBHOOKURL
              valueFrom:
                secretKeyRef:
                  name: {{ include "falcosidekick.fullname" . }}
                  key: slack-webhookurl
            - name: SLACK_OUTPUTFORMAT
              value: {{ .Values.config.slack.outputformat | quote }}
            - name: SLACK_FOOTER
              value: {{ .Values.config.slack.footer | quote }}
            - name: SLACK_ICON
              value: {{ .Values.config.slack.icon | quote }}
            - name: SLACK_MINIMUMPRIORITY
              value: {{ .Values.config.slack.minimumpriority | quote }}
            - name: SLACK_MESSAGEFORMAT
              value: {{ .Values.config.slack.messageformat | quote }}
            {{- end }}
            {{- if .Values.config.rocketchat.webhookurl }}
            - name: ROCKETCHAT_WEBHOOKURL
              valueFrom:
                secretKeyRef:
                  name: {{ include "falcosidekick.fullname" . }}
                  key: rocketchat-webhookurl
            - name: ROCKETCHAT_OUTPUTFORMAT
              value: {{ .Values.config.rocketchat.outputformat | quote }}
            - name: ROCKETCHAT_ICON
              value: {{ .Values.config.rocketchat.icon | quote }}
            - name: ROCKETCHAT_MINIMUMPRIORITY
              value: {{ .Values.config.rocketchat.minimumpriority | quote }}
            - name: ROCKETCHAT_MESSAGEFORMAT
              value: {{ .Values.config.rocketchat.messageformat | quote }}
            {{- end }}
            {{- if .Values.config.mattermost.webhookurl }}
            - name: MATTERMOST_WEBHOOKURL
              valueFrom:
                secretKeyRef:
                  name: {{ include "falcosidekick.fullname" . }}
                  key: mattermost-webhookurl
            - name: MATTERMOST_OUTPUTFORMAT
              value: {{ .Values.config.mattermost.outputformat | quote }}
            - name: MATTERMOST_FOOTER
              value: {{ .Values.config.mattermost.footer | quote }}
            - name: MATTERMOST_ICON
              value: {{ .Values.config.mattermost.icon | quote }}
            - name: MATTERMOST_MINIMUMPRIORITY
              value: {{ .Values.config.mattermost.minimumpriority | quote }}
            - name: MATTERMOST_MESSAGEFORMAT
              value: {{ .Values.config.mattermost.messageformat | quote }}
            {{- end }}
            {{- if .Values.config.teams.webhookurl }}
            - name: TEAMS_WEBHOOKURL
              valueFrom:
                secretKeyRef:
                  name: {{ include "falcosidekick.fullname" . }}
                  key: teams-webhookurl
            - name: TEAMS_OUTPUTFORMAT
              value: {{ .Values.config.teams.outputformat | quote }}
            - name: TEAMS_ACTIVITYIMAGE
              value: {{ .Values.config.teams.activityimage | quote }}
            - name: TEAMS_MINIMUMPRIORITY
              value: {{ .Values.config.teams.minimumpriority | quote }}
            {{- end }}
            {{- if .Values.config.datadog.apikey }}
            - name: DATADOG_APIKEY
              valueFrom:
                secretKeyRef:
                  name: {{ include "falcosidekick.fullname" . }}
                  key: datadog-apikey
            - name: DATADOG_MINIMUMPRIORITY
              value: {{ .Values.config.datadog.minimumpriority | quote }}
            {{- end }}
            {{- if .Values.config.alertmanager.hostport }}
            - name: ALERTMANAGER_HOSTPORT
              value: {{ .Values.config.alertmanager.hostport | quote }}
            - name: ALERTMANAGER_MINIMUMPRIORITY
              value: {{ .Values.config.alertmanager.minimumpriority | quote }}
            {{- end }}
            {{- if .Values.config.elasticsearch.hostport }}
            - name: ELASTICSEARCH_HOSTPORT
              value: {{ .Values.config.elasticsearch.hostport | quote }}
            - name: ELASTICSEARCH_INDEX
              value: {{ .Values.config.elasticsearch.index | quote }}
            - name: ELASTICSEARCH_TYPE
              value: {{ .Values.config.elasticsearch.type | quote }}
            - name: ELASTICSEARCH_MINIMUMPRIORITY
              value: {{ .Values.config.elasticsearch.minimumpriority | quote }}
            {{- end }}
            {{- if .Values.config.influxdb.hostport }}
            - name: INFLUXDB_HOSTPORT
              value: {{ .Values.config.influxdb.hostport | quote }}
            - name: INFLUXDB_MINIMUMPRIORITY
              value: {{ .Values.config.influxdb.minimumpriority | quote }}
            - name: INFLUXDB_DATABASE
              value: {{ .Values.config.influxdb.database | quote }}
            {{- end }}
            {{- if and .Values.config.influxdb.user .Values.config.influxdb.password }}
            - name: INFLUXDB_USER
              valueFrom:
                secretKeyRef:
                  name: {{ include "falcosidekick.fullname" . }}
                  key: influxbd-user
            - name: INFLUXDB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: {{ include "falcosidekick.fullname" . }}
                  key: influxbd-password
            {{- end }}
            {{- if .Values.config.loki.hostport }}
            - name: LOKI_HOSTPORT
              value: {{ .Values.config.loki.hostport | quote }}
            - name: LOKI_MINIMUMPRIORITY
              value: {{ .Values.config.loki.minimumpriority | quote }}
            {{ end }}
            {{- if .Values.config.nats.hostport }}
            - name: NATS_HOSTPORT
              value: {{ .Values.config.nats.hostport | quote }}
            - name: NATS_MINIMUMPRIORITY
              value: {{ .Values.config.nats.minimumpriority | quote }}
            {{ end }}
            {{- if and .Values.config.aws.accesskeyid .Values.config.influxdb.secretaccesskey .Values.config.aws.region }}
            - name: AWS_ACCESSKEYID
              valueFrom:
                secretKeyRef:
                  name: {{ include "falcosidekick.fullname" . }}
                  key: aws-accesskeyid
            - name: AWS_SECRETACCESSKEY
              valueFrom:
                secretKeyRef:
                  name: {{ include "falcosidekick.fullname" . }}
                  key: aws-secretaccesskey
            - name: AWS_REGION
              value: {{ .Values.config.aws.region | quote }}
            {{- end }}
            {{- if .Values.config.aws.lambda.functionname }}
            - name: AWS_LAMBDA_FUNCTIONNAME
              value: {{ .Values.config.aws.lambda.functionname | quote }}
            - name: AWS_LAMBDA_MINIMUMPRIORITY
              value: {{ .Values.config.aws.lambda.minimumpriority | quote }}
            {{- end }}
            {{- if .Values.config.aws.sqs.url }}
            - name: AWS_SQS_URL
              value: {{ .Values.config.aws.sqs.functionname | quote }}
            - name: AWS_SQS_MINIMUMPRIORITY
              value: {{ .Values.config.aws.sqs.minimumpriority | quote }}
            {{- end }}
            {{- if and .Values.config.smtp.hostport .Values.config.smtp.from .Values.config.smtp.to }}
            - name: SMTP_HOSTPORT
              value: {{ .Values.config.smtp.hostport | quote }}
            - name: SMTP_FROM
              value: {{ .Values.config.smtp.from | quote }}
            - name: SMTP_TO
              value: {{ .Values.config.smtp.to | quote }}
            - name: SMTP_OUTPUTFORMAT
              value: {{ .Values.config.smtp.outputformat | quote }}
            - name: SMTP_MINIMUMPRIORITY
              value: {{ .Values.config.smtp.minimumpriority | quote }}
            {{- if and .Values.config.smtp.user .Values.config.smtp.password }}
            - name: SMTP_USER
              valueFrom:
                secretKeyRef:
                  name: {{ include "falcosidekick.fullname" . }}
                  key: smtp-user
            - name: SMTP_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: {{ include "falcosidekick.fullname" . }}
                  key: smtp-password
            {{- end }}  
            {{- end }}
            {{- if .Values.config.opsgenie.apikey }}
            - name: OPSGENIE_APIKEY
              valueFrom:
                secretKeyRef:
                  name: {{ include "falcosidekick.fullname" . }}
                  key: opsgenie-apikey
            - name: OPSGENIE_REGION
              value: {{ .Values.config.opsgenie.region | quote }}
            - name: OPSGENIE_MINIMUMPRIORITY
              value: {{ .Values.config.opsgenie.minimumpriority | quote }}
            {{- end }}
            {{- if .Values.config.statsd.forwarder }}
            - name: STATSD_FORWARDER
              value: {{ .Values.config.statsd.forwarder | quote }}
            - name: STATSD_NAMESPACE
              value: {{ .Values.config.statsd.namespace | quote }}
            {{- end }}
            {{- if .Values.config.statsd.forwarder }}
            - name: DOGSTATSD_FORWARDER
              value: {{ .Values.config.dogstatsd.forwarder | quote }}
            - name: DOGSTATSD_NAMESPACE
              value: {{ .Values.config.dogstatsd.namespace | quote }}
            - name: DOGSTATSD_TAGS
              value: {{ .Values.config.dogstatsd.tags | quote }}
            {{- end }}
            {{- if .Values.config.webhook.address }}
            - name: WEBHOOK_ADDRESS
              value: {{ .Values.config.webhook.address | quote }}
            - name: WEBHOOK_MINIMUMPRIORITY
              value: {{ .Values.config.webhook.minimumpriority | quote }}
            {{- end }}

          resources:
            {{- toYaml .Values.resources | nindent 12 }}
      {{- with .Values.nodeSelector }}
      nodeSelector:
        {{- toYaml . | nindent 8 }}
      {{- end }}
    {{- with .Values.affinity }}
      affinity:
        {{- toYaml . | nindent 8 }}
    {{- end }}
    {{- with .Values.tolerations }}
      tolerations:
        {{- toYaml . | nindent 8 }}
    {{- end }}
