2014-01-14 3 views
1

У меня есть множество мест в моих рецептах шеф-повара, где операции должны выполняться последовательно, и эта последовательность должна быть указана в нескольких местах. Например, одна последовательность операций: «остановить Tomcat, перекомпилировать приложение, запустить Tomcat», который может быть вызван, среди других событий, «дерево источника приложения изменяется».Связывание/группировка ресурсов у шеф-повара

мне нужно, чтобы иметь возможность запускать эти последовательности операций необходимы с обеими notifies атрибутов из различных ресурсов (в том числе :delayed функциональности), а также subscribes атрибутов самих последовательностей, так как последовательности могут быть вызваны ресурсами в других рецептах, перезапустит Tomcat, если он будет рядом, но на самом деле не зависит от рецепта Tomcat.

Каков оптимальный способ управления этими группами операций?

Я вижу из the Chef docs, что способ справиться с этим, чтобы иметь любое соответствующее событие уведомляет все эти операции в последовательности:

git 'repo' do 
    notifies :stop, 'service[tomcat]', :delayed 
    notifies :run, 'recompile_app', :delayed 
    notifies :start, 'service[tomcat]', :delayed 
end 

Однако, есть довольно много ресурсов, эта последовательность событий может быть вызванный, и этот уровень дублирования кода кажется неэффективным и подверженным ошибкам.

Есть ли лучший способ справиться с этим?

+0

Если у вас есть много мест, где какой-то код повторами , вы должны извлечь его в библиотеку (http://docs.opscode.com/essentials_c ookbook_libraries.html) или LWRP (http://docs.opscode.com/lwrp_custom.html). –

ответ

0

Похоже, вы хотите получить LWRP или definition. LWRP создадут обертку вокруг коллекции ресурсов, поэтому она появится только один раз в коллекции ресурсов. Это похоже на продолжение шеф-повара. Определения будут содержать ряд ресурсов, но каждый ресурс все еще существует в коллекции ресурсов.

В вашем примере, я хотел бы использовать определение:

define :my_thing do 
    git 'repo' do 
    # ... 
    end 

    service 'tomcat' do 
    action :stop 
    end 

    execute 'recompile_app' do 
    action :run 
    end 

    service 'tomcat' do 
    action :start 
    end 
end 

Источники:

+0

Каким образом можно заменить использование «подписчиков» для этих определений? Просто добавление предложения 'subscribers' не работало для меня. У меня есть некоторые ресурсы, которые должны будут вызывать определение, если его кулинарная книга включена, или нет, если это не так. – spiffytech

+0

Вход в систему перевернулся. – sethvargo

+0

Какой логин вы имели в виду? Кроме того, как я буду ссылаться на это определение с задержкой, например, ресурсы в моем посте? – spiffytech

Смежные вопросы