<?xml version="1.0" encoding="UTF-8"?>
<?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.

-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>{{ hdfs_root }}</value>
  </property>
  <property>
    <name>dfs.client.read.shortcircuit</name>
    <value>true</value>
  </property>
  <property>
    <name>dfs.domain.socket.path</name>
    <value>/var/lib/hadoop-hdfs/dn_socket</value>
  </property>
{% if hdfs_ha %}
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>{{ zookeeper_connect }}</value>
  </property>
{% endif %}
{% if cluster_type == 'azure' and use_adlsg2 %}
  <property>
    <name>fs.azure.account.auth.type</name>
    <value>OAuth</value>
  </property>
  <property>
    <name>fs.azure.account.oauth.provider.type</name>
    <value>org.apache.hadoop.fs.azurebfs.oauth2.MsiTokenProvider</value>
  </property>
  <property>
    <name>fs.azure.account.oauth2.msi.tenant</name>
    <value>{{ azure_tenant_id}}</value>
  </property>
  <property>
    <name>fs.azure.account.oauth2.client.id</name>
    <value>{{ azure_client_id }}</value>
  </property>
  <property>
    <name>fs.azure.use.upn</name>
    <value>true</value>
  </property>
  <property>
    <name>fs.azure.identity.transformer.service.principal.substitution.list</name>
    <value>*</value>
  </property>
  <property>
    <name>fs.azure.identity.transformer.service.principal.id</name>
    <value>{{ principal_id }}</value>
  </property>
{% endif %}
</configuration>
