我的 Chef Recipe 中有一个网络服务器角色,就像这样
name "webserver"
'nginx' => {
'port' => "80"
},
'java' => {
'openjdk_version' => 7
}
伯克斯文件
cookbook "java"
我正在尝试安装 java 7 - 似乎找不到在 json 覆盖中执行此操作的示例。
当前错误是错误:选项版本必须是一种[字符串,数组]!您已通过 8 分。
谢谢
最佳答案
如果您使用角色,则无需覆盖任何内容,只需将 openjdk_version
属性设置为角色的 default_attributes 部分的一部分即可。该属性在说明书的 attributes/default.rb
中设置为 nil
,因此您只需按照 Chef 的正常 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"
}
}
如果您使用某种包装 Recipe ,您还可以通过该 Recipe 的属性文件设置属性,例如:
默认[:java][:openjdk_version] = "7"
此错误:选项版本必须是一种[字符串,数组]!您传递了 8.
错误,这是因为您将属性设置为整数,而不是字符串。如果你看cookbook's code ,您可以看到 version
选项被调用的位置。老实说,我从未使用过该选项,但听起来它需要一个字符串,并且示例支持该概念(请参阅 Chef 文档以获取包资源 - 我无法发布链接,因为我在此已经有太多链接帖子)。
至于使用 Berkshelf,请记住 Berkshelf 是为了解决依赖关系,让您在管理所述依赖关系并将其上传到您的节点或 Chef 服务器时变得更轻松。它不用于设置 Chef 属性。
希望这会有所帮助!
关于java - 如何使用 json 覆盖在 Chef Recipe 中安装 java 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31116349/