summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2008-11-07 16:10:52 -0600
committerLuke Kanies <luke@madstop.com>2008-11-07 16:10:52 -0600
commit084071936738f25930bc99bb2e62c2a52259e915 (patch)
tree26de4d4c2b32537c6e18033934e63ce0eadbd8d6 /lib
parentcc046460e36eb6273a4f08de2167de25098d20cb (diff)
downloadpuppet-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.rb66
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