#########
#  ============LICENSE_START====================================================
#  org.onap.aaf
#  ===========================================================================
#  Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
#  ===========================================================================
#  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.
#  ============LICENSE_END====================================================
#
################################
# Locator info
#
# Sample versions for 
#   1) no container
#   2) Docker
#   3) Helm (Kubernetes and Helm)
#   4) OOM (Kubernetes with OOM)
################################
aaf_locator_app_ns=%AAF_NS
aaf_locator_name=%NS.%N
aaf_locator_name.docker=%CNS.%NS.%N
aaf_root_ns=org.osaaf.aaf

# Dublin
aaf_locator_name.oom=%NS.%N
aaf_locator_name.helm=%NS.%N
aaf_locator_public_name.oom=public.%NS.%N
aaf_locator_public_name.helm=public.%NS.%N

# EL Alto and beyond
# aaf_locator_name.oom=%CNS.%NS.%N
# aaf_locator_name.helm=%CNS.%NS.%N

aaf_locator_fqdn.docker=aaf-%N
aaf_locator_fqdn.helm=aaf-%N.%CNS
aaf_locator_fqdn.oom=aaf-%N.%CNS

# initial trusted CAs
cadi_x509_issuers=CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_7, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_9, OU=OSAAF, O=ONAP, C=US
