X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=modules%2Fpuppetmaster%2Flib%2Fpuppet%2Fparser%2Ffunctions%2Fentropy_provider.rb;h=32c413f16324287fa0e696694b54c80177639061;hb=3de5917dacf8547cb4ddf7c563516d8132b47472;hp=19b3366f7eebfa1ad8410c6e7cf87b084de9ab57;hpb=16eed32a3024a77e67ff9cab8e0126d3777484d1;p=mirror%2Fdsa-puppet.git diff --git a/modules/puppetmaster/lib/puppet/parser/functions/entropy_provider.rb b/modules/puppetmaster/lib/puppet/parser/functions/entropy_provider.rb index 19b3366f7..32c413f16 100644 --- a/modules/puppetmaster/lib/puppet/parser/functions/entropy_provider.rb +++ b/modules/puppetmaster/lib/puppet/parser/functions/entropy_provider.rb @@ -1,18 +1,18 @@ module Puppet::Parser::Functions newfunction(:entropy_provider, :type => :rvalue) do |args| begin - require '/var/lib/puppet/lib/puppet/parser/functions/whohosts.rb' + require 'digest/sha1' fqdn = args[0] nodeinfo = args[1] - localinfo = lookupvar('site::localinfo') - allnodeinfo = lookupvar('site::allnodeinfo') + localinfo = lookupvar('deprecated::localinfo') + allnodeinfo = lookupvar('deprecated::allnodeinfo') raise Puppet::ParseError, "entropy_provider: Cannot learn fqdn" unless fqdn - raise Puppet::ParseError, "entropy_provider: Cannot learn nodeinfo" unless nodeinfo - raise Puppet::ParseError, "entropy_provider: Cannot learn localinfo" unless localinfo - raise Puppet::ParseError, "entropy_provider: Cannot learn allnodeinfo" unless allnodeinfo + raise Puppet::ParseError, "entropy_provider: Cannot learn nodeinfo" unless nodeinfo and nodeinfo.size > 0 + raise Puppet::ParseError, "entropy_provider: Cannot learn localinfo" unless localinfo and localinfo.size > 0 + raise Puppet::ParseError, "entropy_provider: Cannot learn allnodeinfo" unless allnodeinfo and allnodeinfo.size > 0 # find where all the entropy keys are provider = [] @@ -21,7 +21,7 @@ module Puppet::Parser::Functions next unless localinfo[node]['entropy_key'] addresses = allnodeinfo[node]['ipHostNumber'] - thishoster = function_whohosts([addresses, "/etc/puppet/modules/debian-org/misc/hoster.yaml"]) + thishoster = function_whohosts([addresses]) name = thishoster['name'] provider << node @@ -29,6 +29,7 @@ module Puppet::Parser::Functions hoster[name] = [] unless hoster[name] hoster[name] << node end + raise Puppet::ParseError, "entropy_provider: no entropy providers" unless provider.size > 0 # figure out which entropy provider to use consumer_hoster = nodeinfo['hoster'] @@ -44,15 +45,18 @@ module Puppet::Parser::Functions entropy_provider_hoster = nil end + hash = Digest::SHA1.digest(fqdn) + hashval = hash[0].ord + hash[1].ord*256 + if provider.include?(fqdn) # if the host has an ekeyd ans = 'local' elsif entropy_provider_hoster # if there are more than one ekeys at this hoster pick an arbitrary # one, but the same every time - index = fqdn.hash % hoster[entropy_provider_hoster].length + index = hashval % hoster[entropy_provider_hoster].length ans = hoster[entropy_provider_hoster][index] else # pick an arbitrary provider from all providers - index = fqdn.hash % provider.size + index = hashval % provider.size ans = provider[index] end