这可能是显而易见的。 然而,通过facter的帮助,puppetlab的网站和谷歌search后,我仍然无法弄清楚如何检索嵌套的事实。
例如,我可以这样做:
>facter os
{"release"=>{"major"=>"6", "minor"=>"7", "full"=>"6.7"}, "family"=>"RedHat", "name"=>"CentOS"}
如何通过命令行检索os['name']或os['release']['minor']或任意嵌套的事实?
通过在variables之间使用点,可以在CLI中查看嵌套的事实值
例如在CLItypes中检索os['release']['minor'] : facter os.release.minor
编辑: Apperently这只适用于facter 3.x.
这篇文档简要介绍了如何访问这些结构化(又名嵌套)事实( http://docs.puppetlabs.com/facter/3.1/core_facts.html ):
旧版事实注意:从第3版开始,架构等遗留事实默认隐藏,以减lessFacter默认命令行输出中的噪音。 这些较旧的事实现在是更有用的结构化事实的一部分; 例如,体系结构现在是OS事实的一部分,可以作为OS体系结构访问。 您仍然可以在Puppet清单($ architecture)中使用这些遗留事实,在命令行(facter体系结构)请求它们,并在结构化事实(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
这不是什么facter应该做的。 如果您按照预期在puppet内使用它,您可以分别访问每个事实。
在某种程度上,如果你使用JSON输出你可以解决这个问题:
facter --json os | grep major "major": "6",
如果你有一个可用的CLI JSONparsing器,一切都是可能的。
使用jq :
facter --json os | jq .os.release.minor "6"