Я развертываю распределенную службу, которая использует общий ресурс NFS на нескольких узлах. В этом сценарии есть главный узел, который экспортирует общий ресурс NFS, и ряд подчиненных узлов, которые должны подключить этот экспорт.
Используя chef, я могу настроить главный узел. Как только главный узел будет завершен, я могу настроить подчиненные параллельно. Однако, если chef-client запускается (примерно) в одно и то же время на всех узлах, ведомые устройства выходят из строя, потому что общий ресурс NFS на сервере еще не существует.
Используя chef, как я могу гарантировать, что инициализация ведущего устройства завершена до запуска ведомых устройств? Я полагаю, что для ведомых устройств было бы приемлемо приостановить (и, возможно, время ожидания через несколько минут), ожидая, когда будет доступен экспорт NFS, хотя было бы лучше, если бы я мог гарантировать, что мастер был полностью подготовлен (все рецепты / роли ) перед тем, как позволить шеф-клиенту на подчиненном устройстве продолжить.
В общем, лучший подход - не обеспечивать всего этого. Напишите свой код рецепта таким образом, чтобы он не работал корректно, если зависимости недоступны, а затем используйте режим демона chef-client (или запускайте из cron), чтобы он продолжал попытки столько, сколько необходимо, пока не добьется успеха.