#
# Cookbook:: irrigate-orchard_base
# Recipe:: qualys
#
# Copyright: The Orchard
#

# Get data bag with qualys credentials
secret = node['qualys']['use_default_data_bag_secret_file'] ? nil : IO.read(node['qualys']['qualys_data_bag_secret_file_path']).chomp
data_bag_name = node['qualys']['qualys_credentials_data_bag_name']
qualys_credentials = data_bag_item('secrets', data_bag_name, secret)

# apt repo read token

arch_map = {
  'x86_64' => 'amd64',
  'amd64' => 'amd64',
  'aarch64' => 'arm64',
  'arm64' => 'arm64',
}
apt_arch = arch_map.fetch(node.dig('kernel', 'machine').to_s, 'amd64')
debian_package_version = node['qualys']['debian_package'][apt_arch]['version']

codename = node['lsb']['codename']

apt_data_bag_name = node['qualys']['debian_package'][apt_arch][codename]['data_bag_name']
packagecloud_apt_credentials = data_bag_item('secrets', apt_data_bag_name, secret)

packagecloud_apt_read_token = packagecloud_apt_credentials['packagecloud_read_token'].chomp

tmp_path = "#{Chef::Config[:file_cache_path]}"
remote_file "#{tmp_path}/qualys-cloud-agent.deb" do
  source "https://packagecloud.io/orchardit/qualys/packages/debian/#{codename}/qualys-cloud-agent_" \
  "#{debian_package_version}_#{apt_arch}.deb/download.deb?distro_version_id=#{node['qualys']['debian_package'][apt_arch][codename]['distro_version_id']}&" \
  "read_token=#{packagecloud_apt_read_token}"
end

bash 'install_qualys_deb' do
  code <<-EOH
    dpkg -i #{tmp_path}/qualys-cloud-agent.deb
  EOH
  environment({ 'PATH' => '/usr/sbin:/sbin:/usr/bin:/bin' })
  retries 10
  retry_delay 10
end

activation_id = qualys_credentials['activation_id'].chomp
customer_id = qualys_credentials['customer_id'].chomp

execute 'configure_and_enable_qualys' do
  command '/usr/local/qualys/cloud-agent/bin/qualys-cloud-agent.sh ' \
            "ActivationId=#{activation_id} CustomerId=#{customer_id}" \
            '&& touch /var/cache/.qualysenabled'
  creates '/var/cache/.qualysenabled'
  notifies :restart, 'service[qualys-cloud-agent]'
end

service 'qualys-cloud-agent' do
  supports restart: true, status: true, reload: false
  action %i(enable start)
end
