【问题标题】:Chef - Dir.exists? guard treating symlink as directory厨师 - Dir.exists?守卫将符号链接视为目录
【发布时间】: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 ...

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

【问题讨论】:

标签: ruby chef-infra chef-recipe


【解决方案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 类路径上的最后一个斜杠后完美工作。
猜你喜欢
  • 2014-05-18
  • 2021-10-31
  • 2014-03-17
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多