Назад | Перейти на главную страницу

Извлеките вложенные факты хэша из инструмента командной строки puppet facter. Как?

Это могло быть очевидно. Однако после поиска в справочной системе 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"