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 탐색에 나열되어 있습니다. 명령 뒤에 옵션을 추가하여 CLI | display xml rpc 에 Junos XML 대응 항목이 있는 모든 운영 모드 명령에 대해 Junos XML 요청 태그 요소를 표시할 수도 있습니다. 다음 예제에서는 명령에 대한 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
state 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- (선택 사항) 포함할 하나 이상의 RPC 인수와 해당 값(예:interface-name=ge-1/1/1또는terse=True)입니다.dest- (선택 사항) RPC 응답이 기록되는 프록시 미니언 서버의 대상 파일 경로입니다. 대상 장치에서 절대 경로를 지정하지 않으면 해당 경로는 최상위 루트(/) 디렉토리를 기준으로 합니다.id- 상태 선언에 대한 사용자 정의 식별자입니다.format- (선택 사항) 지정된 경우 대상 파일에 기록된 RPC 응답 형식입니다. ,xml또는 을(를json) 지정합니다text.rpc- Junos OS를 실행하는 디바이스에서 실행할 원격 프로시저 호출(예:get-system-uptime-information).
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 상태 파일 내의 state 함수를 사용하여 salt.states.junos.rpc Junos OS를 실행하는 디바이스에서 RPC를 실행할 수 있습니다. RPC를 데이터 구조의 첫 번째 줄로 정의하거나 함수의 인수 목록 내에서 정의할 수 있습니다. 동일한 상태 파일 내에서 동일한 RPC를 여러 번 실행해야 하는 경우 인수 목록 내에서 RPC를 정의해야 합니다.
다음 상태 파일은 state 함수를 사용하여 junos.rpc 대상 디바이스에서 두 개의 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 함수는 표준 출력에 표시된 데이터와 대상 파일에 저장된 데이터(지정된 경우) 모두에 대해 XML 형식의 RPC 출력을 반환합니다. 다른 출력 형식을 지정하려면 인수를 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