<?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.
-->
<!--
  Properties set here are picked up in the client.
  They are not passed to the AM
-->
<configuration>

  <property>
    <name>hostname</name>
    <value>morzine</value>
  </property>

  <property>
    <name>slider.client.resource.origin</name>
    <value>configs/${hostname}/slider</value>
    <description>This is just for diagnostics</description>
  </property>

  <property>
    <name>yarn.resourcemanager.address</name>
    <value>${hostname}:8032</value>
  </property>

  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://${hostname}:8020</value>
  </property>

  <property>
    <name>slider.zookeeper.quorum</name>
    <value>${hostname}:2181</value>
  </property>

  <!-- 
  This is a windows path as picked up from
   http://morzine:8088/conf
  -->
  <property>
    <name>yarn.application.classpath</name>
    <value>
      %HADOOP_CONF_DIR%,%HADOOP_COMMON_HOME%/share/hadoop/common/*,%HADOOP_COMMON_HOME%/share/hadoop/common/lib/*,%HADOOP_HDFS_HOME%/share/hadoop/hdfs/*,%HADOOP_HDFS_HOME%/share/hadoop/hdfs/lib/*,%HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/*,%HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/lib/*,%HADOOP_YARN_HOME%/share/hadoop/yarn/*,%HADOOP_YARN_HOME%/share/hadoop/yarn/lib/*
    </value>
  </property>

  <property>
    <name>slider.test.agent.enabled</name>
    <description>Flag to enable/disable Agent tests</description>
    <value>true</value>
  </property>


  <property>
    <name>slider.test.am.restart.time</name>
    <description>Time in millis to await an AM restart</description>
    <value>60000</value>
  </property>


</configuration>
