Поиск по сайту:

Как исправить ошибку Ansible "Общее подключение к x.x.xx закрыто"


В этой короткой статье мы объясним, как решить: "module_stderr": "Общее соединение с x.x.x.x закрыто.\n", "module_stdout": "/bin/sh: /usr/bin/python: Нет такого файла или директории\n", во время выполнения команд Ansible.

На следующем снимке экрана показана ошибка модуля Ansible. Мы столкнулись с этой ошибкой при выполнении команды Ansible для выполнения команд на двух недавно развернутых серверах CentOS 8.

Судя по деталям ошибки, соединение не удалось, потому что оболочка в удаленной системе не смогла найти интерпретатор Python (/usr/bin/python), на что указывает строка: "module_stdout": "/bin/sh: /usr/bin/python: Нет такого файла или каталога\n".

Проверив удаленные хосты, мы обнаружили, что в системах не установлен Python 2.

У них по умолчанию установлен Python 3, а его двоичный файл — /usr/bin/python3.

Согласно документации Ansible, Ansible (2.5 и выше) работает только с Python версии 3 и выше. Кроме того, предполагается, что Ansible автоматически обнаруживает и использует Python 3 на многих платформах, которые поставляются с ним.

Однако, если это не удается, вы можете явно настроить интерпретатор Python 3, установив переменную инвентаризации ansible_python_interpreter на уровне группы или хоста в местоположение интерпретатора Python 3, как описано ниже.

Передача интерпретатора Python в Ansible в командной строке

Чтобы временно исправить вышеуказанную ошибку, вы можете использовать флаг -e для передачи интерпретатора Python 3 в Ansible, как показано на рисунке.

$ ansible prod_servers  -e 'ansible_python_interpreter=/usr/bin/python3' -a "systemctl status firewalld" -u root

Настройка интерпретатора Python для Ansible в инвентаризации

Чтобы исправить ошибку навсегда, установите переменную ansible_python_interpreter inventory в вашем инвентаре /etc/ansible/hosts. Вы можете открыть его для редактирования с помощью текстового редактора v/im или nano, как показано на рисунке.

$ sudo vim /etc/ansible/hosts
OR
vim /etc/ansible/hosts

Добавьте следующую строку к каждому узлу сети или узлам сети в группе:

ansible_python_interpreter=/usr/bin/python3

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

[prod_servers]
192.168.10.1			ansible_python_interpreter=/usr/bin/python3
192.168.10.20			ansible_python_interpreter=/usr/bin/python3.6

В качестве альтернативы можно установить тот же интерпретатор Python для группы узлов сети, как показано на рисунке.

[prod_servers]
192.168.10.1		
192.168.10.20		

[prod_servers:vars]
ansible_python_interpreter=/usr/bin/python3

Настройка интерпретатора Python по умолчанию в конфигурации Ansible

Чтобы установить интерпретатор Python по умолчанию, вы можете установить переменную инвентаризации ansible_python_interpreter в главном конфигурационном файле Ansible /etc/ansible/ansible.cfg.

$ sudo vim /etc/ansible/ansible.cfg

Добавьте следующую строку в раздел [по умолчанию].

ansible_python_interpreter=/usr/bin/python3

Сохраните файл и закройте его.

Теперь попробуйте запустить команду Ansible еще раз:

$ ansible prod_servers -a "systemctl status firewalld" -u root

Дополнительные сведения по этой теме см. в разделе Поддержка Python 3 в официальной документации Ansible.

Статьи по данной тематике: