Вы можете использовать модуль 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
.