# 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.

# Elasticsearch plugin descriptor file
# This file must exist as 'plugin-descriptor.properties' in a folder named `elasticsearch`
# inside all plugins.
#
### example plugin for "foo"
#
# foo.zip <-- zip file for the plugin, with this structure:
#|____elasticsearch/
#| |____   <arbitrary name1>.jar <-- classes, resources, dependencies
#| |____   <arbitrary nameN>.jar <-- any number of jars
#| |____   plugin-descriptor.properties <-- example contents below:
#
# classname=foo.bar.BazPlugin
# description=My cool plugin
# version=2.0
# elasticsearch.version=2.0
# java.version=1.7
#
### mandatory elements for all plugins:
#
# 'description': simple summary of the plugin
description=Elasticsearch Security Plugin
#
# 'version': plugin's version
version=${project.version}
#
# 'name': the plugin name
name=ranger-elasticsearch-plugin
#
# 'classname': the name of the class to load, fully-qualified.
classname=org.apache.ranger.authorization.elasticsearch.plugin.RangerElasticsearchPlugin
#
# 'java.version': version of java the code is built against
# use the system property java.specification.version
# version string must be a sequence of nonnegative decimal integers
# separated by "."'s and may have leading zeros
java.version=${javac.target.version}
#
# 'elasticsearch.version': version of elasticsearch compiled against
elasticsearch.version=${elasticsearch.version}
### optional elements for plugins:
#
#  'extended.plugins': other plugins this plugin extends through SPI
#extended.plugins=${extendedPlugins}
#
# 'has.native.controller': whether or not the plugin has a native controller
has.native.controller=false
#
# 'requires.keystore': whether or not the plugin needs the elasticsearch keystore be created
requires.keystore=false
