diff options
author | Phil Dibowitz <phil@ipom.com> | 2019-04-25 11:11:10 -0700 |
---|---|---|
committer | Phil Dibowitz <phil@ipom.com> | 2019-04-29 11:16:20 -0700 |
commit | 9ea76290936316ce6fe2d40621581210b2006572 (patch) | |
tree | 1a8c9d00ea427a307f1c955d27581edfa9c59498 | |
parent | da8bc7a3a5bad59fe5f228d7d0c272ea1e2c469b (diff) | |
download | chef-9ea76290936316ce6fe2d40621581210b2006572.tar.gz |
Tell people what file a link is pointing at.
In the event you are managing a file `/etc/file` with a `file` resource,
but it turns out to be a link to `/etc/passwd` and you are trying to figure
out what overwrite `/etc/passwd`, there is no indication in the logs. Let's add
one.
Signed-off-by: Phil Dibowitz <phil@ipom.com>
-rw-r--r-- | lib/chef/provider/file.rb | 2 | ||||
-rw-r--r-- | lib/chef/win32/file.rb | 8 | ||||
-rw-r--r-- | spec/support/shared/unit/provider/file.rb | 1 |
3 files changed, 10 insertions, 1 deletions
diff --git a/lib/chef/provider/file.rb b/lib/chef/provider/file.rb index 05522f1eb8..4f9d99db90 100644 --- a/lib/chef/provider/file.rb +++ b/lib/chef/provider/file.rb @@ -227,7 +227,7 @@ class Chef elsif file_class.symlink?(path) && new_resource.manage_symlink_source verify_symlink_sanity(path) elsif file_class.symlink?(new_resource.path) && new_resource.manage_symlink_source.nil? - logger.warn("File #{path} managed by #{new_resource} is really a symlink. Managing the source file instead.") + logger.warn("File #{path} managed by #{new_resource} is really a symlink (to #{file_class.realpath(new_resource.path)}). Managing the source file instead.") logger.warn("Disable this warning by setting `manage_symlink_source true` on the resource") logger.warn("In a future Chef release, 'manage_symlink_source' will not be enabled by default") verify_symlink_sanity(path) diff --git a/lib/chef/win32/file.rb b/lib/chef/win32/file.rb index 03d4496fa8..422cc194dc 100644 --- a/lib/chef/win32/file.rb +++ b/lib/chef/win32/file.rb @@ -89,6 +89,14 @@ class Chef is_symlink end + def self.realpath(file_name) + if symlink?(file_name) + readlink(file_name) + else + file_name + end + end + # Returns the path of the of the symbolic link referred to by +file+. # # Requires Windows Vista or later. On older versions of Windows it diff --git a/spec/support/shared/unit/provider/file.rb b/spec/support/shared/unit/provider/file.rb index a7c7af92f6..b3039f9be4 100644 --- a/spec/support/shared/unit/provider/file.rb +++ b/spec/support/shared/unit/provider/file.rb @@ -76,6 +76,7 @@ def setup_symlink allow(File).to receive(:directory?).with(path).and_return(false) allow(File).to receive(:writable?).with(path).and_return(true) allow(file_symlink_class).to receive(:symlink?).with(path).and_return(true) + allow(file_symlink_class).to receive(:realpath).with(path).and_return(path) end allow(File).to receive(:directory?).with(enclosing_directory).and_return(true) end |