]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - modules/puppetmaster/lib/puppet/parser/functions/entropy_provider.rb
generate TLSA record for our mailserver ports
[dsa-puppet.git] / modules / puppetmaster / lib / puppet / parser / functions / entropy_provider.rb
index 1a0f8e9b70d712a46326d2ce2e07cbabb6659d5e..19b3366f7eebfa1ad8410c6e7cf87b084de9ab57 100644 (file)
@@ -6,8 +6,8 @@ module Puppet::Parser::Functions
       fqdn = args[0]
       nodeinfo = args[1]
 
-      localinfo = lookupvar('localinfo')
-      allnodeinfo = lookupvar('allnodeinfo')
+      localinfo = lookupvar('site::localinfo')
+      allnodeinfo = lookupvar('site::allnodeinfo')
 
       raise Puppet::ParseError, "entropy_provider: Cannot learn fqdn" unless fqdn
       raise Puppet::ParseError, "entropy_provider: Cannot learn nodeinfo" unless nodeinfo
@@ -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, "/etc/puppet/modules/debian-org/misc/hoster.yaml"])
         name = thishoster['name']
 
         provider << node
@@ -31,14 +31,26 @@ module Puppet::Parser::Functions
       end
 
       # figure out which entropy provider to use
-      consumer_hoster = nodeinfo['hoster']['name']
+      consumer_hoster = nodeinfo['hoster']
+      consumer_hoster_name = nodeinfo['hoster']['name']
+
+      if consumer_hoster['entropy_provider_hoster'] and hoster[consumer_hoster['entropy_provider_hoster']]
+        # if we have a preferred entropy provider hoster for hosts at this one.
+        entropy_provider_hoster = consumer_hoster['entropy_provider_hoster']
+      elsif hoster[consumer_hoster_name]
+        # if there are any at the same hoster, use one of them
+        entropy_provider_hoster = consumer_hoster_name
+      else
+        entropy_provider_hoster = nil
+      end
+
       if provider.include?(fqdn) # if the host has an ekeyd
         ans = 'local'
-      elsif hoster[consumer_hoster] # if there are any at the same hoster, use one of them
+      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[consumer_hoster].length
-        ans = hoster[consumer_hoster][index]
+        index = fqdn.hash % hoster[entropy_provider_hoster].length
+        ans = hoster[entropy_provider_hoster][index]
       else # pick an arbitrary provider from all providers
         index = fqdn.hash % provider.size
         ans = provider[index]