这可能很明显。但是,在搜索了 facter 的帮助、puppetlab 的网站和 Google 之后,我仍然无法弄清楚如何检索嵌套的 facter 。
例如,我可以这样做:
>facter os
{"release"=>{"major"=>"6", "minor"=>"7", "full"=>"6.7"}, "family"=>"RedHat", "name"=>"CentOS"}
如何使用facter 通过命令行检索os['name']
或任意嵌套事实?os['release']['minor']
答案1
可以在 CLI 中通过在变量之间使用点来查看嵌套事实值
os['release']['minor']
例如,要在 CLI 类型中 检索:facter os.release.minor
编辑: 显然,这只适用于 facter 3.x。
本文档简要介绍了如何访问这些结构化(又称嵌套)事实(http://docs.puppetlabs.com/facter/3.1/core_facts.html):
遗留事实注意:从 Facter 3 开始,遗留事实(例如架构)默认隐藏,以减少 Facter 默认命令行输出中的噪音。这些较旧的事实现在是更有用的结构化事实的一部分;例如,架构现在是操作系统事实的一部分,可以作为 os.architecture 访问。您仍然可以在 Puppet 清单 ($architecture) 中使用这些遗留事实,在命令行上请求它们(facter architecture),并将它们与结构化事实一起查看(facter --show-legacy)。
不幸的是,我找不到有关使用旧版本访问嵌套事实的信息。
事实上在 v3 中你可以执行以下操作:
facter os
{
architecture => "amd64",
distro => {
codename => "trusty",
description => "Ubuntu 14.04.3 LTS",
id => "Ubuntu",
release => {
full => "14.04",
major => "14.04"
}
},
family => "Debian",
hardware => "x86_64",
name => "Ubuntu",
release => {
full => "14.04",
major => "14.04"
},
selinux => {
enabled => false
}
}
。
facter os.release
{
full => "14.04",
major => "14.04"
}
。
facter os.release.major
14.04
答案2
这不是facter
应该做的。如果您puppet
按预期使用它,则可以单独访问每个事实。
在某种程度上,如果使用JSON
输出,您可以解决这个问题:
facter --json os | grep major
"major": "6",
如果您有可用的 CLI JSON 解析器,一切皆有可能。
使用jq
:
facter --json os | jq .os.release.minor
"6"