Extraia fatos hash aninhados da ferramenta de linha de comando facter do fantoche. Como?

Extraia fatos hash aninhados da ferramenta de linha de comando facter do fantoche. Como?

Isso pode ser óbvio. No entanto, depois de pesquisar na ajuda do facter, no site do puppetlab e no Google, ainda não consigo descobrir como recuperar um facter aninhado fact .

Por exemplo, posso fazer:

>facter os

{"release"=>{"major"=>"6", "minor"=>"7", "full"=>"6.7"}, "family"=>"RedHat", "name"=>"CentOS"}

Como recupero os['name']ou os['release']['minor']qualquer fato aninhado arbitrário via linha de comando com facter?

Responder1

Valores de fatos aninhados podem ser visualizados na CLI usando um ponto entre as variáveis

por exemplo, para recuperar os['release']['minor']no tipo CLI: facter os.release.minor

EDITAR: Aparentemente, isso só funciona com o fator 3.x.

Este documento fornece uma breve menção sobre como acessar esses fatos estruturados (também conhecidos como aninhados) (http://docs.puppetlabs.com/facter/3.1/core_facts.html):

Nota sobre fatos legados: A partir do Facter 3, fatos legados, como arquitetura, ficam ocultos por padrão para reduzir o ruído na saída de linha de comando padrão do Facter. Estes factos mais antigos fazem agora parte de factos estruturados mais úteis; por exemplo, a arquitetura agora faz parte do sistema operacional e está acessível como os.architecture. Você ainda pode usar esses fatos legados em manifestos do Puppet ($architecture), solicitá-los na linha de comando (facter arquitetura) e visualizá-los junto com os fatos estruturados (facter --show-legacy).

Infelizmente não consigo encontrar informações sobre como acessar fatos aninhados usando versões mais antigas.

No fato v3 você pode fazer o seguinte:

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

Responder2

Não é isso facterque deveria fazer. Se você usá-lo puppetconforme o esperado, poderá acessar todos os fatos separadamente.

Até certo ponto, você pode contornar isso se usar JSONa saída:

facter --json os | grep major
      "major": "6",

e se você tiver um analisador CLI JSON disponível, tudo é possível.

Usandojq:

facter --json os | jq .os.release.minor
   "6"

informação relacionada