Module: Chef::DSL::DeclareResource
- Included in:
- Core
- Defined in:
- lib/chef/dsl/declare_resource.rb
Instance Method Summary collapse
-
#build_resource(type, name, created_at = nil, run_context: self.run_context, &resource_attrs_block) ⇒ Chef::Resource
Instantiate a resource of the given
type
with the givenname
and attributes as given in theresource_attrs_block
. -
#declare_resource(type, name, created_at = nil, run_context: self.run_context, create_if_missing: false, &resource_attrs_block) ⇒ Chef::Resource
Instantiates a resource (via #build_resource), then adds it to the resource collection.
-
#delete_resource(type, name, run_context: self.run_context) ⇒ Chef::Resource
Lookup a resource in the resource collection by name and delete it.
-
#delete_resource!(type, name, run_context: self.run_context) ⇒ Chef::Resource
Lookup a resource in the resource collection by name and delete it.
-
#edit_resource(type, name, created_at = nil, run_context: self.run_context, &resource_attrs_block) ⇒ Chef::Resource
Lookup a resource in the resource collection by name.
-
#edit_resource!(type, name, created_at = nil, run_context: self.run_context, &resource_attrs_block) ⇒ Chef::Resource
Lookup a resource in the resource collection by name and edit the resource.
-
#find_resource(type, name, created_at: nil, run_context: self.run_context, &resource_attrs_block) ⇒ Chef::Resource
Lookup a resource in the resource collection by name.
-
#find_resource!(type, name, run_context: self.run_context) ⇒ Chef::Resource
Lookup a resource in the resource collection by name.
-
#with_run_context(rc) ⇒ Object
Helper for switching run_contexts.
Instance Method Details
#build_resource(type, name, created_at = nil, run_context: self.run_context, &resource_attrs_block) ⇒ Chef::Resource
Instantiate a resource of the given type
with the given name
and attributes as given in the resource_attrs_block
.
The resource is NOT added to the resource collection.
269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 |
# File 'lib/chef/dsl/declare_resource.rb', line 269 def build_resource(type, name, created_at = nil, run_context: self.run_context, &resource_attrs_block) created_at ||= caller[0] # this needs to be lazy in order to avoid circular dependencies since ResourceBuilder # will requires the entire provider+resolver universe require "chef/resource_builder" unless defined?(Chef::ResourceBuilder) Chef::ResourceBuilder.new( type: type, name: name, created_at: created_at, params: @params, run_context: run_context, cookbook_name: cookbook_name, recipe_name: recipe_name, enclosing_provider: self.is_a?(Chef::Provider) ? self : nil ).build(&resource_attrs_block) end |
#declare_resource(type, name, created_at = nil, run_context: self.run_context, create_if_missing: false, &resource_attrs_block) ⇒ Chef::Resource
Instantiates a resource (via #build_resource), then adds it to the resource collection. Note that resource classes are looked up directly, so this will create the resource you intended even if the method name corresponding to that resource has been overridden.
233 234 235 236 237 238 239 240 241 242 243 244 245 246 |
# File 'lib/chef/dsl/declare_resource.rb', line 233 def declare_resource(type, name, created_at = nil, run_context: self.run_context, create_if_missing: false, &resource_attrs_block) created_at ||= caller[0] if create_if_missing Chef::Log.deprecation "build_resource with a create_if_missing flag is deprecated, use edit_resource instead" # midly goofy since we call edit_resource only to re-call ourselves, but that's why its deprecated... return edit_resource(type, name, created_at, run_context: run_context, &resource_attrs_block) end resource = build_resource(type, name, created_at, &resource_attrs_block) run_context.resource_collection.insert(resource, resource_type: type, instance_name: name) resource end |
#delete_resource(type, name, run_context: self.run_context) ⇒ Chef::Resource
Lookup a resource in the resource collection by name and delete it. Returns nil if the resource is not found and should not fail.
97 98 99 100 101 |
# File 'lib/chef/dsl/declare_resource.rb', line 97 def delete_resource(type, name, run_context: self.run_context) delete_resource!(type, name, run_context: run_context) rescue Chef::Exceptions::ResourceNotFound nil end |
#delete_resource!(type, name, run_context: self.run_context) ⇒ Chef::Resource
Lookup a resource in the resource collection by name and delete it. This will raise Chef::Exceptions::ResourceNotFound if the resource is not found.
73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/chef/dsl/declare_resource.rb', line 73 def delete_resource!(type, name, run_context: self.run_context) run_context.resource_collection.delete("#{type}[#{name}]").tap do |resource| # Purge any pending notifications too. This will not raise an exception # if there are no notifications. if resource run_context.before_notification_collection.delete(resource.declared_key) run_context.immediate_notification_collection.delete(resource.declared_key) run_context.delayed_notification_collection.delete(resource.declared_key) end end end |
#edit_resource(type, name, created_at = nil, run_context: self.run_context, &resource_attrs_block) ⇒ Chef::Resource
Lookup a resource in the resource collection by name. If it exists, return it. If it does not exist, create it. This is a useful function for accumulator patterns. In CRUD terminology this is an “upsert” operation and is used to assert that the resource must exist with the specified properties.
149 150 151 152 153 |
# File 'lib/chef/dsl/declare_resource.rb', line 149 def edit_resource(type, name, created_at = nil, run_context: self.run_context, &resource_attrs_block) edit_resource!(type, name, created_at, run_context: run_context, &resource_attrs_block) rescue Chef::Exceptions::ResourceNotFound declare_resource(type, name, created_at, run_context: run_context, &resource_attrs_block) end |
#edit_resource!(type, name, created_at = nil, run_context: self.run_context, &resource_attrs_block) ⇒ Chef::Resource
Lookup a resource in the resource collection by name and edit the resource. If the resource is not found this will raise Chef::Exceptions::ResourceNotFound. This is the correct API to use for “chef_rewind” functionality.
120 121 122 123 124 |
# File 'lib/chef/dsl/declare_resource.rb', line 120 def edit_resource!(type, name, created_at = nil, run_context: self.run_context, &resource_attrs_block) resource = find_resource!(type, name, run_context: run_context) resource.instance_eval(&resource_attrs_block) if block_given? resource end |
#find_resource(type, name, created_at: nil, run_context: self.run_context, &resource_attrs_block) ⇒ Chef::Resource
Lookup a resource in the resource collection by name. If the resource is not found the will be no exception raised and the call will return nil. If a block is given and no resource is found it will create the resource using the block, if the resource is found then the block will not be applied. The block version is similar to create_if_missing
200 201 202 203 204 205 206 |
# File 'lib/chef/dsl/declare_resource.rb', line 200 def find_resource(type, name, created_at: nil, run_context: self.run_context, &resource_attrs_block) find_resource!(type, name, run_context: run_context) rescue Chef::Exceptions::ResourceNotFound if block_given? declare_resource(type, name, created_at, run_context: run_context, &resource_attrs_block) end # returns nil otherwise end |
#find_resource!(type, name, run_context: self.run_context) ⇒ Chef::Resource
Lookup a resource in the resource collection by name. If the resource is not found this will raise Chef::Exceptions::ResourceNotFound. This API is identical to the resources() call and while it is a synonym it is not intended to deprecate that call.
168 169 170 171 |
# File 'lib/chef/dsl/declare_resource.rb', line 168 def find_resource!(type, name, run_context: self.run_context) raise ArgumentError, "find_resource! does not take a block" if block_given? run_context.resource_collection.find(type => name) end |
#with_run_context(rc) ⇒ Object
Helper for switching run_contexts. Allows for using :parent or :root in place of passing the run_context. Executes the block in the run_context. Returns the return value of the passed block.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/chef/dsl/declare_resource.rb', line 42 def with_run_context(rc) raise ArgumentError, "with_run_context is useless without a block" unless block_given? old_run_context = @run_context @run_context = case rc when Chef::RunContext rc when :root Chef.run_context when :parent run_context.parent_run_context else raise ArgumentError, "bad argument to run_context helper, must be :root, :parent, or a Chef::RunContext" end yield ensure @run_context = old_run_context end |