diff options
author | Luke Kanies <luke@madstop.com> | 2008-11-07 16:10:52 -0600 |
---|---|---|
committer | Luke Kanies <luke@madstop.com> | 2008-11-07 16:10:52 -0600 |
commit | 084071936738f25930bc99bb2e62c2a52259e915 (patch) | |
tree | 26de4d4c2b32537c6e18033934e63ce0eadbd8d6 /lib | |
parent | cc046460e36eb6273a4f08de2167de25098d20cb (diff) | |
download | puppet-084071936738f25930bc99bb2e62c2a52259e915.tar.gz puppet-084071936738f25930bc99bb2e62c2a52259e915.tar.xz puppet-084071936738f25930bc99bb2e62c2a52259e915.zip |
Refactoring and clarifying the resource generation methods.
It now works with the new Catalog#add_resource method.
Signed-off-by: Luke Kanies <luke@madstop.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/puppet/transaction.rb | 66 |
1 files changed, 21 insertions, 45 deletions
diff --git a/lib/puppet/transaction.rb b/lib/puppet/transaction.rb index 86467a5b4..333e8965a 100644 --- a/lib/puppet/transaction.rb +++ b/lib/puppet/transaction.rb @@ -188,24 +188,7 @@ class Transaction # See if the resource generates new resources at evaluation time. def eval_generate(resource) - if resource.respond_to?(:eval_generate) - begin - children = resource.eval_generate - rescue => detail - if Puppet[:trace] - puts detail.backtrace - end - resource.err "Failed to generate additional resources during transaction: %s" % - detail - return nil - end - - if children - children.each { |child| child.finish } - @generated += children - return children - end - end + generate_additional_resources(resource, :eval_generate) end # Evaluate a single resource. @@ -355,39 +338,32 @@ class Transaction return skip end - # Collect any dynamically generated resources. + # A general method for recursively generating new resources from a + # resource. + def generate_additional_resources(resource, method) + return [] unless resource.respond_to?(method) + begin + made = resource.send(method) + rescue => detail + resource.err "Failed to generate additional resources using '%s': %s" % [method, detail] + end + return [] unless made + made = [made] unless made.is_a?(Array) + made.uniq! + made.each do |res| + @catalog.add_resource(res) { |r| r.finish } + end + end + + # Collect any dynamically generated resources. This method is called + # before the transaction starts. def generate list = @catalog.vertices - - # Store a list of all generated resources, so that we can clean them up - # after the transaction closes. - @generated = [] - newlist = [] while ! list.empty? list.each do |resource| - if resource.respond_to?(:generate) - begin - made = resource.generate - rescue => detail - resource.err "Failed to generate additional resources: %s" % - detail - end - next unless made - unless made.is_a?(Array) - made = [made] - end - made.uniq! - made.each do |res| - @catalog.add_resource(res) - res.catalog = catalog - newlist << res - @generated << res - res.finish - end - end + newlist += generate_additional_resources(resource, :generate) end - list.clear list = newlist newlist = [] end |