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