Ответ
В Ansible я проверяю доступность серверов на нескольких уровнях: базовая связность, доступность портов и работоспособность сервисов. Это критически важно для идемпотентных и надёжных плейбуков.
1. Базовый модуль ping:
Он проверяет не ICMP, а возможность выполнить Python на целевом хосте через настроенное соединение (SSH, WinRM).
- name: Test connectivity to all hosts
ansible.builtin.ping:
Запускаю этот таск в начале плейбука, чтобы убедиться, что управляющая нода может подключиться ко всем хостам из инвентаря.
2. Проверка доступности конкретных портов: Перед развёртыванием приложения проверяю, что необходимые порты (БД, кеша, очереди) открыты и принимают соединения.
- name: Check if database port is reachable
ansible.builtin.wait_for:
host: "{{ db_host }}"
port: "{{ db_port }}"
timeout: 10
delegate_to: localhost
run_once: true
3. Проверка HTTP/HTTPS эндпоинтов (здоровье сервиса):
Модуль uri позволяет проверить не только доступность порта, но и корректность ответа приложения.
- name: Validate web service health endpoint
ansible.builtin.uri:
url: "http://{{ inventory_hostname }}:{{ app_port }}/health"
return_content: yes
status_code: 200
timeout: 5
register: health_check
- name: Fail if health check failed
ansible.builtin.fail:
msg: "Health check failed. Response: {{ health_check.content }}"
when: health_check.status != 200
4. Групповая проверка перед выполнением критичных операций: Создаю отдельный плейбук для предварительных проверок (pre-flight checks), который включает:
- Проверку свободного места на диске (
ansible.builtin.shell: df -h). - Проверку загрузки CPU/памяти.
- Проверку наличия необходимых зависимостей.
5. Использование ansible.builtin.shell для кастомных проверок:
- name: Custom port check using netcat (if available on target)
ansible.builtin.shell: "nc -z localhost 9200" # Проверка порта Elasticsearch
changed_when: false # Помечаем таск как "не изменяющий" состояние
failed_when: "'succeeded' not in command.stdout"
register: port_check
Такой многоуровневый подход позволяет быстро выявлять проблемы с инфраструктурой до начала развёртывания и делает пайплайны CI/CD более устойчивыми.