我目前正在尝试移动我们的 Puppet 设置以进一步使用 Hiera。关于这一点,我想用 Hiera 创建用户,但是在层次结构中向上移动时遇到了一些问题。
场景是我希望在每个安装中都包含一组基本用户。此外,有时我需要为不同的节点子集添加一些特定用户,可能特定于某些数据中心或某些节点。
所以我想到了以下设置:
hiera.yaml:
:hierarchy:
- "nodes/%{::trusted.certname}"
- "datacenter/${::datacenter}"
- "common"
用户.pp:
class profile::users {
$user_accounts = hiera('user_accounts')
create_resources(user, $user_accounts)
}
在 common.yaml 中:
user_accounts:
bob:
comment: "Bob"
managehome: true
然后再往上走。我看到的主要问题是:
- 如何为每个用户实现默认属性?比如在这个例子中,我想
managehome: true
为所有用户设置,而不是每次都显式地写。不过,我有时可能想禁用它。 - 如果我
user_accounts
在层次结构中更进一步,它将覆盖user_accounts
来自 common.yaml 的哈希,因此我需要复制条目。我偶然发现了 Hiera 中的深度合并,但想知道这是否实际使用过或者是最佳实践。另外,它不能解决第一个问题,我需要merge_behavior
在 hiera.yaml 中设置,我想避免。 - 我如何在这里为每个用户插入 ssh 密钥?最好的解决方案是将 ssh 密钥作为属性添加到用户帐户。
那么,有没有人了解用户管理实际上是如何用 Puppet 很好地完成的?谢谢 :)
在类型定义中为每个用户实现默认属性:
是的,您需要使用合并,但不是在分层数据中指定它,而是使用该
hiera_array
函数来查找您想要的数据。SSH 密钥只是数据集中的另一个属性,您的
user
类型应在系统上适当设置。