# Copyright (c) 2021 J. F. Lucas.  All rights reserved.
# Copyright (c) 2021 AT&T. All rights reserved.
# Modifications Copyright (C) 2021 Nordix Foundation.
#
# 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.

global:
  centralizedLoggingEnabled: true

#################################################################
# Filebeat Configuration Defaults.
#
#################################################################
filebeatConfig:
  logstashServiceName: log-ls
  logstashPort: 5044

# Control deployment of DCAE microservices at ONAP installation time
dcae-ves-openapi-manager:
  enabled: true
dcae-bbs-eventprocessor-ms:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-datafile-collector:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-datalake-admin-ui:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-datalake-des:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-datalake-feeder:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-heartbeat:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-hv-ves-collector:
  enabled: true
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-kpi-ms:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-ms-healthcheck:
  enabled: true
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-pm-mapper:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-pmsh:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-prh:
  enabled: true
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-restconf-collector:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-slice-analysis-ms:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-snmptrap-collector:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-son-handler:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-tcagen2:
  enabled: true
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-ves-collector:
  enabled: true
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
dcae-ves-mapper:
  enabled: false
  logConfigMapNamePrefix: '{{ include "common.release" . }}-dcaegen2-services'
