diff modules/stdlib/lib/puppet/parser/functions/seeded_rand.rb @ 272:c42fb28cff86

Update to a newer Python module This also pulls in an EPEL module (which we don't use) and a newer stdlib version.
author IBBoard <dev@ibboard.co.uk>
date Fri, 03 Jan 2020 19:56:04 +0000
parents
children d9352a684e62
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/stdlib/lib/puppet/parser/functions/seeded_rand.rb	Fri Jan 03 19:56:04 2020 +0000
@@ -0,0 +1,24 @@
+#
+# seeded_rand.rb
+#
+Puppet::Parser::Functions.newfunction(
+  :seeded_rand,
+  :arity => 2,
+  :type => :rvalue,
+  :doc => <<-DOC
+    Usage: `seeded_rand(MAX, SEED)`. MAX must be a positive integer; SEED is any string.
+
+    Generates a random whole number greater than or equal to 0 and less
+    than MAX, using the value of SEED for repeatable randomness.  If SEED
+    starts with "$fqdn:", this is behaves the same as `fqdn_rand`.
+DOC
+) do |args|
+  require 'digest/md5'
+
+  raise(ArgumentError, 'seeded_rand(): first argument must be a positive integer') unless function_is_integer([args[0]]) && args[0].to_i > 0
+  raise(ArgumentError, 'seeded_rand(): second argument must be a string') unless args[1].is_a? String
+
+  max = args[0].to_i
+  seed = Digest::MD5.hexdigest(args[1]).hex
+  Puppet::Util.deterministic_rand(seed, max)
+end