Re: [Puppet Users] using memorysize fact in manifests

2011-06-30 Thread Matthias Saou
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 *= (10)
when 'kB': mem *= (110)
when 'MB': mem *= (120)
when 'GB': mem *= (130)
when 'TB': mem *= (140)
end
%%= mem.to_i %)

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
}
}

HTH,
Matthias

-- 
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.



Re: [Puppet Users] using memorysize fact in manifests

2011-06-30 Thread Martijn Grendelman
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 *= (10)
 when 'kB': mem *= (110)
 when 'MB': mem *= (120)
 when 'GB': mem *= (130)
 when 'TB': mem *= (140)
 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.



Re: [Puppet Users] using memorysize fact in manifests

2011-06-30 Thread Chris Phillips
Well that's odd, I was looking at the exact same issue this morning for
sysctl.conf / oracle stuff.

But why are people writing new facts?? Why not just take a copy of the
original function and simply not run the function that normalizes the
number? It seems very odd to make a more limited version of the function
when it's already there.

Is it not possible to copy the code directly from utils/memory.rb  in
facter?

Chris

On 30 June 2011 13:00, Martijn Grendelman mart...@iphion.nl wrote:

 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 *= (10)
  when 'kB': mem *= (110)
  when 'MB': mem *= (120)
  when 'GB': mem *= (130)
  when 'TB': mem *= (140)
  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.



-- 
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.



Re: [Puppet Users] using memorysize fact in manifests

2011-06-30 Thread Chris Phillips
Further to this, this is the normal memory code condensed with normalization
removed to give raw versions of the facts.

require 'facter'

{   :MemorySizeRaw = MemTotal,
:MemoryFreeRaw = MemFree,
:SwapSizeRaw   = SwapTotal,
:SwapFreeRaw   = SwapFree
}.each do |fact, name|
Facter.add(fact) do
confine :kernel = :linux
setcode do
memsize_raw = 
Thread::exclusive do
File.readlines(/proc/meminfo).each do |l|
memsize_raw = $1.to_i if l =~ /^#{name}:\s+(\d+)\s+\S+/
# MemoryFree == memfree + cached + buffers
#  (assume scales are all the same as memfree)
if name == MemFree 
l =~ /^(?:Buffers|Cached):\s+(\d+)\s+\S+/
memsize_raw += $1.to_i
end
end
end
memsize_raw
end
end
end

Thanks

Chris

On 30 June 2011 13:29, Chris Phillips ch...@untrepid.com wrote:


 Well that's odd, I was looking at the exact same issue this morning for
 sysctl.conf / oracle stuff.

 But why are people writing new facts?? Why not just take a copy of the
 original function and simply not run the function that normalizes the
 number? It seems very odd to make a more limited version of the function
 when it's already there.

 Is it not possible to copy the code directly from utils/memory.rb  in
 facter?

 Chris

 On 30 June 2011 13:00, Martijn Grendelman mart...@iphion.nl wrote:

 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 *= (10)
  when 'kB': mem *= (110)
  when 'MB': mem *= (120)
  when 'GB': mem *= (130)
  when 'TB': mem *= (140)
  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.




-- 
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.