Class/Module Index [+]

Quicksearch

Chef::Provider::CookbookFile

Public Instance Methods

action_create() click to toggle source
# 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
backup_new_resource() click to toggle source
# 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
content_stale?() click to toggle source
# File lib/chef/provider/cookbook_file.rb, line 76
def content_stale?
  ( ! ::File.exist?(@new_resource.path)) || ( ! compare_content)
end
file_cache_location() click to toggle source
# 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
load_current_resource() click to toggle source
# File lib/chef/provider/cookbook_file.rb, line 30
def load_current_resource
  @current_resource = Chef::Resource::CookbookFile.new(@new_resource.name)
  super
end
resource_cookbook() click to toggle source

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
whyrun_supported?() click to toggle source
# File lib/chef/provider/cookbook_file.rb, line 26
def whyrun_supported?
  true
end

Protected Instance Methods

enforce_tempfile_inheritance(tempfile_path) click to toggle source
# 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

[Validate]

Generated with the Darkfish Rdoc Generator 2.