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

<% namenode_hosts = Array(@hadoop_namenode_host) -%>
<configuration>
  <property>
    <name>httpfs.hadoop.config.dir</name>
    <value>/etc/hadoop/conf</value>
  </property>

<% if @hadoop_core_proxyusers -%>
<% @hadoop_core_proxyusers.sort.each do |superuser, data| -%>
  <property>
    <name>httpfs.proxyuser.<%= superuser %>.hosts</name>
    <value><%= data['hosts'] %></value>
  </property>
  <property>
    <name>httpfs.proxyuser.<%= superuser %>.groups</name>
    <value><%= data['groups'] %></value>
  </property>
<% end -%>
<% end -%>

<% if @hadoop_security_authentication == "kerberos" -%>
  <property>
    <name>httpfs.authentication.type</name>
    <value>kerberos</value>
  </property>
  <property>
    <name>kerberos.realm</name>
    <value><%= @kerberos_realm %></value>
  </property>
  <property>
    <name>httpfs.authentication.kerberos.principal</name>
    <value>HTTP/<%= @fqdn %></value>
  </property>
  <property>
    <name>httpfs.authentication.kerberos.keytab</name>
    <value>/etc/httpfs.keytab</value>
  </property>

  <property>
    <name>httpfs.hadoop.authentication.type</name>
    <value>kerberos</value>
  </property>
  <property>
    <name>httpfs.hadoop.authentication.kerberos.principal</name>
    <value>httpfs/<%= @fqdn %></value>
  </property>
  <property>
    <name>httpfs.hadoop.authentication.kerberos.keytab</name>
    <value>${httpfs.authentication.kerberos.keytab}</value>
  </property>
<% end -%>
</configuration>
