Skip to content

Commit b6383d2

Browse files
committed
Merge pull request #576 from yadavnikhil/master
ensure_packages.rb: Modifed to pass hiera parameters (as hash,array) as first argument
2 parents 52f6af3 + 0da9ca7 commit b6383d2

3 files changed

Lines changed: 113 additions & 10 deletions

File tree

README.markdown

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,15 @@ brackets. *Type*: rvalue.
351351

352352
#### `ensure_packages`
353353

354-
Takes a list of packages and only installs them if they don't already exist. It optionally takes a hash as a second parameter to be passed as the third argument to the `ensure_resource()` function. *Type*: statement.
354+
Takes a list of packages array/hash and only installs them if they don't already exist. It optionally takes a hash as a second parameter to be passed as the third argument to the `ensure_resource()` or `ensure_resources()` function. *Type*: statement.
355+
356+
For Array:
357+
358+
ensure_packages(['ksh','openssl'], {'ensure' => 'present'})
359+
360+
For Hash:
361+
362+
ensure_packages({'ksh' => { enure => '20120801-1' } , 'mypackage' => { source => '/tmp/myrpm-1.0.0.x86_64.rpm', provider => "rpm" }}, {'ensure' => 'present'})
355363

356364
#### `ensure_resource`
357365

@@ -375,7 +383,37 @@ An array of resources can also be passed in, and each will be created with the t
375383

376384
*Type*: statement.
377385

378-
#### `flatten`
386+
#### `ensure_resources`
387+
388+
Takes a resource type, title (only hash), and a hash of attributes that describe the resource(s).
389+
390+
~~~
391+
user { 'dan':
392+
gid => 'mygroup',
393+
ensure => present,
394+
}
395+
396+
ensure_resources($user)
397+
~~~
398+
399+
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:
400+
401+
ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' } , 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})
402+
403+
From Hiera Backend:
404+
405+
~~~
406+
userlist:
407+
dan:
408+
gid: 'mygroup'
409+
uid: '600'
410+
alex:
411+
gid: 'mygroup'
412+
413+
ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})
414+
~~~
415+
416+
### `flatten`
379417

380418
Flattens deeply nested arrays and returns a single flat array as a result. For example, `flatten(['a', ['b', ['c']]])` returns ['a','b','c']. *Type*: rvalue.
381419

lib/puppet/parser/functions/ensure_packages.rb

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,29 @@ module Puppet::Parser::Functions
1717
raise(Puppet::ParseError, 'ensure_packages(): Requires second argument to be a Hash')
1818
end
1919

20-
packages = Array(arguments[0])
20+
if arguments[0].is_a?(Hash)
21+
if arguments[1]
22+
defaults = { 'ensure' => 'present' }.merge(arguments[1])
23+
else
24+
defaults = { 'ensure' => 'present' }
25+
end
2126

22-
if arguments[1]
23-
defaults = { 'ensure' => 'present' }.merge(arguments[1])
27+
Puppet::Parser::Functions.function(:ensure_resources)
28+
function_ensure_resources(['package', Hash(arguments[0]), defaults ])
2429
else
25-
defaults = { 'ensure' => 'present' }
26-
end
30+
packages = Array(arguments[0])
31+
32+
if arguments[1]
33+
defaults = { 'ensure' => 'present' }.merge(arguments[1])
34+
else
35+
defaults = { 'ensure' => 'present' }
36+
end
2737

28-
Puppet::Parser::Functions.function(:ensure_resource)
29-
packages.each { |package_name|
30-
function_ensure_resource(['package', package_name, defaults ])
38+
Puppet::Parser::Functions.function(:ensure_resource)
39+
packages.each { |package_name|
40+
function_ensure_resource(['package', package_name, defaults ])
3141
}
42+
end
3243
end
3344
end
3445

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
require 'puppet/parser/functions'
2+
3+
Puppet::Parser::Functions.newfunction(:ensure_resources,
4+
:type => :statement,
5+
:doc => <<-'ENDOFDOC'
6+
Takes a resource type, title (only hash), and a list of attributes that describe a
7+
resource.
8+
9+
user { 'dan':
10+
gid => 'mygroup',
11+
ensure => present,
12+
}
13+
14+
An hash of resources should be passed in and each will be created with
15+
the type and parameters specified if it doesn't already exist.
16+
17+
ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' } , 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})
18+
19+
From Hiera Backend:
20+
21+
userlist:
22+
dan:
23+
gid: 'mygroup'
24+
uid: '600'
25+
alex:
26+
gid: 'mygroup'
27+
28+
Call:
29+
ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})
30+
31+
ENDOFDOC
32+
) do |vals|
33+
type, title, params = vals
34+
raise(ArgumentError, 'Must specify a type') unless type
35+
raise(ArgumentError, 'Must specify a title') unless title
36+
params ||= {}
37+
38+
if title.is_a?(Hash)
39+
resource_hash = Hash(title)
40+
resources = resource_hash.keys
41+
42+
Puppet::Parser::Functions.function(:ensure_resource)
43+
resources.each { |resource_name|
44+
if resource_hash[resource_name]
45+
params_merged = params.merge(resource_hash[resource_name])
46+
else
47+
params_merged = params
48+
end
49+
function_ensure_resource([ type, resource_name, params_merged ])
50+
}
51+
else
52+
raise(Puppet::ParseError, 'ensure_resources(): Requires second argument to be a Hash')
53+
end
54+
end

0 commit comments

Comments
 (0)