In an earlier thread on puppet-users there was a request for a patch.
This is what I could come up with without discussing much.

Points that I can think of:

- Perhaps a suffix of 'KiB' is better in this world where kB could be
interpreted as 1000 bytes.
- I'm no ruby linguist.
- no tests. I wouldn't know where to start.

Kai

diff --git a/lib/facter/memory.rb b/lib/facter/memory.rb
index 06640e6..9aa16da 100644
--- a/lib/facter/memory.rb
+++ b/lib/facter/memory.rb
@@ -18,6 +18,12 @@ require 'facter/util/memory'
             Facter::Memory.meminfo_number(name)
         end
     end
+    Facter.add("#{fact}kB") do
+        confine :kernel => :linux
+        setcode do
+           Facter::Memory.meminfo_real(name)
+        end
+    end
 end

 if Facter.value(:kernel) == "AIX" and Facter.value(:id) == "root"
@@ -36,6 +42,12 @@ if Facter.value(:kernel) == "AIX" and
Facter.value(:id) == "root"
             Facter::Memory.scale_number(swaptotal.to_f,"MB")
         end
     end
+    Facter.add("SwapSizekB") do
+       confine :kernel => :aix
+       setcode do
+           swaptotal.to_f * 1024.0
+       end
+    end

     Facter.add("SwapFree") do
         confine :kernel => :aix
@@ -43,6 +55,12 @@ if Facter.value(:kernel) == "AIX" and
Facter.value(:id) == "root"
             Facter::Memory.scale_number(swapfree.to_f,"MB")
         end
     end
+    Facter.add("SwapFreekB") do
+       confine :kernel => :aix
+       setcode do
+           swapfree.to_f * 1024.0
+       end
+    end
 end

 if Facter.value(:kernel) == "OpenBSD"
@@ -61,6 +79,12 @@ if Facter.value(:kernel) == "OpenBSD"
             Facter::Memory.scale_number(swaptotal.to_f,"kB")
         end
     end
+    Facter.add("SwapSizekB") do
+        confine :kernel => :openbsd
+        setcode do
+            swaptotal.to_f
+        end
+    end

     Facter.add("SwapFree") do
         confine :kernel => :openbsd
@@ -68,6 +92,12 @@ if Facter.value(:kernel) == "OpenBSD"
             Facter::Memory.scale_number(swapfree.to_f,"kB")
         end
     end
+    Facter.add("SwapFreekB") do
+        confine :kernel => :openbsd
+        setcode do
+            swapfree.to_f
+        end
+    end

     Facter.add("MemoryFree") do
         confine :kernel => :openbsd
@@ -77,6 +107,14 @@ if Facter.value(:kernel) == "OpenBSD"
         end
     end

+    Facter.add("MemoryFreekB") do
+        confine :kernel => :openbsd
+        memfree = Facter::Util::Resolution.exec("vmstat | tail -n 1 |
awk '{ print $5 }'")
+        setcode do
+            memfree.to_f
+        end
+    end
+
     Facter.add("MemoryTotal") do
         confine :kernel => :openbsd
         memtotal = Facter::Util::Resolution.exec("sysctl hw.physmem |
cut -d'=' -f2")
@@ -84,4 +122,13 @@ if Facter.value(:kernel) == "OpenBSD"
             Facter::Memory.scale_number(memtotal.to_f,"")
         end
     end
+
+    Facter.add("MemoryTotalkB") do
+        confine :kernel => :openbsd
+       # Byes!
+        memtotal = Facter::Util::Resolution.exec("sysctl hw.physmem |
cut -d'=' -f2")
+        setcode do
+            memtotal.to_f / 1024
+        end
+    end
 end
diff --git a/lib/facter/util/memory.rb b/lib/facter/util/memory.rb
index 2004491..fbe7c45 100644
--- a/lib/facter/util/memory.rb
+++ b/lib/facter/util/memory.rb
@@ -17,7 +17,12 @@ module Facter::Memory
     require 'thread'

     def self.meminfo_number(tag)
-        memsize = ""
+        scale_number(meminfo_real(tag), 'kB')
+    end
+
+    def self.meminfo_real(tag)
+        memsize = 0
+        memscale = ""
         Thread::exclusive do
             size, scale = [0, ""]
             File.readlines("/proc/meminfo").each do |l|
@@ -29,9 +34,13 @@ module Facter::Memory
                     size += $1.to_f
                 end
             end
-            memsize = scale_number(size, scale)
+            memsize = size
+            memscale = scale
         end

+        if memscale != 'kB'
+            raise "Unknown scale reported by meminfo: #{memscale}"
+        end
         memsize
     end

--
1.5.6.5

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to