我目前正在尝试移动我们的 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 如何很好地完成用户管理吗?谢谢 :)
答案1
在类型定义中为每个用户实现默认属性:
define user($managehome = true) { ... }
是的,您需要使用合并,但不要在 hiera 数据中指定它,而是使用hiera_array
功能查找您想要的数据。
SSH 密钥只是数据集中的另一个属性,您的user
类型应该在系统上适当地设置它。