Вы можете использовать модуль Ansible wait_for, который проверяет, открыт ли определенный порт TCP.
Поскольку в этом случае все порты уже должны быть открыты, мы можем использовать минимальное нет. попыток, достаточно, чтобы покрыть проблемы сети:
- name: Check all port numbers are accessible from current host
wait_for:
host: mywebserver.com
port: "{{ item }}"
state: started # Port should be open
delay: 0 # No wait before first check (sec)
timeout: 3 # Stop checking after timeout (sec)
ignore_errors: yes
with_items:
- 443
- 80
- 80443
По умолчанию Ansible будет проверять каждую секунду (настраивается в Ansible 2.3 с использованием sleepатрибута), поэтому он будет проверять 3 раза на порт.
Запустите это в сборнике игр, используя инвентарь из 400+ хостов - Ansible проверит параллельно, что все хосты могут подключаться mywebserver.comк этим портам.
Мы используем ignore_errors: yesздесь, чтобы любые ошибки были отмечены красным, но не останавливали выполнение.
Открытые порты сообщаются как okэлементы на выходе, а закрытые порты - как failed(вы должны использовать -vvфлаг, ansible-playbookчтобы увидеть этот вывод).
Точная настройка вывода
Если вы хотите более конкретный вывод для случаев успеха и неудач, код должен быть более сложным, добавив вторую задачу:
wait_forзадача должна registerпеременная
- вторая задача производит вывод, используя
debugусловия успеха / неудачи (например, используя условное выражение Jinja2 )
- затем вам нужно поместить обе эти задачи во включаемый файл (без какого-либо
with_itemsцикла) и написать основную задачу playbook, которая использует include... with_itemsдля вызова включаемого файла один раз для каждого порта.
host: mywebserver.com.