我有一个简单的食谱,如下所示:
bash "create folder" do
command "mkdir -p /home/user/folder"
not_if {::File.directory?("/home/user/folder")}
end
它不起作用。它说它正在执行,但它不会创建文件夹。如果我将bash
更改为execute
,则可行。如果我将command
更改为code
,则可行。但是bash和execute文档在command
上实际上具有相同的规范。
我做错了什么或者文档错了吗?
答案 0 :(得分:3)
代码:要执行的带引号(“”)的代码字符串 命令:要执行的命令的名称。默认值:资源块的名称(请参阅上面的语法部分)。
这个,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个例子是完全错误并提交了更正,其中一些仍然没有制作。