# File lib/chef/provider/cookbook_file.rb, line 35 def action_create if file_cache_location && content_stale? description = [] description << "create a new cookbook_file #{@new_resource.path}" description << diff_current(file_cache_location) converge_by(description) do Chef::Log.debug("#{@new_resource} has new contents") backup_new_resource deploy_tempfile do |tempfile| Chef::Log.debug("#{@new_resource} staging #{file_cache_location} to #{tempfile.path}") tempfile.close FileUtils.cp(file_cache_location, tempfile.path) enforce_tempfile_inheritance(tempfile.path) end Chef::Log.info("#{@new_resource} created file #{@new_resource.path}") end else set_all_access_controls end end
# File lib/chef/provider/cookbook_file.rb, line 70 def backup_new_resource if ::File.exists?(@new_resource.path) backup @new_resource.path end end
# File lib/chef/provider/cookbook_file.rb, line 76 def content_stale? ( ! ::File.exist?(@new_resource.path)) || ( ! compare_content) end
# File lib/chef/provider/cookbook_file.rb, line 56 def file_cache_location @file_cache_location ||= begin cookbook = run_context.cookbook_collection[resource_cookbook] cookbook.preferred_filename_on_disk_location(node, :files, @new_resource.source, @new_resource.path) end end
# File lib/chef/provider/cookbook_file.rb, line 30 def load_current_resource @current_resource = Chef::Resource::CookbookFile.new(@new_resource.name) super end
Determine the cookbook to get the file from. If new resource sets an explicit cookbook, use it, otherwise fall back to the implicit cookbook i.e., the cookbook the resource was declared in.
# File lib/chef/provider/cookbook_file.rb, line 66 def resource_cookbook @new_resource.cookbook || @new_resource.cookbook_name end
# File lib/chef/provider/cookbook_file.rb, line 82 def enforce_tempfile_inheritance(tempfile_path) # On the Windows platform, files in the temp directory # default to not inherit unless the new resource specifies rights of # some sort. Here we ensure that even when no rights are # specified, the dacl's inheritance flag is set. if Chef::Platform.windows? && @new_resource.rights.nil? && @new_resource.group.nil? && @new_resource.owner.nil? && @new_resource.deny_rights.nil? securable_tempfile = Chef::ReservedNames::Win32::Security::SecurableObject.new(tempfile_path) # No rights were specified, so the dacl will have no explicit aces default_dacl = Chef::ReservedNames::Win32::Security::ACL.create([]) # In setting this default dacl, set inheritance to true securable_tempfile.set_dacl(default_dacl, true) end end
Generated with the Darkfish Rdoc Generator 2.