java - 如何使用 json 覆盖在 Chef Recipe 中安装 java 7

标签 java chef-infra

我的 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/

相关文章:

java - JdbcCursorItemReader 提交间隔

java - 找不到 Twitter4j 的 ConfigureBuilder 类

java - 调整 libGDX 大小后触摸位置不正确

ruby - 如何在 Chef Recipe 中使用 not_if

apache - 如何以编程方式查询 Windows 上 Apache TomCat 7 的当前内存设置?

java - 如何使用jtable第一列中的复选框将数据库中的数据显示到jtable?

java - 在 Jersey 中,如何处理深度嵌套的复杂对象的 @POST 参数?

chef-infra - 我可以在配方中标记节点吗?

java - 使用 Chef 从 Sonatype Nexus 部署 war

chef-infra - 允许 Chef 节点上传 Recipe