#
# Cookbook:: irrigate-jenkins
# Recipe:: chef_ci
#
# Copyright:: (C) 2017 The Orchard
#

# Add ssh private key for github integration
ci_user = node['chef_ci']['ci_user']
ci_user_home = node['chef_ci']['ci_user_home']
github_key_data_bag_name = node['chef_ci']['github_key_data_bag']
github_key_data_bag = data_bag_item('secrets', github_key_data_bag_name)
github_ssh_key = github_key_data_bag['private_key'].chomp

directory "#{ci_user_home}/.ssh" do
  owner ci_user
  group ci_user
  mode '0700'
  recursive true
end

github_ssh_key_location = "#{ci_user_home}/.ssh/github_rsa"
file github_ssh_key_location do
  owner ci_user
  mode '0400'
  content github_ssh_key
end

ssh_config 'github.com' do
  options 'User' => 'git', 'IdentityFile' => github_ssh_key_location
  user ci_user
end

# Sync git repo with CI tools
git "#{ci_user_home}/irrigate-chef-ci" do
  repository node['chef_ci']['repository']
  user ci_user
end

gem_package 'activesupport' do
  options '--no-user-install --conservative'
  version '6.1.6.1'
end

gem_package 'train' do
  options '--no-user-install --conservative'
  version '3.9.2'
end

gem_package 'inspec' do
  options '--no-user-install --conservative'
  version '4.56.20'
end

gem_package 'berkshelf' do
  options '--no-user-install --conservative'
  version '8.0.0'
end

gem_packages = node['chef_ci']['gem_packages']
gem_packages.each do |pkg|
  gem_package pkg do
    gem_binary '/opt/chef/embedded/bin/gem'
    options '--no-user-install --conservative'
    action :install
  end
end

# We use ECR as a docker registry
ecr_urls = node['chef_ci']['ecr_urls']
unless ecr_urls.empty?
  ecr_registries = ecr_urls.map { |s| s.split('/').first }.uniq
  ecr_registries.each do |registry|
    ecr_region = registry.split('.')[3]
    docker_registry "#{registry}/" do
      username 'AWS'
      password lazy { `aws ecr get-login --no-include-email --region #{ecr_region} | cut -d ' ' -f6` }
      email 'none'
    end
  end

  ecr_urls.each do |ecr|
    docker_image 'docker-image' do
      repo ecr
      tag 'latest'
      action :pull
      read_timeout 600
    end
  end
end

# Gem packages are located in /opt/chef/embedded/bin/
# Add /opt/chef/embedded/bin/ to the PATH
file "#{ci_user_home}/.chef_profile" do
  owner ci_user
  group ci_user
  mode '0644'
  content 'PATH=$PATH:/opt/chef/embedded/bin'
end
