🐧 Модуль Ansible Ping: Проверка доступности хоста |

🐧 Модуль Ansible Ping: Проверка доступности хоста

Мануал

Модуль Ansible ping используется для проверки связи между хостом управления Ansible (на котором выполняются плейбуки и команды) и управляемыми хостами (удаленными системами, которыми вы хотите управлять).

Этот модуль помогает проверить, что Ansible может взаимодействовать с вашими хостами, обеспечивая их доступность и готовность к дальнейшим задачам автоматизации.

Он не выполняет ICMP ping, а проверяет соединение через Ansible Python API.

В этом руководстве вы узнаете, что такое модуль ping и как использовать его в плейбуках на практических примерах.

Необходимые условия

Чтобы приступить к выполнению этого руководства, вам понадобится следующее:

  • Хост управления Ansible с установленной и настроенным Ansible.
  • Аутентификация на основе ключа SSH между хостом управления и целевыми узлами.

Синтаксис команды ping в Ansible

Основной синтаксис для использования команды ping в Ansible следующий:

ansible <TARGET> -m ping [OPTIONS]

Вот разбивка на компоненты:

  • ansible: Исполняемая команда Ansible.
  • <TARGET>: Это может быть одно имя хоста, группа хостов, определенных в файле инвентаризации, или комбинация с использованием подстановочных знаков или шаблонов инвентаризации.
  • -m ping: Указывает модуль ping, который будет использоваться для этой задачи.
  • [OPTIONS]: Необязательные аргументы для настройки поведения ping, которые мы рассмотрим в примерах.
  • -k: Укажите файл закрытого ключа SSH, который будет использоваться для аутентификации.
  • –become: Повысить привилегии до другого пользователя на удаленном хосте для операции ping.
  • -v: Повысить многословность для получения более подробного вывода.

Пример 1: Пинг одного хоста

Вы можете использовать команду Ansible с нужным именем хоста и опцией -m, чтобы указать модуль ping.

ansible host1 -m ping

Пример 2: Пинг группы хостов

Предположим, что в файле инвентаризации определена группа с именем webservers, содержащая несколько имен хостов серверов.

В этом случае вы можете выполнить следующую команду, чтобы выполнить ping всех хостов, определенных в файле инвентаризации.

ansible webservers -m ping

Эта команда попытается поочередно пропинговать каждый сервер в группе webservers.

На выводе будет показан статус достижимости для каждого сервера.

Вот объяснение приведенной выше команды:

  • ansible: Основная команда Ansible.
  • webservers: Имя группы, содержащей хосты, которые вы хотите пинговать в файле инвентаризации.
  • -m ping: Указывает Ansible использовать модуль ping.

Условное выполнение на основе результатов пинга

Чтобы условно выполнить набор задач на основе результатов работы модуля ping, вы можете использовать комбинацию конструкций Ansible block и when.

В этом примере показано, как условно запускать задачи в плейбуке в зависимости от успешности пингования определенных хостов.

---
- hosts: webservers
  tasks:
    - name: Ping web servers
      ping:
      register: ping_result

    - name: Install Nginx only on reachable servers
      apt:
        name: nginx
        state: present
      when: 
        - ping_result is not failed
        - ping_result.ping == 'pong'

Приведенный выше плейбук с использованием условия when гарантирует, что задача apt по установке Nginx будет запущена только на тех серверах, которые ответили на запрос ping.

Это позволяет избежать ненужных попыток на недоступных хостах.

Обработка проблем с соединением и повторов

Для обработки проблем с соединением и повторных попыток с помощью модуля ping в Ansible можно использовать комбинацию параметров retries, delay и until в вашем плейбуке.

Такой подход позволяет выполнить несколько попыток пингования с задержкой между каждой попыткой, пока хост не ответит.

Вот как настроить это в книге воспроизведения Ansible:

- hosts: database_servers
  vars:
    ping_failed: []

  tasks:
    - name: Ping database server with retries
      ping:
      register: ping_result
      until: ping_result is succeeded
      retries: 3
      delay: 5  # Wait 5 seconds between retries
      ignore_errors: yes  # Ensure the task does not fail the play on the first failure

    - name: Collect ping results
      set_fact:
        ping_failed: "{{ ping_failed + [inventory_hostname] }}"
      when: ping_result is failed

    - name: Fail the playbook if any ping fails after retries
      fail:
        msg: "Failed to reach the following database servers after retries: {{ ping_failed }}"
      when: ping_failed | length > 0

В этом примере пинг повторяется три раза для каждого сервера в группе database_servers.

Если ни один из пингов не увенчался успехом, плейбук терпит неудачу с информационным сообщением.

Сбор фактов с достижимых хостов

Модуль ping можно использовать в сочетании со сбором фактов для проверки подключения хостов и сбора фактов с достижимых хостов:

---
- hosts: all
  gather_facts: yes  # Gather facts from all hosts

  tasks:
    - name: Collect facts from reachable hosts
      ping:
      register: ping_result  # Register the result of the ping task

    - name: Display OS information of reachable hosts
      debug:
        msg: "OS Name: {{ ansible_os_family }} {{ ansible_distribution }}"
      when: ping_result.ping == "pong"  # Only display facts for reachable hosts

Этот плейбук собирает факты со всех хостов, а затем отображает информацию об операционной системе (семейство и дистрибутив) только для тех, которые ответили на запрос ping.

Заключение

В этом руководстве я рассмотрел базовый синтаксис и привел практические примеры использования модуля ping.

Мы показали, как пинговать все хосты, определенные группы хостов и отдельные хосты непосредственно из командной строки.

Кроме того, я показал, как включить модуль ping в плейбук для более структурированного тестирования.

Если вы новичок в Ansible и хотите изучить его с нуля, наша серия статей по Ansible будет вам очень полезна.

см. также:

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий