class Chef::Provider::Link

Public Instance Methods

canonicalize(path) click to toggle source
# File lib/chef/provider/link.rb, line 75
def canonicalize(path)
  ChefUtils.windows? ? path.tr("/", "\\") : path
end
define_resource_requirements() click to toggle source
# File lib/chef/provider/link.rb, line 60
def define_resource_requirements
  requirements.assert(:delete) do |a|
    a.assertion do
      if current_resource.to
        current_resource.link_type == new_resource.link_type &&
          (current_resource.link_type == :symbolic || 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} 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 36
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 ::TargetIO::File.exist?(current_resource.target_file)
      if ::TargetIO::File.exist?(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