DevOps/Programmability2015.01.10 13:22

OnePK 예제

 


지난 포스팅에 이어서 Python을 사용한 OnePK 예제를 다뤄봅니다.

간략한 예제를 통해서, OnePK를 어떻게 사용할 수 있는지 알아보겠습니다.


 

 

○ OnePK 두 번째 예제

   - Network Element의 Interface 정보를 가져와서 출력해보는 예제입니다

   - Ethernet Type의 Interface 정보를 가져오고, 해당 Interface의 Description을 출력합니다

 

   ◆ 실행결과

 

 

   ◆ 소스코드

  

   - 기본 코드는 지난 포스팅인 Python for Networker Part 14(OnePK3)을 참고해주시면 됩니다.

   - Interface를 정보를 가져오기 위해서 OnePK에서 제공하는 Package중에, Interface라는 Package를 사용합니다.

   - 여기서는 NetworkInterface와 InterfaceFilter라는 Class를 사용합니다.

   - 현재 Element(Network Device)의 Interface 정보를 가져오기 위해서는 get_interface_list 메서드를 사용하게 됩니다.

   - get_interface_list 메서드를 사용하기 위해서는 InterfaceFilter를 지정해줘야 합니다

     InterfaceFilter를 지정하기 위해서, InterfaceFilter에 대한 객체를 생성하는 데

     InterfaceFilter의 객체 생성 시에는 NetworkInterface의 InterfaceTypes을 선택해야 합니다. (Default는 ONEP_IF_TYPE_ANY)

    - 코드 상에서 보면, InterfaceTypes를 사용하기 위해서 NetworkInterface Class의 InterfaceTypes라는 enum 멤버를

      intType이라는 변수에 할당하고, intType에서 Ethernet Type을 지정해서, intfilter라는 InterfaceFilter 객체를 생성합니다

      intfilter를 이용해서 원하는 Interface 리스트 정보를 가져옵니다. 

    - LIST형태로 리턴받은 NetworkInterface에서 하나씩 객체를 가져와서 Interface이름과 description을 출력한다.

    - descritpion의 경우에는 get_config() 메서드를 사용하여, InterfaceConfig 를 리턴받아서, InterfaceConfig의 메서드를 사용한다.

  

 

○ OnePK 두 번째 예제 변형-1

   - 위에서 출력한 Interface 정보를 보면, 인터페이스가 순번대로 반환되지 않기 때문에 0번 인터페이스부터 7번까지 차례대로

     출력되지 않는다.

   - 이를 해결하기 위해서 다음과 같이 코드를 한 줄 삽입하여 정렬을 하게 되면 아래의 두번째 예제 변형의 결과값처럼 차례대로

     인터페이스 정보를 출력할 수 있다.

  

 sortInt =  sorted(myInt,key=lambda intf: intf.name)

 

   ◆ 실행결과

 

 

○ OnPK 두 번째 예제 변형 -2

   - Description 이외에 추가적으로 필요한 정보는 OnePK 3번째 시간에서 얘기하였던, OnePK API에서 필요한 값을 찾아서,

    얼마든지 추가하여 정보를 알아낼 수 있다. 다음은 Interface의 상태가 Up/Down인지 확인한 내용까지 출력하였다.

 

   ◆ 실행결과

 

 

○ OnePK 세 번째 예제

   - OnePK 두 번째 예제처럼, Interface 정보를 가져올 수도 있지만, 실제 설정을 할 수 도 있다.

   - 다음은 Interface의 Description 정보를 변경한 간단한 예제이다. 

    

 

   - 위 코드의 실형결과를 보면, G0/6의 Interface의 Descritpion이 없다가 ex3.py를 실행하였을 때 설정이 되는 것을 확인하고

     다시 전체 인터페이스 정보를 출력해보면 G0/6에 정상적으로 Descritpion이 바뀐 것을 확인할 수 있다.

 

   ◆ 소스코드

         ※ 현재 포스팅된 Ex3의 예제는 결과값이 Sort를 다르게 써서, 조금 다릅니다. 변경 코드는 저녁에 이미지 교체 예정입니다

               이미지 교체 후에는 본 안내 메시지는 삭제할 예정입니다

 

   - NetwortInterface List 중에서 6번째(Index는 0부터 시작)의 Description을 set_description 메서드를 사용하여 변경합니다.

   - 변경 전/후로 Descritpion을 출력해서 결과를 확인합니다

 

 

◆ 이번 포스팅에서는 OnePK 2,3번째의 예제를 통해서 Network Element의 Interface에 대한 정보를 확인 및 설정하는 방법을

    알아 보았습니다.  2,3번 모두 기본 예제의 연장선상에 있으며 앞으로 다룰 예제들도 비슷할 것입니다

    결국 핵심은 예제가 아니라, 예제를 바탕으로 OnePK에서 제공하는 API를 잘 활용하는 방법과 아이디어가 될 것 같습니다.

 

 

Posted by 네떡지기
분류없음2014.12.16 01:17

   

 


이번 포스팅부터는 OnePK 예제를 다뤄봅니다.

본 포스팅의 예제는 원래 제목이기도 하지만, OnePK에서 지원하는 언어 중에 Python을 사용하여 진행하게 됩니다.

이번 포스팅에서는 예제를 하기 위한 다른 내용도 함께 들어가느라, 1개의 예제만 다루게 됩니다.


 

 

○ OnePK 첫 번째 예제

   - Network Element와 연결하여, 해당 Element의 정보를 가져오는 예제

 

 

  - 아래의 동영상과 같이 장비의 다양한 Element 정보를 가져올 수 있다.

 

 

  -  Source Code

 

 

  - Source Code를 보면, 매우 단순(?)합니다.

  - OnePK가 지원되는 Device와의 연결을 위해서 'IP address', 'username', 'password'가 필요로 하며,

    해당 정보를 가지고, 해당 Device에 대한 Handle을 갖는 Device라는 객체를 생성합니다.

  - 생성된 Device라는 객체에서 Connect() 메서드를 이용해서 해당 장비와 연결을 하게 됩니다.

  - 이후, elem이라는 Device의 Element 정보를 갖는 값을 이용해서 필요한 정보를 가져올 수 있게 됩니다.

  - 위의 코드만 보면, 내용을 정확히 몰라도 직관적으로 이해할 수 있을 정도로 단순합니다.

  - 제일 위에 import한 ZIGI_OnePK라는 Library를 이용해서 element에 대한 Device를 만들고 사용하는 데,

    ZIGI_OnePK는 OnePK를 사용하기 쉽게 도와주는 간단한 Library입니다.

  - 아래에서는 해당 Library에 대한 Code를 나타내고 있습니다.

 

 

 ZIGI-OnePK Library Source Code 

    - https://github.com/NetworkZIGI/OnePK

 

  - zigiElement 라는 Class와 PinningHandler라는 Class로 구성되어 있습니다.

  - zigiElement class에는 생성자 / tlsPinningConnect / Connect / DisConnet 메서드로 구성되어 있습니다.

  - OnePK 생성자에서는 접속하고자 하는 Device의 IP와 Username, Password, Pin File, Port를 입력하게 되어 있습니다.

  - OnePK는 Default로 15002를 사용하며, 다른 포트로 변경 가능합니다.

  - Pin File과 Pinning은 특정 Host가 WhiteList 기반의 TLS 인증을 하는 절차인데,

    Pin File은 Device에서 OnePK 설정을 하면 생성되는 Fingerprint 값과 Hash type, Device ID로 구성된 파일입니다.
    (실제 순서, Device ID, Hash type, Fingerprint)

    여기서는 TLS Pinning이라고 하는 TLS를 사용한 암호화 통신을 유지하며, 인증에 대한 부분만 Bypass하여 OnePK를 쉽게

    사용할 수 있는 방식으로 구성되어 있습니다.

  - 예제코드에서 다뤄지는 elem 변수는 OnePK API에서 제공되는 NetworkElement Class에 대한 객체이며,

    예제에서 다룬 속성 값들의 정보는 모두 NetworkElement Class에서 제공되는 속성 값이라고 볼 수 있습니다.

    즉, NetworkElement Class 내용을 보면 보다 많은 필요한 정보를 사용할 수 있습니다.

  - 이처럼 OnePK를 사용하기 위한 API 정보는 아래 그림과 같이 API 문서 페이지를 보면 모두 확인할 수 있습니다.

  - 초기 OnePK에서는 Vanilla TCP(일반적인 TCP 통신)를 사용하였으나,

    최신 OnePK(1.3), IOS (15.4)에서는 암호화되지 않은 통신은 Disable되고,  TLS를 사용하도록 하여 보안을 강화하였습니다.

 

 

 

 

   

 

○ OnePK Python API

https://developer.cisco.com/site/onepk/documents/api-reference/python/

 

 

 

 

 Device에서 OnePK 설정

 - OnePK 장비 설정       

ZIGI_DEVICE(config)# onep

ZIGI_DEVICE(config-onep)# transport type tls disable-remotecert-validation

 

 

 - OnePK 상태 확인

ZIGI_DEVICE#sh onep status
Status: enabled by: Config
Version: 1.2.1
Transport: tls; Status: running; Port: 15002; localcert: TP-self-signed-4294967295; client cert validation disabled
Certificate Fingerprint SHA1: 88DCF998 958884C2 1458D3A9 8637E244 A8A244E3
Transport: tipc; Status: disabled
Session Max Limit: 10
CPU Interval: 0 seconds
CPU Falling Threshold: 0%
CPU Rising Threshold: 0%
History Buffer: Enabled
History Buffer Purge: Oldest
History Buffer Size: 32768 bytes
History Syslog: Disabled
History Archived Session: 8
History Max Archive: 16
Trace buffer debugging level is info


Service Set: Base               State: Enabled     Version 1.2.1
Service Set: Vty                State: Disabled    Version 0.1.0
Service Set: Mediatrace         State: Disabled    Version 1.0.0

 

 

 - OnePK Session 상태 확인

ZIGI_DEVICE# sh onep session all
ID         Username State            ReconnectTimer ConnectTime                 ApplicationName
7075       zigi     Connected        0              Mon Dec 15 16:05:04.478     ZIGI-OnePK-APP

 

 

Posted by 네떡지기
분류없음2014.12.15 22:53

Python for Networker 13번째는 본래 의도와는 다르게 다시 조금 쉬어가는 포스팅입니다.

OnePK의 예제 코드를 다뤄보기 전의 Cisco OnePK에 대해서 조금 더 간단히 알아보는 내용입니다.

다음 포스팅부터 이제 실제 예제코드는 함께 다뤄질 예정입니다! ^^

또한 본 포스팅은 OnePK에 대한 소개이기 때문에 이론적인 부분에 있어서는 지속적으로 업데이트 할 예정입니다.

 


 

OnePK Introduce

   - 다양한 Cisco Device를 OnePK라는 Application Toolkit을 통해 기존 네트워크를 programmability하게 사용 가능하도록 함.

 

 

 

 

 - 기존 IOS ,OSd/XE, XR, NX-OS 모두 각각  onePK API를 지원하는 환경에서 다양한 언어(C, Java, Python)로 만들어진

   API를 통해서 통신하여 동작할 수 있도록 함.

 

 

 

 

 

OnePK Service Set

  

 

 

○ OnePK Hosting Option

     - OnePK는 아래와 같은 3가지 방식으로 동작할 수 있도록 지원 됨.

    ▷ Process Hosting

        - OnePK가 동작하기 위한 Module 형식의 Software 구조가 필요로 함. 

        - Latency와 Delay 매주 작음.

        - 해당 장비 내부에서 동작하기 때문에 자원을 공유함.

 

    ▷ Blade Hosting

        - OnePK가 동작하기 위한 Blade Hardware가 필요로 함.

        - Latency와 Delay가 비교적 작음.

        - 모든 Platform을 지원

 

    ▷ End-Poin(Node) Hosting

        - 별도의 Device를 사용

        - Latency와 Delay가 비교적 큼.

        - 모든 Platform을 지원

  

  

 

 

 

 

 

OnePK 지원 장비 

  

 - 현재 OnePK는 1.3 Version이며, 아래의 Hardware와 Software Version에서 동작한다. (2014년 8월 기준)

Device

Software

Cisco ASR 1000 & ISR 4400 Series Router

CSR 1000V Cloud Services Router

Cisco IOS XE 3.12.0S

Cisco ASR 9000 Series Aggregation Services Router

Cisco IOS XR 5.2.0

Cisco ISR G2

Cisco IOS Release 15.4(2)T

Cisco ME 3600X/24CX

Cisco IOS Release 15.4(3)S

 

 

 

OnePK Platform별 지원 Service Set 

 

 Service Set

ME3600X/24CX

ISR G2 

ISR 4400 

ASR 1000 

ASR 9000 

CSR 1000V 

Data Path 

 

Policy

Routing 

Element

Discovery

Utility

Developer

Location

 

 

 

MediaTrace
(PathTrace)

 

 

Identity

(SANET)

 

 

 

 

 

 

 

○ Language별 OnePK Service Set 지원

   - C언어는 모든 Service Set 지원

   - Java, Python은 Data Path를 제외한 모든 Service Set 지원

 

 

 

Posted by 네떡지기
분류없음2014.12.14 04:16

 


이번에는 Cisco OnePK에 대한 아주 간단한 소개와 앞으로 포스팅 하게 될 OnePK에 대한 예제 내용들입니다.

이번 포스팅에서는 OnePK로 할 수 있는 예제 결과에 대해서만 간략하게 보여드리고,

이후 포스팅부터는 OnePK에 대한 좀 더 기술적인 내용과 함께

이번 포스팅에 보여드린 예제에 대해서 코드와 함께 좀 더 자세히 살펴보도록 하겠습니다.

 


 

Cisco OnePK (Platform Kit)

 

 ○ OnePK 란?

     - Cisco Open Network Environment SDN 전략 요소

     - 개발/자동화/빠른 서비스 생성 등의 작업을 손쉽게 하게 도와주는 툴킷

     - 다양한 언어(C, Java, Python)를 사용할 수 있도록 API를 제공

     - API를 사용하여 비즈니스 요구에 따른 확장, 변경 등의 다양한 작업 가능.

 

 

 ※ Cisco OnePK Site : https://developer.cisco.com/site/onepk/index.gsp

 

 

 ○ OnePK를 사용한  예제 1

     - Network Element(Device)에 접속하여 다양한 속성값을 가져올 수 있다.

 

 

 

 ○ OnePK를 사용한  예제 2

     - Network Element(Device)의 정보를 가져와서 확인할 수 있다. 

- Network Element의 실제 Interface 정보 -

 

- OnePK를 사용하여, Interface 번호와 Description을 가져온 결과 -

 

 

 ○ OnePK를 사용한  예제 3

     - Network Element의 설정을 OnePK에서 제공하는 API를 통해서 변경 ( Interface Descpriton 변경)

 

 

 

 

 

 ○ OnePK를 사용한  예제 4

     - Network Element에 직접 CLI 명령을 통해서 정보 확인 및 Config 설정

 

- CLI 명령을 통해서, 현재 정보를 출력하고, Loopback Interface를 생성 후, 동일한 정보를 출력하여 확인 -

 

 

● Cisco OnePK에 대한 소개 정보는 솔라구구님 블로그를 참조하셔도 좋습니다.

   : http://sola99.tistory.com/208

 

 

Posted by 네떡지기

티스토리 툴바