Запуск через Ansible Navigator#

Утилита ansible-navigator запускает инструменты Ansible внутри EE и позволяет использовать один состав Ansible Core, коллекций и библиотек для локальной проверки наборов сценариев. Версию Ansible Core определяет образ среды исполнения, а не версия Navigator на рабочей станции. Для воспроизводимости необходимо закрепить образ, конфигурацию, коллекции, набор сценариев и входные данные. Само использование Navigator не делает результат повторяемым при изменении этих компонентов или состояния целевых узлов.

Предварительные требования#

Для примера необходимы следующие компоненты на рабочей станции Linux:

Пример использует Docker явно. При использовании Podman необходимо изменить container-engine на podman и загрузить образ в хранилище Podman той же учетной записи. Образы в хранилище Docker не становятся доступными Podman автоматически.

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

Подготовка проекта#

Для подготовки проекта выполните следующие действия:

  1. Проверьте версию Navigator:

    ansible-navigator --version
    

    Ожидаемый результат: ansible-navigator 25.4.1.

  2. Загрузите образ среды исполнения:

    docker pull hub.astra-automation.ru/aa-2.1/aa-minimal-ee:2.5.0-aa2.1
    
  3. Создайте файл ansible-navigator.yml с настройками запуска:

    ---
    ansible-navigator:
      mode: stdout
      execution-environment:
        enabled: true
        container-engine: docker
        image: hub.astra-automation.ru/aa-2.1/aa-minimal-ee@sha256:cc11e1a2060f95d80903662cda6fcaddb4ace735cd10fff2831bc56e9723127a
        pull:
          policy: never
        environment-variables:
          set:
            ANSIBLE_HOST_KEY_CHECKING: "True"
      playbook-artifact:
        enable: false
    

    Ссылка с контрольной суммой sha256 закрепляет содержимое проверенного образа. Политика never запрещает автоматическое получение образа, поэтому предыдущий шаг обязателен. Режим stdout выводит результат в терминал без интерактивного интерфейса. Настройка playbook-artifact.enable: false отключает сохранение артефакта набора сценариев Navigator. Переменная ANSIBLE_HOST_KEY_CHECKING включает проверку ключа сервера при последующем подключении по SSH.

  4. Создайте полное описание инвентаря inventory.yml:

    ---
    all:
      hosts:
        localhost:
          ansible_connection: local
    
  5. Создайте полный набор сценариев check.yml:

    ---
    - name: Проверка среды исполнения
      hosts: localhost
      gather_facts: false
      tasks:
        - name: Вывод версии Ansible Core
          ansible.builtin.debug:
            msg: "Ansible Core {{ ansible_version['full'] }}"
    

Запуск и проверка результата#

Для запуска набора сценариев выполните команду:

ansible-navigator run check.yml -i inventory.yml

Ожидаемый результат: задача выводит Ansible Core 2.18.3, а итоговая сводка для localhost содержит changed=0 и failed=0. Здесь localhost означает контейнер EE, поскольку Ansible Core работает внутри него. Для проверки фактического окружения выполните команду:

ansible-navigator exec -- ansible --version

Ожидаемый результат: вывод содержит ansible [core 2.18.3] и путь к Ansible внутри контейнера.

Соответствие командам Ansible Core#

В режиме stdout используйте следующие команды Navigator для тех же файлов проекта:

  • Команда run запускает набор сценариев, как утилита ansible-playbook:

    ansible-navigator run check.yml -i inventory.yml
    
  • Команда doc показывает документацию модуля, как утилита ansible-doc:

    ansible-navigator doc ansible.builtin.debug
    
  • Команда inventory выводит описание инвентаря, как утилита ansible-inventory:

    ansible-navigator inventory -i inventory.yml --list
    
  • Команда config показывает настройки Ansible, как утилита ansible-config:

    ansible-navigator config dump --only-changed
    
  • Другие утилиты запускайте через exec. Например, для проверки версии ansible-galaxy выполните команду:

    ansible-navigator exec -- ansible-galaxy --version
    

Команда doc читает документацию компонентов выбранного образа, а config показывает настройки Ansible внутри контейнера. В вывод config входят также переменные окружения, которые задает средство запуска. Для ansible, ansible-galaxy и ansible-vault используйте exec -- с полной командой. Полный перечень аргументов приведен в справочнике Navigator.

Файлы проекта и подключение по SSH#

Navigator предоставляет контейнеру доступ к каталогу проекта, поэтому относительные пути к набору сценариев, описанию инвентаря и ansible.cfg можно сохранить. Файл за пределами каталога проекта необходимо отдельно предоставить контейнеру и указать путь, доступный внутри EE. То же правило действует для приватных ключей SSH и сертификатов.

Для подключения к подготовленному целевому узлу Linux создайте на рабочей станции отдельный каталог с приватным ключом automation и файлом known_hosts с проверенным ключом сервера. Не размещайте приватный ключ в репозитории проекта. Если ключ защищен паролем, предварительно загрузите его в работающий агент SSH с помощью ssh-add. Navigator предоставляет среде исполнения доступ к агенту через SSH_AUTH_SOCK.

Добавьте в execution-environment файла ansible-navigator.yml настройку подключения каталога только для чтения:

volume-mounts:
  - src: <ssh_directory>
    dest: /runner/ssh
    options: ro

Здесь:

  • <ssh_directory> – абсолютный путь к подготовленному каталогу на рабочей станции.

Фрагмент volume-mounts должен находиться на одном уровне с image и container-engine. Не заменяйте им весь файл настроек.

Пример полного файла remote-inventory.yml:

---
all:
  children:
    linux:
      hosts:
        example:
          ansible_host: <address>
      vars:
        ansible_user: <user>
        ansible_ssh_private_key_file: /runner/ssh/automation
        ansible_ssh_common_args: -o UserKnownHostsFile=/runner/ssh/known_hosts

Здесь:

  • <address> – IP-адрес или FQDN целевого узла, соответствующий записи в known_hosts;

  • <user> – учетная запись целевого узла, для которой настроен публичный ключ SSH.

Для проверки подключения выполните команду:

ansible-navigator exec -- ansible linux -i remote-inventory.yml -m ansible.builtin.ping

Ожидаемый результат: модуль возвращает ping: pong для узла example. Если Ansible не находит файл, проверьте путь внутри контейнера и настройку volume-mounts. Если клиент сообщает об ошибке проверки ключа сервера, сверьте ключ с администратором узла и исправьте запись в known_hosts.