#
# Define: cinder::backend::nvmeof
#
# === Parameters:
#
# [*target_ip_address*]
#   (Required) The IP address of NVMe target.
#
# [*target_port*]
#   (Required) Port that NVMe target is listening on.
#
# [*target_helper*]
#   (Required) Target user-land tool to use.
#
# [*target_protocol*]
#   (Required) Target rotocol to use.
#
# [*target_prefix*]
#   (Optional) Prefix for LVM volumes.
#   Defaults to '$::os_service_default'.
#
# [*nvmet_port_id*]
#   (Optional) Port id of the NVMe target.
#   Defaults to '1'.
#
# [*nvmet_ns_id*]
#   (Optional) The namespace id associated with the subsystem.
#   Defaults to '10'.
#
# [*volume_backend_name*]
#   (optional) Allows for the volume_backend_name to be separate of $name.
#   Defaults to: $name
#
# [*backend_availability_zone*]
#   (Optional) Availability zone for this volume backend.
#   If not set, the storage_availability_zone option value
#   is used as the default for all backends.
#   Defaults to $::os_service_default.
#
# [*volume_driver*]
#   (Optional) Driver to use for volume creation
#   Defaults to 'cinder.volume.drivers.lvm.LVMVolumeDriver'.
#
# [*volume_group*]
#   (Optional) Name for the VG that will contain exported volumes
#   Defaults to $::os_service_default
#
define cinder::backend::nvmeof (
  $target_ip_address,
  $target_port,
  $target_helper,
  $target_protocol,
  $target_prefix             = $::os_service_default,
  $nvmet_port_id             = '1',
  $nvmet_ns_id               = '10',
  $volume_backend_name       = $name,
  $backend_availability_zone = $::os_service_default,
  $volume_driver             = 'cinder.volume.drivers.lvm.LVMVolumeDriver',
  $volume_group              = $::os_service_default,
) {

  include cinder::deps
  include cinder::params

  cinder_config {
    "${name}/target_ip_address":         value => $target_ip_address;
    "${name}/target_port":               value => $target_port;
    "${name}/target_helper":             value => $target_helper;
    "${name}/target_protocol":           value => $target_protocol;
    "${name}/target_prefix":             value => $target_prefix;
    "${name}/nvmet_port_id":             value => $nvmet_port_id;
    "${name}/nvmet_ns_id":               value => $nvmet_ns_id;
    "${name}/volume_backend_name":       value => $volume_backend_name;
    "${name}/backend_availability_zone": value => $backend_availability_zone;
    "${name}/volume_driver":             value => $volume_driver;
    "${name}/volume_group":              value => $volume_group;
  }

  package { 'nvmetcli':
    ensure => present,
    name   => 'nvmetcli',
    tag    => 'cinder-support-package',
  }

  package { 'nvme-cli':
    ensure => present,
    name   => 'nvme-cli',
    tag    => 'cinder-support-package',
  }

}
