이 페이지에서
PyEZ 운영 테이블 Junos 사용하여 구조화 출력 구문 분석
Junos 구조화된 출력을 위한 PyEZ 운영(op) 테이블은 Junos 디바이스에서 실행되는 RPC의 XML 출력에서 특정 데이터를 추출합니다. 테이블 정의를 Python 모듈로 로드하거나 가져온 후 테이블 항목을 검색하고 데이터를 추출하고 조작할 수 있습니다.
특정 디바이스에서 정보를 검색하려면 테이블 인스턴스를 생성하여 대상 디바이스를 나타내는 개체와 Device
연결해야 합니다. 예를 들어:
from jnpr.junos import Device from jnpr.junos.op.ethport import EthPortTable with Device(host='router.example.com') as dev: eths = EthPortTable(dev)
다음 섹션에서는 데이터를 검색하고 조작하는 방법에 대해 논의합니다.
테이블 항목 검색
테이블 item
속성은 운영 명령 출력에서 어떤 항목을 추출할지 결정합니다. 예를 들어, 참조용으로 여기에 포함된 Junos PyEZ EthPortTable 정의는 기본적으로 명령을 실행하고 show interfaces "[afgxe][et]-*" media
출력에서 항목을 추출합니다 physical-interface
.
--- EthPortTable: rpc: get-interface-information args: media: True interface_name: '[afgxe][et]-*' args_key: interface_name item: physical-interface view: EthPortView
Python 스크립트에서 방법을 호출하고 원하는 인수를 get()
제공하여 테이블 항목을 검색합니다. 표 정의에 속성에 기본 인수가 포함되어 있는 args
경우, 실행된 RPC는 인자 목록에서 무시하지 않는 한 호출 get()
할 때 이러한 인수를 자동으로 포함합니다.
모든 테이블 항목을 검색하려면 빈 인자 목록이 있는 방법을 호출 get()
합니다.
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()
또한 메서드에 인수로 명령 옵션을 전달하여 특정 테이블 항목을 검색할 get()
수 있습니다. 명령 옵션이 값을 취하지 않는 플래그인 경우, 인자 목록에서 옵션을 True와 동일하게 설정합니다. 그렇지 않으면 인자 목록의 키-값 쌍으로 인자와 원하는 값을 포함합니다. Junos CLI에서 작동 명령에 대한 가능한 인수를 검토할 수 있습니다.
기본적으로 EthPortTable은 식"[afgxe][et]-*"
과 일치하는 이름이 있는 이더넷 인터페이스에 대한 정보를 반환합니다. ge-0/3/0 인터페이스에 대해서만 테이블 항목을 검색하려면 에 인get()
자로 을(를) 포함합니다interface_name='ge-0/3/0'
.
eths = EthPortTable(dev) eths.get(interface_name='ge-0/3/0')
Junos OS 명령줄 인터페이스(CLI)의 옵션 이름이 하이픈으로 지정되면 이름의 대시를 밑줄로 변경해야 합니다. 그러나 인수 값은 문자열이므로 하이픈을 포함할 수 있습니다.
CLI 명령이 옵션 이름이나 키워드를 명시적으로 지정할 필요가 없는 선택적 첫 번째 인수를 취하는 경우, 테이블 args_key
속성이 이 인수를 참조하는 경우 방법 인자 목록에서 옵션 이름을 get()
생략할 수 있습니다. 다음 예 show interfaces
에서 명령은 인터페이스 이름을 선택적 인자로 사용합니다.
user@router> show interfaces ? Possible completions: <[Enter]> Execute this command <interface-name> Name of physical or logical interface ge-0/0/0 ge-0/0/0.0
EthPortTable 정의 args_key
속성은 선택적 인수를 로 interface_name
정의하며, 이는 방법 인자 목록에서 옵션 이름을 명시적으로 지정하지 않고도 이 인수를 get()
사용할 수 있도록 합니다.
eths = EthPortTable(dev) eths.get('ge-0/3/0')
기본적으로 Junos PyEZ는 모든 op 테이블 키와 값을 정규화하며, 이는 모든 선행 및 후행 공백을 제거하고 내부 공백 문자의 시퀀스를 단일 공간으로 대체합니다. 표준화를 비활성화하려면 메서드에 대한 인수로 을(를get()
) 포함합니다normalize=False
.
eths = EthPortTable(dev) eths.get(interface_name='ge-0/3/0', normalize=False)
액세스 테이블 항목
테이블 항목을 검색한 후 Python 사전처럼 취급할 수 있습니다. Python 라이브러리에서 방법을 사용하여 항목에 액세스하고 조작할 수 있습니다.
테이블 항목 이름에 해당하는 사전 키 목록을 보려면 방법을 호출합니다 keys()
.
eths = EthPortTable(dev).get(interface_name='ge-0/3/0') print (eths.keys())
이 경우 키는 하나만 있습니다.
['ge-0/3/0']
Python in
연산자를 사용하여 테이블 항목에 특정 키가 존재하는지 확인할 수 있습니다.
if 'ge-0/3/0' in eths:
각 키와 연결된 필드 또는 값 목록을 보려면 방법을 호출합니다 values()
. 방법은 values()
보기에서 정의된 각 필드에 대한 name-value 쌍이 있는 튜플 목록을 반환합니다.
print (eths.values())
[[('oper', 'down'), ('rx_packets', '0'), ('macaddr', '00:00:5E:00:53:01'), ('description', None), ('rx_bytes', '0'), ('admin', 'up'), ('mtu', 1514), ('running', True), ('link_mode', None), ('tx_bytes', '0'), ('tx_packets', '0'), ('present', True)]]
키와 값을 모두 포함한 전체 항목 목록을 보려면 방법을 호출합니다 items()
.
print (eths.items())
[('ge-0/3/0', [('oper', 'down'), ('rx_packets', '0'), ('macaddr', '00:00:5E:00:53:01'), ('description', None), ('rx_bytes', '0'), ('admin', 'up'), ('mtu', 1514), ('running', True), ('link_mode', None), ('tx_bytes', '0'), ('tx_packets', '0'), ('present', True)])]
테이블을 통해 반복하는 방법
테이블은 목록 또는 사전을 루프하는 것과 동일한 방식으로 각 테이블 항목을 루프할 수 있는 반복을 지원합니다. 이를 통해 원하는 필드를 쉽게 포맷하고 인쇄할 수 있습니다.
모듈에 jnpr.junos.op
포함된 EthPortTable 정의는 명령을 실행하고 show interfaces "[afgxe][et]-*" media
출력에서 항목을 추출합니다 physical-interface
. 다음 코드는 항목을 루프 physical-interface
하고 각 이더넷 포트의 이름과 운영 상태를 인쇄합니다.
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 port in eths: print ("{}: {}".format(port.name, port.oper))
oper
EthPortView에 정의된 필드는 출력에 있는 요소의 oper-status
값에 해당합니다. EthPortView 정의는 필드를 정의 name
하지 않습니다. 기본적으로 각 보기 항목에는 name
해당 항목을 고유하게 식별하는 키를 참조하는 속성이 있습니다.
출력에는 인터페이스 이름과 작동 상태가 포함됩니다.
ge-0/3/0: up ge-0/3/1: up ge-0/3/2: up ge-0/3/3: up