Automation for Networker로 다시 또, 오랜만에 포스팅을 하게 됩니다.
이번 포스팅은 Automation Tool인 Ansible을 활용하여 Cisco 장비를 제어하는 예제입니다.
기본 Ansible을 활용하여 Cisco 장비를 제어하는 것은 NX-API를 사용하는 데, NX-API는 제한적으로만 장비에서 지원되기 때문에
아직까지는 사용하는 데 있어서 제한이 있습니다.
이를 위해 SNMP를 사용하여 장비를 제어할 수 있도록 해주는 라이브러리를 사용하여 Ansbile로 시스코 장비를 다뤄봅니다.
원래 지난 Automation for Networker 5에 이어서 Arista 장비에 대한 예제를 다루려고 했으나,
네트워크 타임즈에 2월호부터 기고 중인 Programmability for Networker의 4월호(드디어 마지막. ㅠㅠ)의 내용들로 이루어지기
때문에 Arista 장비의 포스팅은 4월달에 포스팅 예정입니다. ^^;
Automation Tool인 Ansible을 활용한 Cisco IOS 장비 제어
Cisco 장비의 경우에는 Nexus에서 NX-API를 활용하여 Ansible을 통한 장비 제어가 가능하다.
하지만 NX-API를 사용할 수 없는 일반 IOS에서도 SNMP를 사용하여 Cisco 장비를 제어할 수 있도록 제공해주는 라이브러리가 있다.
Git-hub에서 아래의 링크에서 라이브러리를 다운 받으면, 시스코 장비에서 SNMP 설정만으로 Ansible을 통한 제어가 가능하다.
물론 현재는 Alpha Version의 코드이기 때문에 제약사항과 정상적으로 구동이 되지 않는 점이 있기는 하다.
하지만 추가적으로 개선이 될 부분이기도 하며, 또한 코드를 직접 개선하여 사용도 가능하다.
※ 라이브러리 다운받기 https://github.com/networklore/ansible-cisco-snmp
그럼 ansible cisco snmp 라이브러리로 실제 시스코 장비를 제어해보자.
우선 시스코 장비에 Ansible을 사용해서 제어할 SNMP의 설정이 필요로 하다.
Cisco 장비 설정 (SNMP v2 기준) |
snmp-server community zigisnmp RW |
단, 시스코 장비에는 기존에 설정하던, 단 한 줄의 snmp 설정만 해주면 된다.
이제 Ansible 서버에서 Playbook을 만들어 보자.
여기에서는 2개의 에제를 다룰 것이며, 각 에제는 별도의 라이브러리를 사용하여 시스코 장비를 제어하게 된다.
예제 1 : cisco_snmp_interfae 라이브러리 사용하기
첫 번째 예제는 cisco_snmp_interface를 활용한 Playbook이다.
snmp v2를 사용하기 때문에, 버전은 2c로 지정을 하고 community 값은 시스코 장비에서 설정한 값을 지정한다.
그리고 interface를 제어하기 위하여 어떤 Interface를 제어할지 인터페이스를 지정한다.
원하는 description을 넣을 수 있으며, Interface 상태를 Admin Up/Down을 할 수도 있다.
그럼 이제 해당 Playbook을 Ansible 서버에서 실행해보자..
아래와 같이 Playbook을 실행하면
changed=1로 표기되면서 정상적으로 task가 수행되어 변경되었다는 것을 알 수 있다.
이제 실제 장비에서 원하는 설정이 되었는지 확인한다.
아래의 sh int desc은 Ansible에서 Playbook을 실행하기 전과 후의 상태이다.
G0/2의 상태가 up/up 이고, description이 없었다가
이후에 G0/2의 상태가 admin down / down으로 변경되고 Interface의 description가 생긴 것을 볼 수 있다.
실제 장비의 로그에서도 snmp에 의해서 설정이 변경된 걸 알 수 있다. (10.1.1.100은 Ansible 서버이다)
예제 2 : cisco_snmp_vlan 라이브러리 사용하기
첫 번째 예제가 Interface 라이브러리를 사용한 것에 비해, 두 번째는 vlan 라이브러리를 사용해서 제어해 본다.
Playbook 파일을 보면, 나머지는 거의 동일하지만, vlan 관련된 부분만 다르다.
여기서 다루는 2번째 예제는 2개의 task를 수행하게 된다.
첫 번째는 Task는 VLAN을 생성한다.
생성하고자 하는 vlan_id와 vlan_name을 지정한다. 그리고 상태(state)에 Present로 지정하게 되면 기존에 있으면
원하는 설정을 변경할 수 있고, 기존에 없던 vlan이면 새로운 vlan을 생성하게 된다.
두 번째 Task는 VLAN을 삭제한다.
삭제하고자 하는 vlan_id를 지정하고 상태(state)를 absent로 지정하면 해당 vlan_id는 삭제가 된다.
마찬가지로 Playbook을 실행하면 각각 2개의 Task가 정상적으로 changed 되었다고 표기된 것을 볼 수 있다.
아래는 장비에서 해당 결과를 확인하는 화면이다.
먼저 Playbook을 실행하기 전에 5번 VLAN이 있는 것을 확인할 수 있다.
Playbook을 실행하게 되면, 5번 VLAN 삭제되고, VLAN 20번이 ZIGI_VLAN이라는 이름으로 생성되어 있다.