Junos 디바이스 관리 시 Ansible 연결 오류 문제 해결
다음 섹션에서는 Ansible을 사용하여 Junos 디바이스를 관리할 때 발생할 수 있는 연결 오류에 대해 간략하게 설명합니다. 이 섹션에서는 각 오류에 대한 잠재적인 원인과 해결 방법도 제시합니다.
실패 또는 잘못된 연결 오류 문제 해결
문제
설명
Junos 디바이스에서 또는 모듈을 실행하는 juniper.device
동안 Ansible 제어 노드는 SSH 연결 실패 또는 Juniper.junos
알 수 없는 명령에 대한 오류를 생성합니다. 예를 들어:
UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ", "unreachable": true}
또는
unknown command: /bin/sh\r\n
원인
이러한 오류는 모듈이 Ansible 제어 노드에서 로컬로 실행되지 않을 때 발생할 수 있습니다.
일반적으로 Ansible은 관리형 노드에 Python이 필요하며, Ansible 제어 노드는 모듈을 노드로 전송하여 실행된 후 제거됩니다. 주니퍼 네트웍스 모듈은 Junos PyEZ 및 NETCONF를 통한 Junos XML API를 사용하여 디바이스와 상호 작용하기 때문에 Junos 디바이스에서 Python을 필요로 하지 않습니다. 따라서 Junos 디바이스에서 작업을 수행하려면 Python이 설치된 Ansible 제어 노드에서 모듈을 로컬로 실행해야 합니다. Ansible이 Junos 디바이스에서 직접 모듈을 실행하려고 하면 오류가 발생합니다.
솔루션
Ansible 제어 노드가 또는 Juniper.junos
모듈을 로컬로 실행 juniper.device
하도록 지시하려면 Ansible 플레이북에 포함 connection: local
하거나 개별 모듈을 실행할 때 명령줄 인수를 --connection local
포함합니다. 예를 들어:
--- - name: Get Device Facts hosts: junos connection: local gather_facts: no
알 수 없는 호스트 오류 문제 해결
문제
설명
또는 모듈을 실행하는 juniper.device
동안 Ansible 제어 노드에서 오류가 발생합니다ConnectUnknownHostError
.Juniper.junos
"msg": "Unable to make a PyEZ connection: ConnectUnknownHostError(dc1a.example.net)"
원인
호스트가 Ansible 인벤토리 파일에 정의되어 있지 않거나 Ansible 제어 노드가 호스트 이름을 확인할 수 없습니다.
Ansible 모듈을 직접 또는 플레이북에서 실행할 때 모듈 인수 또는 플레이북에서 참조되는 모든 호스트는 Ansible 인벤토리 파일에 정의되어야 합니다. 인벤토리 파일의 기본 위치는 / etc/ansible/hosts입니다. 인벤토리 파일이 호스트 이름을 참조하는 경우 Ansible 제어 노드는 호스트 이름을 확인할 수 있어야 합니다.
솔루션
누락된 호스트를 포함하도록 Ansible 인벤토리 파일을 업데이트하고 DNS 확인이 올바르게 작동하는지 확인합니다.
Ansible 인벤토리 파일에 대한 자세한 내용은 Junos 디바이스 관리 시 Ansible 인벤토리 파일 이해 와 https://www.ansible.com/ 의 공식 Ansible 설명서를 참조하십시오.
거부된 연결 오류 문제 해결
문제
설명
또는 모듈을 실행하는 juniper.device
동안 Ansible 제어 노드에서 오류가 발생합니다ConnectRefusedError
.Juniper.junos
예를 들어:
"msg": "Unable to make a PyEZ connection: ConnectRefusedError(dc1a.example.net)"
원인
거부된 연결 오류의 가장 큰 원인은 Junos 디바이스에서 SSH를 통한 NETCONF가 활성화되지 않았기 때문입니다.
NETCONF가 활성화되었는지 여부를 신속하게 테스트하려면 Ansible 모듈을 실행하는 사용자 계정이 디바이스와의 NETCONF 세션을 성공적으로 시작할 수 있는지 확인합니다.
[user@ansible-cn]$ ssh user@dc1a.example.net -p 830 -s netconf
사용자가 기본 NETCONF 포트(830) 또는 디바이스의 NETCONF를 위해 특별히 구성된 포트에서 디바이스와 NETCONF 세션을 성공적으로 설정할 수 있는 경우 NETCONF가 활성화됩니다. 그렇지 않으면 디바이스에서 SSH를 통한 NETCONF를 활성화해야 합니다.
솔루션
Junos 디바이스에서 NETCONF-over-SSH 서비스를 활성화합니다.
[edit] user@host# set system services netconf ssh user@host# commit