+++ /dev/null
-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