c7032caa2dad05c1792a255d2c16921af8985bd2
[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   @summary
7     Takes a resource type, title (only hash), and a list of attributes that describe a
8     resource.
9
10   @return
11     created resources with the passed type and attributes
12
13   @example Example usage
14
15         user { 'dan':
16           gid => 'mygroup',
17           ensure => present,
18         }
19
20     An hash of resources should be passed in and each will be created with
21     the type and parameters specified if it doesn't already exist.
22
23     ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})
24
25     From Hiera Backend:
26
27     userlist:
28       dan:
29         gid: 'mygroup'
30      uid: '600'
31       alex:
32      gid: 'mygroup'
33
34     Call:
35     ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})
36 DOC
37                                      ) do |vals|
38   type, title, params = vals
39   raise(ArgumentError, 'Must specify a type') unless type
40   raise(ArgumentError, 'Must specify a title') unless title
41   params ||= {}
42
43   raise(Puppet::ParseError, 'ensure_resources(): Requires second argument to be a Hash') unless title.is_a?(Hash)
44   resource_hash = title.dup
45   resources = resource_hash.keys
46
47   Puppet::Parser::Functions.function(:ensure_resource)
48   resources.each do |resource_name|
49     params_merged = if resource_hash[resource_name]
50                       params.merge(resource_hash[resource_name])
51                     else
52                       params
53                     end
54     function_ensure_resource([type, resource_name, params_merged])
55   end
56 end