]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/memcached/lib/puppet/parser/functions/memcached_max_memory.rb
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / memcached / lib / puppet / parser / functions / memcached_max_memory.rb
diff --git a/3rdparty/modules/memcached/lib/puppet/parser/functions/memcached_max_memory.rb b/3rdparty/modules/memcached/lib/puppet/parser/functions/memcached_max_memory.rb
new file mode 100644 (file)
index 0000000..fac25fd
--- /dev/null
@@ -0,0 +1,38 @@
+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