厨师:运行列表中的最后一个食谱似乎先运行

时间:2013-10-16 12:39:14

标签: ruby list chef

我有这个运行列表:recipe-A, my-recipe

recipe-A创建/etc/A目录。

my-recipe包含以下代码:

...
// create '/etc/A/file-1'
...
File.symlink('/etc/A/file-1', '/etc/A/file-2')
...

因此,当my-recipe运行时,应该有/etc/A目录,该目录由recipe-A创建。但是我在厨师的第一次运行时遇到了这个错误:

================================================================================
Recipe Compile Error in ...
================================================================================

Errno::ENOENT
-------------
No such file or directory - (/etc/A/file-1, /etc/A/file-2)

我确信在显示此错误消息时尚未运行recipe-A。但是recipe-A首先运行它不是应该的吗?为什么Chef检查/etc/A是否存在,recipe-A是在{{1}}尚未运行时创建的?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

不要将其作为ruby代码运行,请使用link资源创建符号链接。

link "/etc/A/file-2" do
  to "/etc/A/file-1"
end

我非常确定您的Ruby代码已经在主厨运行的compilation phase期间执行,这就是为什么第二个配方中的代码似乎首先被执行的原因。