Несколько пользовательских ролей с одним виртуальным ресурсом в Puppet
Для управления пользователями на разных узлах я использую похожий / настраиваемый модуль в Puppet, как показано здесь:
puppet_users_with_virtual_resources
В примере есть две роли. Если одна роль была назначена пользователю, он не может назначить дополнительную роль пользователю (поскольку виртуальный ресурс уже создан).
В моем случае у меня разные роли (например, sudo, web-dev, mysql), и каждая роль назначает пользователю определенные группы.
Но, как уже упоминалось, я могу назначить пользователю только одну роль. Если я добавлю другую роль пользователю, у пользователя останется только одна роль (поскольку пользователь с группами из одной роли уже назначен пользователю и ресурс создан).
Как я могу это исправить, чтобы я мог назначать неограниченное количество ролей одному пользователю?
1 ответ
Я обычно занимаюсь этим, определяя виртуальных пользователей в централизованном месте (например, profile::users
) и хранение информации о пользователях / группах в Hiera. Тогда каждое место в коде, в котором нуждаются пользователи, может реализовать их по соответствующему тегу. Тем не менее, предполагается, что необходимые группы существуют на всех серверах, которые вам нужны.
Вот минимальный пример.
Их данные определены в Hiera:
# common.yaml
---
profile::users::users:
auser:
groups: ['webserver', 'mysql']
tags: ['users::webserver', 'users::mysql']
anotheruser:
groups: ['webserver']
tags: ['users::webserver']
Они объявлены в общем профиле:
class profile::users (
$users,
) {
$users.each |$username, $info| {
@user { $username:
ensure => present,
groups => $info['groups'],
tags => $info['tags'],
}
}
}
Они реализованы там, где они нужны:
class role::webserver {
include profile::base
include profile::webserver
User <| tag == 'users::webserver' |>
}
Вы также можете сделать многое из этого программно, например, определить теги на основе членства в группе.