]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
(#20548) Allow an array of resource titles to be passed into the ensure_resource...
authorAlex Cline <acline@us.ibm.com>
Fri, 3 May 2013 19:47:27 +0000 (15:47 -0400)
committerAlex Cline <acline@us.ibm.com>
Fri, 3 May 2013 19:47:27 +0000 (15:47 -0400)
This patch allows an array of resource titles to be passed into
the ensure_resource function.  Each item in the array will be
checked for existence and will be created if it doesn't already
exist.

README.markdown
lib/puppet/parser/functions/ensure_resource.rb
spec/functions/ensure_resource_spec.rb

index 84cd08e26107583173e81a30172ba2982ee16e6f..7b45b170068dab26b592011ae9621696dbc9405c 100644 (file)
@@ -243,6 +243,11 @@ If the resource already exists but does not match the specified parameters,
 this function will attempt to recreate the resource leading to a duplicate
 resource definition error.
 
+An array of resources can also be passed in and each will be created with
+the type and parameters specified if it doesn't already exist.
+
+    ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})
+
 
 
 - *Type*: statement
index fba2035617e7bf3006a3e9c013f7e071009778e3..8ede96795322d1caa51dbd70ff3889171ac44f0a 100644 (file)
@@ -19,17 +19,27 @@ If the resource already exists but does not match the specified parameters,
 this function will attempt to recreate the resource leading to a duplicate
 resource definition error.
 
+An array of resources can also be passed in and each will be created with
+the type and parameters specified if it doesn't already exist.
+
+    ensure_resource('user', ['dan','alex'], {'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 ||= {}
-  Puppet::Parser::Functions.function(:defined_with_params)
-  if function_defined_with_params(["#{type}[#{title}]", params])
-    Puppet.debug("Resource #{type}[#{title}] not created b/c it already exists")
-  else
-    Puppet::Parser::Functions.function(:create_resources)
-    function_create_resources([type.capitalize, { title => params }])
+
+  items = title.kind_of?(Array) ? title : [].push(title)
+
+  items.each do |item|
+    Puppet::Parser::Functions.function(:defined_with_params)
+    if function_defined_with_params(["#{type}[#{item}]", params])
+      Puppet.debug("Resource #{type}[#{item}] not created b/c it already exists")
+    else
+      Puppet::Parser::Functions.function(:create_resources)
+      function_create_resources([type.capitalize, { item => params }])
+    end
   end
 end
index 611666ee84e997c204905996f8a280099f3f6df9..abd8719761b9ca0a7a6d287c67ef777ee60ee570 100644 (file)
@@ -37,4 +37,39 @@ describe 'ensure_resource' do
                             ).and_raise_error(Puppet::Error)
     end
   end
+
+  describe 'when an array of new resources are passed in' do
+    it do
+      should run.with_params('User', ['dan', 'alex'], {})
+      compiler.catalog.resource('User[dan]').to_s.should == 'User[dan]'
+      compiler.catalog.resource('User[alex]').to_s.should == 'User[alex]'
+    end
+  end
+
+  describe 'when an array of existing resources is compared against existing resources' do
+    let :pre_condition do
+      'user { "dan": ensure => present; "alex": ensure => present }'
+    end
+    it do
+      should run.with_params('User', ['dan', 'alex'], {})
+      compiler.catalog.resource('User[dan]').to_s.should == 'User[dan]'
+      compiler.catalog.resource('User[alex]').to_s.should == 'User[alex]'
+    end
+  end
+
+  describe 'when compared against existing resources with attributes' do
+    let :pre_condition do
+      'user { "dan": ensure => present; "alex": ensure => present }'
+    end
+    it do
+      # These should not fail
+      should run.with_params('User', ['dan', 'alex'], {})
+      should run.with_params('User', ['dan', 'alex'], '')
+      should run.with_params('User', ['dan', 'alex'], {'ensure' => 'present'})
+      # This should fail
+      should run.with_params('User', ['dan', 'alex'],
+                             {'ensure' => 'absent'}
+                            ).and_raise_error(Puppet::Error)
+    end
+  end
 end