【发布时间】:2017-08-22 19:32:12
【问题描述】:
我希望能够为 puppet 设置许多不同的自定义事实。看起来有一种方法可以在 yaml 文件中列出所有这些,然后将它们加载进去,但是 the documentation 没有执行此操作的确切命令。
如何从 yml 文件中设置自定义事实?如果我不能这样做,是否有任何其他方法可以设置事实,而无需构建所有通过 Facter.add 函数运行的自定义 ruby 脚本?
【问题讨论】:
我希望能够为 puppet 设置许多不同的自定义事实。看起来有一种方法可以在 yaml 文件中列出所有这些,然后将它们加载进去,但是 the documentation 没有执行此操作的确切命令。
如何从 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 -p 使用 Facter 的 puppet 插件参数在客户端上查看它们。
【讨论】:
您可以将事实写入facts.d 目录中的 yaml 文件中。
例如,您可以创建一个/etc/facter/facts.d/my_custom_fact.yaml:
my_fact: 42
这将创建一个事实 my_fact,值为 42。
您可以通过输入facter 来检查它是否有效,并检查您的事实是否存在。
【讨论】: