#
# Cookbook:: irrigate-ceph
# Recipe:: default
#
# Copyright:: 2023, All Rights Reserved.

packages = %w(
  apt-transport-https
  cloud-guest-utils
  curl
  gnupg
  jq
  lvm2
  neovim
  python3
  python3-dev
)

packages.each do |package_name|
  package package_name
end

apt_repository 'docker' do
  components ['stable']
  uri "https://download.docker.com/linux/#{node['platform']}"
  arch 'amd64'
  key "https://download.docker.com/linux/#{node['platform']}/gpg"
  action :add
end

directory '/etc/docker' do
  owner 'root'
  group 'root'
  mode '0755'
end

template '/etc/docker/daemon.json' do
  source 'etc_docker_daemon.json.erb'
  owner 'root'
  group 'root'
  mode '0644'
  variables(
    config: node['docker']['daemon']
  )
end

package 'docker-ce'

apt_repository 'ceph' do
  components ['main']
  uri "https://download.ceph.com/#{node['platform']}-#{node['ceph']['release']}"
  arch 'amd64'
  key 'https://download.ceph.com/keys/release.asc'
  action :add
end

package 'cephadm' do
  options '--no-install-recommends'
end

package 'ceph-common'

# SSH user for connecting to other hosts in the cluster (for admin operations)
user node['ceph']['ssh']['user'] do
  shell '/bin/bash'
  home "/home/#{node['ceph']['ssh']['user']}"
  manage_home true
end

# Ceph requires passwordless sudo access - see https://docs.ceph.com/en/quincy/cephadm/host-management/#configuring-a-different-ssh-user
sudo node['ceph']['ssh']['user'] do
  user node['ceph']['ssh']['user']
  nopasswd true
end

# Allow SSH from other hosts in the cluster (for admin operations)
ssh_authorize_key node['ceph']['ssh']['user'] do
  user node['ceph']['ssh']['user']
  group node['ceph']['ssh']['user']
  key node['ceph']['ssh']['public_key']
  keytype node['ceph']['ssh']['key_type']
end

cookbook_file '/usr/local/bin/ceph-dashboard-monitor.sh' do
  source 'ceph-dashboard-monitor.sh'
  mode '0755'
  owner 'root'
  group 'root'
end

cron 'ceph-dashboard-monitor' do
  minute '*/5'
  command 'timeout -k 120 60 /usr/local/bin/ceph-dashboard-monitor.sh >/dev/null 2>&1'
end
