#
# Cookbook:: irrigate-cron
# Recipe:: 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]

    # Cleanup Postgresql 9 repo
    yum_repository 'pgdg96' do
      action :remove
    end

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

    # There are extra required packages for various scripts to run.
    packages = %w(
      centos-release-scl
      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
      postgresql14
      postgresql14-devel
      openssl-devel
      s3cmd
      samba-common
      sendmail
      sqlite-devel
      subversion
      sshpass
      unzip
      zip
    )

    packages.each do |name|
      package name
    end

    eol_packages = %w(
      postgresql
      postgresql-devel
      postgresql96
      postgresql96-libs
      postgresql96-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

    prod_cron_aws_credentials = data_bag_item('secrets', node['cron_host']['aws_credentials_data_bag_name'])
    aws_access_key_id = prod_cron_aws_credentials['access_key_id'].chomp
    aws_secret_access_key = prod_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

    template "#{home_directory}/.bashrc" do
      source '.bashrc.erb'
      owner service_user
      mode '0644'
    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

    # Configure SVN repositories
    svn_password = data_bag_item('secrets', 'svn_deploy_password')
    svn_deploy_password = svn_password['password'].chomp

    svn_directories = %w(
      /var/www/html
    )

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

    if node['svn']['hostsfile_override']
      file '/etc/hosts' do
        content '127.0.0.1 localhost' + 0x0D.chr + 0x0A.chr + '::1 localhost' + 0x0D.chr + 0x0A.chr + '10.40.0.22 svn.theorchard.com'
      end
    end

    subversion 'cron' do
      repository 'http://svn.theorchard.com/svn/orchard/trunk'
      revision 'HEAD'
      destination '/var/www/html'
      svn_username 'prod-deploy'
      svn_password svn_deploy_password
      user node['svn']['owner']
      group node['svn']['group']
      action :checkout
    end
  end
end
