이 페이지의 내용
구조화된 출력을 구문 분석하는 Junos PyEZ 운영 테이블에 대한 보기 정의
구조화된 출력을 위한 Junos PyEZ 운영(op) 테이블은 Junos 디바이스에서 실행되는 RPC의 XML 출력에서 특정 데이터를 선택합니다. 테이블은 테이블 항목의 필드에 액세스하고 사용자 정의 Python 변수에 매핑하는 데 사용되는 뷰와 연결됩니다. Table 이름을 인수로 사용하는 Table 정의에 속성을 포함하여 view
Table을 특정 View와 연결합니다.
뷰는 사용자 정의 변수를 선택한 테이블 항목의 XML 요소에 매핑합니다. View를 사용하면 Python에서 조작할 수 있는 속성을 가진 변수로 출력의 특정 필드에 액세스할 수 있습니다. Junos PyEZ는 Python으로 데이터 추출은 물론 모든 유형 변환 또는 데이터 정규화를 처리합니다. 뷰에 정의된 키는 유효한 Python 변수 이름이어야 합니다.
테이블과 같은 Junos PyEZ 뷰는 YAML을 사용하여 형식이 지정됩니다. 구조화된 출력을 구문 분석하는 보기에는 여러 매개 변수가 포함될 수 있으며, 이는 표 1에 요약되어 있습니다.
매개변수 이름 보기 |
매개변수 보기 |
설명 |
---|---|---|
보기 이름 |
– |
뷰에 대한 사용자 정의 식별자입니다. |
필드 항목 |
|
사용자 정의 필드 이름을 테이블 항목의 요소를 선택하는 XPath 식에 매핑하는 키-값 쌍의 연관 배열 또는 사전입니다. 필드 이름은 유효한 Python 변수 이름이어야 합니다. |
필드 그룹 |
|
사용자 정의 필드 이름을 테이블 항목의 요소를 선택하는 XPath 식에 매핑하는 키-값 쌍의 연관 배열 또는 사전입니다. XPath 표현식은 해당 groups 매개변수에 의해 설정된 컨텍스트를 기준으로 합니다. 필드 이름은 유효한 Python 변수 이름이어야 합니다. |
그룹 |
|
사용자 정의 그룹 이름을 해당 그룹의 필드에 대한 XPath 컨텍스트를 설정하는 XPath 표현식(테이블 항목 컨텍스트에 상대적)에 매핑하는 키-값 쌍의 연관 배열 또는 사전입니다. |
Junos PyEZ 배포판에 포함된 다음 Junos PyEZ op 테이블 및 뷰를 고려하십시오. 테이블은 대상 디바이스의 이더넷 인터페이스에 대한 작동 상태 정보를 추출합니다.
--- EthPortTable: rpc: get-interface-information args: media: True interface_name: '[afgxe][et]-*' args_key: interface_name item: physical-interface view: EthPortView EthPortView: groups: mac_stats: ethernet-mac-statistics flags: if-device-flags fields: oper: oper-status admin: admin-status description: description mtu: { mtu : int } link_mode: link-mode macaddr: current-physical-address fields_mac_stats: rx_bytes: input-bytes rx_packets: input-packets tx_bytes: output-bytes tx_packets: output-packets fields_flags: running: { ifdf-running: flag } present: { ifdf-present: flag }
다음 섹션에서는 뷰의 다양한 구성 요소에 대해 설명합니다.
보기 이름
뷰 이름은 뷰에 대한 사용자 정의 식별자입니다. Table 정의에 속성을 포함하고 view
View 이름을 인수로 제공하여 Table을 특정 View와 연결합니다. 예를 들어:
--- EthPortTable: # Table definition view: EthPortView EthPortView: # View definition
필드 (필드)
선택한 테이블 항목에서 필요한 요소만 참조하도록 뷰를 사용자 지정합니다. 이렇게 하려면 Table 항목에서 fields
원하는 요소를 선택하는 XPath 식에 대한 사용자 정의 필드 이름 매핑을 포함하는 연관 배열과 속성을 포함합니다. 필드 이름은 유효한 Python 변수 이름이어야 합니다. XPath 표현식은 테이블 항목 컨텍스트를 기준으로 합니다.
다음 샘플 RPC 출력을 고려하십시오.
<rpc-reply> <interface-information> <physical-interface> <name>ge-0/3/0</name> <admin-status junos:format="Enabled">up</admin-status> <oper-status>down</oper-status> <local-index>135</local-index> <snmp-index>530</snmp-index> <link-level-type>Ethernet</link-level-type> <mtu>1514</mtu> ... </physical-interface> </interface-information> </rpc-reply>
Table item
매개 변수가 출력에서 요소를 선택하는 <physical-interface>
경우 View 정의의 각 필드에 대한 XPath 식은 해당 컨텍스트를 기준으로 합니다. 다음 뷰 정의는 각 사용자 정의 필드 이름을 요소의 자식 요소에 매핑합니다.<physical-interface>
EthPortView: fields: oper: oper-status admin: admin-status mtu: { mtu : int }
그런 다음 Python 스크립트에서 View 항목을 변수 속성으로 액세스할 수 있습니다. 기본적으로 각 View 항목에는 name
해당 항목을 고유하게 식별하는 키를 참조하는 속성이 있습니다.
from jnpr.junos import Device from jnpr.junos.op.ethport import EthPortTable with Device(host='router.example.com') as dev: eths = EthPortTable(dev) eths.get() for item in eths: print (item.name) print (item.oper) print (item.admin) print (item.mtu)
필드 형식은 필드 값의 형식을 결정합니다. 기본적으로 필드 값은 문자열로 저장됩니다. 필드 매핑에서 필드 값에 대해 다른 유형을 지정할 수 있습니다. 다음 예제에서는 요소의 값을 mtu
정수로 정의합니다.
EthPortView: fields: mtu: { mtu : int }
RPC 출력에서 일부 Junos XML 요소는 플래그 역할을 하는 빈 요소일 뿐입니다. 필드가 필드 매핑에서 플래그임을 명시적으로 나타낼 수 있습니다. 플래그의 필드 항목 값은 요소가 출력에 있으면 True이고, 요소가 없으면 False입니다. 다음 예제에서는 요소를 플래그로 정의합니다 ifdf-running
.
EthPortView: fields: mtu: { mtu : int } running: { if-device-flags/ifdf-running : flag }
다음 구문을 사용하여 필드 항목 값을 Boolean으로 설정할 수도 있습니다.
fieldname: { element-name: (True | False)=regex(expression) }
요소의 값은 에 전달된 정규 표현식에 대해 평가됩니다 regex()
. 요소의 값이 표현식과 일치하면 필드 항목 값이 형식에 정의된 부울로 설정됩니다. 다음 예제에서는 oper_status_down
요소 값에 'down'이 포함된 경우 필드가 True로 oper-status
설정됩니다.
oper_status_down: { oper-status: True=regex(down) }
더 복잡한 정규 표현식을 사용하고 여러 값과 일치시킬 수도 있습니다. 다음 필드 항목은 요소의 주소가 '198.51'로 시작하는 경우 True로 rt-destination
설정됩니다.
dc1_route: { rt-destination: True=regex(^198\.51\.) }
다음 필드 항목은 요소가 정규식의 값 중 하나를 포함하는 경우 no-refresh
True로 설정됩니다.
no_refresh: { no-refresh: 'True=regex(Session ID: 0x0|no-refresh)' }
그룹(그룹) 및 필드 그룹(fields_)
그룹은 테이블 항목의 특정 노드 집합 내에서 요소를 선택하고 참조할 수 있는 바로 가기 방법을 제공합니다.
다음 RPC 출력 <if-device-flags>
에서 요소는 CLI 출력의 필드에 표시된 값에 해당하는 여러 하위 요소를 포함합니다.Device flags
<rpc-reply> <interface-information> <physical-interface> <name>ge-0/3/0</name> ... <if-device-flags> <ifdf-present/> <ifdf-running/> </if-device-flags> ... </physical-interface> </interface-information> </rpc-reply>
View 정의 내에서 속성을 사용하여 fields
선택한 Table 항목을 기준으로 각 요소에 전체 XPath 식을 제공함으로써 자식 요소에 액세스할 수 있습니다. 예를 들어 EthPortTable 정의에서 항목을 선택하는 <physical-interface>
경우 필드 항목 매핑은 다음 XPath 식을 사용합니다.
EthPortView: fields: present: if-device-flags/ifdf-present running: if-device-flags/ifdf-running
또는 컨텍스트 <if-device-flags>
를 요소로 설정하는 그룹을 만든 다음 해당 컨텍스트와 관련된 XPath 식만 제공하는 필드 그룹 항목을 정의할 수 있습니다. View 정의 내에서 원하는 수의 그룹을 정의할 수 있습니다.
그룹을 작성하려면 특성을 포함하고 groups
사용자 정의 그룹 이름을 새 컨텍스트를 정의하는 XPath 표현식에 맵핑하십시오. 그런 다음 이름 fields_
뒤에 그룹 이름이 오는 필드 그룹을 정의합니다. 필드 그룹은 사용자 정의 필드 이름과 XPath 표현식의 매핑을 포함하는 연관 배열로, 이제 에 groups
설정된 컨텍스트에 상대적입니다. 필드 이름은 유효한 Python 변수 이름이어야 합니다.
다음 예는 그룹 flags
및 해당 필드 group fields_flags
을 정의합니다. flags
그룹은 컨텍스트 physical-interface/if-device-flags
를 계층 수준으로 설정하고present
, 및 running
필드는 각각 및 ifdf-running
요소의 값에 ifdf-present
액세스합니다.
EthPortView: groups: flags: if-device-flags fields_flags: present: ifdf-present running: ifdf-running
필드 또는 필드 그룹 중 어떤 것을 사용하든, 사용자 정의 필드 이름을 사용하여 Junos PyEZ 스크립트 내에서 동일한 방식으로 값에 액세스합니다.