<?xml version="1.0"?>
<!--
   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.
-->
<reposinfo>
  <os type="centos6">
    <repo>
      <baseurl>http://public-repo-1.hortonworks.com/HDP-1.2.0/repos/centos6</baseurl>
      <repoid>HDP-1.2.0</repoid>
      <reponame>HDP</reponame>
    </repo>
    <repo>
      <baseurl></baseurl>
      <repoid>HDP-epel</repoid>
      <reponame>HDP-epel</reponame>
      <mirrorslist><![CDATA[http://mirrors.fedoraproject.org/mirrorlist?repo=epel-6&arch=$basearch]]></mirrorslist>
    </repo>
  </os>
  <os type="centos5">
    <repo>
      <baseurl>http://public-repo-1.hortonworks.com/HDP-1.2.0/repos/centos5</baseurl>
      <repoid>HDP-1.2.0</repoid>
      <reponame>HDP</reponame>
    </repo>
    <repo>
      <baseurl></baseurl>
      <repoid>HDP-epel</repoid>
      <reponame>HDP-epel</reponame>
      <mirrorslist><![CDATA[http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch]]></mirrorslist>
    </repo>
  </os>
  <os type="redhat6">
    <repo>
      <baseurl>http://public-repo-1.hortonworks.com/HDP-1.2.0/repos/centos6</baseurl>
      <repoid>HDP-1.2.0</repoid>
      <reponame>HDP</reponame>
    </repo>
    <repo>
      <baseurl></baseurl>
      <repoid>HDP-epel</repoid>
      <reponame>HDP-epel</reponame>
      <mirrorslist><![CDATA[http://mirrors.fedoraproject.org/mirrorlist?repo=epel-6&arch=$basearch]]></mirrorslist>
    </repo>
  </os>
  <os type="redhat5">
    <repo>
      <baseurl>http://public-repo-1.hortonworks.com/HDP-1.2.0/repos/centos5</baseurl>
      <repoid>HDP-1.2.0</repoid>
      <reponame>HDP</reponame>
    </repo>
    <repo>
      <baseurl></baseurl>
      <repoid>HDP-epel</repoid>
      <reponame>HDP-epel</reponame>
      <mirrorslist><![CDATA[http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch]]></mirrorslist>
    </repo>
  </os>
  <os type="suse11">
    <repo>
      <baseurl>http://public-repo-1.hortonworks.com/HDP-1.2.0/repos/suse11</baseurl>
      <repoid>HDP-1.2.0</repoid>
      <reponame>HDP</reponame>
    </repo>
    <repo>
      <baseurl>http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.15/repos/suse11</baseurl>
      <repoid>HDP-UTILS-1.1.0.15</repoid>
      <reponame>HDP-UTILS</reponame>
      <mirrorslist></mirrorslist>
    </repo>
  </os>
    <os type="sles11">
    <repo>
      <baseurl>http://public-repo-1.hortonworks.com/HDP-1.2.0/repos/suse11</baseurl>
      <repoid>HDP-1.2.0</repoid>
      <reponame>HDP</reponame>
    </repo>
    <repo>
      <baseurl>http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.15/repos/suse11</baseurl>
      <repoid>HDP-UTILS-1.1.0.15</repoid>
      <reponame>HDP-UTILS</reponame>
      <mirrorslist></mirrorslist>
    </repo>
  </os>
</reposinfo>
