Это могло быть очевидно. Однако после поиска в справочной системе facter, на веб-сайте puppetlab и в Google я все еще не могу понять, как получить вложенный факт.
Например, я могу:
>facter os
{"release"=>{"major"=>"6", "minor"=>"7", "full"=>"6.7"}, "family"=>"RedHat", "name"=>"CentOS"}
Как мне получить os['name']
или os['release']['minor']
или любой произвольный вложенный факт через командную строку с фактером?
Вложенные значения фактов можно просмотреть в интерфейсе командной строки, используя точку между переменными.
например получить os['release']['minor']
в типе CLI: facter os.release.minor
РЕДАКТИРОВАТЬ: Похоже, это работает только с facter 3.x.
В этом документе дается краткое упоминание о том, как получить доступ к этим структурированным (так называемым вложенным) фактам (http://docs.puppetlabs.com/facter/3.1/core_facts.html):
Устаревшие факты Примечание. Начиная с Facter 3, унаследованные факты, такие как архитектура, по умолчанию скрыты, чтобы уменьшить шум в выводе командной строки по умолчанию в Facter. Эти старые факты теперь являются частью более полезных структурированных фактов; например, архитектура теперь является частью факта ОС и доступна как ОС. Вы по-прежнему можете использовать эти устаревшие факты в манифестах Puppet ($ architecture), запрашивать их в командной строке (facter architecture) и просматривать их вместе со структурированными фактами (facter --show-legacy).
К сожалению, я не могу найти информацию о доступе к вложенным фактам в более старых версиях.
В facter 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 JSON, все возможно.
С помощью jq
:
facter --json os | jq .os.release.minor
"6"