chef-solo 函数中的命令执行

Command execution in functions in chef-solo

我写了一个简单的厨师脚本。 /DirectoryPath 中有一个文件夹 t1。现在我正在 /DirectoryPath/t5 中创建一个新文件夹。但是 listDirectory() 方法给出相同的输出,就好像没有创建新目录一样。我在 MAC 和厨师 11.4

我的脚本如下

recipe.rb

def listDirectory() 
  ls = `ls ~/Delete`
  return ls
end

log(listDirectory())

directory '/DirectoryPath/t5' do
  action :create
end

log(listDirectory())

输出

Recipe: test::default
  * log[t1] action write[2015-11-03T15:02:47-08:00] INFO: Processing log[t1] action write
[2015-11-03T15:02:47-08:00] INFO: t1

  * directory[/DirectoryPath/t5] action create[2015-11-03T15:02:47-08:00] INFO: Processing directory[/DirectoryPath/t5] action create (test::default line 10)
[2015-11-03T15:02:47-08:00] INFO: directory[/DirectoryPath/t5] created directory /DirectoryPath/t5

    - create new directory /DirectoryPath/t5
  * log[t1] action write[2015-11-03T15:02:47-08:00] INFO: Processing log[t1] action write
[2015-11-03T15:02:47-08:00] INFO: t1

根据我的说法,第二个日志语句应该显示文件夹 t1 和 t5,但它只显示 t1。我能知道命令返回相同结果的原因是什么,即使有一些变化。我该如何避免呢?

这是因为two phases of a chef-client run

您的调用在 编译阶段 期间执行,在执行 directory 资源之前(在 执行阶段 中)。

您应该熟悉其他厨师的惯用语,例如 libraries and definitions。你不应该直接在食谱中嵌入 ruby 代码。

我进一步向 post 建议一个新问题,其中包含您想要实现的问题。很确定有一种厨师风格的方法可以解决它。