如何使用json覆盖在厨师食谱中安装java 7

时间:2015-06-29 12:57:16

标签: java chef

我的厨师食谱中有一个Web服务器角色,如此

name "webserver"

'nginx' => {
   'port' => "80"
},
'java' => {
   'openjdk_version' => 7
}

Berksfile

cookbook "java"

我正在尝试安装java 7 - 似乎无法在json覆盖中找到这样做的示例。

当前错误是ERROR:选项版本必须是[String,Array]的一种!你通过了8。

由于

1 个答案:

答案 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属性。

我希望这有帮助!