diff options
author | Hunter Haugen <hunter@puppetlabs.com> | 2016-03-17 09:25:38 -0700 |
---|---|---|
committer | Hunter Haugen <hunter@puppetlabs.com> | 2016-03-17 09:25:38 -0700 |
commit | b6383d259cf4917edd832ba31cf4dae2b4201235 (patch) | |
tree | 7ac0df39a11d5335c4373c48603341c4035327c0 /lib/puppet/parser/functions/ensure_resources.rb | |
parent | 52f6af3accb4657d89aa26b623710b4e698cdde2 (diff) | |
parent | 0da9ca7e4a78df49c08873f55caf7c88cdd9bc32 (diff) | |
download | puppet-stdlib-master.tar.gz puppet-stdlib-master.tar.bz2 |
ensure_packages.rb: Modifed to pass hiera parameters (as hash,array) as first argument
Diffstat (limited to 'lib/puppet/parser/functions/ensure_resources.rb')
-rw-r--r-- | lib/puppet/parser/functions/ensure_resources.rb | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/puppet/parser/functions/ensure_resources.rb b/lib/puppet/parser/functions/ensure_resources.rb new file mode 100644 index 0000000..30d57a8 --- /dev/null +++ b/lib/puppet/parser/functions/ensure_resources.rb @@ -0,0 +1,54 @@ +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 |