Last Updated : 2014.07.30
이번 포스팅은 Nexus 7000 시리즈에서 Python Script를 실행하기 위한 방법입니다.
Nexus 버전별로 지원되는 부분이 조금씩 다른 듯 싶은데.. (물론 제가 모든 장비를 해 볼 수 있는 환경이 아니어서요... )
Nexus 5000의 경우에는 바로 Python 명령을 사용하여 기존의 만들어진 Python 모듈을 실행할 수 있지만,
Nexus 7000에서는 Python 명령을 치고 '?'를 치면... 아래와 같이 Python Shell로 들어가는 것 밖에 되지 않습니다.
Nexus 7000 |
Nexus 5000 |
N7K# python ? |
N5K# python ? |
그럼 과연 실행은 어떻게 할까요?
바로 source 명령어로 실행을 하게 됩니다.
그런데, 이 때 Source 명령으로 실행하기 위해 'Hello.py'를
print 'Hello ZIGI'
라는 한 줄짜리 코드를 작성해서 실행하려고 보면, 실행이 되지 않습니다.
그럼 source라는 명령을 치고 ? 를 쳐봅니다.
그럼 아래와 같이 출력이 됩니다.
Source 명령 |
NX-OS# source ? (determined by indentation, like in 'show run') |
Hello.py 라는 파일이 없습니다.
이유인 즉,
The bootflash:scripts directory is the default script directory. All scripts must be stored in the bootflash:scripts directory or in a subdirectory of it.
바로 bootflash 안에 scripts 폴더에 넣어야 합니다. 바로 위에 보이는 저 항목들도 모두 Scripts 폴더에 있기 때문이지요.
물론 Scripts 하위 폴더에 저장을 해도 상관은 없습니다. 경로만 지정한다면..
그럼 scripts 폴더에 다음 "hello.py"를 아래와 같이
print 'Hello ZIGI' 를 다시 만들어 실행해봅니다. NX-OS# source hello.py 그럼 위와 같이 다시 또 실행이 되지 않습니다. 그 이유는. You can run a tcl script instead of a Python script by inserting #!/bin/env tclsh before the first line in the example and replacing all occurrences of the Python Python script 제일 상단에 "#!/bin/env python" 을 추가해줘야 합니다.
bootflash://scripts/hello.py #!/bin/env python print "Hello ZIGI"
Error: language not supported
※ 스크립트가 #!로 시작하는 경우, 스크립트를 해석하여 실행할 프로그램 의 경로명이 된다.
자, 이제 다시 실행을 해보겠습니다.
bootflash://scripts/hello.py : 실행 |
NX-OS# source hello.py Hello ZIGI NX-OS# |
위와 같이 Python Script를 실행할 수 있는 걸 볼 수 있습니다.
그럼 기존에 포스팅했던 Script도 실행할 수 있습니다.
bootflash://scripts/hello.py : 실행 |
NX-OS# source ipinfo.py 10.10.10.100 Mac-Address : 0080.9867.123B |
단, 코드를 약간 수정해주셔야 합니다.
왜냐하면, Cisco Nexus에서도 장비 버전별로 지원되는 패키지가 다르기 때문이지요.
Nexus 5000에서 사용한 cisco.CLI() 라는 메서드 대신에, cisco.cli(), cisco.clip(), cisco.clid()가 있습니다.
저는 cisco.cli() 메서드를 이용해서 위와 같이 만들었습니다.
어떻게 변형해야 하는지는 간단한 숙제로 남겨드리겠습니다. ^^