Way more painful than is legal
[mirror/dsa-puppet.git] / modules / puppetmaster / lib / puppet / parser / functions / whohosts.rb
index c2bda8c..84b618c 100644 (file)
@@ -15,9 +15,20 @@ module Puppet::Parser::Functions
     if (nodeinfo['ldap'].has_key?('ipHostNumber'))
       nodeinfo['ldap']['ipHostNumber'].each do |addr|
         yaml.keys.each do |hoster|
-          yaml[hoster].each do |net|
-            if IPAddr.new(net).include?(addr)
-              ans = hoster
+          if yaml[hoster].kind_of?(Array)
+            netrange = yaml[hoster]
+          elsif yaml[hoster].kind_of?(Hash) and yaml[hoster].has_key?('netrange')
+            netrange = yaml[hoster]['netrange']
+          else
+            next
+          end
+          netrange.each do |net|
+            begin
+              if IPAddr.new(net).include?(addr)
+                ans = hoster
+              end
+            rescue Exception => e
+              raise "Error while trying to match addr #{addr} for net #{net}: #{e.message}\n#{e.backtrace}"
             end
           end
         end
@@ -26,3 +37,6 @@ module Puppet::Parser::Functions
     return ans
   end
 end
+# vim:set ts=2:
+# vim:set et:
+# vim:set shiftwidth=2: