# 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-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'
