# 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 Tagsync service
#
#
#
#
# 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

#change password of rangerTagsync user. Please note that this password should be as per rangerTagsync user in ranger
rangerTagsync_password=

# Logs are stored in logdir
logdir = log

#PID file path
TAGSYNC_PID_DIR_PATH=/var/run/ranger

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



hadoop_conf=/etc/hadoop/conf
