在我的系统上我使用导出资源和资源集合来管理 /etc/ssh/known_hosts ref我的系统。这对于我所有通过 puppet 管理的 SSH 主机都非常有用。但我也有一些不是由 puppet 管理的系统(交换机、路由器等),而且我目前还没有开始管理它们的计划。
有没有优雅的方法将这些非托管系统的主机密钥放入 Puppet?目前,我将它们全部放在一个丑陋的大类中,但一定有更好的方法。我曾想过以某种方式尝试将这些主机的密钥移到 hiera 或其他地方,但我还没有找到不丑陋的解决方案。
有人有我可以遵循的好方法/模式吗?
答案1
我曾经想过以某种方式尝试将这些主机的密钥移到 hiera 或其他地方,但我还没有找到一个不错的解决方案。
有多种方法可以实现这一点。我尝试保持类的通用性,并将所有配置数据放在 hiera 中。当我处理数据集合时,我尝试使用 hiera 哈希,这样我就不必更改类或定义代码。
1:使用 hiera 哈希存储密钥集合。
hiera_key_hash:
key-1:
name: cisco500
type: router
key: xxx
key-2:
name: cisco100
type: switch
key: xxx
2:创建类为每个键调用一个 create_resource(它将调用定义“键”)。
class keys {
create_resources( "key", hiera('hiera_key_hash') )
}
3:创建一个定义它为每个键完成工作。
define key($name, $type, $key) {
// code goes here
}
注意:在某个阶段,您可能会将敏感信息存储在 hiera 中。您可能需要考虑加密一些 hiera 敏感值。
答案2
嗯...也许在 Hiera 中,通过hiera_array
收集数据,将该数组通过定义的类型输入到资源中?由于您需要主机名和密钥,因此您要么需要将它们都放在字符串中,并将split()
其放在定义的类型中,要么让数组中包含一些更复杂的东西(可能是哈希)。
管理填充和保持其更新仍然很令人头痛;也许是一个小脚本,其中包含要连接的节点列表,从中收集密钥并生成层次数据?