#
# Cookbook Name:: hdp
# Recipe:: yum_repo
#
# Copyright 2013, whitestar
#
# Licensed 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.
#

def get_repo_urls(hdp_version, node_platform, node_platform_version)
  platform = nil
  case node_platform
    when 'centos', 'rhel'
      platform = "centos#{node_platform_version.split('.')[0]}"
    when 'suse'
      platform = 'suse11'
  end

  hdp_repo_ctx = nil
  ambari_repo_ctx = nil
  case hdp_version
    when '2.0.4.0'  # Community Preview (hadoop-2.1.0)
      hdp_repo_ctx = (node_platform == 'suse') ? nil : "HDP/#{platform}/2.x/GA"
      ambari_repo_ctx = nil
    when '2.0.0.2'  # Alpha (hadoop-2.0.3-alpha)
      hdp_repo_ctx = (node_platform == 'suse') ? nil : "HDP-2.0.0.2/repos/#{platform}"
      ambari_repo_ctx = nil
    when '2.0.0.1'  # Alpha (hadoop-2.0.2-alpha)
      hdp_repo_ctx = (node_platform == 'suse') ? nil : "HDP-2.0.0.1/repos/#{platform}"
      ambari_repo_ctx = nil
    when '1.3.1'  # (hadoop-1.2.0)
      hdp_repo_ctx = "HDP/#{platform}/1.x/GA/1.3.0.0"
      ambari_repo_ctx = "ambari/#{platform}/1.x/updates/1.2.4.9"
    when '1.3.0'
      hdp_repo_ctx = "HDP/#{platform}/1.x/GA/1.3.0.0"
      ambari_repo_ctx = "ambari/#{platform}/1.x/updates/1.2.3.7"
    when '1.2.4', '1.2.3.1', '1.2.3'  # (hadoop-1.1.2)
      normalized_platform = (node_platform == 'suse') ? 'centos5' : platform
      hdp_repo_ctx = "HDP/#{normalized_platform}/1.x/updates/1.2.1"
      ambari_repo_ctx = "ambari/#{normalized_platform}/1.x/updates/1.2.2.4"
    when '1.2.2', '1.2.1'
      hdp_repo_ctx = "HDP-1.2.0/repos/#{platform}"
      ambari_repo_ctx = "ambari/#{platform}/1.x/GA"
    when '1.2.0'
      hdp_repo_ctx = "HDP-1.2.0/repos/#{platform}"
      ambari_repo_ctx = nil
    else
      Chef::Application.fatal!("Non supported version: #{hdp_version}")
  end

  download_site_url = 'http://public-repo-1.hortonworks.com'

  return [
    (hdp_repo_ctx.nil?) ? nil : "#{download_site_url}/#{hdp_repo_ctx}/hdp.repo",
    (ambari_repo_ctx.nil?) ? nil : "#{download_site_url}/#{ambari_repo_ctx}/ambari.repo"
  ]
end

unless node[:kernel][:machine] == 'x86_64' then
  Chef::Application.fatal!("Non supported architecture: #{node[:kernel][:machine]}")
end

if node[:platform_family] == 'rhel' then
  hdp_repo_file = nil
  ambari_repo_file = nil

  case node[:platform]
    when 'centos', 'rhel'
      hdp_repo_file = '/etc/yum.repos.d/hdp.repo'
      ambari_repo_file = '/etc/yum.repos.d/ambari.repo'
    when 'suse'
      hdp_repo_file = '/etc/zypp/repos.d/hdp.repo'
      ambari_repo_file = '/etc/zypp/repos.d/ambari.repo'
  end

  hdp_version = node['hdp']['version']
  hdp_repo_url, ambari_repo_url \
    = get_repo_urls(hdp_version, node[:platform], node[:platform_version])

  hdp_repo_add_command \
    = (hdp_repo_url.nil?) ? '' : "wget -nv #{hdp_repo_url} -O #{hdp_repo_file}"
  ambari_repo_add_command \
    = (ambari_repo_url.nil?) ? '' : "wget -nv #{ambari_repo_url} -O #{ambari_repo_file}"

  pkg = 'wget'
  resources(:package => pkg) rescue package pkg do
    action :install
  end

  bash "add_hdp_yum_repositories-#{hdp_version}" do
    code <<-EOC
      #{hdp_repo_add_command}
      #{ambari_repo_add_command}
    EOC
    creates hdp_repo_file unless hdp_repo_url.nil?
    creates ambari_repo_file unless ambari_repo_url.nil?
  end
end
