Chef bash资源,命令属性不起作用

时间:2014-08-06 15:08:59

标签: bash chef

我有一个简单的食谱,如下所示:

bash "create folder" do
  command "mkdir -p /home/user/folder"
  not_if {::File.directory?("/home/user/folder")}
end

它不起作用。它说它正在执行,但它不会创建文件夹。如果我将bash更改为execute,则可行。如果我将command更改为code,则可行。但是bashexecute文档在command上实际上具有相同的规范。

我做错了什么或者文档错了吗?

2 个答案:

答案 0 :(得分:3)

引用Bash resource

的属性文档
  

代码:要执行的带引号(“”)的代码字符串   命令:要执行的命令的名称。默认值:资源块的名称(请参阅上面的语法部分)。

这个,command属性只是命令的名称,而不是要运行的完整代码。使用bash资源(以及所有其他script resources),您应该使用code属性发送要执行的代码。

因此,正确的资源定义是:

bash "create folder" do
  code "mkdir -p /home/user/folder"
  not_if {::File.directory?("/home/user/folder")}
end

实际上,command属性的内容在任何地方都没有使用,它就在那里,因为脚本资源继承自execute资源,因此继承了所有可能的属性。

最后一点,要创建目录,您应该使用Chef内置的实际惯用directory资源而不是像这样的bash脚本:

directory "/home/user/folder" do
  recursive true
end

答案 1 :(得分:1)

bash的默认行为是Use to run a script

执行的默认行为是Use to run a command

您正在运行命令,而不是脚本,因此您应该使用代码块或使用execute代替它。两者之间的差异是......在文档中没有明确定义。我发现文档中至少有3或4个例子是完全错误并提交了更正,其中一些仍然没有制作。