# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.

[agent]
mb.urls                               =MB-URLS
mb.username                           =MB-USERNAME
mb.password                           =MB-PASSWORD
mb.publisher.timeout                  =MB-PUBLISHER-TIMEOUT
listen.address                        =LISTEN_ADDR
thrift.receiver.urls                  =CEP-URLS
thrift.server.admin.username          =CEP-ADMIN-USERNAME
thrift.server.admin.password          =CEP-ADMIN-PASSWORD
cep.stats.publisher.enabled           =ENABLE_HEALTH_PUBLISHER
lb.private.ip                         =LB_PRIVATE_IP
lb.public.ip                          =LB_PUBLIC_IP
enable.artifact.update                =ENABLE_ARTFCT_UPDATE
auto.commit                           =COMMIT_ENABLED
auto.checkout                         =CHECKOUT_ENABLED
artifact.update.interval              =ARTFCT_UPDATE_INT
artifact.clone.retries                =ARTFCT_CLONE_RETRIES
artifact.clone.interval               =ARTFCT_CLONE_INT
port.check.timeout                    =PORT_CHECK_TIMEOUT
enable.data.publisher                 =ENABLE-DATA-PUBLISHER
monitoring.server.ip                  =MONITORING-SERVER-IP
monitoring.server.port                =MONITORING-SERVER-PORT
monitoring.server.secure.port         =MONITORING-SERVER-SECURE-PORT
monitoring.server.admin.username      =MONITORING-SERVER-ADMIN-USERNAME
monitoring.server.admin.password      =MONITORING-SERVER-ADMIN-PASSWORD
log.file.paths                        =LOG_FILE_PATHS
APPLICATION_PATH                      =APPLICATION-PATH
metadata.service.url                  =METADATA-SERVICE-URL
super.tenant.repository.path          =/repository/deployment/server/
tenant.repository.path                =/repository/tenants/
enable.initial.artifact.backup        =ENABLE_INITIAL_ARTIFACT_UPDATE
