# follow the instructions for creating a loopback device
# for storage from: https://docs.openstack.org/swift/latest/development_saio.html
#
# this define needs to be sent a refresh signal to do anything
#
# === Parameters:
#
# [*device*]
#   (mandatory) An array of devices (prefixed or not by /dev)
#
# [*mnt_base_dir*]
#   (optional) The directory where the flat files that store the file system
#   to be loop back mounted are actually mounted at.
#   Defaults to '/srv/node', base directory where disks are mounted to
#
# [*byte_size*]
#   (optional) The byte size that dd uses when it creates the file system.
#   Defaults to '1024', block size for the disk.  For very large partitions, this should be larger
#   It is recommend to use 1024 to ensure that the metadata can fit in a single inode.
#
# [*loopback*]
#   (optional) Define if the device must be mounted as a loopback or not
#   Defaults to false.
#
define swift::storage::ext4(
  $device,
  $byte_size    = '1024',
  $mnt_base_dir = '/srv/node',
  $loopback     = false
) {

  include swift::deps
  # does this have to be refreshonly?
  # how can I know if this drive has been formatted?
  exec { "mkfs-${name}":
    command     => "mkfs.ext4 -I ${byte_size} -F ${device}",
    path        => ['/sbin/'],
    refreshonly => true,
    before      => Anchor['swift::config::end'],
  }

  swift::storage::mount { $name:
    device       => $device,
    mnt_base_dir => $mnt_base_dir,
    loopback     => $loopback,
    fstype       => 'ext4',
  }

  Exec<| title == "mkfs-${name}" |>
  ~> Swift::Storage::Mount<| title == $name |>

}
