#
# Cookbook:: irrigate-cron
# Recipe:: qa_orchard_repo
#
# Description: This recipe manages a cron host configured
# to run applications from the Orchard repository

if platform_family?('rhel')
  if node['platform_version'].start_with?('7')

    # Add MySQL community repo
    yum_repository 'mysql56-community' do
      description 'MySQL 5.6 Community Server'
      baseurl 'http://repo.mysql.com/yum/mysql-5.6-community/el/7/x86_64/'
      gpgkey 'https://repo.mysql.com/RPM-GPG-KEY-mysql'
      action :create
    end

    # Postgresql repo is specific to minor RHEL versions
    rhel_minor_split = node['platform_version'].split('.')
    rhel_minor_version = rhel_minor_split[0] + '.' + rhel_minor_split[1]

    # Add Postgresql 9.6 repo
    yum_repository 'pgdg96' do
      description 'PostgreSQL 9.6 for RHEL/CentOS'
      baseurl "https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-#{rhel_minor_version}-x86_64/"
      gpgkey [
        'https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG-96',
        'https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG',
      ]
      action :create
    end

    # There are extra required packages for various scripts to run.
    packages = %w(
      epel-release
      freetype-devel
      ftp
      gcc
      git
      httpd
      httpd-devel
      libevent
      libjpeg-turbo
      libjpeg-turbo-devel
      libmcrypt
      libmcrypt-devel
      libmemcached
      libpng-devel
      libtiff
      libtiff-devel
      libxml2-devel
      mysql-community-client
      mysql-devel
      postgresql96
      postgresql96-devel
      openssl-devel
      s3cmd
      samba-common
      sendmail
      sqlite-devel
      sshpass
      unzip
      zip
    )

    packages.each do |name|
      package name
    end

    eol_packages = %w(
      postgresql
      postgresql-devel
    )

    eol_packages.each do |eol_package_name|
      package eol_package_name do
        action :remove
      end
    end

    home_directory = node['cron_host']['service_user_home_directory']
    service_user   = node['cron_host']['service_user']

    # Create ".aws" directory for service user
    directory "#{home_directory}/.aws" do
      owner service_user
      mode '0755'
      recursive true
    end

    qa_cron_aws_credentials = data_bag_item('secrets', node['cron_host']['aws_credentials_data_bag_name'])
    aws_access_key_id       = qa_cron_aws_credentials['access_key_id'].chomp
    aws_secret_access_key   = qa_cron_aws_credentials['secret_access_key'].chomp

    template "#{home_directory}/.aws/credentials" do
      source 'aws_credentials.erb'
      owner service_user
      mode '0640'
      variables(
        aws_access_key_id: aws_access_key_id,
        aws_secret_access_key: aws_secret_access_key
      )
      sensitive true
    end

    # SSH Key for jenkins master authentication
    ssh_authorize_key 'jenkins@jenkins-master.theorchard.local' do
      key 'AAAAB3NzaC1yc2EAAAADAQABAAACAQDQLyir3adlxEtThY9PLvFz3hc26hFRfsnUs9tyb2IrKMATE8bL6rIjDGL3/W6X0uzjRPmfaXMxCIV3b1MjBUvrYIG2pVgJuXC6Q20+cdK7H3ho8+dyeYjEYbz4AhvGCNUXnolT2JmCbk0r+FfFU5g624TlbA5Xj5/9eh5aase1XAXN/aTrbBfbHc4GX6/iU+7TyVbK9jBOLzyxs07avnv0qhcDX5NMNVIo0h2MbqZIf4VvprnUahyxRRW1pGhKk2ySC8WnySNvgHkZolnGIOzESX4Xiqi0Bch/XkSwTvp1acouP5nEnWAUY7EkPjexd5yCgp/Jl/VX3Adwd1gBXFhldW3vTpv1uTydslwnZ1+tlJQ/zkvAKRB2lCDiNf+Il8v2v7Oggib9Ec9O+OIznbDlC1SVg46Icg2/uKSlEgfkltCN+H7fbq6Ai9IVlUQ0ICS/OJoN3zyXYip3TVCOjGY7GfV8Rx3Q+rbLVN2DELJk0H1Q839Mk01cVukapvSjLAz1b17i8+aeU8IqU7xpsDlgqO+fBjLoDAGaBmdmsFB6x2gz5jNq076tXT1vaeA9beepRdX2IEm0x2yE35zZd0r5WLkx2E9Z6duGw4U9ZkD5spIrSUYp10DdRyt4HZ8g0IbYDAH0TxGayboE0e5DJ0hpnFFzHk4OKbwrVb8P9NZDtQ=='
      user node['ssh']['jenkins_user']
    end

    # Ensure requisite directories are created and writable
    git_directories = %w(
      /var/www/html
    )

    git_directories.each do |directory_name|
      directory directory_name do
        owner node['git']['owner']
        group node['git']['group']
        mode '0755'
        action :create
      end
    end

    git 'cron' do
      repository 'git@github.com:/theorchard/orchard.git'
      reference 'master'
      destination '/var/www/html'
      user node['git']['owner']
      group node['git']['group']
      action :checkout
    end
  end
end
