본문 바로가기

프로그래밍/Python

Programmability for Networker : Part 8

 

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 ?
  <CR>  

N5K# python ?
  <CR>       
  bootflash:  The file to run

 

그럼 과연 실행은 어떻게 할까요?

바로 source 명령어로 실행을 하게 됩니다.

그런데, 이 때 Source 명령으로 실행하기 위해 'Hello.py'를

 

print 'Hello ZIGI'

 

라는 한 줄짜리 코드를 작성해서 실행하려고 보면, 실행이 되지 않습니다.

그럼 source라는 명령을 치고 ? 를 쳐봅니다.

그럼 아래와 같이 출력이 됩니다.

 

 

Source 명령

NX-OS# source ?
  background (no abbrev)         Run the script in the background, see also 'show background' and 'kill background'
  build_cmd_script.py               No help
  build_cmd_script_from_file.py  No help
  cgrep                                Grep for something in stdin (-> use behind pipe) and display its 'context' \

                                         (determined by indentation, like in 'show run')
  check_sys_st_op_consist.py     No help
  cmn_file_util.py                    No help
  copy-sys (no abbrev)            Copy the system provided example scripts of /sys to bootflash:scripts
  def_cmd_script.tmp               No help
  elame.tcl                            No help
  gen_sys_st_op.py                  No help
  logw.py                              No help
  poap.py                             Loads system/kickstart images and config file for POAP
  show-version                      A succinct 'show version' -- mixes in stuff from 'show version build-info / internal build'
  sys/                                  Directory
  systemcheck.py                   No help
  systemcheck.pyc                 No help
  update_cmd_script.py           No help

 

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
Error: language not supported

 

그럼 위와 같이 다시 또 실행이 되지 않습니다.

 

그 이유는.

 

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"

※ 스크립트가 #!로 시작하는 경우, 스크립트를 해석하여 실행할 프로그램 의 경로명이 된다.

 

자, 이제 다시 실행을 해보겠습니다.

 

 

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
================================================
             IP Info : NetworkZIGI             
================================================
IP-Address      : 10.10.10.100

Mac-Address   : 0080.9867.123B
Vlan              : 11
Interface       : Ethernet 1/1
Description     : ZIGI-WebServer

 

단, 코드를 약간 수정해주셔야 합니다.

왜냐하면, Cisco Nexus에서도 장비 버전별로 지원되는 패키지가 다르기 때문이지요.

Nexus 5000에서 사용한 cisco.CLI() 라는 메서드 대신에, cisco.cli(), cisco.clip(), cisco.clid()가 있습니다.

 

저는 cisco.cli() 메서드를 이용해서 위와 같이 만들었습니다.

어떻게 변형해야 하는지는 간단한 숙제로 남겨드리겠습니다. ^^