no more use of Puppet::Parser::Parser
[mirror/dsa-puppet.git] / modules / puppetmaster / lib / puppet / parser / functions / whohosts.rb
1 module Puppet::Parser::Functions
2   newfunction(:whohosts, :type => :rvalue) do |args|
3     require 'ipaddr'
4     require 'yaml'
5
6     ipAddrs = args[0]
7     yamlfile = args[1]
8
9     ans = {"name" => "unknown"}
10     yaml = YAML.load_file(yamlfile)
11
12     ipAddrs.each do |addr|
13       yaml.keys.each do |hoster|
14         next unless yaml[hoster].kind_of?(Hash) and yaml[hoster].has_key?('netrange')
15         netrange = yaml[hoster]['netrange']
16
17         netrange.each do |net|
18           begin
19             if IPAddr.new(net).include?(addr)
20               ans = yaml[hoster]
21               ans['name'] = hoster
22             end
23           rescue => e
24             raise Puppet::ParseError, "Error while trying to match addr #{addr} for net #{net}: #{e.message}\n#{e.backtrace}"
25           end
26         end
27       end
28     end
29     if not ans['longname']
30       ans['longname'] = ans['name']
31     end
32     return ans
33   end
34 end
35 # vim:set ts=2:
36 # vim:set et:
37 # vim:set shiftwidth=2: