apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "aws-for-fluent-bit.fullname" . }}
  namespace: {{ include "aws-for-fluent-bit.namespace" . }}
  labels:
    {{- include "aws-for-fluent-bit.labels" . | nindent 4 }}
data:
  fluent-bit.conf: |
    [SERVICE]
{{- if .Values.service.extraService }}
{{ .Values.service.extraService | indent 8 }}
{{- end }}
{{- range .Values.service.parsersFiles }}
        Parsers_File {{ . }}
{{- end }}
{{- if .Values.service.extraParsers }}
        Parsers_File /fluent-bit/etc/parser_extra.conf
{{- end }}

{{- if .Values.input.enabled }}
    [INPUT]
        Name              tail
        Tag               {{ .Values.input.tag }}
        Path              {{ .Values.input.path }}
        DB                {{ .Values.input.db }}
        {{- if .Values.input.parser }}
        Parser            {{ .Values.input.parser }}
        {{- end }}
        {{- if .Values.input.dockerMode }}
        Docker_Mode       {{ .Values.input.dockerMode }}
        {{- end }}
        {{- if .Values.input.multilineParser }}
        multiline.parser  {{ .Values.input.multilineParser }}
        {{- end }}
        Mem_Buf_Limit     {{ .Values.input.memBufLimit }}
        Skip_Long_Lines   {{ .Values.input.skipLongLines }}
        Refresh_Interval  {{ .Values.input.refreshInterval }}
{{- end }}
{{- if .Values.input.extraInputs }}
{{ .Values.input.extraInputs | indent 8 }}
{{- end }}

{{- if .Values.additionalInputs }}
{{ .Values.additionalInputs | indent 4 }}
{{- end }}

{{- if .Values.filter.enabled }}
    [FILTER]
        Name                kubernetes
        Match               {{ .Values.filter.match }}
        Kube_URL            {{ .Values.filter.kubeURL }}
        Merge_Log           {{ .Values.filter.mergeLog }}
        {{- if .Values.filter.mergeLogKey }}
        Merge_Log_Key       {{ .Values.filter.mergeLogKey }}
        {{- end }}
        Keep_Log            {{ .Values.filter.keepLog }}
        K8S-Logging.Parser  {{ .Values.filter.k8sLoggingParser }}
        K8S-Logging.Exclude {{ .Values.filter.k8sLoggingExclude }}
        Buffer_Size         {{ .Values.filter.bufferSize }}
{{- end }}

{{- if .Values.filter.extraFilters }}
{{ .Values.filter.extraFilters | indent 8 }}
{{- end }}

{{- if .Values.additionalFilters }}
{{ .Values.additionalFilters | indent 4}}
{{- end }}

{{- if .Values.cloudWatch.enabled }}
    [OUTPUT]
        Name                  cloudwatch
        Match                 {{ .Values.cloudWatch.match }}
        region                {{ .Values.cloudWatch.region }}
        log_group_name        {{ .Values.cloudWatch.logGroupName }}
        {{- if .Values.cloudWatch.logStreamName }}
        log_stream_name       {{ .Values.cloudWatch.logStreamName }}
        {{- end }}
        {{- if .Values.cloudWatch.logStreamPrefix }}
        log_stream_prefix     {{ .Values.cloudWatch.logStreamPrefix }}
        {{- end }}
        {{- if .Values.cloudWatch.logKey }}
        log_key               {{ .Values.cloudWatch.logKey }}
        {{- end }}
        {{- if .Values.cloudWatch.logFormat }}
        log_format            {{ .Values.cloudWatch.logFormat }}
        {{- end }}
        {{- if .Values.cloudWatch.logRetentionDays }}
        log_retention_days    {{ .Values.cloudWatch.logRetentionDays }}
        {{- end }}
        {{- if .Values.cloudWatch.roleArn }}
        role_arn              {{ .Values.cloudWatch.roleArn }}
        {{- end }}
        {{- if .Values.cloudWatch.autoCreateGroup }}
        auto_create_group     {{ .Values.cloudWatch.autoCreateGroup }}
        {{- end }}
        {{- if .Values.cloudWatch.endpoint }}
        endpoint              {{ .Values.cloudWatch.endpoint }}
        {{- end }}
        {{- if .Values.cloudWatch.credentialsEndpoint }}
        credentials_endpoint  {{ toJson .Values.cloudWatch.credentialsEndpoint }}
        {{- end -}}
        {{- if .Values.cloudWatch.extraOutputs }}
{{ .Values.cloudWatch.extraOutputs | indent 8 }}
        {{- end }}
{{- end }}

{{- if .Values.cloudWatchLogs.enabled }}
    [OUTPUT]
        Name                  cloudwatch_logs
        Match                 {{ .Values.cloudWatchLogs.match }}
        region                {{ .Values.cloudWatchLogs.region }}
        log_group_name        {{ .Values.cloudWatchLogs.logGroupName }}
        {{- if .Values.cloudWatchLogs.logGroupTemplate }}
        log_group_template    {{ .Values.cloudWatchLogs.logGroupTemplate }}
        {{- end }}
        {{- if .Values.cloudWatchLogs.logStreamName }}
        log_stream_name       {{ .Values.cloudWatchLogs.logStreamName }}
        {{- end }}
        {{- if .Values.cloudWatchLogs.logStreamPrefix }}
        log_stream_prefix     {{ .Values.cloudWatchLogs.logStreamPrefix }}
        {{- end }}
        {{- if .Values.cloudWatchLogs.logStreamTemplate }}
        log_stream_template   {{ .Values.cloudWatchLogs.logStreamTemplate }}
        {{- end }}
        {{- if .Values.cloudWatchLogs.logKey }}
        log_key               {{ .Values.cloudWatchLogs.logKey }}
        {{- end }}
        {{- if .Values.cloudWatchLogs.logFormat }}
        log_format            {{ .Values.cloudWatchLogs.logFormat }}
        {{- end }}
        {{- if .Values.cloudWatchLogs.roleArn }}
        role_arn              {{ .Values.cloudWatchLogs.roleArn }}
        {{- end }}
        {{- if .Values.cloudWatchLogs.autoCreateGroup }}
        auto_create_group     {{ .Values.cloudWatchLogs.autoCreateGroup }}
        {{- end }}
        {{- if .Values.cloudWatchLogs.logRetentionDays }}
        log_retention_days    {{ .Values.cloudWatchLogs.logRetentionDays }}
        {{- end }}
        {{- if .Values.cloudWatchLogs.endpoint }}
        endpoint              {{ .Values.cloudWatchLogs.endpoint }}
        {{- end }}
        {{- if .Values.cloudWatchLogs.metricNamespace }}
        metric_namespace      {{ .Values.cloudWatchLogs.metricNamespace }}
        {{- end }}
        {{- if .Values.cloudWatchLogs.metricDimensions }}
        metric_dimensions     {{ .Values.cloudWatchLogs.metricDimensions }}
        {{- end }}
        {{- if .Values.cloudWatchLogs.stsEndpoint }}
        sts_endpoint          {{ .Values.cloudWatchLogs.stsEndpoint }}
        {{- end }}
        {{- if .Values.cloudWatchLogs.autoRetryRequests }}
        auto_retry_requests   {{ .Values.cloudWatchLogs.autoRetryRequests }}
        {{- end -}}
        {{- if .Values.cloudWatchLogs.externalId }}
        external_id           {{  .Values.cloudWatchLogs.externalId }}
        {{- end -}}
        {{- if .Values.cloudWatchLogs.extraOutputs }}
{{ .Values.cloudWatchLogs.extraOutputs | indent 8 }}
        {{- end }}
{{- end }}

{{- if .Values.firehose.enabled }}
    [OUTPUT]
        Name            firehose
        Match           {{ .Values.firehose.match }}
        region          {{ .Values.firehose.region }}
        delivery_stream {{ .Values.firehose.deliveryStream }}
        {{- if .Values.firehose.dataKeys }}
        data_keys       {{ .Values.firehose.dataKeys }}
        {{- end }}
        {{- if .Values.firehose.roleArn }}
        role_arn        {{ .Values.firehose.roleArn }}
        {{- end }}
        {{- if .Values.firehose.endpoint }}
        endpoint        {{ .Values.firehose.endpoint }}
        {{- end }}
        {{- if .Values.firehose.timeKey }}
        time_key        {{ .Values.firehose.timeKey }}
        {{- end }}
        {{- if .Values.firehose.timeKeyFormat }}
        time_key_format {{ .Values.firehose.timeKeyFormat }}
        {{- end -}}
        {{- if .Values.kinesis.extraOutputs }}
{{ .Values.kinesis.extraOutputs | indent 8 }}
        {{- end }}
{{- end }}

{{- if .Values.kinesis.enabled }}
    [OUTPUT]
        Name            kinesis
        Match           {{ .Values.kinesis.match }}
        region          {{ .Values.kinesis.region }}
        stream          {{ .Values.kinesis.stream }}
        {{- if .Values.kinesis.partitionKey }}
        partition_key   {{ .Values.kinesis.partitionKey }}
        {{- end }}
        {{- if .Values.kinesis.appendNewline }}
        append_newline  {{ .Values.kinesis.appendNewline }}
        {{- end }}
        {{- if .Values.kinesis.replaceDots }}
        replace_dots    {{ .Values.kinesis.replaceDots }}
        {{- end }}
        {{- if .Values.kinesis.dataKeys }}
        data_keys       {{ .Values.kinesis.dataKeys }}
        {{- end }}
        {{- if .Values.kinesis.roleArn }}
        role_arn        {{ .Values.kinesis.roleArn }}
        {{- end }}
        {{- if .Values.kinesis.endpoint }}
        endpoint        {{ .Values.kinesis.endpoint }}
        {{- end }}
        {{- if .Values.kinesis.stsEndpoint }}
        sts_endpoint    {{ .Values.kinesis.stsEndpoint }}
        {{- end }}
        {{- if .Values.kinesis.timeKey }}
        time_key        {{ .Values.kinesis.timeKey }}
        {{- end }}
        {{- if .Values.kinesis.timeKeyFormat }}
        time_key_format {{ .Values.kinesis.timeKeyFormat }}
        {{- end }}
        {{- if .Values.kinesis.aggregation }}
        aggregation     {{ .Values.kinesis.aggregation }}
        {{- end }}
        {{- if .Values.kinesis.compression }}
        compression     {{ .Values.kinesis.compression }}
        {{- end }}

        {{- if .Values.kinesis.experimental.concurrency }}
        experimental_concurrency          {{ .Values.kinesis.experimental.concurrency }}
        {{- end }}
        {{- if .Values.kinesis.experimental.concurrencyRetries }}
        experimental_concurrency_retries  {{ .Values.kinesis.experimental.concurrencyRetries }}
        {{- end -}}
        {{- if .Values.kinesis.extraOutputs }}
{{ .Values.kinesis.extraOutputs | indent 8 }}
        {{- end }}
{{- end }}

{{- if .Values.kinesis_streams.enabled }}
    [OUTPUT]
        Name            kinesis_streams
        Match           {{ .Values.kinesis_streams.match }}
        region          {{ .Values.kinesis_streams.region }}
        stream          {{ .Values.kinesis_streams.stream }}
        {{- if .Values.kinesis_streams.role_arn }}
        role_arn        {{ .Values.kinesis_streams.role_arn }}
        {{- end }}
        {{- if .Values.kinesis_streams.endpoint }}
        endpoint        {{ .Values.kinesis_streams.endpoint }}
        {{- end }}
        {{- if .Values.kinesis_streams.sts_endpoint }}
        sts_endpoint    {{ .Values.kinesis_streams.sts_endpoint }}
        {{- end }}
        {{- if .Values.kinesis_streams.time_key }}
        time_key        {{ .Values.kinesis_streams.time_key }}
        {{- end }}
        {{- if .Values.kinesis_streams.time_key_format }}
        time_key_format {{ .Values.kinesis_streams.time_key_format }}
        {{- end }}
        {{- if .Values.kinesis_streams.external_id }}
        time_key_format {{ .Values.kinesis_streams.external_id }}
        {{- end }}
        {{- if .Values.kinesis_streams.auto_retry_requests }}
        time_key_format {{ .Values.kinesis_streams.auto_retry_requests }}
        {{- end }}
        {{- if .Values.kinesis_streams.log_key }}
        log_key         {{ .Values.kinesis_streams.log_key }}
        {{- end }}
        {{- if .Values.kinesis_streams.extraOutputs }}
{{ .Values.kinesis_streams.extraOutputs | indent 8 }}
        {{- end }}
{{- end }}

{{- if .Values.elasticsearch.enabled }}
    [OUTPUT]
        Name            es
        Match           {{ .Values.elasticsearch.match }}
        AWS_Region      {{ .Values.elasticsearch.awsRegion }}
        AWS_Auth        {{ .Values.elasticsearch.awsAuth }}
        {{- if .Values.elasticsearch.host }}
        Host            {{ .Values.elasticsearch.host }}
        {{- end }}
        {{- if .Values.elasticsearch.port }}
        Port            {{ .Values.elasticsearch.port }}
        {{- end }}
        {{- if .Values.elasticsearch.tls }}
        TLS             {{ .Values.elasticsearch.tls }}
        {{- end }}
        {{- if .Values.elasticsearch.retryLimit }}
        Retry_Limit     {{ .Values.elasticsearch.retryLimit }}
        {{- end }}
        {{- if .Values.elasticsearch.replaceDots }}
        Replace_Dots    {{ .Values.elasticsearch.replaceDots }}
        {{- end -}}
        {{- if .Values.elasticsearch.suppressTypeName }}
        Suppress_Type_Name    {{ .Values.elasticsearch.suppressTypeName }}
        {{- end -}}
        {{- if .Values.elasticsearch.extraOutputs }}
{{ .Values.elasticsearch.extraOutputs | indent 8 }}
        {{- end }}
{{- end }}

{{- if .Values.s3.enabled }}
    [OUTPUT]
        Name                          s3
        Match                         {{ .Values.s3.match }}
        bucket                        {{ .Values.s3.bucket }}
        region                        {{ .Values.s3.region }}
        {{- if .Values.s3.jsonDateKey }}
        json_date_key                 {{ .Values.s3.jsonDateKey }}
        {{- end }}
        {{- if .Values.s3.jsonDateFormat }}
        json_date_format              {{ .Values.s3.jsonDateFormat }}
        {{- end }}
        {{- if .Values.s3.totalFileSize }}
        total_file_size               {{ .Values.s3.totalFileSize }}
        {{- end }}
        {{- if .Values.s3.uploadChunkSize }}
        upload_chunk_size             {{ .Values.s3.uploadChunkSize }}
        {{- end }}
        {{- if .Values.s3.uploadTimeout }}
        upload_timeout                {{ .Values.s3.uploadTimeout }}
        {{- end }}
        {{- if .Values.s3.storeDir }}
        store_dir                     {{ .Values.s3.storeDir }}
        {{- end }}
        {{- if .Values.s3.storeDirLimitSize }}
        store_dir_limit_size          {{ .Values.s3.storeDirLimitSize }}
        {{- end }}
        {{- if .Values.s3.s3KeyFormat }}
        s3_key_format                 {{ .Values.s3.s3KeyFormat }}
        {{- end }}
        {{- if .Values.s3.s3KeyFormatTagDelimiters }}
        s3_key_format_tag_delimiters  {{ .Values.s3.s3KeyFormatTagDelimiters }}
        {{- end }}
        {{- if .Values.s3.staticFilePath }}
        static_file_path              {{ .Values.s3.staticFilePath }}
        {{- end }}
        {{- if .Values.s3.usePutObject }}
        use_put_object                {{ .Values.s3.usePutObject }}
        {{- end }}
        {{- if .Values.s3.roleArn }}
        role_arn                      {{ .Values.s3.roleArn }}
        {{- end }}
        {{- if .Values.s3.endpoint }}
        endpoint                      {{ .Values.s3.endpoint }}
        {{- end }}
        {{- if .Values.s3.stsEndpoint }}
        sts_endpoint                  {{ .Values.s3.stsEndpoint }}
        {{- end }}
        {{- if .Values.s3.cannedAcl }}
        canned_acl                    {{ .Values.s3.cannedAcl }}
        {{- end }}
        {{- if .Values.s3.compression }}
        compression                   {{ .Values.s3.compression }}
        {{- end }}
        {{- if .Values.s3.contentType }}
        content_type                  {{ .Values.s3.contentType }}
        {{- end }}
        {{- if .Values.s3.sendContentMd5 }}
        send_content_md5              {{ .Values.s3.sendContentMd5 }}
        {{- end }}
        {{- if .Values.s3.autoRetryRequests }}
        auto_retry_requests           {{ .Values.s3.autoRetryRequests }}
        {{- end }}
        {{- if .Values.s3.logKey }}
        log_key                       {{ .Values.s3.logKey }}
        {{- end }}
        {{- if .Values.s3.preserveDataOrdering }}
        preserve_data_ordering        {{ .Values.s3.preserveDataOrdering }}
        {{- end }}
        {{- if .Values.s3.storageClass }}
        storage_class                 {{ .Values.s3.storageClass }}
        {{- end }}
        {{- if .Values.s3.retryLimit }}
        retry_limit                   {{ .Values.s3.retryLimit }}
        {{- end }}
        {{- if .Values.s3.externalId }}
        external_id                   {{ .Values.s3.externalId }}
        {{- end }}
        {{- if .Values.s3.extraOutputs }}
{{ .Values.s3.extraOutputs | indent 8 }}
        {{- end }}
{{- end }}

{{- if .Values.opensearch.enabled }}
    [OUTPUT]
        Name                opensearch
        Match               {{ .Values.opensearch.match }}
        {{- if .Values.opensearch.awsRegion }}
        AWS_Region                {{ .Values.opensearch.awsRegion }}
        {{- end }}
        {{- if .Values.opensearch.awsAuth }}
        AWS_Auth                {{ .Values.opensearch.awsAuth }}
        {{- end }}
        {{- if .Values.opensearch.host }}
        Host                {{ .Values.opensearch.host }}
        {{- end }}
        {{- if .Values.opensearch.port }}
        Port                {{ .Values.opensearch.port }}
        {{- end }}
        {{- if .Values.opensearch.tls }}
        tls                {{ .Values.opensearch.tls }}
        {{- end }}
        {{- if .Values.opensearch.path }}
        Path                {{ .Values.opensearch.path }}
        {{- end }}
        {{- if .Values.opensearch.bufferSize }}
        Buffer_Size         {{ .Values.opensearch.bufferSize }}
        {{- end }}
        {{- if .Values.opensearch.pipeline }}
        Pipeline            {{ .Values.opensearch.pipeline }}
        {{- end }}
        {{- if .Values.opensearch.awsStsEndpoint }}
        AWS_STS_Endpoint    {{ .Values.opensearch.awsStsEndpoint }}
        {{- end }}
        {{- if .Values.opensearch.awsRoleArn }}
        AWS_Role_ARN        {{ .Values.opensearch.awsRoleArn }}
        {{- end }}
        {{- if .Values.opensearch.awsExternalId }}
        AWS_External_ID     {{ .Values.opensearch.awsExternalId }}
        {{- end }}
        {{- if .Values.opensearch.awsServiceName }}
        AWS_Service_Name    {{ .Values.opensearch.awsServiceName }}
        {{- end }}
        {{- if .Values.opensearch.httpUser }}
        HTTP_User           {{ .Values.opensearch.httpUser }}
        {{- end }}
        {{- if .Values.opensearch.httpPasswd }}
        HTTP_Passwd         {{ .Values.opensearch.httpPasswd }}
        {{- end }}
        {{- if .Values.opensearch.index }}
        Index               {{ .Values.opensearch.index }}
        {{- end }}
        {{- if .Values.opensearch.type }}
        Type                {{ .Values.opensearch.type }}
        {{- end }}
        {{- if .Values.opensearch.logstashFormat }}
        Logstash_Format     {{ .Values.opensearch.logstashFormat }}
        {{- end }}
        {{- if .Values.opensearch.logstashPrefix }}
        Logstash_Prefix     {{ .Values.opensearch.logstashPrefix }}
        {{- end }}
        {{- if .Values.opensearch.logstashDateFormat }}
        Logstash_DateFormat {{ .Values.opensearch.logstashDateFormat }}
        {{- end }}
        {{- if .Values.opensearch.timeKey }}
        Time_Key            {{ .Values.opensearch.timeKey }}
        {{- end }}
        {{- if .Values.opensearch.timeKeyFormat }}
        Time_Key_Format     {{ .Values.opensearch.timeKeyFormat }}
        {{- end }}
        {{- if .Values.opensearch.timeKeyNanos }}
        Time_Key_Nanos      {{ .Values.opensearch.timeKeyNanos }}
        {{- end }}
        {{- if .Values.opensearch.includeTagKey }}
        Include_Tag_Key     {{ .Values.opensearch.includeTagKey }}
        {{- end }}
        {{- if .Values.opensearch.tagKey }}
        Tag_Key             {{ .Values.opensearch.tagKey }}
        {{- end }}
        {{- if .Values.opensearch.generateId }}
        Generate_ID         {{ .Values.opensearch.generateId }}
        {{- end }}
        {{- if .Values.opensearch.idKey }}
        Id_Key              {{ .Values.opensearch.idKey }}
        {{- end }}
        {{- if .Values.opensearch.writeOperation }}
        Write_Operation     {{ .Values.opensearch.writeOperation }}
        {{- end }}
        {{- if .Values.opensearch.replaceDots }}
        Replace_Dots        {{ .Values.opensearch.replaceDots }}
        {{- end }}
        {{- if .Values.opensearch.traceOutput }}
        Trace_Output        {{ .Values.opensearch.traceOutput }}
        {{- end }}
        {{- if .Values.opensearch.traceError }}
        Trace_Error         {{ .Values.opensearch.traceError }}
        {{- end }}
        {{- if .Values.opensearch.currentTimeIndex }}
        Current_Time_Index  {{ .Values.opensearch.currentTimeIndex }}
        {{- end }}
        {{- if .Values.opensearch.logstashPrefixKey }}
        Logstash_Prefix_Key {{ .Values.opensearch.logstashPrefixKey }}
        {{- end }}
        {{- if .Values.opensearch.suppressTypeName }}
        Suppress_Type_Name  {{ .Values.opensearch.suppressTypeName }}
        {{- end -}}
        {{- if .Values.opensearch.extraOutputs }}
{{ .Values.opensearch.extraOutputs | indent 8 }}
        {{- end }}
{{- end }}

{{- if .Values.additionalOutputs }}
{{ .Values.additionalOutputs | indent 4 }}
{{- end }}

{{- if .Values.service.extraParsers }}
  parser_extra.conf: |-
{{ .Values.service.extraParsers | indent 4 }}
{{- end }}
