我有一个食谱,删除一个空的日志目录,然后在下一步中将其替换为符号链接。
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 ...
为什么防护程序似乎将链接视为目录而不跳过,但是资源操作正确地识别了该链接,而不是将其识别为一个,并且失败了?解决此问题的最佳方法是什么?
[警卫第一次检查它是否是目录。随后运行它可以检查文件目录是否为符号链接。尝试
directory "#{ENV['GS_HOME']}/logs/" do
action :delete
only_if { ::Dir.exist?("#{ENV['GS_HOME']}/logs/") || !::File.symlink?("#{ENV['GS_HOME']}/logs/") }
end