Убедитесь, что сервер запущен в рецепте Chef

Я новичок в шеф-поваре. У меня есть рецепт, в котором мне нужно запустить сервер, а затем дождаться его успешного запуска. У меня есть это до сих пор;

service "myserver" do
  action :start
end

execute "ensure myserver startup" do
  command "curl http://#{node['myserver']['http']['host']}:#{node['myserver']['http']['port']}"
  retries 5
  retry_delay 15
end

Мне это кажется неправильным, и это обычное дело для сценариев шеф-повара. Каков идиоматически правильный способ дождаться запуска сервера?


person Andrew Eisenberg    schedule 08.04.2014    source источник
comment
Почему ваш сервис не блокируется, пока не будет готов? В большинстве служб сценарий инициализации или средство запуска службы блокируются до тех пор, пока не будут готовы к запросам.   -  person sethvargo    schedule 08.04.2014
comment
Услуга реализована не так. Мы не можем это контролировать, так как это сторонний сервер.   -  person Andrew Eisenberg    schedule 08.04.2014
comment
Тогда это похоже на то, что решено здесь, в поваренной книге Jenkins. .   -  person StephenKing    schedule 08.04.2014
comment
Спасибо. Я это попробую. Я удивлен, что нет ничего проще. Превратите это в ответ, и если это сработает. Я приму это.   -  person Andrew Eisenberg    schedule 08.04.2014
comment
@StephenKing Я не считаю, что решение Дженкинса лучше, чем то, что я предлагаю выше. По сути, он делает то же самое (открывает URL-адрес в цикле). Решение jenkins обеспечивает лучшие сообщения об ошибках, но оно намного сложнее, поэтому я не вижу никакой пользы в своей ситуации.   -  person Andrew Eisenberg    schedule 09.04.2014
comment
Вы полагаетесь на внешнюю программу. По крайней мере, сделайте вызов прямо в ruby.   -  person StephenKing    schedule 09.04.2014


Ответы (1)


Еще один способ — использовать рубиновый блок и использовать атрибуты для управления количеством повторных попыток, временем ожидания между повторными попытками. Это также поможет в логировании, поднятии ошибок. Это пример кода выполнение аналогичной задачи. Здесь, когда служба появляется, запись делается в ZooKeeper как znode, и, следовательно, ruby_block проверяет наличие znode_exists?. Вы можете заменить его на curl.

person Biju N    schedule 22.12.2014
comment
Ссылка битая, - person aclowkay; 13.06.2018