Junos PyEZ를 사용하여 Junos 디바이스 구성
요약 Junos PyEZ Config
유틸리티 또는 Junos PyEZ 테이블 및 뷰를 사용하여 Junos 디바이스를 구성할 수 있습니다.
Junos PyEZ를 사용하면 Junos 디바이스에서 구조화된 구성 및 구조화되지 않은 구성을 변경할 수 있습니다. 구성을 변경하는 데 사용되는 사용자 계정에는 각 디바이스에서 구성의 관련 부분을 변경할 수 있는 권한이 있어야 합니다. 사용자를 정의하지 않으면 사용자는 기본적으로 $USER
.
다음 섹션에서는 구조화된 구성 변경과 구조화되지 않은 구성 변경을 비교하고, 유틸리티를 사용하여 Config
구조화되지 않은 구성을 변경하거나 테이블 및 뷰를 사용하여 구조화된 구성을 변경할 때 Junos PyEZ 구성 프로세스에 대한 세부 정보를 제공합니다.
구조화된 구성 변경 사항과 구조화되지 않은 구성 변경 사항 이해
ASCII 텍스트, Junos XML 요소, Junos OS set
명령 또는 JSON(JavaScript Object Notation)으로 포맷된 정적 또는 템플릿화된 구성 데이터 로드로 구성된 비정형 구성 변경은 유틸리티를 jnpr.junos.utils.config.Config
사용하여 수행됩니다. 반면, 구조화된 구성 변경은 Junos PyEZ 구성 테이블 및 뷰를 사용하여 Junos OS 사용자 계정 등을 구성할 특정 리소스를 정의합니다. Junos PyEZ 프레임워크에 테이블을 추가하면 Junos PyEZ가 리소스에 대한 구성 클래스를 동적으로 생성하여 디바이스에서 해당 리소스를 프로그래밍 방식으로 구성할 수 있습니다.
유틸리티를 사용하여 Config
Junos 디바이스에서 구조화되지 않은 구성을 변경할 때 구성의 모든 부분을 변경할 수 있지만 구성 데이터에 허용되는 형식 중 하나와 해당 형식에 대한 올바른 구문을 사용해야 합니다. 지원되는 구성 형식에 익숙하고 구성의 일부를 수정하는 옵션을 원하는 사용자는 구성 변경에 이 방법을 선호할 수 있습니다. 또한 이 Config
유틸리티를 사용하여 이전에 커밋한 구성으로 롤백하거나 기존 복구 구성을 로드할 수 있습니다.
반면, 구조화된 구성 변경의 경우 테이블 및 뷰를 생성하여 특정 리소스를 정의하고 디바이스에서 정의된 리소스만 구성할 수 있도록 해야 합니다. 구조화된 리소스를 정의할 때 사용자가 리소스에 대해 구성할 수 있는 구성 문을 지정할 수 있으며, 사용자가 Junos PyEZ 애플리케이션의 데이터에 대해 허용 가능한 값을 제공하도록 유형 및 제약 조건 검사를 정의할 수도 있습니다. 테이블과 뷰가 생성되면 쉽게 공유하고 재사용할 수 있습니다. 테이블 사용자는 디바이스에서 프로그래밍 방식으로 리소스를 구성할 수 있으며, 지원되는 구성 형식이나 해당 구문에 대한 지식이 필요하지 않습니다.
표 1 에는 Junos PyEZ가 구성 변경을 지원하기 위해 지원하는 두 가지 방법이 요약되어 있습니다.
구성 변경 유형 |
유틸리티 |
범위 |
구성 데이터 형식 |
추가 정보 |
---|---|---|---|---|
구조화 된 |
테이블 및 뷰 |
테이블 및 뷰에 정의된 구성 문으로 제한됩니다 |
– |
대상 구성 변경을 수행하는 데 사용됩니다 구성 형식이나 구문에 대한 지식이 필요하지 않습니다. |
구조화 되지 않은 |
|
구성의 모든 부분 |
|
지원:
|
이 항목에서는 일반 구성 프로세스와 두 구성 방법에 공통적인 작업 및 요소에 대해 설명합니다. 유틸리티 또는 테이블 및 뷰를 사용하여 Config
구성 업데이트를 수행하는 방법에 대한 자세한 내용은 해당 구성 방법과 관련된 설명서를 참조하십시오.
유틸리티를 사용하여 Config
구조화되지 않은 구성을 변경하는 방법에 대한 자세한 정보는 다음 주제를 참조하십시오.
구성 테이블 및 뷰를 사용하여 구조화된 구성을 변경하는 방법에 대한 자세한 내용은 다음 항목을 참조하십시오.
일반 구성 프로세스 이해
Junos PyEZ를 사용하면 Junos 디바이스의 구성을 변경할 수 있습니다. 디바이스에 성공적으로 연결한 후 기본 구성 방법에 따라 또는 Table 객체를 생성하고 Config
객체와 Device
연결합니다. 예를 들어:
Config 객체
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='dc1a.example.com') as dev: cu = Config(dev)
테이블 객체
from jnpr.junos import Device from myTables.ConfigTables import ServicesConfigTable with Device(host='dc1a.example.com') as dev: sct = ServicesConfigTable(dev)
기본적으로 Junos PyEZ는 후보 글로벌 구성( 공유 구성 데이터베이스라고도 함)을 업데이트합니다. 구성을 변경하기 위한 기본 프로세스는 구성 데이터베이스를 잠그고, 구성 변경 내용을 로드하고, 구성을 커밋하여 활성화한 다음 구성 데이터베이스의 잠금을 해제하는 것입니다. Junos PyEZ Config
유틸리티를 사용하여 공유 구성 데이터베이스에서 구조화되지 않은 구성을 변경하는 경우 여기에 설명된 적절한 인스턴스 메서드를 호출하여 이러한 작업을 수행할 수 있습니다.
-
다음을 사용하여 구성을 잠급니다.
lock()
-
다음 작업 중 하나를 수행하여 구성을 수정합니다.
-
전체 구성을 새로 로드하거나 구성의 특정 부분을 수정할 때 호출합니다
load()
. -
Roll Back the Configuration(구성 롤백)에 설명된 대로 이전에 커밋된 구성으로 되돌리기 위한 호출
rollback()
-
Load the Rescue Configuration(복구 구성 로드)에 설명된 대로 Rescue 구성을 로드하기 위해 호출합니다
rescue()
-
-
구성 커밋 및 Junos PyEZ를 사용하여 구성 커밋에 설명된 대로 을(를) 사용하여
commit()
구성을 커밋합니다 -
다음을 사용하여 구성 잠금을 해제합니다.
unlock()
테이블 및 뷰를 사용하여 디바이스에서 구조화된 구성을 변경하는 경우 , , 및 메서드를 개별적으로 호출lock()
하도록 선택하거나 이러한 모든 메서드를 자동으로 호출하는 메서드를 호출할 set()
수 있습니다.unlock()
commit()
load()
이 load()
메서드는 Table 객체와 Config
객체에 대해 동일한 기능을 수행하지만, 메서드를 호출하는 객체 유형에 따라 다른 매개 변수를 제공합니다.
구성 모드 지정 방법
기본적으로 Junos PyEZ는 후보 글로벌 구성을 업데이트합니다. 구성 데이터베이스를 수정할 때 사용할 다른 구성 모드를 지정할 수도 있습니다. 기본값 이외의 모드를 지정하려면 컨텍스트 관리자(with ... as
구문)를 Config
사용하여 또는 Table 객체를 만들고 인수를 mode
원하는 모드로 설정해야 합니다. 지원되는 모드에는 , exclusive
, dynamic
, batch
, 및 ephemeral
가 있습니다private
.
기본값 이외의 모드를 지정하면 컨텍스트 관리자가 데이터베이스 열기 및 잠금과 닫기 및 잠금 해제를 처리합니다. 이렇게 하면 실수로 데이터베이스가 잠긴 상태로 유지되는 일이 발생하지 않습니다. 이러한 경우 및 commit()
메서드를 호출 load()
하기만 하면 디바이스를 구성할 수 있습니다.
다음 예제에서는 모드를 사용하여 구성을 변경합니다.configure private
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='dc1a1.example.com') as dev: with Config(dev, mode='private') as cu: cu.load('set system services netconf traceoptions file test.log', format='set') cu.pdiff() cu.commit()
from jnpr.junos import Device from myTables.ConfigTables import ServicesConfigTable with Device(host='dc1a.example.com') as dev: with ServicesConfigTable(dev, mode='private') as sct: sct.ftp = True sct.ssh = True sct.telnet = True sct.append() sct.load() sct.pdiff() sct.commit()
컨텍스트 관리자는 , exclusive
, batch
dynamic
, 또는 ephemeral
모드에서 구성 데이터베이스 private
열기 및 잠금을 처리합니다. 따라서 이러한 모드 중 하나에서 또는 set()
메서드를 호출 lock()
하면 LockError
예외가 발생합니다.
Junos PyEZ를 사용하면 이 데이터베이스를 지원하는 디바이스에서 임시 구성 데이터베이스를 업데이트할 수 있습니다. 임시 데이터베이스는 Junos 디바이스에서 구성 업데이트를 수행하기 위한 빠른 프로그래밍 인터페이스를 제공하는 대체 구성 데이터베이스입니다.
임시 구성 데이터베이스는 고급 기능으로, 잘못 사용하면 디바이스 작동에 심각한 부정적인 영향을 미칠 수 있습니다. 자세한 내용은 사용 후 삭제 구성 데이터베이스 이해를 참조하십시오.
임시 구성 데이터베이스의 기본 인스턴스를 열고 구성하려면 인수를 mode='ephemeral'
포함합니다. 예를 들어:
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='router1.example.com') as dev: with Config(dev, mode='ephemeral') as cu: cu.load('set protocols mpls label-switched-path to-hastings to 192.0.2.1', format='set') cu.commit()
임시 구성 데이터베이스의 사용자 정의 인스턴스를 열고 구성하려면 인수를 mode='ephemeral'
포함하고 인스턴스 이름으로 인수를 설정합니다 ephemeral_instance
.
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='router1.example.com') as dev: with Config(dev, mode='ephemeral', ephemeral_instance='eph1') as cu: cu.load('set protocols mpls label-switched-path to-hastings to 192.0.2.1', format='set') cu.commit()
로드 작업을 지정하는 방법
Junos PyEZ에서는 Junos OS CLI에서 지원되는 것과 동일한 여러 로드 작업을 사용하여 구성 변경 사항을 로드할 수 있습니다. 테이블 및 뷰를 사용하여 구조화된 구성을 변경할 때 메서드에 적절한 매개 변수를 포함하거나 생략하여 원하는 로드 조작을 지정하거나, 구조화 또는 비구조화된 구성 변경을 위한 방법에서 load()
적절한 매개 변수를 set()
포함하거나 생략합니다. 표 2에는 각 부하 작업 유형에 필요한 매개변수 설정이 요약되어 있습니다.
load override
및 load update
작업에는 완전한 구성이 필요하므로 구성의 overwrite=True
특정 명령문만 수정하는 테이블을 사용하여 구성을 변경할 때 및 update=True
인수를 사용해서는 안 됩니다.
로드 작업 |
인수 |
설명 |
최초로 지원되는 Junos PyEZ 릴리스 |
---|---|---|---|
|
|
로드된 구성을 기존 구성과 병합합니다. |
1.0 |
|
|
전체 구성을 로드된 구성으로 대체합니다. |
1.0 |
|
|
패치 파일에서 구성 데이터를 로드합니다. |
2.4.0 |
|
– |
로드된 구성을 기존 구성과 병합하되, 기존 구성의 문을 로드된 구성의 태그를 지정하는 |
1.0 |
|
|
전체 구성을 로드하고 기존 구성과 비교합니다. 로드된 구성에서 다른 각 구성 요소는 기존 구성에서 해당 요소를 대체합니다. 커밋 작업 중에는 변경된 구성 요소의 영향을 받는 시스템 프로세스만 새 구성을 구문 분석합니다. |
2.1.0 |
Config 또는 Table 객체를 디바이스 인스턴스의 속성으로 만드는 방법
Device
클래스 bind()
메서드를 사용하면 다양한 인스턴스와 메서드를 인스턴스에 연결할 수 Device
있습니다. Junos PyEZ 애플리케이션에서 또는 테이블 객체를 인스턴스에 바인딩 Config
할 수 Device
있는 옵션이 있습니다. 메서드의 기능은 변경되지 않지만 메서드 실행은 약간 다릅니다. 예를 들어:
독립형 변수로:
with Device(host='dc1a.example.com') as dev: cu = Config(dev) cu.lock()
바인딩된 속성으로:
with Device(host='dc1a.example.com') as dev: dev.bind( cu=Config ) dev.cu.lock()