#
# Recipe:: default
#
# Copyright:: 2017 The Orchard, Inc.
#
# All rights reserved - Do Not Redistribute
#

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

    yum_repository 'orchard-sqlrelay' do
      description 'Orchard SQL Relay Repository'
      baseurl 'https://packagecloud.io/orchardit/sqlrelay/el/7/$basearch/'
      gpgcheck false
      gpgkey 'https://packagecloud.io/orchardit/sqlrelay/gpgkey'
      repo_gpgcheck true
      action :create
    end

    yum_repository 'orchard-snowflake' do
      description 'Orchard Snowflake Repository'
      baseurl 'https://packagecloud.io/orchardit/snowflake/el/7/$basearch/'
      gpgcheck false
      gpgkey 'https://packagecloud.io/orchardit/snowflake/gpgkey'
      repo_gpgcheck true
      action :create
    end

    packages = %w(
      epel-release
      gcc
      gcc-c++
      krb5-devel
      libcurl-devel
      libedit-devel
      libiodbc
      make
      openssl-devel
      pygpgme
      rudiments
      rudiments-debuginfo
      rudiments-devel
      sqlrelay
      sqlrelay-c++
      sqlrelay-c++-devel
      sqlrelay-c
      sqlrelay-c-devel
      sqlrelay-cachemanager
      sqlrelay-clients
      sqlrelay-common
      sqlrelay-common-devel
      sqlrelay-debuginfo
      sqlrelay-odbc
      sqlrelay-router
      sqlrelay-server-devel
      odbc-sqlrelay
      unixODBC
      unixODBC-devel
      unzip
      zip
    )

    packages.each do |name|
      package name
    end

    pinned_version_packages = %w(
      snowflake-odbc
    )

    pinned_version_packages.each do |pinned_package_name|
      package pinned_package_name do
        version node['package']['version'][pinned_package_name]
      end
    end

    # Make sure the firewall is installed and enabled
    firewall 'default' do
      action :install
    end

    firewall_rule 'ssh' do
      port 22
      protocol :tcp
      position 3
      command :allow
    end

    firewall_rule 'sqlrelay' do
      port 9000
      protocol :tcp
      position 10
      command :allow
    end

    node['sqlrelay']['odbc']['dsn'].each do |_dsn_name, dsn_info|
      if dsn_info['credentials_data_bag_name'] &&
         !dsn_info['credentials_data_bag_name'].empty?
        odbc_user_credentials = data_bag_item(
          'secrets', dsn_info['credentials_data_bag_name']
        )
        odbc_username = odbc_user_credentials['username'].chomp
        odbc_password = odbc_user_credentials['password'].chomp
      end

      template '/etc/odbc.ini' do
        source 'odbc.ini.erb'
        mode '0644'
        owner 'root'
        group 'root'
        if defined?(odbc_username) && defined?(odbc_password)
          variables(
            username: odbc_username,
            password: odbc_password
          )
        end
        notifies :restart, 'service[sqlrelay]', :immediately
      end
    end

    template '/etc/odbcinst.ini' do
      source 'odbcinst.ini.erb'
      mode '0644'
      owner 'root'
      group 'root'
      notifies :restart, 'service[sqlrelay]', :immediately
    end

    sqlrelay_directories = %w(
      /var/log/sqlrelay
      /var/log/sqlrelay/debug
      /var/run/sqlrelay
    )

    sqlrelay_directories.each do |sqlrelay_directory|
      directory sqlrelay_directory do
        owner node['sqlrelay']['runasuser']
        group node['sqlrelay']['runasgroup']
      end
    end

    node['sqlrelay']['instances'].each do |instance_name, instance_info|
      if instance_info['sqlrelay_credentials'] && !instance_info['sqlrelay_credentials'].empty?
        sqlrelay_user_credentials = data_bag_item('secrets', instance_info['sqlrelay_credentials'])
        sqlrelay_username = sqlrelay_user_credentials['username'].chomp
        sqlrelay_password = sqlrelay_user_credentials['password'].chomp
      else
        sqlrelay_username = 'sqlruser'
        sqlrelay_password = 'sqlrpassword'
      end

      instance_connection_credentials = data_bag_item('secrets', instance_info['connection_data_bag_name'])
      connection_user = instance_connection_credentials['username'].chomp
      connection_password = instance_connection_credentials['password'].chomp

      template "/etc/sqlrelay.conf.d/sqlrelay_#{instance_name}.conf" do
        source 'sqlrelay.conf.erb'
        mode '0644'
        owner 'root'
        group 'root'
        notifies :restart, 'service[sqlrelay]', :immediately
        variables(
          name: instance_name,
          sqlrelay_user: sqlrelay_username,
          sqlrelay_pass: sqlrelay_password,
          connection_user: connection_user,
          connection_password: connection_password
        )
      end
    end

    # Cron job to cleanup sqlrelay log directory
    cron 'sqlrelay_log_cleanup' do
      hour '1'
      user 'root'
      command '/bin/find /var/log/sqlrelay/debug/ -type f -mtime +14 -exec rm -rf {} \;'
    end

    service 'sqlrelay' do
      supports restart: true, status: true, reload: false
      action [:enable, :start]
    end

  end
end
