Update stdlib and concat to 6.1.0 both
[mirror/dsa-puppet.git] / 3rdparty / modules / stdlib / lib / puppet / parser / functions / ensure_packages.rb
1 #
2 # ensure_packages.rb
3 #
4 module Puppet::Parser::Functions
5   newfunction(:ensure_packages, :type => :statement, :doc => <<-DOC
6     @summary
7       Takes a list of packages and only installs them if they don't already exist.
8
9     It optionally takes a hash as a second parameter that will be passed as the
10     third argument to the ensure_resource() function.
11
12     @return
13       install the passed packages
14   DOC
15              ) do |arguments|
16
17     raise(Puppet::ParseError, "ensure_packages(): Wrong number of arguments given (#{arguments.size} for 1 or 2)") if arguments.size > 2 || arguments.empty?
18     raise(Puppet::ParseError, 'ensure_packages(): Requires second argument to be a Hash') if arguments.size == 2 && !arguments[1].is_a?(Hash)
19
20     if arguments[0].is_a?(Hash)
21       if arguments[1]
22         defaults = { 'ensure' => 'present' }.merge(arguments[1])
23         if defaults['ensure'] == 'installed'
24           defaults['ensure'] = 'present'
25         end
26       else
27         defaults = { 'ensure' => 'present' }
28       end
29
30       Puppet::Parser::Functions.function(:ensure_resources)
31       function_ensure_resources(['package', arguments[0].dup, defaults])
32     else
33       packages = Array(arguments[0])
34
35       if arguments[1]
36         defaults = { 'ensure' => 'present' }.merge(arguments[1])
37         if defaults['ensure'] == 'installed'
38           defaults['ensure'] = 'present'
39         end
40       else
41         defaults = { 'ensure' => 'present' }
42       end
43
44       Puppet::Parser::Functions.function(:ensure_resource)
45       packages.each do |package_name|
46         raise(Puppet::ParseError, 'ensure_packages(): Empty String provided for package name') if package_name.empty?
47         function_ensure_resource(['package', package_name, defaults])
48       end
49     end
50   end
51 end
52
53 # vim: set ts=2 sw=2 et :