目录资源不创建目录

时间:2014-06-12 03:21:28

标签: resources vagrant chef recipe

我有一个Vagrantfile,通过运行一个厨师配方来配置VM。厨师食谱中的第一个资源是:

directory "/downloads" do
  owner "root"
  group "root"
  mode "0755"
  action :create
end

# check that it worked:
raise "/downloads doesn't exist!" unless File.exists? "/downloads"

当我在工作中运行它时,它运行正常。

当我在家里运行它时,它会失败,当我检查/downloads是否存在时会引发异常。

我不确定为什么会这样。我希望它的行为相同,因为底层的Vagrant盒子在工作和家里都是一样的。我是一名厨师newb所以也许有些事情我不了解资源在我的食谱中运行的顺序?我希望它们按顺序运行......

我还尝试在notifies块中添加directory个调用,我在其中调用另一个execute:immediately。这是有效的,但在第二个执行块中,我测试是否已经创建了/downloads而它没有。

显然我遗漏了一些非常基本的东西。

1 个答案:

答案 0 :(得分:3)

Chef有两个执行阶段:编译阶段和收敛阶段。

在编译阶段,您编写的任何资源声明(如directory)都已编译但未执行。您编写的任何裸Ruby代码也会在此时执行。在收敛阶段,任何编译的资源然后在测试和设置操作中收敛。

我将假设在工作中,您已经预先存在/downloads目录,因此在汇聚期间资源是无操作,并且在编译期间不会发生提升。

如果您希望任意Ruby代码在收敛时执行,请将其放在ruby_block资源中。