Извлечь вложенные хэш-факты из командной строки инструмента Puppet's facter. Как?

Извлечь вложенные хэш-факты из командной строки инструмента Puppet's facter. Как?

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

Связанный контент