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

<cluster colo="gs" description="" name="corp" xmlns="uri:falcon:cluster:0.1"
        >
    <interfaces>
        <interface type="readonly" endpoint="http://localhost:50070"
                   version="0.20.2"/>
        <interface type="write" endpoint="hdfs://localhost:8020" version="0.20.2"/>
        <interface type="execute" endpoint="localhost:8021" version="0.20.2"/>
        <interface type="workflow" endpoint="http://localhost:11000/oozie/"
                   version="3.1"/>
        <interface type="messaging" endpoint="tcp://localhost:61616?daemon=true"
                   version="5.1.6"/>
        <interface type="registry" endpoint="Hcat" version="1"/>
    </interfaces>
    <locations>
        <location name="temp" path="/tmp"/>
        <location name="working" path="/projects/falcon/working"/>
        <location name="staging" path="/projects/falcon/staging"/>
    </locations>
</cluster>