厨师 - Dir.exists?守卫将符号链接视为目录

Posted

技术标签:

【中文标题】厨师 - Dir.exists?守卫将符号链接视为目录【英文标题】:Chef - Dir.exists? guard treating symlink as directory 【发布时间】:2015-08-28 16:30:19 【问题描述】:

我有一个方法可以删除一个空的日志目录,然后在下一步用符号链接替换它。

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

它第一次工作,但在下一次厨师客户端运行时,当它不应该删除现在是另一个目录链接的项目时,我收到一个错误:

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

为什么守卫似乎将链接视为目录而不是跳过,但是资源操作正确识别它,而不是一个,并且失败了?解决这个问题的最佳方法是什么?

【问题讨论】:

可能的答案:***.com/a/22898010/2777098 【参考方案1】:

第一次,守卫检查它是否是一个目录。随后运行它可以检查文件目录是否是符号链接。试试

directory "#ENV['GS_HOME']/logs/" do
  action :delete
  only_if  ::Dir.exist?("#ENV['GS_HOME']/logs/") || !::File.symlink?("#ENV['GS_HOME']/logs/") 
end

【讨论】:

好的,谢谢!删除 File 类路径上的最后一个斜杠后完美工作。

以上是关于厨师 - Dir.exists?守卫将符号链接视为目录的主要内容,如果未能解决你的问题,请参考以下文章

向多个用户推送通知

《萌萌守卫塔防》隐私政策

is_file,is_dir,file_exists

如何将厨师服务器 11 升级到 12

将表情符号视为正则表达式中的一个字符[重复]

Linux之ln命令