我正在定制一个现有的 puppet 安装(使用 facter),我认为我在理解自定义事实的范围时遇到了问题。
我有几个模块专门映射到 nodes.pp 文件中不同类别的主机。我想要实现的是让自定义事实受模块限制,例如 中的主机module1
将执行custom_fact_1
, 中的主机module2
仅执行custom_fact_2
。
根据 facter/puppet 文档,自定义事实进入目录<module-name>/lib/facter
,并与该模块绑定。
我已经通过将 ruby 脚本添加到单个模块的lib/facter
目录中来让它收集一些自定义事实,但奇怪的是它们并没有将自己限制在模块分配到的主机上。发生的事情是,所有自定义事实都会针对所有主机运行(即使是与该模块没有任何关系的主机),这并不是我想要的。
我误解了文档吗?这种事实模块映射可能吗?
笔记:我通过使用自定义事实脚本中的指令实现了类似的行为confine
,但这违背了预期目的,因为我想将自定义事实与模块本身联系起来,而不是在脚本中进行映射。
答案1
Facter 不适合这种情况。每个模块自定义功能或使用 ENC(例如 hiera)会简单得多。
答案2
是的,这是预期的行为,如果您启用了 pluginsync,那么所有模块的 lib/facter 都会出现在所有节点上。
答案3
尽可能直接地回答您的问题,我见过的大多数设置都使用某种形式的组来对系统进行分类。通常这些组与模块非常接近,您可以使用这些组事实将事实限制在这些系统中。
你想用这些事实做什么?正如其他人提到的,类型或函数也可能满足您的需求,但并非随处可用。有关您正在做的事情的更多信息会很有帮助!