<?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.
 */
-->
<!-- This is a special config file for properties used to monitor status of the service -->
<configuration supports_adding_forbidden="true">
  <!-- log4j.xml -->
  <property>
    <name>infra_solr_client_log_dir</name>
    <value>/var/log/ambari-infra-solr-client</value>
    <description>Directory for Solr client logs</description>
    <display-name>Infra Solr Client log dir</display-name>
    <value-attributes>
      <type>directory</type>
    </value-attributes>
    <on-ambari-upgrade add="true"/>
  </property>
  <property>
    <name>content</name>
    <display-name>log4j template</display-name>
    <description>This is the jinja template for log4j.properties file for infra solr client</description>
    <value/>
    <property-type>VALUE_FROM_PROPERTY_FILE</property-type>
    <value-attributes>
      <property-file-name>solr-client-log4j.properties.j2</property-file-name>
      <property-file-type>text</property-file-type>
    </value-attributes>
    <on-ambari-upgrade add="true"/>
  </property>
</configuration>
