Ansible wait_for не ответ исправить ошибку - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь протестировать пакет соединений, но соединения, которые не проходят все пересадки, являются «Тайм-аут», но я знаю (я проверял), что некоторые из них «нет маршрута к хосту».Как я могу сделать это с wait_for в ansible?

- name: Test connectivity flow
  wait_for: 
    host: "{{ item.destination_ip }}"
    port: "{{ item.destination_port }}"
    state: started         # Port should be open
    delay: 0               # No wait before first check (sec)
    timeout: 3             # Stop checking after timeout (sec)
  delegate_to: "{{ item.source_ip }}"
  failed_when: false
  register: test_connectivity_flow_result

- name: Append result message to result list msg
  set_fact:
    result_list_msg: "{% if test_connectivity_flow_result.msg is defined %}{{ result_list_msg + [test_connectivity_flow_result.msg] }}{% else %}{{ result_list_msg + [ '' ] }}{% endif %}"

Текущий ответ: Тайм-аут при ожидании 1.1.1.1:1040

Ожидаемый ответ: Нет маршрута к хосту 1.1.1.1:1040

1 Ответ

0 голосов
/ 21 июня 2019

Цитирование названия документации модуля wait_for

wait_for - ожидание условия перед продолжением

If I "перефразируя «условие, которое вы написали, это даст что-то вроде:« дождитесь, пока хост X станет разрешаемым местом назначения, и порт 22 будет открыт для этого места назначения, повторите попытку без задержки и тайм-аут после 3 с ».

Обычно это тест, который вы запускаете, потому что вы запустили новый vm и зарегистрировали его в dns.Таким образом, вы ждете, пока dns распространится И порт ssh будет доступен.

В вашем случае вы получаете тайм-аут, потому что ваше имя хоста никогда не становится разрешаемым адресом.

Если вы специально хотите проверитьнет маршрута к хосту, и вы не хотите ждать, пока маршрут в конечном итоге станет доступным, вам нужно сделать это другим способом.Вот простой пример книги с модулем ping:

---
- name: Very basic connection test 
  hosts: localhost
  gather_facts: false

  tasks:

    - name: Test if host is reachable (will report no route if so)
      ping:
      delegate_to: nonexistent.host.local

Что приводит к:

PLAY [Very basic connection test] *****************************************************

TASK [Test if host is reachable (will report no route if so)] *************************
fatal: [localhost]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname nonexistent.host.local: Name or service not known", "unreachable": true}

PLAY RECAP ****************************************************************************
localhost                  : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0

Обратите внимание, что ping модуль :

  • Сообщит, что нет маршрута к хосту, если это так
  • Неявно попытается подключиться к порту 22 * ​​1031 *
  • Убедитесь, что на хосте установлен Python иготов к управлению через ansible.

Если хост, который вы пытаетесь проверить, не удовлетворяет всем вышеперечисленным условиям (например, вы хотите, чтобы тест прошел успешно, даже если python не установлен), вы будетенужен другой сценарий.Запуск ICMP ping через модуль command является одним из нескольких решений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...