X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;ds=inline;f=modules%2Fpuppetmaster%2Flib%2Fpuppet%2Fparser%2Ffunctions%2Fwhohosts.rb;h=3192bb731c82c2f9890e0981d4b686067c41c2a8;hb=1564a50936c74b7621173985fb6bb6d34c697989;hp=2835cef2d3f8d8ea0b62a4bd679c279db90a32e5;hpb=af54a28ce3583c22c02a9e59277bb173fb1704f1;p=mirror%2Fdsa-puppet.git diff --git a/modules/puppetmaster/lib/puppet/parser/functions/whohosts.rb b/modules/puppetmaster/lib/puppet/parser/functions/whohosts.rb index 2835cef2d..3192bb731 100644 --- a/modules/puppetmaster/lib/puppet/parser/functions/whohosts.rb +++ b/modules/puppetmaster/lib/puppet/parser/functions/whohosts.rb @@ -1,30 +1,36 @@ +require 'puppet/file_system' + module Puppet::Parser::Functions newfunction(:whohosts, :type => :rvalue) do |args| require 'ipaddr' require 'yaml' - nodeinfo = args[0] - yamlfile = args[1] - parser.watch_file(yamlfile) - - $KCODE = 'utf-8' + ipAddrs = args[0] - ans = "unknown" + ans = {"name" => "unknown"} + yamlfile = Puppet::Parser::Files.find_file('debian_org/misc/hoster.yaml', compiler.environment) yaml = YAML.load_file(yamlfile) - if (nodeinfo['ldap'].has_key?('ipHostNumber')) - nodeinfo['ldap']['ipHostNumber'].each do |addr| - yaml.keys.each do |hoster| - if yaml[hoster].has_key?'netrange' - yaml[hoster]['netrange'].each do |net| - if IPAddr.new(net).include?(addr) - return hoster - end + ipAddrs.each do |addr| + yaml.keys.each do |hoster| + next unless yaml[hoster].kind_of?(Hash) and yaml[hoster].has_key?('netrange') + netrange = yaml[hoster]['netrange'] + + netrange.each do |net| + begin + if IPAddr.new(net).include?(addr) + ans = yaml[hoster] + ans['name'] = hoster end + rescue => e + raise Puppet::ParseError, "Error while trying to match addr #{addr} for net #{net}: #{e.message}\n#{e.backtrace}" end end end end + if not ans['longname'] + ans['longname'] = ans['name'] + end return ans end end