packages = %w(
  lsscsi
  open-iscsi
  multipath-tools
)

packages.each do |iscsi_package|
  package iscsi_package
end

template '/etc/iscsi/iscsid.conf' do
  source 'etc_iscsi_iscsid.conf.erb'
  owner 'root'
  group 'root'
  mode '0644'
  variables(
    iscsi_node_startup: node['ceph']['iscsi']['node_startup']
  )
  notifies :restart, 'service[iscsid]', :immediately
end

template '/etc/iscsi/initiatorname.iscsi' do
  source 'etc_iscsi_initiatorname.iscsi.erb'
  owner 'root'
  group 'root'
  mode '0600'
  variables(
    initiator_name: node['ceph']['iscsi']['initiator_name']
  )
  notifies :restart, 'service[iscsid]', :immediately
end

service 'iscsid' do
  action :nothing
end

node['ceph']['iscsi']['interfaces'].each do |name, _config|
  iscsi_iface_name = "iface_#{name}"

  execute "create_iscsi_interface_#{iscsi_iface_name}" do
    command "iscsiadm -m iface -I #{iscsi_iface_name} -o new"
    not_if "iscsiadm -m iface | grep #{iscsi_iface_name}"
  end

  execute "set_interface_name_#{iscsi_iface_name}" do
    command "iscsiadm -m iface -I #{iscsi_iface_name} -o update -n iface.net_ifacename -v #{name}"
    not_if "iscsiadm -m iface -I #{iscsi_iface_name} | grep 'iface.net_ifacename = #{name}'"
  end
end

node['ceph']['iscsi']['portals'].each do |portal|
  execute "iscsi_discovery_#{portal}" do
    command "iscsiadm --mode discovery --portal #{portal} --type sendtargets"
    not_if "iscsiadm -m node | grep #{portal}:3260"
    notifies :restart, 'service[iscsi]', :immediately
  end
end

service 'iscsi' do
  action :nothing
end

template '/etc/multipath.conf' do
  source 'etc_multipath.conf.erb'
  owner 'root'
  group 'root'
  mode '0644'
  notifies :restart, 'service[multipathd]', :immediately
end

service 'multipathd' do
  action :nothing
end
