본문 바로가기

카테고리 없음

Programmability for Networker : Part 18 (Junos PyEZ:2)



PyEZ라는 Junos OS 장비를 다룰 수 있도록 해주는 Python용 micro-framwork라고 하는 Library를 다뤄봅니다.

이번 포스팅에서는 PyEZ가 무엇인지 아주 간단히, 그리고 아주 간단한 예제를 통해서 가볍게 접근해봅니다. 



Juniper PyEZ Library


○ PyEZ를 통한 Configuration 관리

    • PyEZ를 통한 설정 관리 : Unstructured / Structured
    • Unstructured  
          - 지원되는 특정 포맷 형식에 Junos Config를 전달하여 관리
          -  다수의 변수를 가진 Template을 사용하면 보다 쉽고 빠르게 사용 가능
    • Structured
          - 설정 / 속성에 접근하는 프로그래밍 방법을 잘 정의한 추상화 자원을 사용
      - 추상화 자원은 Puppet이나 Chef같은 IT frameworks와 유사하다.

 

 

 

 

 

○ Unstructured
 • Unstructed 변경은 Config 클래스를 사용 (jnpr.junos.utils.config.Config)
 • Config 클래스는 load() 메서드를 제공하여, snippet 혹은 Template을 불러오는 역할
 • Configuration의 Data로, Strings, files, XML 객체, Jinja2 Template 객체를 사용
       - Configuration Data  snippets와 Jinja2 Template가 포함될 수 있다.
  • String, Files, Jinja2 Templat에 들어가는 데이터 포맷은 ASCII Text,
     Junos XML elements, Junos OS set command가 지원된다.
  • 각 데이터 포맷은 load() 메서드 사용 시, format 매개변수를 사용하여 지정하거나,   설정 파일의 적절한 확장자를 지정하여 설정 가능.

 

 

 

 

○ PyEZ를 통한 Configuration 변경 예제 1

 • Unstructure 방식으로 Junos Device를 설정을 바꾸는 에제를 살펴본다.

 • Unstructure 방식을 사용하기 위해서 Config Class를 먼저 import 한다.

 • Junos Device에 연결하고, 해당 Device를 매개변수로 한 Config 객체를 만든다.

 • Junos의 Config 변경 방식 중의 Set Commands를 사용한 변경 방식을 사용을 위한 Set 명령을 만들고,

     Config 객체에서 이를 Load한다. 이 때에 기본 Configration Data Format은 XML이므로, Set으로 변경해준다.

 •변경될 Config를 확인하고, 장비에 적용한다.

 

 

 • 위의 Code를 실행하고 나면, Juniper 장비에는 아래와 같은 설정이 들어가게 된다.

 

 

 

 

○ PyEZ를 통한 Configuration 변경 예제 2

 • 2번째 에제는 Text 형태 포맷의 Configuration을 적용하는 예제이다.

 •Configuration의 TEXT를 별도의 파일로 만들어서 불러올 수 있기도 하고, 아래와 같이 Code에 Text 변수로 만들어서

    해당 변수를 불러와서 설정이 가능하다.

 •Configuration만 Text 형태로 작성하여 Format을 Text로 지정하는 것 이외에 기존과 거의 유사하다.

 •아래 Code를 실행하게 되면, Loopback 0으로 Interface가 1개 생성된다.

 

 

 

 

 

○ PyEZ를 통한 Configuration 변경 예제 3

 •3번째 예제는 Jinja 형식의 Template으로 Juniper 장비의 Configuration을 수정하는 예제입니다.

 •예제에서 사용된 Template은 아래와 같습니다.

    Junos에서 Hostname을 변경하기 위한 Config이며, Jinja 형식을 사용하여 hostname의 값을 변수 형식으로 사용합니다.

 

 

 

 •이번에는 Template를 file에서 불러오기 때문에 configuration 객체에서 Load 시에, Template 파일의 경로를 지정합니다.

 •Jinja에서 사용된 변수에 값을 적용하기 위해, load 시에 해당 변수에 들어갈 값이 있는 변수를 매개변수로 넣습니다.

    즉, Load 시에 Template File의 Path와 Template에서 사용된 변수를 할당합니다.

 •기타 나머지 실행은 동일합니다.

 •아래의 Config를 적용하고 나면, Juniper 장비의 Hostname이 변경됩니다.

 

  •다음은 위의 코드를 실행 한 후의 Junos 장비의 Hostname이 바뀐 내용입니다.