На прошлой неделе я потратил все силы на изучение Puppet. Теперь я страдаю от переполнения мысленного буфера и неуверенности в том, что когда-нибудь смогу приручить этого зверя. Я наткнулся на множество аннотированных примеров, но из-за их бесчисленного количества вариаций я не могу различить рекомендуемый (недавний) стиль и соглашения Puppet и специальные подходы «работает для меня». Я не могу этого вынести, потому что, похоже, речь идет о вещах базового уровня.
Так. Использование Puppet для управления группами и пользователями, основная группа пользователей равна их собственному имени пользователя, другие группы могут быть lan
для входа в локальную сеть, wheel
для админов, shell
для пользователей с оболочкой на произвольных узлах, mail
для пользователей, daemons
для различных демонов. Логины администратора будут на всех узлах, и, что еще хуже, вход в локальную сеть также может быть логином через оболочку.
Насколько я понимаю, можно определять пользователя несколько раз, если вы используете виртуальные определения, которые реализованы в какой-то момент. Звучит потрясающе, но как это работает с несколькими группами для пользователя? Скажем, Боб может использовать как узлы LAN, так и узел beastie.wan; его логин thebob
затем определено два раза в lanusers.pp с groups => ["lan"]
и в shellusers.pp с groups => ["shell"]
? Что, если Боб хочет, чтобы его пароль LAN был отделен от пароля оболочки?
Код, который я сейчас использую, не имеет виртуальных определений, пользователи - это просто жестко запрограммированные одиночные включения. Однажды я наткнулся на пример использования виртуальных машин и здесь я застрял, потому что не понимаю, как расширить код, чтобы Puppet создавал первичную группу и необходимые группы, которые я определил сначала, а затем присоединяется к пользователю в этих группах.
Правильно. Пожалуйста, дайте мне понять.
Теперь я страдаю от переполнения мысленного буфера и неуверенности в том, что когда-нибудь смогу приручить этого зверя.
Первое: расслабьтесь. Я узнал, что, когда вы новичок в чем-то, требующем обучения, например в Puppet, довольно легко потеряться и не успеть сделать много.
будет ли его логин thebob затем определен два раза, в lanusers.pp с группами => ["lan"] и в shellusers.pp с группами => ["shell"]?
Нет. Практически определите это в одном месте (возможно users.pp
) с участием groups => ['shell', 'lan',]
.
На узлах определите, какие пользователи вам нужны. Например, если для node beamin
мы хотим все shell
пользователи:
node beamin {
Account <| groups == 'shell' |>
}
Что, если Боб хочет, чтобы его пароль LAN был отделен от пароля оболочки?
Тогда Боб, вероятно, должен получить 2 разных аккаунта с разными именами для входа.
Puppet плохо справляется со сложным управлением пользователями / группами. Вам было бы намного лучше развернуть что-то вроде LDAP - как бы мне это ни не нравилось, это будет работать намного лучше, чем пытаться превзойти Puppet в подчинении.