Существует рецепт шеф-повара с ruby -блоком. ruby -блок выполняется до тех пор, пока не будет установлено сокетное соединение (повтор 10). Если соединение не может быть установлено, ruby -блок не должен выйти из строя (ignore_failure).
Пример:
ruby_block 'wait for service' do
block do
require 'socket'
require 'timeout'
Timeout.timeout(2) do
s = TCPSocket.new('127.0.0.1', 8080)
s.close
end
end
retries 10
retry_delay 5
ignore_failure true
action :run
end
В документации шеф-повара не ясно, выполняется ли блок ruby повторно или нет, если для ignore_failure
установлено значение true
.
Обновление
Когда сценарий выполняется и порт 8080 не прослушивает службу, выполнение рецепта шеф-повара продолжается после первой попытки со следующим сообщением:
ERROR: ruby_block[wait for service] (cookbook::wait_for_service line 1) had an error: Errno::ECONNREFUSED: Connection refused - connect(2) for "127.0.0.1" port 8080; ignore_failure is set, continuing
...
Error executing action run on resource 'ruby_block[wait for service]'
Errno::ECONNREFUSED
-------------------
Connection refused - connect(2) for "127.0.0.1" port 8080
...
Из-за объявления ruby_block я бы сказал, что ruby выполняется 10 раз, прежде чем сообщать о ERROR
.