Я хочу создать рецепт, который развертывает исполняемый файл обновления программного обеспечения на всех серверах, а затем публикует информацию о новой версии в базе данных. Как сделать скрипт, который запрашивает базу данных только после того, как все узлы с заданной ролью развернут новую версию пакета?
В рецепте, который развертывает исполняемый файл, я бы рассмотрел возможность сохранения новой версии программного обеспечения в атрибуте узла после того, как исполняемый файл был развернут. Затем в отдельном рецепте выполните поиск по этим узлам и убедитесь, что все результаты содержат только новую версию программного обеспечения, то есть:
if search(:node, 'roles:role_for_your_app_servers').reject do |n|
n['software']['version'] != target_version
end.empty?
do_database_update
end
Чтобы это работало, вам нужно сначала убедиться, что все ваши узлы включают атрибут версии программного обеспечения, прежде чем добавлять эту функцию.