module Puppet::Parser::Functions
newfunction(:rand_from_array, :type => :rvalue, :doc => <<-EOS
This function takes either an int or an array as input and returns the int or a
random element from the array
EOS
)do |args|
  fail "Must receive two argument." if args.empty?
#++ this works if the input is an array
  #  return args.sample
# +++++++++++++++++++++++++++++++++++++
#  args.flatten!
  params = []
  params << args[0]
  params.flatten!
  arr = []
  salt = args[1].sum % 60
  rnd = Random.new(salt)
#  rnd = Random.new()
  params.each do |key|
    if key.is_a?(String) and key =~ /\d\.\.\d/
      k = key.split('..')
      r = Range.new(k[0],k[1]).to_a
      arr << r
      arr.flatten!
    elsif key.is_a?(String)
      arr << key
      arr.flatten!
    elsif key.is_a?(Integer)
      arr << key.to_s
      arr.flatten!
    end
  end
  last_i = arr.length - 1
  return arr[rnd.rand(0..last_i)]

end
end