Puppet :这是生成外部事实的正确方法吗?

Puppet : Is this the correct way to generate external facts?

我对外部事实有些困惑。
在最简单的形式中,我可以在 facts.d 文件夹中创建一个 json 文件并让它运行。 但我需要通过一些创建 json 文件的 shell 脚本动态构建它。我已经创建了以下内容并让它开始工作,但我无法判断这是否是正确的方法:

  1. shell facts.d 文件夹中的脚本

    cat <<END>some_facts.yaml
    ---
    myfacts_array:
    END
    for file in `some folder`  
    do
      echo "  - $file" >>some_facts.yaml
    done
    
  2. yaml 文件依次如下所示

    ---
    myfacts_array:
      - 123456
      - 456789
    

这是实现此目标的正确方法吗?

Puppet 依靠 Facter 收集事实,包括外部事实。 Facter 仅从 3.5 版开始支持结构化、可执行的外部事实,该版本还不到两年的历史。如果您的 Facter 版本较旧,并且您无法升级,那么您需要找到一种解决方法,例如定期在外部事实目录中编写平面 YAML 或 JSON 文件。

如果你有合适的 Facter 版本,那么要执行的脚本必须

  • 驻留在外部事实目录中
  • 从适当的 shebang 行开始
  • 可执行
  • 生成格式正确的 YAML 或 JSON 输出表示一个散列,其键是事实名称,其值是关联的事实值。*

如果您提供的脚本源是一个完整的示例,那么它至少缺少一个 shebang 行,但输出似乎格式正确。除此之外,我没有任何评论关于你提出的是否"the right way"去做。


* YAML 或 JSON 需要以这种方式生成 结构化 事实。对于纯字符串事实,您可以改为输出 KEY = VALUE 对,每行一个。