Se você tem recebido mensagens de warnings como estas ao executar suas rotinas de automação com Ansible, isso é devido ao excesso de mensagens que o seu terminal está gerando ao iniciar.
As mensagens se assemelham com as exibidas abaixo e são exibidas todas as vezes que você roda alguma playbook do Ansible em determinada máquina:
[WARNING]: sftp transfer mechanism failed on [192.168.58.20]. Use ANSIBLE_DEBUG=1 to see detailed information
[WARNING]: scp transfer mechanism failed on [192.168.58.20]. Use ANSIBLE_DEBUG=1 to see detailed information
As vezes a mensagem tem até mais detalhes como esta a seguir
[WARNING]: Unhandled error in Python interpreter discovery for host webserver: unexpected output
from Python interpreter discovery
[WARNING]: sftp transfer mechanism failed on [192.168.48.15]. Use ANSIBLE_DEBUG=1 to see
detailed information
[WARNING]: scp transfer mechanism failed on [192.168.48.15]. Use ANSIBLE_DEBUG=1 to see
detailed information
[WARNING]: Platform unknown on host webserver is using the discovered Python interpreter at
/usr/bin/python, but future installation of another Python interpreter could change the
meaning of that path. See
https://docs.ansible.com/ansible/2.10/reference_appendices/interpreter_discovery.html for more
information.
Talvez você já até tenha seguido as instruções dada na mensagem, definindo a variável ANSIBLE_DEBUG=1 mas entrou em desespero com a quantidade exagerada de mensagens que o sistema emitiu.
Mas se você olhar direitinho e com mais calma a explicação está lá. Olhe nesta cópia ai embaixo:
[WARNING]: sftp transfer mechanism failed on [192.168.38.16]. Use ANSIBLE_DEBUG=1 to see
detailed information
517022 1666929245.64123:
517022 1666929245.64125: Received message too long 1534996270
Ensure the remote shell produces no output for non-interactive sessions.
517022 1666929245.65218: stderr chunk (state=2):
>>>[~/.bashrc] Iniciado
<<<
517022 1666929245.65287: stdout chunk (state=3):
>>><<<
Eu destaquei em negrito a explicação do problema retornado pelo Ansible, que em uma tradução livre seria algo como:
Certifique-se de que o shell remoto não produz saída para sessões não interativas.
E se olhar um pouco mais abaixo tem a tal da mensagem que está “estragando o brinquedo”. No meu caso é aquela “[~/.bashrc] Iniciado”.
Esta mensagem é um simples comando “echo” dentro do meu .bashrc e que eu coloquei bem de propósito para testar o que ia ocorrer, mas você pode ter colocado algo equivocadamente, ou tem algum comando retornando mensagens durante a sua carga.
Revise os arquivos de inicialização do usuário remoto (.bashrc | .profiles | .bash_profiles | .bash_login) e certifique de que não haja qualquer comando “echo” ou que os comandos que ali estejam não exibam qualquer informação.
Em sistemas Debian/Ubuntu, o mais comum é a existência apenas dos arquivos .profile e .bashrc que na versão original não mostram nada.
O primeiro arquivo (.profile), será carregado sempre que seu sistema entrar em modo de login por SSH, SFTP, SCP etc. Tenha certeza de que este arquivo não mostre nada na tela. Um arquivo simples teria apenas algumas linhas para carregar o “.bashrc” se estivermos iniciando o Bash e talvez alguns novos caminhos na variável PATH.
O segundo arquivo será carregado a cada nova aba do seu terminal, ou qualquer outra sessão que não seja um shell de login, seja em modo interativo (carregando um shell) ou em modo não interativo (quando você executa um comando diretamente sem shell.
Este arquivo em especial é muito usado para personalizar o ambiente do usuário então pode conter muitas funções, comandos, mensagens etc.
Uma forma de assegurar que esta “tralha toda” não vai atrapalhar suas rotinas automatizadas é colocar as seguintes linhas logo no início do seu arquivo .bashrc (antes de qualquer comando que possa emitir alguma mensagem).
# Se não estiver em modo interativo, não carrega o restante do arquivo
case $- in
*i*) ;;
*) return;;
esac
Com isso nunca mais você verá aqueles warning poluindo a saída das suas rotinas.