【发布时间】:2016-01-28 03:17:03
【问题描述】:
我正在尝试读取文件的内容并在我的 ruby 代码中使用它。在这一步中,我不会尝试在引导节点上做任何事情。我想要做的就是读取一个 JSON 文件,该文件将驻留在说明书的文件夹中,并读取文件的内容并做一些事情。我只想在我的代码本身中使用来自 JSON 的值。代码示例如下所示。任何帮助表示赞赏。
属性:default.rb
default["xyz"]["ohs_servers"]=[
{"hostname"=> "intf301.linux.xyz.com","name" => "INTFIN_OHS_001", "short_name" => "OGS", "port" => "9931"},
{"hostname"=> "intf302.linux.xyz.com","name" => "INTFIN_OHS_001", "short_name" => "OHS", "port" => "9931"}
]
机器:machines.rb
require 'rubygems'
require 'json'
require 'pp'
json = File.read('environment.json')
obj = JSON.parse(json)
number = obj["name"]
x = node["xyz"]["ohs_servers"][number]["hostname"]
cookbook 文件夹中的 JSON 文件:environment.json
{
"template_name": "environment_template",
"number": 0
}
【问题讨论】:
-
您为什么要这样做?节点对象已经是json了,为什么不直接把这些数据放到一个属性文件中呢?
-
我想说this answer 应该为您提供磁盘上
environment.json的路径。但我也不确定你的目标是什么。当我们知道这一点时,我们也许能够更好地帮助您。 -
我正在尝试为不同的环境重复使用说明书。对于不同的环境,我有不同的模板(json)文件。我不想从 json 文件中填充属性值。我上面的代码只是一个简单的说明,以便于理解。
-
在这种情况下,您将获得一本环境说明书(空配方和一个包含您的值的属性文件)并在您的配方中使用它。
标签: ruby json chef-infra cookbook