# 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.
#
#
# This file provides a list of the deployment variables for the Ranger KMS Web Application
#
#
#
#
# URL for tag destination - Ranger
TAG_DEST_RANGER_ENDPOINT = http://localhost:6080

# SSL config file name for HTTPS messages to tag destination - Ranger
TAG_DEST_RANGER_SSL_CONFIG_FILENAME =

TAG_SOURCE_ATLAS_ENABLED = true

# Endpoint specifications needed by Atlas
TAG_SOURCE_ATLAS_KAFKA_BOOTSTRAP_SERVERS = localhost:6667
TAG_SOURCE_ATLAS_KAFKA_ZOOKEEPER_CONNECT = localhost:2181
TAG_SOURCE_ATLAS_KAFKA_ENTITIES_GROUP_ID = ranger_entities_consumer

TAG_SOURCE_ATLAS_KAFKA_SERVICE_NAME = kafka
TAG_SOURCE_ATLAS_KAFKA_SECURITY_PROTOCOL = PLAINTEXTSASL

TAG_SOURCE_ATLAS_KERBEROS_PRINCIPAL =
TAG_SOURCE_ATLAS_KERBEROS_KEYTAB =

TAG_SOURCE_ATLASREST_ENABLED = false

TAG_SOURCE_ATLASREST_ENDPOINT = http://localhost:21000
TAG_SOURCE_ATLASREST_DOWNLOAD_INTERVAL_IN_MILLIS = 900000

TAG_SOURCE_ATLASREST_USERNAME =
TAG_SOURCE_ATLASREST_PASSWORD =

TAG_SOURCE_FILE_ENABLED = false

TAG_SOURCE_FILE_FILENAME = /etc/ranger/data/tags.json
TAG_SOURCE_FILE_CHECK_INTERVAL_IN_MILLIS = 60000

# Mapping from Atlas hive cluster-name to Ranger service-name
# this needs to be in format clusterName,componentType,serviceName;clusterName2,componentType2,serviceName2
# Note that there are no blanks anywhere in the value-string
#
# For Hive, the notifications from Atlas include the name of the entities in the following format:
#    dbName@clusterName
#    dbName.tblName@clusterName
#    dbName.tblName.colName@clusterName
#
# Ranger-tagsync needs to derive the name of the Hive service (in Ranger) from the above entity names.
# By default, Ranger computes Hive service name as: clusterName + “_hive".
# If the name of the Hive service (in Ranger) is different in your environment, please use
# following property to enable Ranger-tagsync to derive the correct Hive service name.
#
# TAGSYNC_ATLAS_TO_RANGER_SERVICE_MAPPING = clusterName,hive,rangerServiceName
#

TAGSYNC_ATLAS_TO_RANGER_SERVICE_MAPPING=

# A comma separated list of custom mapper class names which convert Atlas entities to
# RangerServiceResource structures are specified here. If there are no custom mappers,
# then it can be left blank

TAGSYNC_ATLAS_CUSTOM_RESOURCE_MAPPERS=

#
# The file where all credential is kept in cryptic format
#
TAGSYNC_KEYSTORE_FILENAME = /etc/ranger/tagsync/conf/rangertagsync.jceks

# File where Atlas credentials is kept in cryptic format

TAG_SOURCE_ATLASREST_KEYSTORE_FILENAME = /etc/ranger/tagsync/conf/atlasuser.jceks

# SSL config file name for HTTPS messages to tag source - Atlas-REST
TAG_SOURCE_ATLASREST_SSL_CONFIG_FILENAME =

#User and group for the tagsync process
unix_user=ranger
unix_group=ranger

# Logs are stored in logdir
logdir = log

#Set to run in kerberos environment
is_secure = false
tagsync_principal=
tagsync_keytab=



hadoop_conf=/etc/hadoop/conf
