Давайте представим сценарий, в котором вы развертываете новую версию приложения и хотите проверить, было ли оно успешно развернуто.
Для этого вы можете проверить статус ответа на запрос на главную страницу, добавив в свой плейбук задачу, подобную этой:
- name: Wait for the app to become healthy uri: url: "https://example.com" method: GET status_code: 200 return_content: no register: result until: result.status == 200 retries: 60 delay: 10
Это достаточно хорошо, но не очень тщательно. Потому что, например, если вы выполняете развертывание в Amazon ECS, новая версия становится активной через некоторое время, а до этого старая версия все еще работает.
Решением может быть конечная точка версии:
GET https://example.com/version
Который может вернуть что-то вроде этого:
{
"version": "1.0.0",
"status": "up"
}
Тогда задача, проверяющая работоспособность приложения, может выглядеть так:
- name: Wait for the app to become healthy uri: url: "https://example.com/version" body_format: json register: result until: result.json.version == app_version retries: 60 delay: 10
где app_version
— переменная.
Однако это создает ошибку при развертывании приложения с конечной точкой версии в первый раз, потому что старое приложение, которое все еще работает, не имеет конечной точки версии. Чтобы учесть такой случай, вы можете добавить несколько условий для оператора do-until:
- name: Wait for the app to become healthy uri: url: "https://example.com/version" body_format: json register: result until: - result.status == 200 - result.json.version == app_version retries: 60 delay: 10
Поделитесь, если вы найдете это полезным.