libs: add ceph_osd_devices fact listing ceph OSD block devices
ci/woodpecker/pr/puppet-lint Pipeline was successful
ci/woodpecker/pr/ruby-validate Pipeline was successful
ci/woodpecker/pr/yamllint Pipeline was successful
ci/woodpecker/pr/bolt-validate Pipeline was successful
ci/woodpecker/pr/erb-validate Pipeline was successful
ci/woodpecker/pr/epp-validate Pipeline was successful
ci/woodpecker/pr/puppet-validate Pipeline was successful
ci/woodpecker/pr/ruby-check Pipeline was successful

A forthcoming profile needs to set the I/O scheduler to noop/none on
disks backing ceph OSDs. Puppet needs to know which block devices those
are, which requires inspecting LVM PVs whose VG belongs to ceph.

- add ceph_osd_devices fact returning the sorted array of PV device
  paths whose volume group name starts with ceph-
- confine the fact to physical Linux hosts that have pvs installed so it
  never resolves on VMs

Claude-Session: https://claude.ai/code/session_01JUoARVdmhxKQHyyyp1pxeT
This commit is contained in:
2026-08-02 16:57:34 +10:00
parent dd38651a9f
commit ab23957f43
@@ -0,0 +1,23 @@
# frozen_string_literal: true
require 'facter'
Facter.add(:ceph_osd_devices) do
confine kernel: 'Linux'
confine { Facter.value(:is_virtual) == false }
confine { Facter::Core::Execution.which('pvs') }
setcode do
devices = []
output = Facter::Core::Execution.execute(
'pvs --noheadings -o pv_name,vg_name 2>/dev/null',
on_fail: nil
)
output&.each_line do |line|
pv_name, vg_name = line.split
next unless pv_name && vg_name
devices << pv_name if vg_name.start_with?('ceph-')
end
devices.sort
end
end