В моей текущей настройке у меня есть сценарий host-up, который берет где-то недавно подготовленную виртуальную машину на DC, выдает пару команд, которые мне нужно запустить puppet apply
(убедитесь, что имя хоста установлено, эта марионетка установлена и может видеть ее конфигурацию). затем puppet apply
Об остальном позаботится (плюс ткань для развертывания нашего программного обеспечения).
Все хорошо, но установка необходимых модулей марионеток в настоящее время происходит в моем сценарии размещения. Это отлично работает, пока я не захочу установить новые модули, а затем мне придется вручную отсортировать их на существующих хостах. Кажется, марионетка должна это делать, но я не нашел нужной директивы.
# If only this worked...
module { 'maestrodev-rvm':
ensure => present
}
я видел кукольный библиотекарь, но, похоже, это добавляет больше сложности, чем решает, для небольшого количества модулей, которые мы устанавливаем. Похоже, решение на будущее, если / когда нам понадобится что-то более сложное.
Я что-то упускаю?
librarian-puppet
это самый простой ответ на это. Лично я всегда советовал бы проделать работу заранее и сначала реализовать масштабируемое решение, а не постоянно пересматривать свой подход.
Он работает по тому же принципу, что и bundler
подходит для драгоценных камней Ruby - вы просто создаете Puppetfile
в котором перечислены модули ты хочу (т.е. без зависимостей).
Когда ты бежишь librarian-puppet install
впервые на вашей машине разработки Puppet (обычно на вашей локальной рабочей станции) он опрашивает все модули и автоматически создает список зависимостей (если рассматриваемые модули используют metadata.json
файл для подробного описания зависимостей). Это также создаст Puppetfile.lock
для записи точных версий, выбранных для каждого модуля и его зависимостей.
Для последующих изменений вы можете запустить librarian-puppet update <module>
для обновления конкретного модуля до последней версии. Это повторно вычислит зависимости и обновит Puppetfile.lock
.
Важное примечание - librarian-puppet
примет полный контроль над вашим modules
каталог, поэтому любые пользовательские модули, которые вы написали, нужно будет вытащить и ссылаться на них как на отдельные модули в вашем Puppetfile
.
Развернуть так же просто, как запустить librarian-puppet install
на ваших узлах - это будет смотреть на Puppetfile.lock
(не Puppetfile
) и устанавливает все ваши модули.