Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何将Chef default.rb值打印到标准输出?_Ruby_Chef Infra_Devops_Chef Recipe - Fatal编程技术网

Ruby 如何将Chef default.rb值打印到标准输出?

Ruby 如何将Chef default.rb值打印到标准输出?,ruby,chef-infra,devops,chef-recipe,Ruby,Chef Infra,Devops,Chef Recipe,我想从这个Chef默认属性文件中读取一些URL和版本号: 我知道我可以使用grep、sed、awk解决方案,但这些解决方案通常更脆弱,我无法控制此文件。我只想能够下载它并解析出我需要的值 一个示例解决方案可以是将default.rb作为JSON打印到stdout,并使用jq对其进行解析,或者创建一个ruby脚本将其打印出来 提前谢谢 更新: 我想要一种从default.rb文件中读取数据的方法,即我想要从default.rb中获取版本数据/URL,并以编程方式将其用于其他用途 能做到这一点会很

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

我知道我可以使用
grep
sed
awk
解决方案,但这些解决方案通常更脆弱,我无法控制此文件。我只想能够下载它并解析出我需要的值

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

提前谢谢

更新:

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

能做到这一点会很好

require('default.rb')

puts default['cfncluster']['nvidia']['driver_version']
这将打印出从第68行到标准输出的值,然后我可以用它做任何我想做的事情。以上是我尝试使用ruby的失败尝试。此方法失败,表示未定义默认值。我不是一个喜欢ruby的人,也许有一种方法可以在没有收到错误信息的情况下加载它


如有任何建议,我们将不胜感激。如果您可以使用chef cli将所有内容打印为JSON,那也很好。我可以从中解析我需要的内容。

您没有指定是否要在chef client期间执行此操作

虽然不推荐使用,但您可以通过使用
eval()
来实现。例如:

#foo.rb
默认值['foo']['bar']=“baz”
#read.rb
默认值=Hash.new{| Hash,key{124; Hash[key]={}
eval(File.read(“./foo.rb”))
放置默认值['foo']['bar']
$ruby test.rb
巴兹

是否将打印标准输出作为烹饪书执行的一部分?感谢您的回答,感谢您抽出时间回答此问题。我需要一种从
default.rb
文件中提取值的方法。我不在乎这是什么方法。我试过你的例子(使用
default.rb
)我得到了这个错误消息:未定义的局部变量或main:Object的方法'node'。我在这一行添加了node=Hash.new{| Hash,key{Hash[key]={},它通过了错误,现在给我这个错误:未定义的方法'[]='对于nil:NilClass,它来自eval行。@jlonganecker:如果仔细查看您共享的文件,您会发现它的变量比默认值多。我的代码片段涉及Simples案例。在最初的问题中,我直接共享了指向该文件的链接。您可以下载它并尝试解决方案。这就是我分享它的原因。如果你没有时间想清楚,不用担心。我可能需要学习一些ruby:)。