Ansible 네트워크 모듈의 Persistent Connections 사용 방법 및 주의 사항
■ 1. 소개
Ansible 2.3에서 네트워크 장치에 대한 SSH 연결을 사용하는 persistent connections라는 기능이 추가되었습니다. 이렇게 하면 성능 향상을 기대할 수 있습니다.
참고:
이 기사에서는 사용법과주의 사항을 설명합니다.
■ 2. 동작 이미지
Playbook을 실행하여 한 번 설정한 SSH 연결을 계속 사용합니다. 연결은 Playbook 종료 후에도 30초 동안 남아 있습니다.
SSH 연결은 Playbook을 통해 재사용됩니다.
※ (2018/02/18 추기) Ansible 2.5 로, 커넥션은 Playbook 실행 후에 종료하는 사양으로 변경되었습니다. 자세한 내용은 공식 블로그의 Persistent SSH Connection Improvements를 참조하십시오.
■ 3. 사용법
평소와 같이 Playbook에서 connection: local
로 작성하면 persistent connections 기능을 사용할 수 있습니다. 다음은 ios_command
모듈을 사용하는 예입니다.
- hosts: cisco
gather_facts: no
connection: local # Ansible 2.1 や 2.2 と同じ
tasks:
- name: config
ios_command:
commands:
- "show ip route"
provider: "{{ cli }}"
register: result
- name: debug
debug:
var: result
vars:
cli:
host: "{{ inventory_hostname }}"
username: "{{ ansible_user }}"
password: "{{ ansible_password }}"
■ 4. 대상 모듈
모든 네트워크 모듈이 persistent connections 기능을 사용할 수 있는 것은 아닙니다. 내가 시도한 범위에서 ios 기반 모듈은 persistent connections 기능을 사용할 수있었습니다. panos 기반 모듈을 사용할 수 없습니다.
현재 공식 문서의 각 모듈에 대한 설명 페이지에는 이것이 포함되어 있지 않습니다. 아마도, 예를 들면 lib/ansible/plugins/action/
부하의 코드로 이하와 같은 기술이 있는 모듈은 persistent connections 기능에 대응하고 있다고 하는 것이라고 생각합니다.
예: ios 계열 모듈
ios.pyconnection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
견적 원본: lib/ansible/plugins/action/ios.py
또한 Network Debug and Troubleshooting Guide 페이지에 설명되어 있지 않지만이 페이지에 대한 [WIP] Network debug docs #22652이라는 끌어 오기 요청 내에서 다음과 같이 설명됩니다.
Persistent Connection had been enable for the following groups of modules:
- dellos6
- dellos9
- dellos10
- eos
- ios
- iosxr
- junos
- nxos (some)
- vyos
- sros
견적 원본: htps : // 기주 b. 코 m / 군다 ぉ w / 안시 b ぇ / b ぉ b/ rst
■ 5. 주의점
(1) 연결 재사용시 Playbook의 인증 정보가 반영되지 않음
동작 이미지에서 설명한 대로 Playbook을 통해 SSH 연결을 재사용합니다.
따라서 Playbook 실행 완료 후 연결이 남아있는 동안 의도적으로 Playbook 내의 자격 증명을 올바르지 않은 것으로 재기록하여 다시 실행한 경우에도 올바르게 실행할 수 있습니다.
(2) known_hosts에 없는 대상 기기라면 에러가 된다
자세한 내용과 해결 방법은 다음 기사에 요약되어 있습니다.
Ansible 에서 known_hosts 에 없는 네트워크 기기에 접속시의 에러 대처 방법(persistent connections 이용시)
■ 6. 타임 아웃을 기다리지 않고 새로운 커넥션을 이용하는 방법
시간 초과를 기다리지 않고 새 연결을 사용하려면 ~/.ansible/pc
디렉토리 아래에 있는 소켓 파일을 수동으로 삭제합니다. (SSH 상의 조작이 30초간 아무것도 없으면 자동적으로 삭제됩니다.)
그러나 SSH 연결 해제 작업이 수행되지 않으므로 네트워크 장치에 로그인 세션이 남아 있습니다. (IOS이면 show users
에서 확인 가능)
원래 persistent connections 기능을 이용하지 않는 방법은 불분명합니다.
평소와 같이 Playbook에서
connection: local
로 작성하면 persistent connections 기능을 사용할 수 있습니다. 다음은 ios_command
모듈을 사용하는 예입니다.- hosts: cisco
gather_facts: no
connection: local # Ansible 2.1 や 2.2 と同じ
tasks:
- name: config
ios_command:
commands:
- "show ip route"
provider: "{{ cli }}"
register: result
- name: debug
debug:
var: result
vars:
cli:
host: "{{ inventory_hostname }}"
username: "{{ ansible_user }}"
password: "{{ ansible_password }}"
■ 4. 대상 모듈
모든 네트워크 모듈이 persistent connections 기능을 사용할 수 있는 것은 아닙니다. 내가 시도한 범위에서 ios 기반 모듈은 persistent connections 기능을 사용할 수있었습니다. panos 기반 모듈을 사용할 수 없습니다.
현재 공식 문서의 각 모듈에 대한 설명 페이지에는 이것이 포함되어 있지 않습니다. 아마도, 예를 들면 lib/ansible/plugins/action/
부하의 코드로 이하와 같은 기술이 있는 모듈은 persistent connections 기능에 대응하고 있다고 하는 것이라고 생각합니다.
예: ios 계열 모듈
ios.pyconnection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
견적 원본: lib/ansible/plugins/action/ios.py
또한 Network Debug and Troubleshooting Guide 페이지에 설명되어 있지 않지만이 페이지에 대한 [WIP] Network debug docs #22652이라는 끌어 오기 요청 내에서 다음과 같이 설명됩니다.
Persistent Connection had been enable for the following groups of modules:
- dellos6
- dellos9
- dellos10
- eos
- ios
- iosxr
- junos
- nxos (some)
- vyos
- sros
견적 원본: htps : // 기주 b. 코 m / 군다 ぉ w / 안시 b ぇ / b ぉ b/ rst
■ 5. 주의점
(1) 연결 재사용시 Playbook의 인증 정보가 반영되지 않음
동작 이미지에서 설명한 대로 Playbook을 통해 SSH 연결을 재사용합니다.
따라서 Playbook 실행 완료 후 연결이 남아있는 동안 의도적으로 Playbook 내의 자격 증명을 올바르지 않은 것으로 재기록하여 다시 실행한 경우에도 올바르게 실행할 수 있습니다.
(2) known_hosts에 없는 대상 기기라면 에러가 된다
자세한 내용과 해결 방법은 다음 기사에 요약되어 있습니다.
Ansible 에서 known_hosts 에 없는 네트워크 기기에 접속시의 에러 대처 방법(persistent connections 이용시)
■ 6. 타임 아웃을 기다리지 않고 새로운 커넥션을 이용하는 방법
시간 초과를 기다리지 않고 새 연결을 사용하려면 ~/.ansible/pc
디렉토리 아래에 있는 소켓 파일을 수동으로 삭제합니다. (SSH 상의 조작이 30초간 아무것도 없으면 자동적으로 삭제됩니다.)
그러나 SSH 연결 해제 작업이 수행되지 않으므로 네트워크 장치에 로그인 세션이 남아 있습니다. (IOS이면 show users
에서 확인 가능)
원래 persistent connections 기능을 이용하지 않는 방법은 불분명합니다.
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
Persistent Connection had been enable for the following groups of modules:
- dellos6
- dellos9
- dellos10
- eos
- ios
- iosxr
- junos
- nxos (some)
- vyos
- sros
(1) 연결 재사용시 Playbook의 인증 정보가 반영되지 않음
동작 이미지에서 설명한 대로 Playbook을 통해 SSH 연결을 재사용합니다.
따라서 Playbook 실행 완료 후 연결이 남아있는 동안 의도적으로 Playbook 내의 자격 증명을 올바르지 않은 것으로 재기록하여 다시 실행한 경우에도 올바르게 실행할 수 있습니다.
(2) known_hosts에 없는 대상 기기라면 에러가 된다
자세한 내용과 해결 방법은 다음 기사에 요약되어 있습니다.
Ansible 에서 known_hosts 에 없는 네트워크 기기에 접속시의 에러 대처 방법(persistent connections 이용시)
■ 6. 타임 아웃을 기다리지 않고 새로운 커넥션을 이용하는 방법
시간 초과를 기다리지 않고 새 연결을 사용하려면 ~/.ansible/pc
디렉토리 아래에 있는 소켓 파일을 수동으로 삭제합니다. (SSH 상의 조작이 30초간 아무것도 없으면 자동적으로 삭제됩니다.)
그러나 SSH 연결 해제 작업이 수행되지 않으므로 네트워크 장치에 로그인 세션이 남아 있습니다. (IOS이면 show users
에서 확인 가능)
원래 persistent connections 기능을 이용하지 않는 방법은 불분명합니다.
■ 7. 정리
Reference
이 문제에 관하여(Ansible 네트워크 모듈의 Persistent Connections 사용 방법 및 주의 사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/akira6592/items/1cff739ee22e97baad61텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)