Chef: запуск ресурсов на стадии компиляции

62 views
Skip to first unread message

Timur Batyrshin

unread,
Jun 14, 2014, 2:35:00 PM6/14/14
to devo...@googlegroups.com
Всем привет,

Зачем делают запуск ресурсов (установку пакетов, создание конфигов, запуск сервисов) на стадии компиляции?
Я же правильно понимаю, что такая конструкция именно это означает?

package pkg do
  action :nothing
end.run_action(:install)

Это же notify не позволит толком сделать если понадобится, например, да и компиляцию наверное обломает если ошибка при выполнении ресурса возникнет?

В частности, в провайдере postgresql кукбука Express42 кажется вообще все ресурсы так создаются:

Это не offense, а попытка понять, что возможно какие-то вещи мне стоит делать по-другому.

Спасибо,
Тимур

Akzhan Abdulin

unread,
Jun 15, 2014, 3:06:38 AM6/15/14
to devo...@googlegroups.com
например, у нас конфигурация всей системы описана в некотором репозитории b-configs.
к ней прилагается гем вида b-configs-apply, и оба этих ресурса надо поставить во время компиляции.

Чтобы потом сделать а ля

require 'b-configs-apply'

BConfigs.files.each |srv|
  file file.path do
    content file.content
    ...
end

BConfigs.services.each |srv|
  runit_service srv.to_runit
end


и так далее


14 июня 2014 г., 22:35 пользователь Timur Batyrshin <ert...@gmail.com> написал:

--
Вы получили это сообщение, поскольку подписаны на группу "devopsru".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес devopsru+u...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Ivan Evtuhovich

unread,
Jun 15, 2014, 9:38:09 AM6/15/14
to devo...@googlegroups.com
Акжан написал класический пример, когда это необходимо — использование гемов внутри шеф-ресурсов. Дело в том, что в некоторых случаях гемы используются внутри ресурсов (а не провайдеров), и тогда их подключение необходимо еще на этапе компиляции, что и делает, например, ресурс chef_gem.

Но это специфично не только для гемов и такой способ является рекомендованным компанией Chef (бывшая Opscode).

В случае же с рецептом postgresql все очень просто. Дело в том, что lwrp в Chef — это достаточно большой костыль. И если не делать явно run_action(:something), то новые ресурсы, которые определены в провайдере postgresql добавятся на этапе исполнения в конец коллекции ресурсов. В таком случае, если вы надеятесь после вызова ресурса postgresql обратиться к базе, вам это не удастся, потому что в реальности БД появится в самом конце шеф рана.

Надеюсь, я понятно объяснил, если остались вопросы — с радостью отвечу.

Timur Batyrshin

unread,
Jun 15, 2014, 11:19:36 AM6/15/14
to devo...@googlegroups.com
А, это для Chef10 так было? Я так и не нашел тогда в нем как зацепиться за ресурс, заданный внутри LWRP.
А сейчас уже use_inline_resources есть, наверное уже такой необходимости нет, если не пытаться на этапе компиляции лезть в базу.
Ясно, спасибо!

Для разнообразных вещей, которые модифицируют поведение шефа (установка гемов, библиотек и т.п.) — то, что Акжан написал, то понятно, да.

воскресенье, 15 июня 2014 г., 17:38:09 UTC+4 пользователь Ivan Evtuhovich написал:
Reply all
Reply to author
Forward
0 new messages