# profiles::storage::datavol # # This define manages the creation of a logical volume using the `lvm::volume` definition. # # Parameters: # $ensure - Ensure whether the logical volume is present or not. Defaults to 'present'. # $vg - Volume group name. No default. # $pv - Physical volume, typically the disk or partition device path. No default. # $fstype - Filesystem type for the logical volume. Defaults to 'ext3'. # $size - Size of the logical volume. undef = 100%FREE. Changing $size to cause a resize. # define profiles::storage::datavol ( Enum['present', 'absent'] $ensure = 'present', Enum['ext2', 'ext3', 'ext4', 'xfs', 'btrfs'] $fstype = 'xfs', String $vg = 'datavg', String $pv = '/dev/vdb', String $lv = 'data', String $owner = 'root', String $group = 'root', Stdlib::Filemode $mode = '0755', Stdlib::Absolutepath $mount = '/data', Optional[Variant[Pattern[/^\d+(M|G|T|P)$/], Integer]] $size = undef, Array[Enum[ 'defaults', 'ro', 'rw', 'sync', 'async', 'noatime', 'nodiratime', 'noexec', 'nosuid', 'nodev', 'remount', 'auto', 'noauto' ]] $mount_options = ['noatime', 'nodiratime'], ) { # Ensure the physical volume exists physical_volume { $pv: ensure => $ensure, before => Volume_group[$vg], } # Ensure the volume group exists volume_group { $vg: ensure => $ensure, physical_volumes => [$pv], before => Logical_volume[$lv], } # Ensure the logical volume exists logical_volume { $lv: ensure => $ensure, volume_group => $vg, size => $size, before => Filesystem["/dev/${vg}/${lv}"], } # Ensure the filesystem is created on the logical volume filesystem { "/dev/${vg}/${lv}": ensure => $ensure, fs_type => $fstype, require => Logical_volume[$lv], before => Mount[$mount], } # Ensure the mountpath exists file { $mount: ensure => directory, owner => $owner, group => $group, mode => $mode, } # Ensure the logical volume is mounted at the desired location mount { $mount: ensure => $ensure, device => "/dev/${vg}/${lv}", fstype => $fstype, options => $mount_options.join(','), require => Filesystem["/dev/${vg}/${lv}"], } }