Stephan
2012-Sep-04 16:39 UTC
[Puppet Users] Display partitions with facter and the inventory database
Hi, if anyone is interested, here''s a way to get kind of a report of hard disks that are spilling over with the help of facter and the use of the facts inventory DB. I''m using this fact called mounts.rb (can''t remember where I got it from, just remember that I had to change df #{mount} to df -P #{mount} to make it work with long mount points): mounts = []> mntpoints=`mount -t ext2,ext3,ext4,reiserfs,xfs` > mntpoints.split(/\n/).each do |m| > mount = m.split(/ /)[2] > mounts << mount > end > > Facter.add("mounts") do > confine :kernel => :linux > > setcode do > mounts.join('','') > end > end > > mounts.each do |mount| > output = %x{df -P #{mount}} > output.each do |str| > dsk_size = nil > dsk_used = nil > dsk_avail = nil > if str =~ /^\S+\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+/ > dsk_size = $1 > dsk_used = $2 > dsk_avail = $3 > Facter.add("mount_#{mount}_size") do > setcode do > dsk_size > end > end > Facter.add("mount_#{mount}_used") do > setcode do > dsk_used > end > end > Facter.add("mount_#{mount}_avail") do > setcode do > dsk_avail > end > end > end > end > end >Then in the inventory MySQL database I created these two views, which are prereqs for the actual query: create view mount_extended as (select node_id, substring_index(name,"_",2)> as name, value, case when name regexp "mount_.*_avail" then value end as > avail, case when name regexp "mount_.*_size" then value end as size, case > when name regexp "mount_.*_used" then value end as used from > inventory_facts where name regexp "mount_"); > > create view mount_pivot as (select inventory_nodes.name as hostname, > trim(leading "mount_" from mount_extended.name) as name, sum(avail) as > avail, sum(size) as size, sum(used) as used from mount_extended, > inventory_nodes where (mount_extended.node_id = inventory_nodes.id) group > by node_id, mount_extended.name); >And the actual query looks like this: select hostname as Hostname, name as Mountname, round(avail/1000,0) as> "Free in MB", round(size/1000,0) as "Total in MB", round(used/1000,0) as > "Used in MB", round(100-100*avail/size,1) as "% used" from mount_pivot > where round(100-100*avail/size) >= 80 order by avail; >I know this is a bit hacky, but it works for my purposes. -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/rLgWxhJd_GMJ. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.