如何让傀儡运行后发布事实?

如何让傀儡运行后发布事实?

我正在为大量服务器使用一个简单的 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 的自定义注册插件来存储它们。

相关内容