Last Updated 2014.08.26
Python for Networker의 이번 포스팅은 Cisco dCloud 의 Nexus 9000 : NX-OS Programmability v1에 있는 Python Script 예제 중의 하나를 다뤄봅니다.
이 Python Script는 Nexus에서 현재 원하는 정보를 Text 형태의 첨부파일로 만들어서, 메일로 전송을 하는 예제 Script 입니다.
다음과 같이 bootflash://script 디렉토리에서 예제 Script를 실행합니다.
dcloud-n9k# python ./n9k_serviceability.py 수신메일주소 |
Script를 실행하게 되면, 어떤 종류의 정보를 수집할 것인지에 대해서 물어보게 됩니다.
여기서 원하는 정보의 종류를 선택하면, Nexus에서 해당 정보를 수집하여, 수신하고자 하는 Email 주소로 발송을 하게 됩니다.
실제 메일이 제대로 발송이 되었는지 확인을 해보면, 아래와 같이 제 메일 계정으로 메일이 수신되었음을 확인할 수 있습니다.
Cisco dCloud의 Nexus 9000에서의 예제 Script이기는 하지만,
어차피 기존 포스팅에서도 다뤘듯이 Nexus에서만 가능한 부분은 아닙니다.
그럼 유사한 기능을 기존 포스팅에서 언급했던, Arista vEOS에서 유사한 Script로 만들어서 테스트 해보겠습니다.
Arista VM을 실행하여, vEOS에서 mail.py 이라는 예제 Script를 만들었습니다.
그리고 아래와 같이 해당 Script를 실행해봅니다.
이 예제에서는 특정 정보를 가공해서 메일을 발송할 수 있다는 점에 대해서 보여주는 것이기 때문에
복잡하게 구현하지는 않았고, 단순하게 현재 vEOS의 version 정보를 확인하여, 첨부파일로 전송을 하는 역할을 합니다.
위와 같이 해당 Script를 실행하게 되면, vEOS의 version 정보를 Text 형태의 첨부 파일로 가공을 하게 되고, 메일을 보내게 됩니다.
(참고로 Arista VM에서 bash shell mode에서 python script를 실행 중인 모습입니다.)
자 이제, 메일이 잘 도착했는지 메일함을 확인해보겠습니다.
(위의 예제에서는 별도로 뒤에 수신자 email 주소를 쓰지 않았지만 Nexus에서와 마찬가지로 실행 시 수신하고자 하는 email주소를 쓰게 되면, 해당 email로 전송도 물론 가능합니다.)
메일함을 보면, 정상적으로 메일이 잘 수신된 것을 확인할 수 있습니다.
첨부파일을 열어보게 되면, show version으로 확인된 정보를 볼 수 있습니다.
이번 포스팅에서는 별도의 기술적인 내용은 배제하였습니다.
다만, Python을 이용하여 어떤 것들이 가능한지에 대해서 Cisco dCloud에서의 보여주는 예제를 확인해보고
또한 그러한 예제들이 단순히 특정 벤더에서만 실행되는 것이 아니라 Python을 지원하는 어떤 장비에서도 유연하게 사용할 수 있다는 것을
확인해보는 것이 이번 포스팅에서 말하고자 하는 부분입니다.
물론 Script 상에 들어가는 각 벤더에서 제공하는 모듈들은 유사한 기능을 하는 각 벤더의 모듈을 가져다 쓰기는 해야겠지만,
기본적인 프로그램 상의 로직이나 코드는 모두 재활용이 가능합니다.
또한 기존에 있는 코드에서 추가적인 기능들을 얼마든지 필요에 의해서 추가도 가능하게 될 것입니다.
그럼 다음 포스팅에서 다시 찾아뵙겠습니다.
Nexus 5000에서도 테스팅 추가 완료하였습니다.
아래와 같이 Nexus 5000에서 mail.py 이라는 Script를 만들었습니다.
기본적인 코드는 위에서 사용했던 코드와 거의 유사하며, 실제 장비에 Cli 모드의 명령하는 부분과 결과값을 가공하는 부분만
다르게 되어 있습니다. Script의 내용은 기존과 마찬가지로 show version으로 나오는 결과값을 메일로 발송하도록 되어 있습니다.
위와 같이 정상적으로 코드가 실행된 것을 확인할 수 있습니다.
Nexus에서 메일을 발송한 이후에, 메일함을 살펴보면
정상적으로 메일과 첨부파일이 도착한 것을 볼 수 있습니다.
이것으로 Nexus 9000 / 5000 , Arista vEOS에서 모두 메일 발송하는 Python Script를 살펴보았습니다.
전체적으로 변경된 부분은 단지 장비에 대한 상태를 확인하기 위한 명령어를 입력하고, 해당 결과값을 가공하는 부분만 다르고
나머지 부분은 모두 동일하다고 보시면 됩니다.
앞으로는 정말 코드를 처음부터 짤 수는 없더라고, 기존 코드를 이해하고 수정할 수 있을정도로 알아두어야만(?) 할 것 같습니다.