В настоящее время я пытаюсь переместить нашу настройку Puppet для дальнейшего использования Hiera. В связи с этим, я хотел бы создать пользователей с помощью Hiera, но у меня есть некоторые проблемы, как это сделать при перемещении вверх по иерархии.
Сценарий таков, что я хочу иметь набор базовых пользователей, которые будут включены в каждую установку. Кроме того, мне иногда нужно добавить некоторых конкретных пользователей только для другого подмножества узлов, возможно, для некоторых центров обработки данных или для некоторых узлов.
Итак, я подумал о следующей настройке:
hiera.yaml:
:hierarchy:
- "nodes/%{::trusted.certname}"
- "datacenter/${::datacenter}"
- "common"
users.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, так что мне нужно будет дублировать записи. Я наткнулся на глубокое слияние в Хиере, но задайтесь вопросом, действительно ли это используется или это лучшая практика. Кроме того, это не решит первую проблему, и мне нужно установить merge_behavior
в hiera.yaml, чего я хочу избежать.Итак, есть ли у кого-нибудь представление о том, как управление пользователями на самом деле хорошо выполняется с помощью Puppet? Спасибо :)
Реализуйте атрибуты по умолчанию для каждого пользователя в определении типа:
define user($managehome = true) { ... }
Да, вам нужно использовать слияние, но вместо того, чтобы указывать его в данных hiera, используйте hiera_array
функция чтобы найти нужные данные.
Ключи SSH - это просто еще один атрибут в наборе данных, который вы user
type должен быть установлен в системе соответствующим образом.