2016-01-29 2 views
0

Использование шеф-повара, я хотел бы использовать функцию уведомления вне контекста вызова другого ресурса.Chef stand alone

Вот что я делал как работа вокруг, но я хочу знать, если есть более чистый способ сделать это:

execute 'restart myapp' do 
    command '/srv/www/myapp/shared/scripts/myapp restart' 
    action :nothing 
end 

# Code here does configuration and dependencies restart notifications 

execute 'echo "Restarting myapp"' do 
    notifies :run, 'execute[restart myapp]' 
end 

Ключевым моментом здесь является то, что мне нужно execute[restart myapp] бежать после того, как все другие потенциальные уведомления из ранее в рецепте.

+0

в принципе это нормально - за исключением того, что вы можете отправить «действие: удалить» в ресурс 'file'. – StephenKing

+0

Это просто базовый пример. Я фактически не удаляю один файл на практике. – Levi

+1

прекрасный. затем сохраните его, как есть, или предоставите более подробную информацию об остальном. – StephenKing

ответ

2

Вы можете сэкономить миллисекунды, делая что

ruby_block 'noop' do 
    block { } 
    notifies :run, 'execute[cleanup]' 
end 

А вообще остерегаться такого рода конструкции. Отсроченные уведомления - это один трюк-пони, нет способа получить «позже, чем все отложенные», например. Подумайте о том, как использовать пользовательский ресурс и более четко определить поведение, которое вам нужно для одного действия.

+0

Итак, в основном вы говорите, чтобы переписать ресурс, чтобы он не использовал уведомления и вместо этого просто выполнял каждую команду в строке, когда пришло время для ее выполнения? – Levi

+1

Да, при каждом выполнении они внутренне идемпотентны. – coderanger

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