последовательность выполнения в Chef

Я немного новичок в кулинарии. Мне просто интересно, похожи ли ресурсы шеф-повара на node-js.

Например,

recipe.rb

resource1 'foo' do
    property value
end

resource2 'bar' do
    property value
end

Учтите, что resource1 — процесс с большим весом, а resource2 — процесс с легким весом. Возможно ли, что в этом случае сначала будет выполнено bar, а затем foo? Или это будет последовательно, сначала будет выполнено foo, а затем bar.


person Prashanth    schedule 29.10.2015    source источник
comment
как node-js не очень полезное описание. В конце концов, Node может иметь асинхронную модель, но при этом выполнять императивные команды по порядку.   -  person Charles Duffy    schedule 30.10.2015
comment
Спасибо @CharlesDuffy   -  person Prashanth    schedule 30.10.2015


Ответы (1)


Рецепты шеф-повара обязательны, они будут запускаться последовательно. Список выполнения также представляет собой массив, который будет выполняться по порядку. Если вы не определите одно и то же в списке выполнения несколько раз, будет выполняться только первое.

Тем не менее, у шеф-повара есть два этапа. Фаза компиляции, чтобы организовать, какие ресурсы необходимо запустить, и разрешить все переменные. Затем фаза выполнения, где фактически выполняется каждый ресурс. Вы можете написать рецепты, которые запускают действия на этапе компиляции, которые могут показаться неправильными.

Например, ресурс chef_gem предназначен для работы на этапе компиляции, поэтому драгоценные камни доступны во время фаза запуска. Параметр compile_time можно использовать, чтобы отключить это.

Для функционального примера...

ruby_block "later" do
  block do
    Chef::Log.info "I am first in the file"
  end
end

Chef::Log.info "I am second in the file"

Блок ruby ​​— это ресурс, который компилируется для последующего выполнения.
Код ruby ​​выполняется во время компиляции, поэтому выводится первым.

person Matt    schedule 29.10.2015
comment
Небольшая точность: если рецепт объявлен более одного раза в списке выполнения, он сохранит только первую позицию и больше не будет включен в список выполнения. - person Tensibai; 30.10.2015
comment
Кроме того, код Ruby может переупорядочивать ресурсы в любой момент во время компиляции, поэтому, возможно, стоит упомянуть, что переупорядочивание может изменить ситуацию до конвергенции ресурсов в коллекции ресурсов. - person Martin; 06.11.2015