我正在阅读关于添加自定义事实的 Puppet 文档。大多数信息似乎与制作在代理上运行的模块有关。
在我的例子中,我只想要一个简单的环境变量,可以从主节点为每个节点设置。然后我的电子海图将进行 PuppetDb 查询来查看它应该服务于什么环境。
我可以这样做吗,或者所有事实都源自代理人?
答案1
我可以这样做吗?
是的,这是可能的。可以在 Puppet 模块中创建自定义事实,例如运行一些 ruby 代码以获取已安装软件的版本:
模块名称/lib/facter/customfact.rb
Facter.add("customfact") do
setcode do
123
end
end
上述代码驻留在 Puppetmaster 上,当puppet
在十个不同的代理上运行时,结果(123
即每个节点的主机名)将在 PuppetDB 中注册,并可在 Puppetboard 中查看。
或者所有事实都源自代理人?
不,自定义事实存在于 Puppetmaster 上
答案2
puppetfacts
总是由代理发送给 master 的信息。因此您无法在 puppetmaster 端设置事实。
但是,您可以选择使用 Puppet 收据配置代理环境(例如,使用 [puppet_config_providers][1])。
puppet_config { 'agent/environment':
value => $::puppet_environment,
}
然而,只有在下一次傀儡运行时才会考虑这一变化。
[1]https://forge.puppet.com/camptocamp/puppet_config_providers