我希望能够为 puppet 设置许多不同的自定义事实。看起来有一种方法可以在 yaml 文件中列出所有这些,然后将它们加载进去,但是文档没有确切的命令来做到这一点。
如何从 yml 文件中设置自定义事实?如果我不能这样做,是否有任何其他方法可以设置事实而无需构建所有通过Facter.add
函数运行的自定义 ruby 脚本?
这些类型的事实被称为“外部事实”。它们可以是可执行文件,也可以是文本文件或受支持的标记格式。存储它们的正确位置是在facts.d
相关模块的目录中。请注意此处有关在何处存储外部事实的文档:https ://docs.puppet.com/facter/3.8/custom_facts.html#fact-locations 。这些事实文件将自动复制到客户端节点,并在 Puppet 代理执行开始附近的插件同步期间加载。回想一下,对于包含modulepath
此模块所在的任何目录(通常是相关目录环境),都会发生这种情况。
给定一个示例模块foo
,目录结构如下所示:
foo
|__facts.d
|__ bar.yaml
|__ bar.json
|__ bar.txt
示例内容如下:
# foo/facts.d/bar.yaml
fact_name: fact_value
# foo/facts.d/bar.json
{
fact_name: fact_value
}
# foo/facts.d/bar.txt
fact_name=fact_value
然后,您可以在您的 Puppet 代码中正常使用这些事实,例如$facts['fact_name']
或在旧的 Facter 上$::fact_name
。您还可以使用 Facter 的 puppet 插件参数在客户端上查看它们facter -p
。
您可以将您的事实写入fact.d目录中的 yaml 文件中。
例如,您可以创建一个/etc/facter/facts.d/my_custom_fact.yaml
:
my_fact: 42
这将创建一个事实 my_fact,值为 42。
您可以通过键入来检查它是否有效facter
,并检查您的事实是否存在。