微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 Puppet 事实中访问层次数据

如何解决从 Puppet 事实中访问层次数据

作为自定义 Puppet 事实的一部分,我需要进行数据库查询获取一些动态数据。然后,该数据将被 Puppet 清单中其他地方的某些资源使用。但是,要建立数据库连接,我需要能够读取 hiera 中存储的一些加密数据(密码)。但是我不确定如何从 Ruby 中访问这些数据。也许这甚至是不可能的,因为事实将运行代理端,而编译目录时使用的 hiera 运行在服务器端。但是,我目前假设我可以使用以下内容访问 hiera:

Facter.add(:Metadata) do
  setcode do
    database_password = Hiera.lookup('profile::runner::agent::database_password')
    
    # make the DB connetion and run the query...
    make_database_query_and_return_result_as_hash(database_password,Facter.value(:hostname))
  end
end

是否可以通过这种方式从事实中访问 hiera 数据?目前有一个很长的反馈循环来测试这个(我们正在努力减少),所以我很高兴被指出正确的方向。

解决方法

Facter 在 Puppet 运行开始时在目标节点上运行,它将事实发送到 Puppet 服务器,这是完成任何层次查找的地方。所以这永远不会奏效,因为事实是在任何 hiera 查找之前并在不同的机器上运行的。

这样做的方法不是将其作为事实,而是作为自定义函数,自定义函数是在编目编译时在 Puppet 服务器上运行的 ruby​​ 代码。 https://puppet.com/docs/puppet/7/lang_write_functions_in_puppet.html

如果您正在查询 Puppet DB 以获取您已经在本地主机上的信息,那么身份验证应该很容易。 https://puppet.com/docs/puppetdb/6/api/query/tutorial.html

这个伪造模块可能会做你想做的https://forge.puppet.com/modules/dalen/puppetdbquery

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。