我想从该Chef默认属性文件中读取一些URL和版本号:
https://github.com/aws/aws-parallelcluster-cookbook/blob/develop/attributes/default.rb
[我知道我可以使用grep
,sed
,awk
解决方案,但这些解决方案通常比较脆弱,我无法控制此文件。我只希望能够下载它并解析出我需要的值。
一个示例解决方案可以将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,那也可以。我可以从中解析出我需要的东西。
您未指定在厨师客户期间是否要这样做。
尽管不建议这样做,但是您可以使用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