remove smtp_sources from ferm's me.conf, retire old-style heavy_{exim,postfix} roles
[mirror/dsa-puppet.git] / modules / puppetmaster / lib / puppet / parser / functions / yamlinfo.rb
1 require 'puppet/file_system'
2
3 module Puppet::Parser::Functions
4   newfunction(:yamlinfo, :type => :rvalue) do |args|
5
6     host = args[0]
7
8     read_yaml = lambda { |yaml, host|
9       results = {}
10
11       ['nameinfo', 'footer'].each do |detail|
12         if yaml.has_key?(detail)
13           if yaml[detail].has_key?(host)
14             results[detail] = yaml[detail][host]
15           end
16         end
17       end
18       
19       if yaml.has_key?('services')
20         yaml['services'].each_pair do |service, hostlist|
21           hostlist=[hostlist] unless hostlist.kind_of?(Array)
22           results[service] = hostlist.include?(host)
23         end
24       end
25
26       results['mail_port']      = ''
27
28       if yaml['host_settings'].kind_of?(Hash)
29         yaml['host_settings'].each_pair do |property, values|
30           if values.kind_of?(Hash)
31             results[property] = values[host] if values.has_key?(host)
32           elsif values.kind_of?(Array)
33             results[property] = values.include?(host)
34           end
35         end
36       end
37       return(results)
38     }
39
40     require 'yaml'
41
42     yamlfile = Puppet::Parser::Files.find_file('debian_org/misc/local.yaml', compiler.environment)
43     yaml = YAML.load_file(yamlfile)
44     ret = {}
45
46     if host == '*'
47       Dir.entries('/var/lib/puppet/yaml/node/').each do |fname|
48         next unless fname =~ /(.*)\.yaml$/
49         host_name = $1
50         ret[host_name] = read_yaml.call(yaml, host_name)
51       end
52     else
53       ret = read_yaml.call(yaml, host)
54     end
55
56     return(ret)
57   end
58 end
59