使用 Hiera 进行用户管理的最佳方式

使用 Hiera 进行用户管理的最佳方式

我目前正在尝试移动我们的 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_accountscommon.yaml 中的哈希值,因此我需要复制条目。我偶然发现了深度融合在 Hiera 中,但不知道这是否实际使用或最佳实践。此外,它不会解决第一个问题,我需要merge_behavior在 hiera.yaml 中进行设置,我想避免这种情况。
  • 我如何才能在这里为每个用户插入 ssh 密钥?最好的解决方案是将 ssh 密钥作为属性添加到用户帐户。

那么,有人知道 Puppet 如何很好地完成用户管理吗?谢谢 :)

答案1

在类型定义中为每个用户实现默认属性:

define user($managehome = true) { ... }

是的,您需要使用合并,但不要在 hiera 数据中指定它,而是使用hiera_array功能查找您想要的数据。

SSH 密钥只是数据集中的另一个属性,您的user类型应该在系统上适当地设置它。

相关内容