Class: Chef::Provider::Link
- Inherits:
-
Chef::Provider
- Object
- Chef::Provider
- Chef::Provider::Link
- Includes:
- Mixin::ShellOut
- Defined in:
- lib/chef/provider/link.rb
Constant Summary
Constants included from Mixin::ShellOut
Mixin::ShellOut::DEPRECATED_OPTIONS
Instance Attribute Summary
Attributes inherited from Chef::Provider
#current_resource, #new_resource, #run_context
Instance Method Summary collapse
- #action_create ⇒ Object
- #action_delete ⇒ Object
- #file_class ⇒ Object
- #load_current_resource ⇒ Object
Methods included from Mixin::ShellOut
#run_command_compatible_options, #shell_out, #shell_out!
Methods inherited from Chef::Provider
#action_nothing, build_from_file, #cookbook_name, #initialize, #node, #resource_collection
Methods included from Mixin::ConvertToClassName
#convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #snake_case_basename
Methods included from Mixin::EnforceOwnershipAndPermissions
#enforce_ownership_and_permissions
Methods included from Mixin::RecipeDefinitionDSLCore
Methods included from Mixin::Language
#data_bag, #data_bag_item, #platform?, #platform_family?, #search, #value_for_platform, #value_for_platform_family
Constructor Details
This class inherits a constructor from Chef::Provider
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Chef::Mixin::RecipeDefinitionDSLCore
Instance Method Details
#action_create ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/chef/provider/link.rb', line 77 def action_create if @current_resource.to != ::File.(@new_resource.to, @new_resource.target_file) if @new_resource.link_type == :symbolic unless (file_class.symlink?(@new_resource.target_file) && file_class.readlink(@new_resource.target_file) == @new_resource.to) if file_class.symlink?(@new_resource.target_file) || ::File.exist?(@new_resource.target_file) ::File.unlink(@new_resource.target_file) end file_class.symlink(@new_resource.to,@new_resource.target_file) Chef::Log.debug("#{@new_resource} created #{@new_resource.link_type} link from #{@new_resource.to} -> #{@new_resource.target_file}") Chef::Log.info("#{@new_resource} created") end elsif @new_resource.link_type == :hard file_class.link(@new_resource.to, @new_resource.target_file) Chef::Log.debug("#{@new_resource} created #{@new_resource.link_type} link from #{@new_resource.to} -> #{@new_resource.target_file}") Chef::Log.info("#{@new_resource} created") end @new_resource.updated_by_last_action(true) end if @new_resource.link_type == :symbolic end end |
#action_delete ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/chef/provider/link.rb', line 100 def action_delete if @new_resource.link_type == :symbolic if file_class.symlink?(@new_resource.target_file) ::File.delete(@new_resource.target_file) Chef::Log.info("#{@new_resource} deleted") @new_resource.updated_by_last_action(true) elsif ::File.exists?(@new_resource.target_file) raise Chef::Exceptions::Link, "Cannot delete #{@new_resource} at #{@new_resource.target_file}! Not a symbolic link." end elsif @new_resource.link_type == :hard if ::File.exists?(@new_resource.target_file) if ::File.exists?(@new_resource.to) && (file_class.stat(@current_resource.target_file).ino == file_class.stat(@new_resource.to).ino) ::File.delete(@new_resource.target_file) Chef::Log.info("#{@new_resource} deleted") @new_resource.updated_by_last_action(true) else raise Chef::Exceptions::Link, "Cannot delete #{@new_resource} at #{@new_resource.target_file}! Not a hard link." end end end end |
#file_class ⇒ Object
30 31 32 33 34 35 36 37 |
# File 'lib/chef/provider/link.rb', line 30 def file_class @host_os_file ||= if Chef::Platform.windows? require 'chef/win32/file' Chef::Win32::File else ::File end end |
#load_current_resource ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# 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) @current_resource.link_type(@new_resource.link_type) if @new_resource.link_type == :symbolic if ::File.exists?(@current_resource.target_file) && file_class.symlink?(@current_resource.target_file) @current_resource.to( ::File.(file_class.readlink(@current_resource.target_file)) ) cstats = ::File.lstat(@current_resource.target_file) @current_resource.owner(cstats.uid) @current_resource.group(cstats.gid) else @current_resource.to("") end elsif @new_resource.link_type == :hard if ::File.exists?(@current_resource.target_file) && ::File.exists?(@new_resource.to) if ::File.stat(@current_resource.target_file).ino == ::File.stat(@new_resource.to).ino @current_resource.to(@new_resource.to) else @current_resource.to("") end else @current_resource.to("") end end @current_resource end |