我正在为大量服务器使用一个简单的 Puppet 设置。Puppet 使用外部节点分类器从 CMDB 获取信息。这很完美。
每次运行后,Puppet Master 都会使用自定义报告模块将运行状态发布到 CMDB。这种方法也很好用。
我希望 Puppet 在每次运行后将节点的事实发布到 CMDB。这样,CMDB 就可以自动更新内存、MAC 地址等信息。
问题是:我怎样才能实现这一目标?
报告机制仅提供状态和一些指标。
编写自定义 storeconfig 模块并不容易(或者至少我找不到有关此的任何信息)。
谢谢你的帮助。
答案1
我在 Puppet 中创建了一个报告模块来解决这个特定用例。报告者尝试读取最新的 yaml 报告,然后将额外内容添加到帖子中。
def process
payload = { :host => self.host, :status => self.status, :kind => self.kind }
# if facts file found, read it and add facts to payload:
if File.exists?("#{Puppet[:vardir]}/yaml/facts/#{self.host}.yaml")
new_facts = {}
node_facts = YAML.load_file("#{Puppet[:vardir]}/yaml/facts/#{self.host}.yaml")
node_facts.values.each do |key, value|
new_facts = new_facts.merge({key => value})
end
payload = payload.merge(new_facts)
end
response = HTTParty.post(URL, :body => payload )
Puppet.err "Response code: #{response.code} - #{response.body}" unless response.code == 200
end
如果你想了解有关编写自定义 Puppet 报告的更多信息,请查看Puppet 报告第 2 部分
答案2
您是否有一个硬性要求将其放在单个 CMDB 中,或者目标只是使其可查询?PuppetDB 已经提供了用于事实查找的 API:
https://puppet.com/docs/puppetdb/latest/api/query/v4/facts.html
严格来说,Puppet 本身并不知道运行结束时事实的值是什么——只知道开始运行。我不确定您的最终目标是什么,但由于 Puppet 本身不以任何方式与您的事实值相关联,因此更好的解决方案可能是使用 MCollective 而不是 Puppet 来聚合有关您的节点的详细信息,并使用回发到您的 CMDB 的自定义注册插件来存储它们。