0

我有这个运行列表: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先运行吗?为什么厨师检查它的存在/etc/A,它是由recipe-A尚未运行时创建的?我该如何解决这个问题?

4

1 回答 1

1

不要将它作为 ruby​​ 代码运行,使用链接资源来创建符号链接。

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

我很确定您的 Ruby 代码已经在 Chef 运行的编译阶段执行,这就是为什么第二个配方中的代码似乎首先执行的原因。

于 2013-10-16T13:23:01.257 回答