182: def generate_additional_resources(resource, method)
183: return [] unless resource.respond_to?(method)
184: begin
185: made = resource.send(method)
186: rescue => detail
187: puts detail.backtrace if Puppet[:trace]
188: resource.err "Failed to generate additional resources using '#{method}': #{detail}"
189: end
190: return [] unless made
191: made = [made] unless made.is_a?(Array)
192: made.uniq.find_all do |res|
193: begin
194: res.tag(*resource.tags)
195: @catalog.add_resource(res) do |r|
196: r.finish
197: make_parent_child_relationship(resource, [r])
198:
199:
200: generate_additional_resources(r, method)
201: end
202: true
203: rescue Puppet::Resource::Catalog::DuplicateResourceError
204: res.info "Duplicate generated resource; skipping"
205: false
206: end
207: end
208: end