Ansible Playbook дает сбой только на определенном сервере

Ниже подключение ansible-playbook отлично работает для всех моих серверов, кроме dest_svr. Команда ниже не работает.

ansible-playbook -vvvv /opt/test/Auto/site.yml  -i /opt/test/Auto/hosts.txt -e "source_host=dest_svr execmd=echo source_user=user2"

(0, '', 'OpenSSH_7.7p1 (CentrifyDC build 5.5.1-395) , OpenSSL 1.0.2o-fips 27 марта 2018 г.\r\ndebug1: Чтение данных конфигурации /home/user1/.ssh/config\r\ndebug1 : Чтение данных конфигурации /etc/centrifydc/ssh/ssh_config\r\ndebug1: /etc/centrifydc/ssh/ssh_config строка 3: Применение параметров для *\r\ndebug1: auto-mux: Попытка существующего мастера\r\ndebug2: fd 3 настройка O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: основная версия 4\r\ndebug3: mux_client_forwards: перенаправления запросов: 0 локальные, 0 удаленные : done pid = 57768\r\ndebug3: mux_client_request_session: запрос сеанса отправлен\r\ndebug1: mux_client_request_session: идентификатор мастер-сеанса: 2\r\ndebug3: mux_client_read_packet: ошибка чтения заголовка: сломанный канал\r\ndebug2: получен статус выхода от мастера 0\r\nОбщее соединение с dest_svr закрыто.\r\n') fatal: [dest_svr]: FAILED! => { "changed": false, "module_stderr": "OpenSSH_7.7p1 (CentrifyDC build 5.5.1-395) , OpenSSL 1.0.2o-fips 27 марта 2018 г.\r\ndebug1: Чтение данных конфигурации /home/user1/. ssh/config\r\ndebug1: Чтение данных конфигурации master\r\ndebug2: настройка fd 3 O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: основная версия 4\r\ndebug3: mux_client_forwards: переадресация запросов: 0 локальная, 0 удаленная\r\ndebug3: mux_client_request_session: ввод\r\ndebug3: mux_client_request_alive: ввод\r\ndebug3: mux_client_request_alive: done pid = 57768\r\ndebug3: mux_client_request_session: запрос сеанса отправлен\r\ndebug1: mux_client_request_session: идентификатор основного сеанса: 2\r\ndebug3: mux_client_read_packet: ошибка чтения заголовка: сломанный канал\r\ ndebug2: получен статус выхода от мастера 2\r\nОбщее соединение с dest_svr закрыто.\r\n", "module_stdout": "/home/user2/.ansible/tmp/ansible-tmp-1549081965.65-147775141838271/AnsiballZ_setup.py: строка 3: _ANSIBALLZ_WRAPPER: команда не найдена\r\n/home/user2/.ansible/tmp/ansible -tmp-1549081965.65-147775141838271/AnsiballZ_setup.py: строка 4: синтаксическая ошибка рядом с неожиданным токеном ('\r\n/home/user2/.ansible/tmp/ansible-tmp-1549081965.65-147775141838271/AnsiballZ_setup.py: line 4:def _ansiballz_main():'\r\n", "msg": "MODULE FAILURE\nТочную ошибку см. в stdout/stderr", " rc": 2 } чтобы повторить попытку, используйте: --limit @/opt/test/Auto/site.retry

ОБЗОР ИГРЫ ******************************************************* ******************************************************* ******************************************************* ******************************************************* *********** dest_svr : ok=0 изменено=0 недостижимо=0 не удалось=1

Сведения об исходном сервере Ansible:

[user1@source_svr: Auto]$ uname -a
Linux source_svr 3.10.0-957.el7.x86_64 #1 SMP Thu Oct 4 20:48:51 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

[user1@source_svr: Auto]$ ansible --version
ansible 2.7.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/user1/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /bin/ansible
  python version = 2.7.5 (default, Sep 12 2018, 05:31:16) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

Детали файла хоста Ansible:

cat /opt/test/Auto/hosts.txt
[dest_svr]
dest_svr ansible_ssh_common_args="-t -o UserKnownHostsFile=/dev/null  -o StrictHostKeyChecking=no -o ControlPersist=30m" ansible_shell_executable=/bin/bash ansible_shell_type=sh ANSIBLE_HOST_KEY_CHECKING=false ansible_python_interpreter= ansible_ssh_private_key_file=/opt/test/ssh_key/id_rsa USER_RUN=user2

А теперь подробности о целевом сервере:

user2@dest_svr:~$ uname -a
SunOS dest_svr 5.11 11.3 sun4v sparc sun4v
user2@dest_svr:~$ python --version                                                                                                                                                                                    
Python 2.7.14

Примечание. Я хочу внести изменения только в свой плейбук и не хочу ничего менять в файле ansible.cfg, так как другие плейбуки не должны быть затронуты.


person mohtashim    schedule 03.02.2019    source источник
comment
Черт, я только что заметил dest_svr ansible_python_interpreter= ansible_... в вашем файле инвентаря, так что вы можете проигнорировать мой ответ и либо удалить эту строку, либо изменить эту строку, чтобы она была путем к вашему питону; также зачем вам класть это в свой инвентарь?!   -  person mdaniel    schedule 03.02.2019


Ответы (1)


Насколько я могу судить, это вызвано этим:

line 3: _ANSIBALLZ_WRAPPER: command not found

это эта строка , но небольшое копание, похоже, подразумевает, что строки шебанга SunOS не допускают указания на исполняемый файл, который сам по себе также является шебангом: Строка Python3 shebang не работает должным образом

Исправление, насколько я могу судить, будет состоять в том, чтобы установить -e ansible_python_interpreter=/the/path/to/the/real/python или я видел некоторые люди пытаются -e 'ansible_python_interpreter="/bin/env python"' (я изменил путь на env, так как очевидно SunOS не имеет env в /usr/bin/env но у меня нет экземпляра SunOS для проверки этой теории, так что будьте осторожны)

person mdaniel    schedule 03.02.2019
comment
В Solaris ls -Al /bin/sh возвращает /bin/sh -> amd64/ksh93. Таким образом, ваша оболочка по умолчанию — это не Bash на Solaris. Oracle также распространяет устаревшее программное обеспечение, а затем взимает плату за современную версию программного обеспечения. - person jww; 04.02.2019
comment
Ну, в этом конкретном случае шебанг имеет дело не с оболочкой, а с интерпретатором python (поэтому вы получаете команду _ANSIBALLZ_WRAPPER not found, потому что она пытается запустить python, как если бы это была shell ), но из того, что я слышал, я предполагаю, что ls -Al /usr/bin/python также будет символической ссылкой, поэтому я сказал указать ее на фактический python или на двоичный файл env, чтобы обойти все обсуждение) - person mdaniel; 04.02.2019
comment
или, как я уже говорил, не делайте ничего заведомо нелепого, например, не задавайте ansible_python_interpreter пустое значение в файле инвентаризации. - person mdaniel; 04.02.2019
comment
Большой палец вверх за использование явно нелепой фразы в комментарии! - person nwinkler; 04.02.2019