0da9ca7e4a
New function "ensure_resources()" to support passing hash as parameter OR from hiera backend This new function is extension of ensure_resource() which will now support to pass multiple values as hash/array OR from hiera backend variables in title argument with additional parameters needed. It will process multiple values for a resource type from the passed argument & pass each entry (type, title, params) to ensure_resource() in required format for further processing. Now user can have duplicate resource check functionality extended to multiple entries with this new function. Use: For multiple resources using hash: ensure_resources('user', {'dan' => { gid => 'mygroup', uid =>'600' } , 'alex' => { gid => 'mygroup' }}, {'ensure' =>'present'}) From Hiera Backend: userlist: dan: gid: 'mygroup' uid: '600' alex: gid: 'mygroup' Call: ensure_resources('user',hiera_hash('userlist'), {'ensure' => 'present'}) ensure_packages() Modified to also support Hash type argument for packages This modification will call newly added ensure_resources() for processing Hash as second argument. The original functionality remains same for Array type arguments. Use: hiera: packagelist: ksh: ensure: latest mlocate: {} myrpm: provider: rpm source: "/tmp/myrpm-1.0.0.x86_64.rpm" install_options: --prefix: /users/home openssl: provider: rpm source: "/tmp/openssl-1.0.1e-42.el7.x86_64.rpm" Call: ensure_packages($packagelist)
54 lines
1.5 KiB
Ruby
54 lines
1.5 KiB
Ruby
require 'puppet/parser/functions'
|
|
|
|
Puppet::Parser::Functions.newfunction(:ensure_resources,
|
|
:type => :statement,
|
|
:doc => <<-'ENDOFDOC'
|
|
Takes a resource type, title (only hash), and a list of attributes that describe a
|
|
resource.
|
|
|
|
user { 'dan':
|
|
gid => 'mygroup',
|
|
ensure => present,
|
|
}
|
|
|
|
An hash of resources should be passed in and each will be created with
|
|
the type and parameters specified if it doesn't already exist.
|
|
|
|
ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' } , 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})
|
|
|
|
From Hiera Backend:
|
|
|
|
userlist:
|
|
dan:
|
|
gid: 'mygroup'
|
|
uid: '600'
|
|
alex:
|
|
gid: 'mygroup'
|
|
|
|
Call:
|
|
ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})
|
|
|
|
ENDOFDOC
|
|
) do |vals|
|
|
type, title, params = vals
|
|
raise(ArgumentError, 'Must specify a type') unless type
|
|
raise(ArgumentError, 'Must specify a title') unless title
|
|
params ||= {}
|
|
|
|
if title.is_a?(Hash)
|
|
resource_hash = Hash(title)
|
|
resources = resource_hash.keys
|
|
|
|
Puppet::Parser::Functions.function(:ensure_resource)
|
|
resources.each { |resource_name|
|
|
if resource_hash[resource_name]
|
|
params_merged = params.merge(resource_hash[resource_name])
|
|
else
|
|
params_merged = params
|
|
end
|
|
function_ensure_resource([ type, resource_name, params_merged ])
|
|
}
|
|
else
|
|
raise(Puppet::ParseError, 'ensure_resources(): Requires second argument to be a Hash')
|
|
end
|
|
end
|