Ansible 네트워크 모듈의 Persistent Connections 사용 방법 및 주의 사항

■ 1. 소개



Ansible 2.3에서 네트워크 장치에 대한 SSH 연결을 사용하는 persistent connections라는 기능이 추가되었습니다. 이렇게 하면 성능 향상을 기대할 수 있습니다.

참고:
  • 인프라 자동화 도구 "Ansible 2.3" 출시. SSH 연결을 계속 사용하는 Persistent Connection으로 작업 처리 속도가 빨라집니다.
  • NETWORKING FEATURES COMING SOON IN ANSIBLE 2.3

  • 이 기사에서는 사용법과주의 사항을 설명합니다.

    ■ 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.py
    connection = 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 기능을 이용하지 않는 방법은 불분명합니다.
  • 참고: Clearing Out Persistent Connections

  • ■ 7. 정리


  • Ansible 2.3의 일부 네트워크 모듈에서 SSH 연결을 재사용하는 기능이 추가되었습니다.
  • 성능 향상을 기대할 수 있습니다.
  • Playbook을 넘어도 재사용되는 점, known_hosts에 없는 상대라면 에러가 되는 점에 주의.
  • 좋은 웹페이지 즐겨찾기