web-dev-qa-db-ja.com

puppetのfacterコマンドラインツールからネストされたハッシュファクトを抽出します。どうやって?

これは明らかかもしれません。ただし、ファクトのヘルプ、puppetlabのWebサイト、およびGoogleを検索した後でも、ネストされたファクトファクトを取得する方法を理解できません。

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

>facter os

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

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

1
Swartz

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

例えばCLIタイプでos['release']['minor']を取得するには:facter os.release.minor

編集:どうやらこれはfacter3.xでのみ機能します。

このドキュメントでは、これらの構造化された(ネストされた)ファクトにアクセスする方法について簡単に説明しています( http://docs.puppetlabs.com/facter/3.1/core_facts.html ):

レガシーファクト注:Facter 3の時点では、アーキテクチャなどのレガシーファクトは、Facterのデフォルトのコマンドライン出力のノイズを減らすためにデフォルトで非表示になっています。これらの古い事実は現在、より有用な構造化された事実の一部です。たとえば、アーキテクチャは現在osファクトの一部であり、os.architectureとしてアクセスできます。これらのレガシーファクトは引き続きPuppetマニフェスト($ architecture)で使用し、コマンドラインでリクエストして(ファクトアーキテクチャ)、構造化されたファクトと一緒に表示できます(facter --show-legacy)。

残念ながら、古いバージョンを使用してネストされたファクトにアクセスするための情報を見つけることができません。

実際、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
Martin K

それはfacterがすることになっていることではありません。期待どおりにpuppet内で使用すると、すべてのファクトに個別にアクセスできます。

JSON outputを使用すると、ある程度これを回避できます。

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

cLI JSONパーサーを使用できる場合は、すべてが可能です。

jq を使用する:

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