Ви можете використовувати модуль 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
до цих портів.
- паралелізм підлягає встановленню вилок у вашому
ansible.cfg
.
Ми використовуємо ignore_errors: yes
тут так, що будь-які помилки позначені червоним кольором, але не зупиняють виконання.
Про відкриті порти повідомляється як про ok
предмети у вихідному, а про закриті порти - як про таке failed
(ви повинні використовувати -vv
прапор, ansible-playbook
щоб побачити цей вихід).
Тонка настройка виходу
Якщо ви хочете більш конкретних результатів для випадків успіху та невдачі, код повинен бути складнішим, додаючи друге завдання:
wait_for
завдання має register
змінну
- друге завдання виробляє вихід, використовуючи
debug
умови умови успіху / відмови (наприклад, використовуючи умовний вираз Jinja2 )
- то вам потрібно поставити обидві ці задачі у файл включення (без
with_items
циклу) і написати основне завдання відтворення, яке використовує include
... with_items
для виклику файлу включення один раз на порт.
host: mywebserver.com
.