
Давайте представим сценарий, в котором вы развертываете новую версию приложения и хотите проверить, было ли оно успешно развернуто.
Для этого вы можете проверить статус ответа на запрос на главную страницу, добавив в свой плейбук задачу, подобную этой:
- 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
Поделитесь, если вы найдете это полезным.