puppet-modules/memcached/lib/puppet/parser/functions/memcached_max_memory.rb
module Puppet::Parser::Functions
newfunction(:memcached_max_memory, :type => :rvalue, :doc => <<-EOS
Calculate max_memory size from fact 'memsize' and passed argument.
EOS
) do |arguments|
raise(Puppet::ParseError, "memcached_max_memory(): " +
"Wrong number of arguments given " +
"(#{arguments.size} for 1)") if arguments.size != 1
arg = arguments[0]
memsize = lookupvar('memorysize')
if arg and !arg.to_s.end_with?('%')
result_in_mb = arg.to_i
else
max_memory_percent = arg ? arg : '95%'
# Taken from puppetlabs-stdlib to_bytes() function
value,prefix = */([0-9.e+-]*)\s*([^bB]?)/.match(memsize)[1,2]
value = value.to_f
case prefix
when '' then value = value
when 'k' then value *= (1<<10)
when 'M' then value *= (1<<20)
when 'G' then value *= (1<<30)
when 'T' then value *= (1<<40)
when 'E' then value *= (1<<50)
else raise Puppet::ParseError, "memcached_max_memory(): Unknown prefix #{prefix}"
end
value = value.to_i
result_in_mb = ( (value / (1 << 20) ) * (max_memory_percent.to_f / 100.0) ).floor
end
return result_in_mb
end
end