Facter.add('blkid') do setcode do lines = Facter::Core::Execution.execute('blkid').split("\n") out = {} lines.each do |line| a = line.match(/^([^:]*):(.*)/) d = {} remaining = a[2] while m = remaining.match(/ (\w*)="([^"]*)"/) do d[m[1]] = m[2] remaining = m.post_match end out[a[1]] = d end out end end