Junos PyEZ를 사용하여 후보 구성과 이전에 커밋된 구성을 비교합니다
요약 Junos PyEZ diff()
및 pdiff()
메서드를 사용하여 후보 구성을 이전에 커밋된 구성과 비교합니다.
Junos 디바이스는 가장 최근에 커밋된 구성의 사본과 최대 49개의 이전 구성을 저장합니다. Junos PyEZ jnpr.junos.utils.config.Config
유틸리티를 사용하면 후보 구성을 이전에 커밋된 구성과 비교하여 차이를 인쇄하거나 반환할 수 있습니다. 표 1 에는 Junos OS CLI에서 구성 모드 명령을 실행하는 show | compare rollback n
것과 동일한 방법이 요약되어 있습니다.
임시 구성 데이터베이스는 커밋된 임시 구성 데이터의 현재 버전만 저장하므로 수정된 임시 구성과 이전에 커밋된 구성의 비교를 지원하지 않습니다.
diff()
및 pdiff()
메서드는 후보 구성과 이전에 커밋된 구성 간의 차이를 검색하며, 이는 메서드 호출에서 rollback ID 매개 변수 rb_id
에 의해 참조됩니다. 매개 변수를 생략하면 롤백 ID의 기본값은 활성 구성에 해당하는 0입니다.
차이는 패치 형식으로 반환되며, 여기서 :
후보 구성에만 존재하는 문에는 앞에 더하기 기호(+)가 붙습니다
비교 구성에만 존재하고 후보 구성에는 존재하지 않는 문에는 마이너스 기호(-)가 접두사로 붙습니다
메서드는 구성 간에 차이가 없는 경우 반환되거나 인쇄
None
됩니다.
Junos PyEZ 애플리케이션에서 디바이스와의 연결을 설정한 후 또는 Table 개체에 대해 Config
또는 pdiff()
메서드를 호출하여 diff()
후보 및 롤백 구성을 비교할 수 있습니다. 다음 예제에서는 클래스를 사용하여 Config
구성 변경 내용을 후보 구성으로 로드한 다음 메서드를 호출하여 pdiff()
변경 내용을 커밋하기 전에 수정된 후보 구성과 활성 구성 간의 차이점을 인쇄합니다.
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='router1.example.com') as dev: with Config(dev, mode='exclusive') as cu: cu.load(path='configs/junos-config-mx.conf', merge=True) cu.pdiff() cu.commit()
코드를 실행하면 차이점이 표준 출력으로 출력됩니다. 예를 들어:
[edit system scripts op] + file bgp-neighbors.slax; [edit interfaces] + ge-1/0/0 { + unit 0 { + family inet { + address 198.51.100.1/26; + } + } + } - ge-1/1/0 { - unit 0 { - family inet { - address 198.51.100.65/26; - } - } - }
구성 간의 차이를 추가 조작을 위한 객체로 검색하려면 메서드 대신 pdiff()
메서드를 호출 diff()
하고 출력을 변수에 저장합니다. 예를 들어:
cdiff = cu.diff(rb_id=2) print (cdiff)
Junos PyEZ 구성 테이블 및 뷰를 사용하여 디바이스에서 구조화된 구성을 변경할 때, , 및 unlock()
메서드를 개별적으로 호출 commit()
load()
lock()
하거나 이러한 모든 메서드를 자동으로 호출하는 메서드를 호출하여 set()
구성 데이터를 로드하고 커밋할 수 있습니다. 구성 테이블을 사용하여 디바이스를 구성하고 애플리케이션에서 또는 메서드를 사용하여 diff()
업데이트된 후보 구성을 이전에 커밋된 구성과 비교하려면 메서드 대신 set()
및 commit()
메서드를 사용해야 load()
합니다.pdiff()
이렇게 하면 구성 데이터가 후보 구성에 로드된 후 커밋되기 전에 차이점을 검색할 수 있습니다. 예를 들어:
from jnpr.junos import Device from myTables.ConfigTables import UserConfigTable with Device(host='router1.example.com') as dev: with UserConfigTable(dev, mode='exclusive') as userconf: userconf.user = 'user1' userconf.class_name = 'read-only' userconf.append() userconf.load(merge=True) userconf.pdiff() userconf.commit()
다음 예에서는 후보 구성을 롤백 ID 5가 있는 구성과 비교하지만 구성을 변경하지는 않습니다.
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='router1.example.com') as dev: cu = Config(dev) cu.pdiff(rb_id=5)