Adds additional resources to the catalog and relationship graph that are generated by existing resources. There are two ways that a resource can generate additional resources, either through the generate method or the eval_generate method.
@api private
# File lib/puppet/transaction/additional_resource_generator.rb, line 34 def eval_generate(resource) return false unless resource.respond_to?(:eval_generate) raise Puppet::DevError,"Depthfirst resources are not supported by eval_generate" if resource.depthfirst? begin generated = replace_duplicates_with_catalog_resources(resource.eval_generate) return false if generated.empty? rescue => detail resource.log_exception(detail, "Failed to generate additional resources using 'eval_generate': #{detail}") return false end add_resources(generated, resource) made = Hash[generated.map(&:name).zip(generated)] contain_generated_resources_in(resource, made) connect_resources_to_ancestors(resource, made) true end
# File lib/puppet/transaction/additional_resource_generator.rb, line 14 def generate_additional_resources(resource) return unless resource.respond_to?(:generate) begin generated = resource.generate rescue => detail resource.log_exception(detail, "Failed to generate additional resources using 'generate': #{detail}") end return unless generated generated = [generated] unless generated.is_a?(Array) generated.collect do |res| @catalog.resource(res.ref) || res end.each do |res| priority = @prioritizer.generate_priority_contained_in(resource, res) add_resource(res, resource, priority) add_conditional_directed_dependency(resource, res) generate_additional_resources(res) end end
# File lib/puppet/transaction/additional_resource_generator.rb, line 8 def initialize(catalog, relationship_graph, prioritizer) @catalog = catalog @relationship_graph = relationship_graph @prioritizer = prioritizer end