Додавання існуючого користувача до групи з лялькою


16

Чи можна додати наявного користувача до групи з лялькою 2.7.18?

У нас є два модулі, кожен з яких визначає один клас:

  • модуль "user" створює всіх користувачів, включаючи foo користувача та панель користувачів.
  • модуль "subversion" працює з різними конф-файлами та створює груповий svn.

Ми хотіли б додати 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

Чи реалізована ця функція? Якщо ні, то чи вдале рішення?

Відповіді:


15

Якщо ви оголошуєте користувачів віртуальними ресурсами , ви можете використовувати синтаксис 'real' або колекцію (Користувач <| ... |>). Ось приклад:

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

Потім зрозумійте, що цей віртуальний користувач із тодішнім синтаксисом колекції:

User <| title == foo |>

І в іншому місці ви можете додати параметри цього віртуального ресурсу, використовуючи plusignment:

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

Тому я думаю, що немає альтернативи, окрім віртуальних ресурсів на даний момент :( Дякую за відповідь.

1
Між ляльковими версіями є помилка друку або атрибута: це не група, а групи (множина). Використання лялечки 3.2.2
Горан Мішкович

1
може хтось розширити це на короткому прикладі.
mschuett

22

Використання віртуальних ресурсів 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.


1
Лялька може шукати повністю кваліфіковані шляхи до виконуваних файлів. Відредаговано для відображення цього.
h7r

2
Жахливо і хакі, але дуже корисно. Я сподівався, що не доведеться вивчати нову мовну конструкцію, щоб зробити щось концептуально просте, як додавання користувача до групи.
BillMan

1
Можливо, більш правильним (в той час як все ще хакі, звичайно) спосіб буде використовувати, getent group somegroup|cut -d: -f4|grep -q fooщоб не припускати, що ми використовуємо /etc/group.
falstro

Супер корисно - дякую. Мені довелося змінити параметри "якщо" та "usermod", щоб включити повний шлях так: якщо тільки> "/ user / bin / grep ..." command => "/ user / bin / usermod ..."
JNP Веб-розробник

Для @jnpWebDeveloper і подібних їм: відповідно до документації , ви можете також вказати pathпараметр. Я пропоную встановити глобальний ресурс за замовчуванням, можливо, це пов'язано $PATHз фактом.
cincodenada

2

Спасибі - некрасивий хакер напевно, але це робить роботу. Ось натхненний приклад (поєднання вищезазначених коментарів), щоб додати "nrpe" до групи "nagios". Я використовував пакет вимагає, оскільки тут користувач надає 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'],
  }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.