Chef-Dir.exists?警卫将符号链接视为目录

问题描述 投票:4回答:1

我有一个食谱,删除一个空的日志目录,然后在下一步中将其替换为符号链接。

directory "#{ENV['GS_HOME']}/logs/" do
  action :delete
  only_if { ::Dir.exists?("#{ENV['GS_HOME']}/logs/") }
end

它第一次起作用,但是在下一次运行chef-client时,当它不应该删除现在是另一个目录链接的项目时,我收到一个错误:

Errno::ENOTDIR
--------------
Not a directory @ dir_s_rmdir ...

为什么防护程序似乎将链接视为目录而不跳过,但是资源操作正确地识别了该链接,而不是将其识别为一个,并且失败了?解决此问题的最佳方法是什么?

ruby chef chef-recipe
1个回答
3
投票

[警卫第一次检查它是否是目录。随后运行它可以检查文件目录是否为符号链接。尝试

directory "#{ENV['GS_HOME']}/logs/" do
  action :delete
  only_if { ::Dir.exist?("#{ENV['GS_HOME']}/logs/") || !::File.symlink?("#{ENV['GS_HOME']}/logs/") }
end
© www.soinside.com 2019 - 2024. All rights reserved.