У меня есть рецепт, который устанавливает процесс в файловой системе, а затем службу runit для управления процессом - который, наконец, уведомляет команду о копировании уникальной конфигурации в процесс домашний каталог и перезапустите процесс. Это отлично работает для одного процесса, но когда я пытаюсь запустить это несколько раз, т.е. при циклировании атрибутов я получаю странные побочные эффекты, которые, по-видимому, связаны с жизненным циклом.как запустить один и тот же рецепт шеф-повара несколько раз с разными параметрами
Пример ошибки я получаю
Chef::Exceptions::EnclosingDirectoryDoesNotExist
для/SRV/второго процесса. Однако этот каталог является первым, который я создаю в уведомляющем блоке внутри провайдера - не может ли быть, что сеансы шеф-повара не изолированы? Я также видел данные из первого элемента элемента массива в другой, т.е. первый процесс, пытающийся уведомить r_unit [второй-идентификатор процесса]
В широком смысле (если только один процесс это работает)
node["app"]["processes"].each do |key,value|
#step 3
execute 'configure' do
command 'cp -r /srv/folder /srv/#{some_key} && sv restart #{some_key}'
action :nothing
end
#step 2
runit_service current_process_id do
notifies :run, 'execute[configure]', :delayed
end
#step 1
my_custom_hwrp current_process_id do
notifying_block do
new_resource.dirs_to_create.each do |dir_name|
end
install_path current_install_path
notifies :enable,"runit_service[#{current_process_id}]"
end
end
end
my_custom_hwrp поставщик
class Provider < Chef::Provider
def action_enable
deploy_revision current_process_id do
new_resource.updated_by_last_action(true)
end
end
end
Есть Я могу изолировать работу шеф-повара для каждого процесса?
Попробуйте «выполнить» configure # {some_key} «сделать», чтобы получить уникальную команду execute для каждого каталога и использовать тот же синтаксис в уведомлении. Без этого каждый ресурс перезаписывает предыдущий (краткое объяснение, это немного сложнее). Я использовал 'remote_directory' и уведомление для перезапуска службы вместо' execute'. – Tensibai
вы должны реализовать [определение] (http://docs.chef.io/definitions.html) или [lwrp] (https://docs.chef.io/lwrp.html), которые вы сможете повторное использование даже по кулинарным книгам. вы всегда можете ссылаться на любой из них итеративно. – MrRoth