Extrahieren Sie verschachtelte Hash-Fakten aus dem Facter-Befehlszeilentool von Puppet. Wie?

Extrahieren Sie verschachtelte Hash-Fakten aus dem Facter-Befehlszeilentool von Puppet. Wie?

Das mag offensichtlich sein. Nach einer Suche in der Hilfe von facter, auf der Website von puppetlab und bei Google kann ich jedoch immer noch nicht herausfinden, wie ich einen verschachtelten facter-Fakt abrufen kann.

Ich kann zum Beispiel:

>facter os

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

Wie rufe ich mit Facter über die Befehlszeile beliebige verschachtelte Fakten os['name']ab ?os['release']['minor']

Antwort1

Verschachtelte Faktenwerte können in der CLI angezeigt werden, indem ein Punkt zwischen den Variablen verwendet wird.

os['release']['minor']Um beispielsweise Folgendes in der CLI abzurufen , geben Sie Folgendes ein:facter os.release.minor

BEARBEITEN: Anscheinend funktioniert dies nur mit Factor 3.x.

Dieses Dokument gibt einen kurzen Hinweis darauf, wie man auf diese strukturierten (auch verschachtelten) Fakten zugreift (http://docs.puppetlabs.com/facter/3.1/core_facts.html):

Hinweis zu Legacy-Fakten: Ab Facter 3 werden Legacy-Fakten wie Architektur standardmäßig ausgeblendet, um Rauschen in der Standard-Befehlszeilenausgabe von Facter zu reduzieren. Diese älteren Fakten sind jetzt Teil nützlicherer strukturierter Fakten. Beispielsweise ist Architektur jetzt Teil des OS-Fakts und als os.architecture zugänglich. Sie können diese Legacy-Fakten weiterhin in Puppet-Manifesten verwenden ($architecture), sie auf der Befehlszeile anfordern (facter architecture) und sie neben strukturierten Fakten anzeigen (facter --show-legacy).

Leider kann ich keine Informationen zum Zugriff auf verschachtelte Fakten mit älteren Versionen finden.

In Factor v3 können Sie Folgendes tun:

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

Antwort2

Das ist nicht das, was facteres tun soll. Wenn Sie es puppetwie erwartet verwenden, können Sie auf jede Tatsache einzeln zugreifen.

Bis zu einem gewissen Grad können Sie dies umgehen, indem Sie JSONdie Ausgabe verwenden:

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

und wenn Sie einen CLI-JSON-Parser zur Verfügung haben, ist alles möglich.

Verwenden vonjq:

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

verwandte Informationen