class Chef::ResourceBuilder
Attributes
cookbook_name[R]
created_at[R]
enclosing_provider[R]
name[R]
params[R]
recipe_name[R]
resource[R]
run_context[R]
type[R]
Public Class Methods
new(type: nil, name: nil, created_at: nil, params: nil, run_context: nil, cookbook_name: nil, recipe_name: nil, enclosing_provider: nil)
click to toggle source
FIXME (ruby-2.1 syntax): most of these are mandatory
# File lib/chef/resource_builder.rb, line 34 def initialize(type: nil, name: nil, created_at: nil, params: nil, run_context: nil, cookbook_name: nil, recipe_name: nil, enclosing_provider: nil) @type = type @name = name @created_at = created_at @params = params @run_context = run_context @cookbook_name = cookbook_name @recipe_name = recipe_name @enclosing_provider = enclosing_provider end
Public Instance Methods
build(&block)
click to toggle source
# File lib/chef/resource_builder.rb, line 45 def build(&block) @resource = resource_class.new(name, run_context) if resource.resource_name.nil? raise Chef::Exceptions::InvalidResourceSpecification, "#{resource}.resource_name is `nil`! Did you forget to put `provides :blah` or `resource_name :blah` in your resource class?" end resource.source_line = created_at resource.declared_type = type resource.cookbook_name = cookbook_name resource.recipe_name = recipe_name # Determine whether this resource is being created in the context of an enclosing Provider resource.enclosing_provider = enclosing_provider # XXX: this is required for definition params inside of the scope of a # subresource to work correctly. resource.params = params # Evaluate resource attribute DSL if block_given? resource.resource_initializing = true begin resource.instance_eval(&block) ensure resource.resource_initializing = false end end # Run optional resource hook resource.after_created resource end
Private Instance Methods
resource_class()
click to toggle source
# File lib/chef/resource_builder.rb, line 80 def resource_class # Checks the new platform => short_name => resource mapping initially # then fall back to the older approach (Chef::Resource.const_get) for # backward compatibility @resource_class ||= Chef::Resource.resource_for_node(type, run_context.node) end