Puppet의 팩터 명령줄 도구에서 중첩된 해시 사실을 추출합니다. 어떻게?

Puppet의 팩터 명령줄 도구에서 중첩된 해시 사실을 추출합니다. 어떻게?

이것은 명백할 수도 있습니다. 그러나 팩터의 도움말, puppetlab 웹사이트 및 Google을 검색한 후에도 중첩된 팩터 팩트를 검색하는 방법을 여전히 알 수 없습니다.

예를 들어 다음과 같이 할 수 있습니다.

>facter os

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

팩터가 포함된 명령줄을 통해 임의의 중첩 팩트를 검색하려면 os['name']어떻게 해야 합니까 ?os['release']['minor']

답변1

중첩된 팩트 값은 변수 사이에 점을 사용하여 CLI에서 볼 수 있습니다.

os['release']['minor']예를 들어 CLI 유형에서 검색하려면 다음을 입력하세요 .facter os.release.minor

편집하다: 분명히 이것은 팩터 3.x에서만 작동합니다.

이 문서에서는 이러한 구조화된(일명 중첩된) 사실에 액세스하는 방법에 대해 간략하게 언급합니다(http://docs.puppetlabs.com/facter/3.1/core_facts.html):

레거시 사실 참고: Facter 3에서는 Facter의 기본 명령줄 출력에서 ​​노이즈를 줄이기 위해 아키텍처와 같은 레거시 사실이 기본적으로 숨겨집니다. 이러한 오래된 사실은 이제 보다 유용한 구조화된 사실의 일부가 되었습니다. 예를 들어, 아키텍처는 이제 os 사실의 일부이며 os.architecture로 액세스할 수 있습니다. Puppet 매니페스트($architecture)에서 이러한 레거시 사실을 계속 사용하고, 명령줄에서 요청하고(facter 아키텍처), 구조화된 사실과 함께 볼 수 있습니다(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"

관련 정보