-
Notifications
You must be signed in to change notification settings - Fork 582
/
ensure_packages.rb
37 lines (33 loc) · 1.19 KB
/
ensure_packages.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# frozen_string_literal: true
# @summary Takes a list of packages and only installs them if they don't already exist.
#
# It optionally takes a hash as a second parameter that will be passed as the
# third argument to the ensure_resource() function.
Puppet::Functions.create_function(:ensure_packages) do
# @param packages
# The packages to ensure are installed
# @param default_attributes
# Default attributes to be passed to the `ensure_resource()` function
dispatch :ensure_packages do
param 'Variant[Hash,String[1],Array[String[1]]]', :packages
optional_param 'Hash', :default_attributes
end
def ensure_packages(packages, default_attributes = nil)
if default_attributes
defaults = { 'ensure' => 'installed' }.merge(default_attributes)
if defaults['ensure'] == 'present'
defaults['ensure'] = 'installed'
end
else
defaults = { 'ensure' => 'installed' }
end
if packages.is_a?(Hash)
call_function('ensure_resources', 'package', packages.dup, defaults)
else
packages = Array(packages)
packages.each do |package_name|
call_function('ensure_resource', 'package', package_name, defaults)
end
end
end
end