class profiles::ceph::osd_scheduler ( String[1] $scheduler = 'none', ) { $devices = $facts['ceph_osd_devices'] # no-op where the fact is absent/empty (VMs, non-OSD hosts have no ceph PVs) if $devices =~ Array[String[1], 1] { # strip /dev/ so the rule matches the udev KERNEL sysname (e.g. sda) $kernel_names = $devices.map |$dev| { regsubst($dev, '^.*/', '') } $sysname_matches = $kernel_names.map |$name| { "--sysname-match=${name}" } file { '/etc/udev/rules.d/60-ceph-osd-scheduler.rules': ensure => file, owner => 'root', group => 'root', mode => '0644', content => template('profiles/ceph/osd-scheduler.rules.erb'), notify => Exec['ceph-osd-scheduler-reload'], } # apply immediately; udev re-applies on reboot and device re-add $trigger = "udevadm trigger --subsystem-match=block --action=change ${join($sysname_matches, ' ')}" exec { 'ceph-osd-scheduler-reload': command => "udevadm control --reload-rules && ${trigger}", path => ['/usr/bin', '/bin', '/usr/sbin', '/sbin'], refreshonly => true, } } }