2016-11-23 7 views
0

У меня есть 2 сервера, на которых размещен веб-сайт. я хочу сделать чередующееся обновление с анзиблем вроде следующий:Модифицированное обновление прокатки - как проверить ответ сервера с таймаутом?

  1. обновления одного сервера в то время

  2. взять узел здания от балансировки нагрузки

  3. выполнения задания, перезапуск сервер

  4. Ожидание запуска сервера, отправка запроса на тестовый URL каждые 5 секунд, пока не будет получен действительный ответ, он будет истекать через 3 минуты, проигрыватель не работает.

  5. Если сборка прошла успешно, постройте следующий узел до тех пор, пока все не закончится.

Из вышеизложенного 1,2,3,5 могут быть выполнены с помощью Ansible по умолчанию. Но я не могу найти документацию о том, как выполнить шаг 4 с Ansible без написания собственного скрипта.

Любой указатель будет оценен по достоинству.

UPDATE

я, наконец, получил это работает с wait_for и until:

- name: "wait for port to be available" 
    wait_for: 
     host: "127.0.0.1" 
     port: "{{port}}" 
     timeout: 30 
    - name: "wait for web app to start up" 
    shell: curl -XGET --head --silent http://127.0.0.1:{{port}}/test 
    register: result 
    until: result.stdout.find("200 OK") != -1 
    retries: 60 
    delay: 3 

ответ

0

Вы ищете wait_for модуля:

- wait_for: 
    host: path.to.the.node 
    port: 80 
    connect_timeout: 5 
    timeout: 180 
+0

спасибо за ответ, wait_for ждет только порт будет доступен, но не гарантирует сайт возвращает ответ 200. Когда веб-сайт запускается, порт обычно уже доступен, но запросы на возврат веб-сайта 503 – Jay

+0

Вы можете добавить параметр 'search_regex' и проверить ожидаемый ответ. – techraf

0

пинг страницу с uri

Существует аргумент тайм-аута.

пример:

- name: wait for nginx 
    wait_for: 
    port: 443 

- name: wait for test page 
    uri: 
    url: https://test/page 
    timeout: '{{ 3 * 60 }}'