Вы можете использовать модуль 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
.host: x
не требуется. Я только что повторно протестировал Ansible 2.3.1, иhost
атрибутомwait_for
задач по умолчанию является текущий сервер, обрабатываемый из инвентаря.hosts
атрибутом.AFAIK нет встроенного модуля для этой цели, но вы можете использовать
shell
+nc
:источник
-G 1
я не могу найти в справочных страницах?Вы можете использовать модуль wait_for для того же
Пример приведен в документации:
источник
Мы используем наш инструмент dda-serverpec ( https://github.com/DomainDrivenArchitecture/dda-serverspec-crate ) для таких задач. Вы можете определить свои ожидания
{:netcat [{:host "mywebserver.com" :port "443"} {:host "telnet mywebserver.com" :port "80"} {:host "telnet mywebserver.com" :port "8443"}]}
и протестируйте эти ожидания с помощью localhost или remote с помощью ssh. Для удаленных тестов вы должны определить цели:
{:existing [{:node-name "test-vm1"
:node-ip "35.157.19.218"}
{:node-name "test-vm2" :node-ip "18.194.113.138"}] :provisioning-user {:login "ubuntu"}}
Вы можете запустить тест по
java -jar dda-serverspec.jar --targets targets.edn serverspec.edn
источник