厨师 - Dir.exists?警卫将符号链接视为目录
Chef - Dir.exists? guard treating symlink as directory
我有一个删除空日志目录的方法,然后在下一步中用 symlink 替换它。
directory "#{ENV['GS_HOME']}/logs/" do
action :delete
only_if { ::Dir.exists?("#{ENV['GS_HOME']}/logs/") }
end
它第一次工作,但在下一个 chef-client 运行 上,当它不应该将现在是 link 的项目删除到另一个目录时,我收到一个错误:
Errno::ENOTDIR
--------------
Not a directory @ dir_s_rmdir ...
为什么守卫似乎将 link 视为目录而不是跳过,但随后资源操作正确识别它,而不是将其识别为一个,并且失败了?最好的解决方法是什么?
第一次,守卫检查它是否是一个目录。结果 运行 它可以检查文件目录是否是符号链接。尝试
directory "#{ENV['GS_HOME']}/logs/" do
action :delete
only_if { ::Dir.exist?("#{ENV['GS_HOME']}/logs/") || !::File.symlink?("#{ENV['GS_HOME']}/logs/") }
end
我有一个删除空日志目录的方法,然后在下一步中用 symlink 替换它。
directory "#{ENV['GS_HOME']}/logs/" do
action :delete
only_if { ::Dir.exists?("#{ENV['GS_HOME']}/logs/") }
end
它第一次工作,但在下一个 chef-client 运行 上,当它不应该将现在是 link 的项目删除到另一个目录时,我收到一个错误:
Errno::ENOTDIR
--------------
Not a directory @ dir_s_rmdir ...
为什么守卫似乎将 link 视为目录而不是跳过,但随后资源操作正确识别它,而不是将其识别为一个,并且失败了?最好的解决方法是什么?
第一次,守卫检查它是否是一个目录。结果 运行 它可以检查文件目录是否是符号链接。尝试
directory "#{ENV['GS_HOME']}/logs/" do
action :delete
only_if { ::Dir.exist?("#{ENV['GS_HOME']}/logs/") || !::File.symlink?("#{ENV['GS_HOME']}/logs/") }
end