642247c9c3cc2c8ddcfd94e69ef262d1f0f8ee49
[mirror/dsa-puppet.git] / 3rdparty / modules / stdlib / lib / puppet / parser / functions / ensure_resources.rb
1 require 'puppet/parser/functions'
2
3 Puppet::Parser::Functions.newfunction(:ensure_resources,
4                                       :type => :statement,
5                                       :doc => <<-'DOC'
6     Takes a resource type, title (only hash), and a list of attributes that describe a
7     resource.
8
9         user { 'dan':
10           gid => 'mygroup',
11           ensure => present,
12         }
13
14     An hash of resources should be passed in and each will be created with
15     the type and parameters specified if it doesn't already exist.
16
17         ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' } ,  'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})
18
19     From Hiera Backend:
20
21     userlist:
22       dan:
23         gid: 'mygroup'
24      uid: '600'
25       alex:
26      gid: 'mygroup'
27
28     Call:
29     ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})
30 DOC
31                                      ) do |vals|
32   type, title, params = vals
33   raise(ArgumentError, 'Must specify a type') unless type
34   raise(ArgumentError, 'Must specify a title') unless title
35   params ||= {}
36
37   raise(Puppet::ParseError, 'ensure_resources(): Requires second argument to be a Hash') unless title.is_a?(Hash)
38   resource_hash = title.dup
39   resources = resource_hash.keys
40
41   Puppet::Parser::Functions.function(:ensure_resource)
42   resources.each do |resource_name|
43     params_merged = if resource_hash[resource_name]
44                       params.merge(resource_hash[resource_name])
45                     else
46                       params
47                     end
48     function_ensure_resource([type, resource_name, params_merged])
49   end
50 end