On 30-06-11 11:20, Matthias Saou wrote:
> Andreas Kuntzagk <andreas.kuntz...@mdc-berlin.de> wrote:
> 
>> I want some config depending on memorysize.
>>
>> What I tried was
>>    if ($memorysize >= 256 * 1024*1024) {
>> ...
>>    }
>>
>> But this fails because $memorysize is a string (and contains a "G")
>> and can't be compared to an int.
>>
>> Are all facts strings? How do I work with numbers?
> 
> Typical problem. Not to mention that you happen to have "G" but that
> could very easily be "M". Here's my workaround for that, which I use
> for calculations to then set some sysctl.conf values accordingly :
> 
>     # This is ugly, but very useful to get a standard kiB total RAM
>     # to base further calculations upon. Note that we get a string
>     $mem = inline_template("<%
>         mem,unit = scope.lookupvar('::memorysize').split
>         mem = mem.to_f
>         # Normalize mem to KiB
>         case unit
>             when nil:  mem *= (1<<0)
>             when 'kB': mem *= (1<<10)
>             when 'MB': mem *= (1<<20)
>             when 'GB': mem *= (1<<30)
>             when 'TB': mem *= (1<<40)
>         end
>         %><%= mem.to_i %>")

I use a custom fact, that returns the amount of system memory in
megabytes. This is, however, Linux-only, since it uses /proc/meminfo:

$ cat modules/common/lib/facter/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


> Here's an example of how I then use it :
> 
>     # kernel.shmmax
>     if $shmmax {
>         $shmmax_final = $shmmax
>     } else {
>         if $oracle {
>             # For non-shm half the RAM for <= 4G, 2G otherwise
>             if $mem <= 4294967296 {
>                 $shmmax_final = $mem / 2
>             } else {
>                 $shmmax_final = $mem - 2147483648
>             }
>         } else {
>             $shmmax_final = $mem
>         }
>     }


Best regards,
Martijn Grendelman

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to puppet-users@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