# @@@ START COPYRIGHT @@@
#
# 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.
#
# @@@ END COPYRIGHT @@@

[dbconfigs]
# NOTICE: if you are using CDH/HDP hadoop distro,
# you can only specifiy management url address for a quick install

##################################
# Common Settings
##################################

# trafodion username and password
traf_user = trafodion
traf_pwd = traf123
# trafodion user's home directory
home_dir = /home
# the directory location of trafodion binary
# if not provided, the default value will be {package_name}-{version}
traf_dirname =

# trafodion used java(JDK) path on trafodion nodes
# if not provided, installer will auto detect installed JDK
java_home =

# cloudera/ambari management url(i.e. http://192.168.0.1:7180 or just 192.168.0.1)
# if 'http' or 'https' prefix is not provided, the default one is 'http'
# if port is not provided, the default port is cloudera port '7180'
mgr_url =
# user name for cloudera/ambari management url
mgr_user = admin
# password for cloudera/ambari management url
mgr_pwd = admin
# set the cluster number if multiple clusters managed by one Cloudera manager
# ignore it if only one cluster being managed
cluster_no = 1

# trafodion tar package file location
# no need to provide it if the package can be found in current installer's directory
traf_package =

# trafodion log files location
# if not provided, it will be set to the /var/log/trafodion
traf_log =

# trafodion temporary working files location
# if not provided, it will be set to the /var/lib/trafodion
traf_var =

# the number of dcs servers on each node
dcs_cnt_per_node = 4

# scratch file location, separated by comma if more than one
scratch_locs = $TRAF_VAR

# start trafodion instance after installation completed
traf_start = Y


##################################
# DCS HA configuration
##################################

# set it to 'Y' if enable DCS HA
dcs_ha = N
# if HA is enabled, provide floating ip, network interface and the hostname of backup dcs master nodes
dcs_floating_ip =
# network interface that dcs used
dcs_interface =
# backup dcs master nodes, seperated by comma if more than one
dcs_backup_nodes =


##################################
# Offline installation setting
##################################

# set offline mode to Y if no internet connection
offline_mode = N
# if offline mode is set, you must provide a local repository directory with all needed RPMs
local_repo_dir =


##################################
# LDAP security configuration
##################################

# set it to 'Y' if enable LDAP security
ldap_security = N
# LDAP user to be assigned DB root privileges (DB__ROOT)
db_root_user = trafodion
# if LDAP security is enabled, provide the following items
ldap_hosts =
# 389 for no encryption or TLS, 636 for SSL
ldap_port = 389
ldap_identifiers =
ldap_encrypt = 0
ldap_certpath =

# set to Y if user info is needed
ldap_userinfo = N
# provide if ldap_userinfo = Y
ldap_user =
ldap_pwd =

##################################
# Kerberos security configuration
##################################
# if kerberos is enabled in your hadoop system, provide below info

# KDC server address
kdc_server =
# include realm, i.e. admin/admin@EXAMPLE.COM
admin_principal =
# admin password for admin principal, it is used to create trafodion user's principal and keytab
kdcadmin_pwd =

#######################################
# For Multi Instance support
#######################################
cluster_name = TRAFODION
traf_instance_name = TRAFODION
traf_instance_id = 1
traf_cluster_id = 1
traf_root_znode = /trafodion
