Salt를 사용하여 Junos OS를 실행하는 디바이스에서 RPC 실행
주니퍼 네트웍스는 Salt를 사용하여 Junos OS를 실행하는 디바이스를 관리할 수 있도록 지원하며, Junos 실행 및 상태 모듈(Salt)은 매니지드 디바이스에서 운영 및 구성 작업을 수행할 수 있는 기능을 정의합니다. salt.modules.junos.rpc
실행 기능과 salt.states.junos.rpc
상태 기능을 사용하면 Junos OS를 실행하는 디바이스에서 원격 절차 호출(RPC)을 실행하여 작업을 수행하거나 정보를 검색할 수 있습니다.
다음 섹션에서는 기능을 사용하고, 장비 응답을 구문 분석하고, 출력 형식을 지정하고, 출력을 파일에 저장하는 방법에 대해 설명합니다.
Junos XML API 이해
Junos XML API는 Junos OS 구성 명령문 및 운영 모드 명령의 XML 표현입니다. Junos OS 구성 계층의 모든 명령문과 CLI 운영 모드에서 발행하는 많은 명령에 동등한 XML을 정의합니다. Junos XML 대응 명령이 포함된 각 운영 모드 명령은 요청 태그 요소와 필요한 경우 응답 태그 요소에 매핑됩니다. 요청 태그는 NETCONF 또는 Junos XML 프로토콜 세션 내의 RPC(Remote Procedure Call)에서 사용되어 Junos OS를 실행하는 장비에서 정보를 요청합니다. 서버는 응답 태그 요소 내에 동봉된 Junos XML 요소를 사용하여 응답을 반환합니다.
Junos XML 대응 요소가 있는 모든 운영 명령은 Junos XML API Explorer에 나열됩니다. CLI에 Junos XML 대응 요소가 있는 모든 운영 모드 명령에 대해 Junos XML 요청 태그 요소를 명령 후에 추가하여 | display xml rpc
표시할 수도 있습니다. 다음 예제에서는 명령에 대한 요청 태그를 show route
표시합니다.
user@router> show route | display xml rpc <rpc-reply xmlns:junos="http://xml.juniper.net/junos/19.2R1/junos"> <rpc> <get-route-information> </get-route-information> </rpc> </rpc-reply>
Salt를 사용하여 Junos OS를 실행하는 디바이스를 관리하는 경우 이 기능을 사용하여 junos.rpc
디바이스에서 RPC를 실행하고 응답을 반환할 수 있습니다.
junos.rpc 기능 구문
salt.modules.junos.rpc
실행 기능 구문은 다음과 같습니다.
salt 'target' junos.rpc rpc dest=dest format=format arg1=arg1-value arg2=arg2-value
salt.states.junos.rpc
상태 기능은 다음과 같은 구문을 지원합니다.
rpc: junos.rpc: - dest: dest - format: format - arg1: arg1-value - arg2: arg2-value
id: junos.rpc: - name: rpc - dest: dest - format: format - arg1: arg1-value - arg2: arg2-value
어디:
arg=arg-value
—(옵션) 1개 이상의 RPC 인수(예:interface-name=ge-1/1/1
해당 값 포함) 또는terse=True
.dest
—(옵션) RPC 회신이 작성된 프록시 미니언 서버의 대상 파일 경로 대상 디바이스에서 절대 경로를 지정하지 않으면 경로가 최상위 루트(/) 디렉토리와 상대적입니다.id
—상태 선언을 위한 사용자 정의 식별자.format
—(옵션) 지정된 경우 대상 파일에 기록된 RPC 회신 형식 , 또는json
를xml
지정합니다text
.rpc
—예를 들어get-system-uptime-information
Junos OS를 실행하는 디바이스에서 실행하기 위한 원격 절차 호출 .
junos.rpc 실행 기능으로 RPC를 실행하는 방법
salt.modules.junos.rpc
실행 기능을 사용하면 Junos OS를 실행하는 디바이스에서 RPC를 실행할 수 있습니다. 이 기능에는 실행해야 하는 RPC인 하나의 인수가 필요합니다. 작업이 성공하면 명령이 반환out: True
되고 키에는 rpc_reply
RPC 회신이 포함됩니다.
예를 들어, 다음 명령은 대상 장비에서 RPC를 실행하고 get-system-uptime-information
표준 출력으로 응답을 표시합니다.
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get-system-uptime-information router1: ---------- out: True rpc_reply: ---------- system-uptime-information: ---------- current-time: ---------- date-time: 2019-06-13 17:01:32 PDT last-configured-time: ---------- date-time: 2019-06-12 18:47:12 PDT time-length: 22:14:20 user: saltuser ...
RPC 인수 또는 함수의 출력 형식 및 위치 지정에 대한 자세한 내용은 다음을 참조하십시오.
junos.rpc 상태 기능으로 RPC를 실행하는 방법
Salt 상태 파일 내의 salt.states.junos.rpc
상태 기능을 사용하여 Junos OS를 실행하는 디바이스에서 RPC를 실행할 수 있습니다. RPC를 데이터 구조의 첫 번째 줄로 정의하거나 해당 기능의 인수 목록에서 정의할 수 있습니다. 동일한 상태 파일 내에서 동일한 RPC를 여러 번 실행해야 하는 경우 인수 목록 내에서 RPC를 정의해야 합니다.
다음 상태 파일은 상태 기능을 사용하여 junos.rpc
대상 장비에서 2개의 RPC를 실행하고 해당 출력을 파일에 저장합니다. 이 경우, 상태가 여러 대상에 id
적용될 때 출력 파일을 구별하기 위해 그레인지에 저장된 프록시 식별자가 대상 파일 이름에 포함됩니다.
saltuser@salt-master:~$ cat /srv/salt/junos_rpc.sls get-system-uptime-information: junos.rpc: - dest: /var/log/salt/output/{{ grains['id'] }}_junos_rpc_system_uptime.xml get-interface-information: junos.rpc: - interface-name: fxp0.0 - terse: True - dest: /var/log/salt/output/{{ grains['id'] }}_fxp0_status.txt - format: text
상태를 적용하면 Salt 마스터가 표준 출력에서 각 RPC에 대한 RPC 회신을 표시하고 프록시 미니언 서버의 해당 대상 파일에 대한 출력을 저장합니다.
saltuser@salt-master:~$ sudo salt 'router1' state.apply junos_rpc router1: ---------- ID: get-system-uptime-information Function: junos.rpc Result: True Comment: Started: 23:49:00.633541 Duration: 180.134 ms Changes: ---------- out: True rpc_reply: ---------- system-uptime-information: ---------- current-time: ---------- date-time: 2019-07-26 16:49:00 PDT last-configured-time: ---------- date-time: 2019-07-24 10:17:34 PDT time-length: 2d 06:31 user: saltuser protocols-started-time: ---------- date-time: 2019-07-01 07:07:27 PDT time-length: 3w4d 09:41 system-booted-time: ---------- date-time: 2019-07-01 07:03:56 PDT time-length: 3w4d 09:45 time-source: NTP CLOCK uptime-information: ---------- active-user-count: 1 date-time: 4:49PM load-average-1: 0.01 load-average-15: 0.01 load-average-5: 0.04 up-time: 25 days, 9:45 ---------- ID: get-interface-information Function: junos.rpc Result: True Comment: Started: 23:49:00.813806 Duration: 900.33 ms Changes: ---------- out: True rpc_reply: Interface Admin Link Proto Local Remote fxp0.0 up up inet 198.51.100.2/24 Summary for router1 ------------ Succeeded: 2 (changed=2) Failed: 0 ------------ Total states run: 2 Total run time: 1.080 s
saltuser@minion:~$ ls /var/log/salt/output router1_fxp0_status.txt router1_junos_rpc_system_uptime.xml
상태가 여러 대상에 적용되는 경우, 정의된 파일 이름이 고유 식별자를 참조하기 때문에 Salt는 이 경우 프록시 미니언 서버의 각 대상에 대해 서로 다른 출력 파일을 생성합니다.
saltuser@salt-master:~$ sudo salt '*' state.apply junos_rpc
saltuser@minion:~$ ls /var/log/salt/output router1_fxp0_status.txt router1_junos_rpc_system_uptime.xml router2_fxp0_status.txt router2_junos_rpc_system_uptime.xml
상태 파일은 파일에서 동일한 상태 식별자를 여러 번 사용할 수 없습니다. 따라서 상태 파일에서 동일한 RPC 요청 태그를 여러 번 사용하려면 기능 인수 목록에서 RPC를 정의해야 합니다. 예를 들어:
saltuser@salt-master:~$ cat /srv/salt/junos_rpc.sls Get fxp0 interface information: junos.rpc: - name: get-interface-information - interface-name: fxp0.0 - terse: True - dest: /var/log/salt/output/{{ grains['id'] }}_fxp0_status.txt - format: text Get ge interface information: junos.rpc: - name: get-interface-information - interface-name: ge-1* - terse: True - dest: /var/log/salt/output/{{ grains['id'] }}_ge_interfaces_status.txt - format: text
RPC 인수를 지정하는 방법
이 junos.rpc
기능은 RPC에 대한 키워드 인수 및 값을 지정하는 것을 지원합니다. 인수가 값을 지정하는 경우 인수 이름을 포함하고 값을 지정합니다. 인수가 값을 요구하지 않는 경우 값을 같게 True
설정합니다.
예를 들어, 다음 RPC에는 두 개의 인수가 포함되며, 그 중 하나는 값을 찍습니다.
saltuser@router1> show interfaces ge-1/1/1 terse | display xml rpc <rpc-reply xmlns:junos="http://xml.juniper.net/junos/18.4R1/junos"> <rpc> <get-interface-information> <terse/> <interface-name>ge-1/1/1</interface-name> </get-interface-information> </rpc> <cli> <banner></banner> </cli> </rpc-reply>
Salt 마스터 명령줄에서 동급 RPC를 실행하려면 이 및 terse=True
인수를 interface-name='ge-1/1/1'
포함합니다.
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get-interface-information interface-name='ge-1/1/1' terse=True
마찬가지로 Salt 상태 파일에서도 마찬가지입니다.
saltuser@salt-master:~$ cat /srv/salt/junos_interface_information.sls get-interface-information: junos.rpc: - interface-name: ge-1/1/1 - terse: True
하이픈으로 표현된 요소 이름을 사용하거나 하이픈 대신 밑거름을 사용하여 Junos OS 인수를 지정할 수 있습니다.
Salt 마스터 명령줄에서 명령을 실행할 때 Salt는 CLI 입력 PyYAML
을 통과하여 적절한 Python 데이터 유형으로 로드되도록 합니다. 정수로 구문 분석을 수행하거나 정수에 구문 분석하는 문자열 값을 취하는 인수가 올바르게 구문 분석되지 않을 수도 있습니다. 이러한 인수의 경우 다음 방법 중 하나를 사용하여 값을 제공할 수 있습니다.
백슬래시(\ )를 사용하여 문자열 값에 대한 따옴표를 피하십시오.
단일 견적 표시를 동봉하기 위해 이중 따옴표를 사용하고 그 반대의 경우도 마찬가지입니다.
--no-parse=param_name
옵션을 포함합니다.
예를 들어:
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get-route-engine-information slot=\'0\' saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get-route-engine-information slot="'0'" saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get-route-engine-information slot='0' --no-parse=slot
RPC 출력을 파일에 저장하는 방법
이 기능을 실행할 때 인수를 junos.rpc
포함 dest
시키고 대상 파일의 경로를 지정함으로써 프록시 미니언 서버의 파일에 반환된 데이터를 저장할 수 있습니다. 절대 경로를 지정하지 않으면 경로가 최상위 루트(/) 디렉토리와 상대적입니다. 대상 이름을 가진 출력 파일이 이미 있는 경우 새 파일이 이전 파일을 덮어쓰게 됩니다.
이 인수는 dest
파일에 있는 전체 Salt 명령 응답을 저장하지 않습니다. 키에 rpc_reply
포함된 RPC 회신만 저장합니다.
다음 명령은 RPC의 출력 get-system-uptime-information
을 표시하고 프록시 미니언 서버의 지정된 경로에 값을 저장합니다 rpc_reply
.
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get-system-uptime-information dest='/home/saltuser/rpc_output.txt'
saltuser@minion:~$ ls rpc_output.txt
RPC 출력의 형식을 지정하는 방법
기본적으로 이 junos.rpc
기능은 표준 출력에 표시되는 데이터와 지정된 경우 대상 파일에 저장된 데이터에 대해 RPC 출력을 XML 형식으로 반환합니다. 다른 출력 형식을 지정하려면 인수를 format
포함하고 원하는 형식과 값을 설정합니다. 텍스트 형식 또는 Junos XML 요소를 요청하려면 사용하거나 xml
각각을 사용합니다text
. JSON 형식으로 junos.rpc
대상 파일에 출력을 저장하려면 을 지정합니다json
.
다음 명령은 RPC를 get-system-uptime-information
실행하고 데이터를 텍스트 형식으로 반환합니다.
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get-system-uptime-information format=text dest=/home/saltuser/router1-get-system-uptime-information.txt router1: ---------- out: True rpc_reply: Current time: 2019-07-29 17:15:03 PDT Time Source: NTP CLOCK System booted: 2019-07-01 07:03:56 PDT (4w0d 10:11 ago) Protocols started: 2019-07-01 07:07:27 PDT (4w0d 10:07 ago) Last configured: 2019-07-24 10:17:34 PDT (5d 06:57 ago) by saltuser 5:15PM up 28 days, 10:11, 1 user, load averages: 0.91, 0.30, 0.15
출력은 프록시 미니언 서버의 대상 파일에 요청된 형식으로 작성됩니다.
saltuser@minion:~$ cat /home/saltuser/router1-get-system-uptime-information.txt Current time: 2019-07-29 17:15:03 PDT Time Source: NTP CLOCK System booted: 2019-07-01 07:03:56 PDT (4w0d 10:11 ago) Protocols started: 2019-07-01 07:07:27 PDT (4w0d 10:07 ago) Last configured: 2019-07-24 10:17:34 PDT (5d 06:57 ago) by saltuser 5:15PM up 28 days, 10:11, 1 user, load averages: 0.91, 0.30, 0.15