<?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>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>{{ zookeeper_connect }}</value>
  </property>
{% if use_adlsg2 == True %}
  <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>
