---
# Copyright 2022-present Open Networking 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.
{{- $log_level := tpl .Values.voltha_northbound_bbf_adapter.log_level . }}

apiVersion: v1
kind: ConfigMap
metadata:
  name: bbf-adapter-startup
data:
  startup.sh: |-
    #!/bin/sh
    
    {{- if .Values.voltha_northbound_bbf_adapter.log_netopeer2 }}
    netopeer2-server -x {{ .Values.voltha_northbound_bbf_adapter.schema_mount_path }} -d -v3 > /netopeer2.log 2>&1 &
    {{- else }}
    netopeer2-server -x {{ .Values.voltha_northbound_bbf_adapter.schema_mount_path }}
    {{- end }}
    
    exec /app/bbf-adapter \
        --log_level={{ $log_level }} \
        --probe_address=:8080 \
        --trace_enabled={{ .Values.global.tracing.enabled }} \
        --trace_agent_address={{ tpl .Values.services.tracing_agent.address . }} \
        --log_correlation_enabled={{ .Values.global.log_correlation.enabled }} \
        --voltha_nbi_endpoint={{ .Values.global.voltha_stack_name }}-voltha-api.{{ .Values.global.voltha_stack_namespace }}.svc:{{ .Values.voltha_northbound_bbf_adapter.voltha_nbi_port }} \
        --tls_enabled={{ .Values.voltha_northbound_bbf_adapter.tls_enabled }} \
        --tls_verify={{ .Values.voltha_northbound_bbf_adapter.tls_verify }} \
        --onos_rest_endpoint={{ .Values.global.voltha_infra_name }}-onos-classic-hs.{{ .Values.global.voltha_infra_namespace }}.svc:{{ .Values.voltha_northbound_bbf_adapter.onos_rest_port }} \
        --onos_user={{ .Values.voltha_northbound_bbf_adapter.onos_user }} \
        --onos_pass={{ .Values.voltha_northbound_bbf_adapter.onos_pass }} \
        --schema_mount_path={{ .Values.voltha_northbound_bbf_adapter.schema_mount_path }} \
        --kafka_cluster_address={{ tpl .Values.services.kafka.cluster.address . }}