Лучший подход к изменению или отмене действия в рецепте шеф-повара

У меня проблема: у меня есть более 100 серверов, на которых мне нужно убедиться, что определенный процесс запущен... Эти 100 серверов разбиты на 4 разные среды, и у меня настроено множество ролей. Код шеф-повара в этом случае самый простой:

service "some_process" do
    supports :status => true
    action :start
end

Предположим, я хочу перезапустить этот процесс в определенной среде, узле или роли. Я использовал что-то вроде этого:

knife ssh "name:node_name" "service some_process restart" -i id_rsa 
knife ssh "name:role_name" "service some_process restart" -i id_rsa 
knife ssh "name:environment_name" "service some_process restart" -i id_rsa 

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

Как лучше всего временно изменить рецепт с «запуска» на «перезапуск», а затем управлять им через отдельные узлы, целые среды или даже определенные роли? Есть ли механизм для отмены «запуска» и принудительного «перезапуска» путем редактирования списка выполнения и/или использования атрибутов?


person user2860259    schedule 02.12.2015    source источник
comment
хотя ответ был принят и то, чего вы хотели бы достичь, звучит как плохой дизайн, ваш вопрос был можно ли это сделать? -- да, это возможно -- вы всегда можете добиться этого с помощью ответвление в вашем рецепте на основе вычисляемой переменной. другой способ — использовать пакет данных и установить значения в центральном расположении, которые можно получить во время chef-client запуска. это означает, что вы не изменяете свою кулинарную книгу, и вам не нужно беспокоиться о развертывании новой версии вашей кулинарной книги.   -  person Mr.    schedule 08.12.2015


Ответы (2)


Chef — это не среда удаленного выполнения, то, что вы делаете, — это правильный способ справиться с этим (хотя, возможно, с лучшим SSH-клиентом, таким как Fabric, Invoke или Capistrano).

person coderanger    schedule 02.12.2015

Я бы порекомендовал вам иметь более одного рецепта. В одном рецепте будет использоваться action :start, в другом — action :restart. Затем вы можете временно переопределить список выполнения, если вам нужно принудительно перезапустить. Тем не менее, @coderanger прав. Это не является целью Chef, и существуют различные инструменты, которые гораздо изящнее справляются с ситуацией.

person Tejay Cardon    schedule 03.12.2015