Понимание фрагмента кулинарной книги шеф-повара

#chef-infra #cookbook

#шеф-повар-инфра #кулинарная книга

Вопрос:

Я не могу интерпретировать приведенный ниже код в кулинарной книге шеф-повара:

 systemd_unit '<service_name>' do      
   action %i[enable start]
end
  

Я прочитал о systemd_unit из ресурса systemd_unit. Однако, как здесь определяется действие? Я пытаюсь преобразовать эту кулинарную книгу в ansible и хотел сначала понять, что происходит в кулинарной книге.

Кроме того, будучи новичком в кулинарной книге, я также хотел подтвердить, если:

 include_recipe '<cookbook_name>'
  

предоставляется, тогда, насколько я понимаю, он включает default.rb из данной кулинарной книги, а другие рецепты в этой кулинарной книге не включены. Пожалуйста, дайте мне знать, если это правильно.

Ответ №1:

%i[запустить, включить] — это массив, служба сначала запускается, а затем включается для автоматического запуска.

Включить кулинарную книгу включает только рецепт по умолчанию, для конкретного использования рецепта включает ‘cookbook::recipe’

С наилучшими пожеланиями

Ответ №2:

Предоставление расширенного ответа в дополнение к ответу @Psyreactor.

Действия в рецепте шеф-повара представлены символами Ruby, такими как :create , :start и т.д. Когда несколько действий должны быть выполнены на одном ресурсе, они передаются в виде массива.

Итак, вместо того, чтобы писать два объявления ресурсов для одного и того же сервиса, подобного этому:

 # Enable the service
systemd_unit '<service_name>' do 
  action :enable
end

# Start the service
systemd_unit '<service_name>' do 
  action :start
end
  

Он может быть записан как один:

 # Enable and start the service
systemd_unit '<service_name>' do 
  action [ :enable, :start ]
end
  

Примечание: %i это способ исключить использование : символа и создать массив символов. %i(enable, start) то же самое, что [ :enable, :start ] .

«Действия» шеф-повара известны как «состояние» в Ansible. Итак, для аналогичной службы в Ansible вы бы сделали:

 systemd:
  name: '<service_name>'
  enabled: yes
  state: 'started'
  

он включает default.rb из данной кулинарной книги, а другие рецепты в этой кулинарной книге не включены.

Это правильно. Однако от этого зависит то, что другие рецепты из этой кулинарной книги не будут включены в прогон default.rb .