Несколько пользовательских ролей с одним виртуальным ресурсом в 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' |>
}

Вы также можете сделать многое из этого программно, например, определить теги на основе членства в группе.

Другие вопросы по тегам