Puppet の facter コマンドライン ツールからネストされたハッシュ ファクトを抽出します。方法は?

Puppet の facter コマンドライン ツールからネストされたハッシュ ファクトを抽出します。方法は?

これは明らかなことかもしれません。しかし、facter のヘルプ、puppetlab の Web サイト、Google で検索しても、ネストされた facter ファクトを取得する方法がわかりません。

たとえば、次のことができます:

>facter os

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

facter を使用してコマンドラインから任意のネストされたファクトを取得するにos['name']はどうすればよいですか?os['release']['minor']

答え1

ネストされたファクト値は、変数間にドットを使用することでCLIで表示できます。

たとえば、os['release']['minor']CLI で取得するには次のように入力します。 facter os.release.minor

編集: どうやらこれは facter 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) と一緒に表示したりできます。

残念ながら、古いバージョンを使用してネストされたファクトにアクセスする方法に関する情報は見つかりません。

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

答え2

それはfacter本来の目的ではありません。期待どおりに使用するとpuppet、すべての事実に個別にアクセスできます。

出力を使用すると、ある程度この問題を回避できますJSON

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

CLI JSON パーサーが利用できる場合は、すべてが可能です。

使用jq:

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

関連情報