Chef属性中的通配符

时间:2018-10-30 12:10:47

标签: ruby chef nested-attributes

我正在尝试从OHAI获取用于Windows机器的已安装软件包Firefox的版本

ohai的输出包含如下软件包信息

 "ohai_time": 1540893742.872569,
 "packages": {
 "Mozilla Firefox 62.0.2 (x64 en-US)": {
 "version": "62.0.2",
 "publisher": "Mozilla"
 },
 "Mozilla Maintenance Service": {
 "version": "62.0.2",
 "publisher": "Mozilla"
 },
 "Symantec NetBackup Client": {
 "version": "7.7.2",
 "publisher": "Symantec Corporation",
 "installdate": "20180618"
  }, .....
  ......so on...

问题是我不能使用此处使用的全名,因为它包含版本本身

否则我可以用 node ['packages'] ['Mozilla Firefox 62.0.2(x64 zh-CN)'] ['version']

相反,我想使用诸如node ['packages'] [“ Mozilla *”] ['version']

之类的东西

我尝试使用循环和.include?但是没有用。 我在这里有什么选择?使用红宝石或毛圈或其他任何东西

感谢您的提前答复。

1 个答案:

答案 0 :(得分:0)

如果您粘贴了哈希,则可以使用find方法:

node["packages"].find { |key, _| key =~ /Mozilla Firefox/ }
 => [:"Mozilla Firefox 62.0.2 (x64 en-US)", {:version=>"62.0.2", :publisher=>"Mozilla"}]

请记住,它将把您的哈希转换为数组,但是可以轻松地将其还原。