我如何将Chef default.rb值打印到stdout?

问题描述 投票:0回答:1

我想从该Chef默认属性文件中读取一些URL和版本号:

https://github.com/aws/aws-parallelcluster-cookbook/blob/develop/attributes/default.rb

[我知道我可以使用grepsedawk解决方案,但这些解决方案通常比较脆弱,我无法控制此文件。我只希望能够下载它并解析出我需要的值。

一个示例解决方案可以将default.rb作为JSON打印出来以输出到stdout并用jq进行解析,或者创建一个将其打印出来的ruby脚本。

提前感谢!

更新:

我想要一种从default.rb文件中读取数据的方法,即IE,我想从default.rb中获取版本数据/ URL并将其以编程方式用于其他用途。

很高兴能做

require('default.rb')

puts default['cfncluster']['nvidia']['driver_version']

这将把第68行的值打印到stdout,然后我可以用它做任何想做的事情。以上是我对红宝石的失败尝试。此方法失败,表示未定义默认值。我不是一个红宝石的人,也许有一种方法可以加载它而不会收到该错误消息。

任何建议都值得赞赏。如果您可以使用某个Chef cli将所有内容打印为JSON,那也可以。我可以从中解析出我需要的东西。

ruby chef devops chef-recipe
1个回答
0
投票

您未指定在厨师客户期间是否要这样做。

尽管不建议这样做,但是您可以使用eval()来实现。例如:

# foo.rb
default['foo']['bar'] = "baz"
# read.rb
default = Hash.new {|hash,key| hash[key]={}}
eval(File.read("./foo.rb"))
puts default['foo']['bar']
$ ruby test.rb
baz
© www.soinside.com 2019 - 2024. All rights reserved.