55 lines
1.5 KiB
Ruby
55 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
|