我的厨师食谱中有一个Web服务器角色,如此
name "webserver"
'nginx' => {
'port' => "80"
},
'java' => {
'openjdk_version' => 7
}
Berksfile
cookbook "java"
我正在尝试安装java 7 - 似乎无法在json覆盖中找到这样做的示例。
当前错误是ERROR:选项版本必须是[String,Array]的一种!你通过了8。
由于
答案 0 :(得分:2)
如果您正在使用角色,则无需覆盖任何内容,只需将openjdk_version
属性设置为角色的default_attributes部分即可。该属性在食谱nil
中设置为attributes/default.rb
,因此您只需按照厨师的正常order of precedence进行设置即可。
示例(JSON):
{
"name": "webserver",
"default_attributes": {
"nginx": {
"port": "80"
},
"java": {
"openjdk_version": "7"
}
}
}
使用Ruby DSL也是如此:
name "webserver"
default_attributes => {
"nginx" => {
"port" => "80"
},
"java" => {
"openjdk_version" => "7"
}
}
如果您正在使用某种包装食谱,您还可以通过该食谱的属性文件设置该属性,例如:
default[:java][:openjdk_version] = "7"
您遇到此ERROR: Option version must be a kind of [String, Array]! You passed 8.
错误是因为您将属性设置为整数,而不是字符串。如果查看cookbook's code,您可以看到调用version
选项的位置。我老实说从来没有使用过这个选项,但听起来它想要一个字符串,并且示例支持这个概念(请参阅Chef文档中的包资源 - 我无法发布链接,因为我已经有太多的链接了交)。
至于使用Berkshelf,请记住,Berkshelf用于解决依赖关系,并在管理所述依赖关系并将其上传到您的节点或Chef服务器时让您的生活更轻松。它不用于设置Chef属性。
我希望这有帮助!