Назад | Перейти на главную страницу

Добавление существующего пользователя в группу с марионеткой

Можно ли добавить существующего пользователя в группу с помощью марионетки 2.7.18?

У нас есть два модуля, каждый определяет один класс:

Мы хотим добавить пользователя foo в группу svn внутри модуля subversion.

Я пробовал параметр членства, как описано в существующий запрос функции:

group {
"svn":
    ensure  => present,
    gid     => xxxxx;
}
user {
"foo":
    group      => ["svn"],
    membership => minimum;
}

Но я получаю следующую ошибку:

ошибка: не удалось получить каталог с удаленного сервера: ошибка 400 на СЕРВЕРЕ: повторяющееся объявление: пользователь [foo] уже объявлен в файле /pathto/modules/subversion/manifests/init.pp в строке xx; невозможно повторно объявить в /pathto/modules/users/manifests/init.pp:xxx на узле myserver.example.com

Эта функция уже реализована? Если нет, есть ли хорошее решение?

Использование виртуальных ресурсов Puppet - это правильный способ сделать это, но если вы не можете изменить определения пользователей и тем временем нуждаетесь в исправлении обходного пути, следующее ужасно и взломано, но будет работать:

exec { 'foo somegroup membership':
  unless  => '/bin/grep -q "somegroup\\S*foo" /etc/group',
  command => '/sbin/usermod -aG somegroup foo',
  require => User['foo'],
}

По сути, мы просто проверяем, содержит ли некоторая группа пользователя foo ... если нет, используйте обычные команды usermod, чтобы добавить его в дополнение к существующим группам, которым принадлежит foo.

Если вы объявите пользователей как виртуальные ресурсы , затем вы можете использовать «реализовать» или синтаксис коллекции (Пользователь <| ... |>). Вот пример:

@user { 'foo':
  groups     => ['somegroup'],
  membership => minimum,
}

Затем реализуйте этого виртуального пользователя с синтаксисом коллекции:

User <| title == foo |>

А в другом месте вы можете добавить к параметрам для этого виртуального ресурса, используя plusignment:

User <| title == foo |> { groups +> "svn" }

Спасибо - уродливый хакер, но он выполняет свою работу. Вот патчированный пример (объединяющий приведенные выше комментарии) для добавления «nrpe» в группу «nagios». Я использовал пакет require, поскольку здесь пользователю предоставляется RPM, а не марионетка.

  exec {"nrpe nagios membership":
    unless => "/bin/getent group nagios|/bin/cut -d: -f4|/bin/grep -q nrpe",
    command => "/usr/sbin/usermod -a -G nagios nrpe",
    require => Package['nrpe'],
  }