프로그래밍/Python2014.07.28 12:59

 

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() 메서드를 이용해서 위와 같이 만들었습니다.

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

 

 

  

Posted by 네떡지기

Last Updated : 2014.07.02

 


 

Network 장비에서 Python을 활용한 부분에 간단히 정리를 해보려고 합니다.

우선 처음 진행 부분은 현재 실제 테스트가 가능한 Nexus 7000 / 5000으로 먼저 간단히 시작합니다.

물론 완전 초기 부분이라서, 아마도 잘못된 부분 등에 대해서는 업데이트가 지속적으로 필요할 것 같습니다.

그리고 Nexus에서는 9000 / 3000 시리즈 기반으

Python 활용도가 더 높은 것으로 알고 있지만..(잘못 알고 있을수도? ^^)

현재 테스트가 가능한 부분이 Nexus 7000과 5000이라 이것으로 시작하며, 추후에 다른 테스트 장비(VM포함)로..

추가적인 포스팅을 진행할까합니다.

 

 


 

Cisco Nexus 7000  Python 특징

 Nexus 7K에서는 Python 2.7.2Interactive / noninteractive(script)에 대한 모드를 모두 지원합니다.

 NX-OS 6.2(8) 부터는 JavaScript Object Notation(JSON)logging module을 지원합니다.

 

 

Cisco Nexus 5000  Python 특징

 Nexus 5K에서는 Python 2.7.2모든 Feature를 사용할 수 있다.

 • Python Script를 이용하여 다음과 같은 기능을 구현할 수 있다.

       -  Swtich Bootup 시에 Configuration을 확인하는 Script 실행

       - Configuration 백업

       - Monitoring Buffer 이용량에 따라서, 사전에 혼잡 관리가 가능

       - 일정 시간 간격으로 작업을 수행

       - 프로그래밍 방식으로 SwitchCLI 명령을 수행하고 다양한 업무에 활용 가능

 

 

Third Party Pure Python Packages

 •Nexus에서 Third Party Python Package를 다음과 같은 방법으로 설치하고 사용할 수 있다.  

    ) ZIGI.tgz 를 서버로부터 복사하여 설치하는 경우.

     Step 1. 다음의 명령으로 tar fileSecure Copy 한다.

                      copy scp://user@server/path/to/ZIGI.tgz bootflash:ZIGI.tgz vrf management

     Step 2. Packge의 압축을 해제

                      tar extract bootflash:ZIGI.tgz

     Step 3. 압축이 풀린 Packgebootflash로 옮긴다

                      move bootflash:ZIGI/* bootflash:          

     Step 4. PackgeInstall 한다.

                      python setup.py install

     Step 5. bootflash에 복사된 파일을 제거한다.

     Step 6. Python Mode에서 해당 Packge를 사용한다.

                      NX-OS# python

                      >>> import ZIGI

 

 

 

Python Mode 접근

 

NX-OS# python

Python 2.7.2 (default, Nov 27 2012, 17:50:33)

[GCC 4.3.2] on linux2

Type "help", "copyright", "credits" or "license" for more  information.

Loaded cisco NxOS lib!

 >>> exit()

NX-OS#

 

 

 

 

Python 모드에서 Cli  명령 

 

 API

내  용 

1.  NX-OS# >>> cli("명령어")
    string = cli(“
명령어”)

 Python Mode에서 NexusCLI 명령어를 실행하고 Raw 결과를 리턴받게.

‘;’ 이용하여 다수의 명령어를 한 줄에 실행 가능

제어/특수 문자도 함께 출력. 이는 ‘\n’과 값도 함께 출력된다는 것을 의미하며,

    이는 가독성을 떨어지므로, clip() 명령을 사용하는 것이 보다 가독성에 좋다

2. NX-OS# >>> clid(“명령어”)

    dictionary= cli(“명령어”)

XML을 지원하는 CLI 명령어로 결과를 Dictionary 형식으로 리턴 받게 됨.

3. NX-OS#>>> Clip(“명령어”)

CLI 명령어에 대한 결과를 표준 Output으로 출력을 하며, 별도의 리턴 값은 없다.

 clip(“명령어”) r = cli(“명령어”) , print r  은 동일한 역할을 한다.

※ Nexus 7000 기준이며, Nexus 5000에서는 cli만 지원이 됩니다.

 

 Python Mode / CLI Mode 관련

 •Python Mode에서 Cli 명령을 사용하여 Switch Mode를 변경하는 경우에, Python Mode를 벗어나게 되면 변경된 Switch
   
Mode  유지되지는 않고, Python Mode 들어올 때의 기존 Mode로 가게 된다.

 •Python Mode에서 선언된 Data는 해당 Python Shell에서만 유효하며, Shell을 나간 후에 다시 들어오게 되면 사용 할 수 없게 된다. 

 

EX-1

EX - 2

NX-OS# python

NX-OS# >>> cli("conf t")

NX-OS(config)# >>> cli(“int e1/1”)

NX-OS(config-if)# >>> exit

NX-OS# 

NX-OS# python

NX-OS# >>> ZIGI = “JaeSung

NX-OS# >>> print ZIGI

JaeSung

NX-OS# >>> exit

NX-OS# python

NX-OS>>> pint ZIGI

Error:variable ‘ZIGI’ undefined

 

 

Posted by 네떡지기

Last Updated : 2018.01.04 : N7000 시리즈 SPAN Scalability

Last Updated : 2015.01.05 : SPAN Session 설정 수량


 

 

 매번 오랜만에 올리게 되는 것 같네요. 

 Nexus 8번째 정리는 Packet 분석을 위해서 Mirroring할 때 사용하는 SPAN에 대한 내용입니다. 

 부족한 부분이나 수정해야 할 부분이 있으면 알려주세요.


SPAN

• 48Session 대해서 동시 설정이 가능하지만,  전체 VDC에서 2개의 Session활성화 가능.

Ethernet, Port-Channels, Ethernet-CPU 포트 모두 Monitor 가능

    - ,  Destination InterfaceEthernet 이나 Port-Channel Interface만 가능.

• VLAN으로 Source Interface 가능하며, VLAN으로 SPAN Source 설정 시, 해당 VLAN에 속한 모든 Interface가 포함 됨.

• Monitor 설정 시에, Traffic의 방향성(Ingress, egress, both) 설정 가능.

다수의 SourceDestination Port 를 지정할 수 있음.

    - Source Interface : 128 / Session   - Source VLANs : 32 / Session  - Destination Interface : 32 / Session

목적지 Port다수의 Session에서 사용될 수 없음.

현재 Local SPAN session만 지원 됨.

• Remote SPAN(RSPAN) VLAN은 오직 Source Interface로만 설정 가능.

• Monitor Session 설정 시, 반드시 no shut 을 해주어야 한다.

• Intrusion Detection System(/Intrusion Prevention Systems (IDS/IPS) 같이 Mac Address를 학습해야 하는 Application

 지원한다.

 

 

• Nexus 7000 Series NX-OS Verified Scalability Guide을 확인해보면,

  NX-OS 6.2부터 버전부터 지원 가능한 Active SPAN Session이 늘어나고,  Nexus 7000/Nexus 7700의 Active ERSPAN Session이 달라집니다.

  자세한 SPAN 관련 수량은 아래의 표를 참조하시면 됩니다.

 

Feature
Parameter Verified Limit
(NX-OS 8.0(1))
Verified Limit
(NX-OS 7.2(0)D1(1))
Verified Limit
(NX-OS 6.2)
Verified Limit
(NX-OS 6.1)
Verified Limit
(NX-OS 6.0)
Verified Limit
(NX-OS 5.2)
SPAN and ERSPAN Number of active SPAN or ERSPAN source sessions 14 (Nexus 7000); 16 (Nexus 7700) 14 (Nexus 7000); 16 (Nexus 7700) 14 (Nexus 7000); 16 (Nexus 7700) 2 2 2
Number of configured (not active) SPAN sessions per VDC 48 48 48 48 48 48
Number of active ERSPAN destination sessions 23 (Nexus 7000); 16 (Nexus 7700) 23 (Nexus 7000); 16 (Nexus 7700) 23 (Nexus 7000); 16 (Nexus 7700) 23 23 23
Number of source interfaces per SPAN or ERSPAN session 128 128 128 128 128 128
Number of destination interfaces per SPAN or ERSPAN session 32 32 32 32 32 32
Number of source VLANs per SPAN or ERSPAN session 32 32 32 32 32 32

 

 

 

 ◈ Destination Port 설정

   NX-OS(config)# interface ethernet 2/1

   NX-OS(config-if)# switchport

   NX-OS(config-if)# switchport monitor

   NX-OS(config-if)# switchport monitor ingress learning   IDS/IPS를 지원을 위한 Monitor   Port 설정

  ◈ Monitor(SPAN) Session 설정

   NX-OS(config)# monitor session 1

   NX-OS(config-monitor)# source interface ethernet 3/1, 3/2 both

   NX-OS(config-monitor)# destination interface ethernet 2/1

   NX-OS(config-monitor)# no shut

  ◈ Monitor(SPAN) 설정 확인

   NX-OS# sh monitor session 1 brief

     session 1

    ---------------

     type              : local

     state             : up

     source intf      :

          rx            : Eth3/1       Eth3/2

          tx            : Eth3/1       Eth3/2
          both         : Eth3/1       Eth3/2

     destination ports : Eth2/1      

 

 

 

 

 

Nexus_정리자료8(SPAN).pdf

 

Posted by 네떡지기

티스토리 툴바