從 puppet 的facter 命令列工具中提取嵌套的哈希事實。如何?

從 puppet 的facter 命令列工具中提取嵌套的哈希事實。如何?

這可能是顯而易見的。然而,在搜尋了facter的幫助、puppetlab的網站和Google之後,我仍然無法弄清楚如何檢索嵌套的facterfact。

例如,我可以這樣做:

>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

編輯: 顯然這僅適用於 Factor 3.x。

本文檔簡要提及如何存取這些結構化(又稱嵌套)事實(http://docs.puppetlabs.com/facter/3.1/core_facts.html):

遺留事實 注意:從 Facter 3 開始,預設會隱藏架構等遺留事實,以減少 Facter 預設命令列輸出中的雜訊。這些較舊的事實現在是更有用的結構化事實的一部分;例如,架構現在是作業系統事實的一部分,並且可以作為 os.architecture 進行存取。您仍然可以在 Puppet 清單 ($architecture) 中使用這些遺留事實,在命令列上請求它們(facter 架構),並與結構化事實一起查看它們 (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

那不是facter應該做的。如果您按預期使用它puppet,您可以單獨訪問每個事實。

在某種程度上,如果使用JSON輸出,則可以解決此問題:

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

如果您有可用的 CLI JSON 解析器,一切皆有可能。

使用jq

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

相關內容