# profiles::storage::cephfsvol define profiles::storage::cephfsvol ( Enum['present', 'absent', 'mounted'] $ensure = 'mounted', String $owner = 'root', String $group = 'root', Stdlib::Filemode $mode = '0755', Stdlib::Absolutepath $mount = '/shared', Array[Enum[ 'defaults', 'ro', 'rw', 'sync', 'async', 'noatime', 'nodiratime', 'noexec', 'nosuid', 'nodev', 'remount', 'auto', 'noauto' ]] $mount_options = ['noatime', 'nodiratime'], Variant[Stdlib::Host, Array[Stdlib::Host]] $cephfs_mon = 'ceph-mon.service.consul', Stdlib::Absolutepath $cephfs_path = '/', String $cephfs_name = 'admin', String $cephfs_fs = 'cephfs', Optional[Stdlib::Absolutepath] $keyring = undef, ) { # mkdir -p $mount_path mkdir::p {$mount: } # ensure the mount path exists file { $mount: ensure => directory, owner => $owner, group => $group, mode => $mode, require => [ Mkdir::P[$mount], Package['ceph-common'] ], } # join options into a comma seperated list $options = join($mount_options, ',') # if a ceph keyring is required, it will be added here if $keyring { $mount_options_string = "${options},fs=${cephfs_fs},name=${cephfs_name},secretfile=${keyring}" } else { $mount_options_string = "${options},fs=${cephfs_fs},name=${cephfs_name}" } # convert cephfs_servers (monitors) into a list $mon_addresses = $cephfs_mon ? { Array => join($cephfs_mon, ','), default => $cephfs_mon, } # manage the mount mount { $mount: ensure => $ensure, atboot => true, device => "${mon_addresses}:${cephfs_path}", fstype => 'ceph', options => $mount_options_string, require => File[$mount], } # unmount when the mount should be removed if $ensure == 'absent' { exec { "umount_${mount}": command => "umount ${mount}", onlyif => "mount | grep ${mount}", before => Mount[$mount], } } }