Files

Class/Module Index [+]

Quicksearch

Chef::Provider::Link

Public Instance Methods

action_create() click to toggle source
# File lib/chef/provider/link.rb, line 91
def action_create
  if @current_resource.to != canonicalize(@new_resource.to) ||
     @current_resource.link_type != @new_resource.link_type
    if @current_resource.to # nil if target_file does not exist
      converge_by("unlink existing file at #{@new_resource.target_file}") do
        ::File.unlink(@new_resource.target_file)
      end
    end
    if @new_resource.link_type == :symbolic
      converge_by("create symlink at #{@new_resource.target_file} to #{@new_resource.to}") do
        file_class.symlink(canonicalize(@new_resource.to),@new_resource.target_file)
        Chef::Log.debug("#{@new_resource} created #{@new_resource.link_type} link from #{@new_resource.target_file} -> #{@new_resource.to}")
        Chef::Log.info("#{@new_resource} created")
      end
    elsif @new_resource.link_type == :hard
      converge_by("create hard link at #{@new_resource.target_file} to #{@new_resource.to}") do
        file_class.link(@new_resource.to, @new_resource.target_file)
        Chef::Log.debug("#{@new_resource} created #{@new_resource.link_type} link from #{@new_resource.target_file} -> #{@new_resource.to}")
        Chef::Log.info("#{@new_resource} created")
      end
    end
  end
  if @new_resource.link_type == :symbolic
    if access_controls.requires_changes?
      converge_by(access_controls.describe_changes) do
        access_controls.set_all
      end
    end
  end
end
action_delete() click to toggle source
# File lib/chef/provider/link.rb, line 122
def action_delete
  if @current_resource.to # Exists
    converge_by("delete link at #{@new_resource.target_file}") do
      ::File.delete(@new_resource.target_file)
      Chef::Log.info("#{@new_resource} deleted")
    end
  end
end
canonicalize(path) click to toggle source
# File lib/chef/provider/link.rb, line 87
def canonicalize(path)
  Chef::Platform.windows? ? path.gsub('/', '\') : path
end
define_resource_requirements() click to toggle source
# File lib/chef/provider/link.rb, line 72
def define_resource_requirements
  requirements.assert(:delete) do |a|
    a.assertion do
      if @current_resource.to
        @current_resource.link_type == @new_resource.link_type and
        (@current_resource.link_type == :symbolic  or @current_resource.to != '')
      else
        true
      end
    end
    a.failure_message Chef::Exceptions::Link, "Cannot delete #{@new_resource} at #{@new_resource.target_file}! Not a #{@new_resource.link_type.to_s} link."
    a.whyrun("Would assume the link at #{@new_resource.target_file} was previously created")
  end
end
load_current_resource() click to toggle source
# File lib/chef/provider/link.rb, line 48
def load_current_resource
  @current_resource = Chef::Resource::Link.new(@new_resource.name)
  @current_resource.target_file(@new_resource.target_file)
  if file_class.symlink?(@current_resource.target_file)
    @current_resource.link_type(:symbolic)
    @current_resource.to(
      canonicalize(file_class.readlink(@current_resource.target_file))
    )
  else
    @current_resource.link_type(:hard)
    if ::File.exists?(@current_resource.target_file)
      if ::File.exists?(@new_resource.to) &&
         file_class.stat(@current_resource.target_file).ino ==
         file_class.stat(@new_resource.to).ino
        @current_resource.to(canonicalize(@new_resource.to))
      else
        @current_resource.to("")
      end
    end
  end
  ScanAccessControl.new(@new_resource, @current_resource).set_all!
  @current_resource
end
whyrun_supported?() click to toggle source
# File lib/chef/provider/link.rb, line 44
def whyrun_supported?
  true
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.