Chef infra 如何让cookbook(A)在继续编写cookbook(B)之前编译并运行?

Chef infra 如何让cookbook(A)在继续编写cookbook(B)之前编译并运行?,chef-infra,cookbook,Chef Infra,Cookbook,我有一本食谱a,可以从我们的一台服务器下载一些文件,另一本食谱B使用这个文件 我的问题是,当我运行chef客户机时,在运行列表完成之前,文件不在那里。在我的cookbookB元数据文件中,它取决于cookbookA,配方中的第一行代码是include cookbookA。在跑步列表中,我也有cookbookA在cookbookB之前。当我第一次运行chef client时,它没有执行我希望它执行的操作,它说找不到文件。如果我第二次运行它,它会正常工作 在继续编写食谱B之前,如何编译并运行食谱A?

我有一本食谱a,可以从我们的一台服务器下载一些文件,另一本食谱B使用这个文件

我的问题是,当我运行chef客户机时,在运行列表完成之前,文件不在那里。在我的cookbookB元数据文件中,它取决于cookbookA,配方中的第一行代码是include cookbookA。在跑步列表中,我也有cookbookA在cookbookB之前。当我第一次运行chef client时,它没有执行我希望它执行的操作,它说找不到文件。如果我第二次运行它,它会正常工作

在继续编写食谱B之前,如何编译并运行食谱A?
这不是厨师的工作方式。您可以在中找到完整的描述,但简单地说,所有的配方都会被编译,然后所有的资源都会被聚合,不管烹饪书/配方划分。

如果你将特定的资源块放入ruby_块中,它将在编译时被跳过,这正是我在coderangers博客中读到它们后所做的。配方中的单个资源,例如远程_文件资源,可以在编译阶段使用.run\u操作方法执行。事实上,任何“纯”ruby都是在编译时执行的,就像puts和log资源一样。因此,如果要确保文件已下载,可以执行类似“远程文件”foo“do action:nothing end.run\u action:create”或“my\u file=远程文件”foo“do action:nothing end my\u file.run\u action:create”的操作`