<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
/**
 * 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.
 */
-->

<configuration>
  <property>
    <name>instance.name</name>
    <value>accumulo-instance</value>
    <description>Accumulo Instance Name.</description>
  </property>
  <property>
    <name>instance.zookeeper.host</name>
    <value>${@//site/accumulo-site/instance.zookeeper.host}</value>
    <description>Zookeeper hosts.</description>
  </property>
  <property>
    <name>instance.zookeeper.timeout</name>
    <value>${@//site/accumulo-site/instance.zookeeper.timeout}</value>
    <description>Zookeeper timeout.</description>
  </property>
  <property>
    <name>instance.rpc.ssl.enabled</name>
    <value>${@//site/accumulo-site/instance.rpc.ssl.enabled}</value>
    <description>SSL enabled.</description>
  </property>
  <property>
    <name>instance.rpc.ssl.clientAuth</name>
    <value>${@//site/accumulo-site/instance.rpc.ssl.clientAuth}</value>
    <description>SSL client auth enabled.</description>
  </property>
  <property>
    <name>instance.rpc.sasl.enabled</name>
    <value>${@//site/accumulo-site/instance.rpc.sasl.enabled}</value>
    <description>SASL enabled.</description>
  </property>
  <property>
    <name>rpc.sasl.qop</name>
    <value>${@//site/accumulo-site/rpc.sasl.qop}</value>
    <description>Quality of protection used for SASL.</description>
  </property>
  <property>
    <name>rpc.useJsse</name>
    <value>${@//site/accumulo-site/rpc.useJsse}</value>
    <description>Use JSSE system properties to configure SSL.</description>
  </property>
  <property>
    <name>trace.span.receivers</name>
    <value>${@//site/accumulo-site/trace.span.receivers}</value>
    <description>Span receivers for Accumulo tracing.</description>
  </property>
  <property>
    <name>trace.zookeeper.path</name>
    <value>${@//site/accumulo-site/trace.zookeeper.path}</value>
    <description>ZooKeeper path where Accumulo tracers register.</description>
  </property>
</configuration>
