Solução de problemas de conexão do Ansible ao gerenciar dispositivos Junos
As seções a seguir descrevem os erros de conexão que você pode encontrar ao usar o Ansible para gerenciar dispositivos Junos. Essas seções também apresentam possíveis causas e soluções para cada erro.
Solucionar problemas de falha de conexão, comando desconhecido ou interpretador não encontrado
Problema
Descrição
Quando você executa um juniper.device módulo ou um junipernetworks.junos módulo da juniper.device coleção, o nó de controle do Ansible gera um erro sobre uma conexão com falha, um comando desconhecido ou não ser capaz de localizar o interpretador Python. Por exemplo:
UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ", "unreachable": true}
ou
unknown command: /bin/sh\r\n
ou
[ERROR]: Task failed: Action failed: The module interpreter '/home/user/projects/Ansible/.venv/bin/python' was not found.
Causa
Esses erros podem surgir quando o nó de controle do Ansible não executa o módulo localmente.
Normalmente, o Ansible requer Python no nó gerenciado. O nó de controle do Ansible envia o módulo para o nó, onde ele é executado e removido. Os juniper.device módulos não exigem Python no dispositivo gerenciado porque usam a API XML do Junos e o NETCONF para fazer interface com o dispositivo. Portanto, para realizar operações em dispositivos Junos, você deve executar os módulos localmente no nó de controle do Ansible onde o Python está instalado. Se o Ansible tentar executar um módulo diretamente no dispositivo Junos, ele gera um erro.
Solução
Para direcionar o nó de controle do Ansible para executar os módulos localmente, você deve definir os parâmetros de conexão apropriados para o conjunto de módulos. Você pode definir os parâmetros em locais diferentes, por exemplo, em seu arquivo de inventário, em seus arquivos de variáveis de host ou grupo, em seu manual ou como argumentos de linha de comando. O tipo de conexão varia de acordo com o conjunto de módulos escolhido e, em alguns casos, o módulo individual. Para obter mais informações, consulte:
Solucionar problemas de erros de host desconhecidos
Problema
Descrição
Quando você executa um juniper.device módulo ou um junipernetworks.junos módulo da juniper.device coleção, o nó de controle do Ansible gera um erro sobre um host, padrão de host ou endereço desconhecido.
"msg": "Unable to make a PyEZ connection: ConnectUnknownHostError(dc1a.example.net)"
ou
[WARNING]: Could not match supplied host pattern, ignoring: name
ou
"msg": "[Errno -5] No address associated with hostname"
Causa
Esses erros ocorrem quando o arquivo de inventário do Ansible não define o host ou o nó de controle do Ansible não consegue resolver o nome do host.
Quando você executa um módulo do Ansible diretamente ou de um playbook, qualquer host referenciado nos argumentos do módulo ou no playbook deve ser definido no arquivo de inventário do Ansible. O local padrão para o arquivo de inventário é /etc/ansible/hosts. O nó de controle do Ansible deve ser capaz de resolver os nomes de host de todos os hosts que você definir no arquivo de inventário.
Solução
Atualize o arquivo de inventário do Ansible para incluir o host ausente e verifique se a resolução de DNS está funcionando corretamente.
Para obter informações sobre o arquivo de inventário do Ansible, consulte Noções básicas sobre o arquivo de inventário do Ansible ao gerenciar dispositivos Junos , bem como a documentação oficial do Ansible em https://www.ansible.com/.
Solucionar problemas de erros de conexão recusada e erros de soquete
Problema
Descrição
Quando você executa um juniper.device módulo ou um junipernetworks.junos módulo da juniper.device coleção, o nó de controle do Ansible gera um ConnectRefusedError erro ou um erro de soquete. Por exemplo:
"msg": "Unable to make a PyEZ connection: ConnectRefusedError(dc1a.example.net)"
ou
"msg": "Could not open socket to 198.51.100.101:830"
Causa
A causa mais provável para esses erros é que o NETCONF sobre SSH não está habilitado no dispositivo Junos.
Para testar rapidamente se o NETCONF está habilitado, verifique se a conta de usuário que executa o módulo Ansible pode iniciar com êxito uma sessão NETCONF com o dispositivo.
user@ansible-cn:~$ ssh user@dc1a.example.net -p 830 -s netconf
Se o usuário puder estabelecer com êxito uma sessão NETCONF com o dispositivo na porta NETCONF padrão (830) ou em uma porta configurada especificamente para NETCONF em seu dispositivo, o NETCONF será habilitado. Caso contrário, você deve habilitar o NETCONF sobre SSH no dispositivo.
Solução
Habilite o serviço NETCONF-over-SSH no dispositivo Junos.
[edit] user@host# set system services netconf ssh user@host# commit
Solucionar problemas de erros do sistema operacional de rede do host
Problema
Descrição
Quando você executa um junipernetworks.junos módulo da juniper.device coleção (juniper.device.junos_* module), o nó de controle do Ansible gera um host network os erro. Por exemplo:
[ERROR]: Task failed: Unable to automatically determine host network os. Please manually configure ansible_network_os value for this host
Causa
Os juniper.device.junos_* módulos exigem que você especifique o sistema operacional de rede Ansible como juniper.device.junos para hosts de destino que executam o Junos OS ou hosts de destino que executam o Junos OS Evolved.
Solução
Defina a ansible_network_os variável no local apropriado para seu ambiente e na sintaxe necessária para o formato do arquivo. Por exemplo, você pode definir a variável em seu arquivo de inventário ou em seus arquivos de variáveis de host ou grupo.
O arquivo de inventário formatado em INI de exemplo a seguir define o sistema operacional de rede Ansible como juniper.device.junos para os hosts no grupo de junos inventário:
[junos] router1.example.com router2.example.com router3.example.com [junos:vars] ansible_network_os=juniper.device.junos ansible_connection=ansible.netcommon.netconf