안녕하세요,
대표적인 인프라 설정 자동화 도구인 Ansible을 이용하여 다수의 시스코 Nexus 스위치의 설정을 간편하게 확인하고 변경이 가능합니다.
Ansible 2.9.10 이상의 버전에서는 Cisco NXOS 컬렉션이 지원되며, 상세 내용은 아래 링크에서 확인 가능합니다.
https://docs.ansible.com/ansible/latest/collections/cisco/nxos/index.html
아래는 Ansible을 이용하여 여러 스위치의 인터페이스 상태를 확인하는 예시입니다.
먼저, Ansible이 설치된 장비에서 (필요한 경우) Cisco NXOS 컬렉션을 설치합니다.
ansible-galaxy collection install cisco.nxos
Ansible로 관리할 Nexus 스위치에 대한 접속정보를 Ansible 인벤토리 파일에 작성합니다. 아래는 작성된 파일의 예시입니다. n3k1, n3k2라는 2개의 스위치에 대한 ssh 접속을 위한 정보를 작성하였습니다. 파일명은 hosts로 작성하였습니다.
[nexus]
n3k1 ansible_host=10.10.10.10 ansible_user=admin ansible_password=cisco12345
n3k2 ansible_host=10.10.10.11 ansible_user=admin ansible_password=cisco12345
[nexus:vars]
ansible_connection=ansible.netcommon.network_cli
ansible_network_os=cisco.nxos.nxos
다음은 각 스위치의 인터페이스 정보를 수집하여, CSV형식의 파일로 작성해주는 Ansible Playbook을 작성합니다. Playbook은 각 스위치에서 아래 3개의 작업을 순차적으로 실행합니다. 파일명은 interface.yml로 작성하였습니다.
- NXOS Command를 실행
- 실행 결과에서 특정정보만 추출. 예) Ethernet 타입의 인터페이스만 추출
- 각 스위치의 인터페이스 정보를 하나의 CSV 파일로 저장하기
---
- hosts: nexus
gather_facts: no
connection: ansible.netcommon.network_cli
tasks:
- name: Get interface information in JSON format
cisco.nxos.nxos_command:
commands: show interface brief | json
register: interface
- name: Extract only ethernet attributes from all interfaces
ansible.builtin.set_fact:
extracted: "{{ interface | json_query('stdout[0].TABLE_interface.ROW_interface[?type==`eth`]') }}"
- name: Generate interface information file in CSV format
ansible.builtin.copy:
content: |
host,interface,state,speed,portmode
{% for host in ansible_play_hosts %}
{% for item in extracted %}
{{ host }},{{ item['interface'] }},{{ item['state'] }},{{ item['speed'] }},{{ item['portmode'] }}
{% endfor %}
{% endfor %}
dest: interfaces.csv
마지막으로 작성된 Ansible Playbook을 실행합니다!
ansible-playbook -i hosts interface.yml

실행 결과, 아래와 같은 CSV 파일이 생성된 것을 확인할 수 있습니다.

본 예제의 코드는 여기에서 참고하실 수 있습니다.
감사합니다!