another option that I use is to extend the string class in ruby, that would
allow you to do something like:

Facter.memorysize.to_gb

in order to do that add somewhere (e.g. before your custom fact)

class String
  def to_gb
    begin
      value,unit=self.match(/(\d+|.+) ([KMG]B)$/i)[1..2]
      case unit.to_sym
      when nil, :B, :byte          then (value.to_f / 1000_000_000)
      when :GB, :G, :gigabyte      then value.to_f
      when :MB, :M, :megabyte      then (value.to_f / 1000)
      when :KB, :K, :kilobyte, :kB then (value.to_f / 1000_000)
      else raise "Unknown unit: #{unit.inspect}!"
      end
    rescue
      raise "Unknown string"
    end
  end
end

Ohad


On Tue, Mar 9, 2010 at 4:26 AM, Doug Warner <d...@warner.fm> wrote:

> I wrote a "memorysize_mb" fact to solve this problem; this ensures the
> number
> returned is only an integer value.
>
> $ cat memorysize_mb.rb
> require 'facter'
>
> Facter.add("memorysize_mb") do
>  confine :kernel => :Linux
>
>  ram = 0
>
>  # Steal linux's meminfo
>  File.open( "/proc/meminfo" , 'r' ) do |f|
>    f.grep( /^MemTotal:/ ) { |mem|
>      ram = mem.split( / +/ )[1].to_i / 1024
>    }
>  end
>
>  setcode do
>    ram
>  end
> end
>
>
> On 03/08/2010 03:12 PM, John wrote:
> > Ok some more investigation turned up some more questions.
> > So it seems memorysize is returned with a unit of measurement suffix
> > added to it....
> >
> > My question to the puppet mailing list would be.
> >
> > How would  you use memory size fact in puppet while keeping in mind
> > that we could be talking MB or GB?
> >
> > I need to make decisions based on the amount of memory available.
> > The whole scaling unit of measurement is kind of annoying though. /
> > proc/meminfo normally reports as kb doesnt it?
> >
> > On Mar 8, 11:06 am, John Cesario <john.cesa...@gmail.com> wrote:
> >> On version 0.25.4 for both server and client.
> >>
> >> Trying to do some logic around the $memorysize fact.
> >>
> >>   if ($memorysize > 15360) and ($memorysize < 112640) {
> >>     $tmpfs_size = "6G"
> >>   } else {
> >>     $tmpfs_size = "8G"
> >>   }
> >>
> >> Returns
> >>
> >> err: Could not retrieve catalog from remote server: Error 400 on SERVER:
> >> comparison of String with 15360 failed at
> >> /etc/puppet/modules/mysql/manifests/virtual_tmpdir.pp:13 on node foo.bar
> >
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to puppet-us...@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.

Reply via email to