Extraiga datos hash anidados de la herramienta de línea de comandos facter de Puppet. ¿Cómo?

Extraiga datos hash anidados de la herramienta de línea de comandos facter de Puppet. ¿Cómo?

Esto podría resultar obvio. Sin embargo, después de buscar en la ayuda de facter, el sitio web de puppetlab y Google, todavía no puedo descubrir cómo recuperar un facter anidado.

Por ejemplo, puedo hacer:

>facter os

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

¿Cómo recupero os['name']cualquier os['release']['minor']hecho anidado arbitrario a través de la línea de comando con facter?

Respuesta1

Los valores de hechos anidados se pueden ver en la CLI usando un punto entre las variables

por ejemplo, para recuperar os['release']['minor']en el tipo CLI: facter os.release.minor

EDITAR: Aparentemente esto sólo funciona con facter 3.x.

Este documento ofrece una breve mención sobre cómo acceder a estos datos estructurados (también conocidos como anidados) (http://docs.puppetlabs.com/facter/3.1/core_facts.html):

Nota sobre hechos heredados: a partir de Facter 3, los datos heredados, como la arquitectura, están ocultos de forma predeterminada para reducir el ruido en la salida de línea de comandos predeterminada de Facter. Estos hechos más antiguos son ahora parte de hechos estructurados más útiles; por ejemplo, la arquitectura ahora es parte del sistema operativo y es accesible como os.architecture. Aún puede usar estos hechos heredados en manifiestos de Puppet ($architecture), solicitarlos en la línea de comando (arquitectura de facter) y verlos junto con los hechos estructurados (facter --show-legacy).

Lamentablemente, no puedo encontrar información sobre cómo acceder a datos anidados utilizando versiones anteriores.

De hecho v3 puedes hacer lo siguiente:

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

Respuesta2

Eso no es lo que facterse supone que debe hacer. Si lo usa puppetcomo se esperaba, puede acceder a cada dato por separado.

Hasta cierto punto, puedes solucionar este problema si utilizas JSONla salida:

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

y si tiene un analizador CLI JSON disponible, todo es posible.

Usandojq:

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

información relacionada