이 페이지의 내용
예: op 스크립트를 사용하여 파일 가져오기
이 예제의 op 스크립트는 Junos XML 프로토콜 file-get
작업을 사용하여 원격 서버에서 파일 내용을 읽습니다.
요구 사항
이 예에서는 Junos OS를 실행하는 디바이스를 사용합니다.
개요 및 Op 스크립트
Junos XML 프로토콜 file-get
작업은 파일의 내용을 읽습니다. 명령을 사용하기 file-get
위한 기본 구문은 다음과 같습니다.
<rpc> <file-get> <filename>value</filename> <encoding>value</encoding> </file-get> </rpc>
명령과 함께 사용되는 태그 요소는 다음과 file-get
같습니다.
encoding
- (필수) 사용되는 인코딩 유형을 지정합니다. ,base64
또는 인코딩을 사용할ASCII
수 있습니다raw
.filename
- (필수) 이 태그 내에 가져올 파일의 전체 또는 상대 경로와 파일 이름을 포함합니다. 상대 경로를 사용할 때 작업이 로컬로 실행되는 경우file-get
지정된 경로는 /var/tmp/ 디렉토리에 상대적입니다. 작업이 연결 핸들의 컨텍스트 내에서 원격으로 실행되는 경우 경로는 사용자의 홈 디렉터리를 기준으로 합니다.
ASCII 인코딩을 file-get
사용하는 경우 작업은 가져온 파일의 모든 제어 문자를 유니코드 문자 'SECTION SIGN'(U+00A7)으로 변환합니다.
XSLT 구문
다음 샘플 스크립트는 원격 디바이스에 연결하고 지정된 파일의 내용을 읽습니다. 스크립트는 원격 디바이스의 IP 주소 또는 호스트 이름, 파일 이름 및 파일 인코딩의 세 가지 인수를 사용합니다. arguments
변수는 스크립트의 전역 레벨에서 선언되므로 인자 이름 및 설명이 명령행 인터페이스(CLI)에 표시됩니다.
스크립트는 작업에 대한 RPC(원격 프로시저 호출)를 포함하는 변수를 선언 fileget
합니다file-get
. 명령줄 인수는 및 encoding
태그 요소의 값을 filename
정의합니다. 필수 인수 myhost
가 없으면 스크립트에서 오류가 발생하고 실행이 중지됩니다. 그렇지 않으면 스크립트는 원격 디바이스에 연결하는 데 사용할 사용자 이름과 암호를 묻는 메시지를 표시합니다.
원격 디바이스에 성공적으로 연결되면 스크립트는 연결 핸들의 컨텍스트 내에서 RPC를 실행합니다. 함수의 결과인 연산의 file-get
jcs:execute()
출력은 변수에 저장됩니다 out
. 작업에 오류가 발생하면 스크립트가 CLI에 오류를 출력합니다. file-get
작업이 성공하면 파일의 내용이 변수에 저장 out
되고 CLI에 인쇄됩니다. 그런 다음 원격 호스트에 대한 연결이 닫힙니다.
<?xml version="1.0" standalone="yes"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0" version="1.0"> <xsl:import href="../import/junos.xsl"/> <xsl:variable name="arguments"> <argument> <name>myhost</name> <description>IP address or hostname of the remote host</description> </argument> <argument> <name>filename</name> <description>name of file</description> </argument> <argument> <name>encoding</name> <description>ascii, base64, or raw</description> </argument> </xsl:variable> <xsl:param name="myhost"/> <xsl:param name="filename"/> <xsl:param name="encoding"/> <xsl:template match="/"> <op-script-results> <xsl:variable name="fileget"> <file-get> <filename> <xsl:value-of select="$filename"/> </filename> <encoding> <xsl:value-of select="$encoding"/> </encoding> </file-get> </xsl:variable> <xsl:choose> <xsl:when test="$myhost = ''"> <xnm:error> <message>missing mandatory argument 'myhost'</message> </xnm:error> </xsl:when> <xsl:otherwise> <xsl:variable name="username" select="jcs:get-input('Enter username: ')"/> <xsl:variable name="pw" select="jcs:get-secret('Enter password: ')"/> <xsl:variable name="connect" select="jcs:open($myhost, $username, $pw)"/> <xsl:choose> <xsl:when test="$connect"> <output>Connected to host. Reading file... </output> <xsl:variable name="out" select="jcs:execute($connect, $fileget)"/> <xsl:choose> <xsl:when test="$out//xnm:error"> <xsl:copy-of select="$out//xnm:error"/> </xsl:when> <xsl:otherwise> <output> <xsl:value-of select="concat('File contents: ', $out)"/> </output> </xsl:otherwise> </xsl:choose> <xsl:value-of select="jcs:close($connect)"/> </xsl:when> <xsl:otherwise> <output>No connection to host.</output> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </op-script-results> </xsl:template> </xsl:stylesheet>
SLAX 구문
version 1.0; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; import "../import/junos.xsl"; var $arguments = { <argument> { <name> "myhost"; <description> "IP address or hostname of the remote host"; } <argument> { <name> "filename"; <description> "name of file"; } <argument> { <name> "encoding"; <description> "ascii, base64, or raw"; } } param $myhost; param $filename; param $encoding; match / { <op-script-results> { var $fileget = { <file-get> { <filename>$filename; <encoding>$encoding; } } if ($myhost = '') { <xnm:error> { <message> "missing mandatory argument 'myhost'"; } } else { var $username = jcs:get-input("Enter username: "); var $pw = jcs:get-secret("Enter password: "); var $connect = jcs:open($myhost, $username, $pw); if ($connect) { <output> "Connected to host. Reading file... \n"; var $out = jcs:execute($connect, $fileget); if ($out//xnm:error) { copy-of $out//xnm:error; } else { <output> "File contents: " _ $out; } expr jcs:close($connect); } else { <output> "No connection to host."; } } } }
구성
절차
단계별 절차
스크립트를 다운로드, 사용 및 테스트하려면:To download, enable, and test the script:
XSLT 또는 SLAX 스크립트를 텍스트 파일에 복사하고, 파일 이름을 import.xsl 또는 import.slax 로 적절하게 지정한 다음, 디바이스의 / var/db/scripts/op/ 디렉터리에 복사합니다.
구성 모드에서는 계층 수준에 문을
[edit system scripts op]
포함하고 적절하게 import.xsl 또는 import.slax를 포함합니다file
.[edit system scripts op] user@host# set file import.(slax | xsl)
commit and-quit
명령을 발행하여 구성을 커밋하고 운영 모드로 돌아갑니다.[edit] user@host# commit and-quit
작동 모드 명령을 실행하여
op import
op 스크립트를 실행하고 필요한 인수를 포함합니다.
확인
스크립트 인수 확인
목적
인수 이름과 설명이 CLI에 표시되는지 확인합니다.
작업
op import ?
작동 모드 명령을 실행합니다. CLI는 스크립트의 전역 arguments
변수 내에 있는 정의를 기반으로 스크립트 인수에 대해 가능한 완료를 나열합니다.
user@host> op import ? Possible completions: <[Enter]> Execute this command <name> Argument name detail Display detailed output encoding ascii, base64, or raw filename name of file myhost IP address or hostname of the remote host | Pipe through a command
Op 스크립트 실행 확인
목적
스크립트가 예상대로 작동하는지 확인합니다.
작업
op import myhost host encoding encoding filename file
운영 모드 명령을 실행하고 메시지가 표시되면 적절한 사용자 이름과 암호를 포함합니다. 스크립트 실행에 성공하면 요청된 파일의 내용이 표시됩니다. 예를 들어:
root@host> op import myhost router1 encoding ascii filename /var/db/scripts/op/test.slax Enter username: root Enter password: Connected to host. Reading file... File contents: version 1.0; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; import "../import/junos.xsl"; ...
명령줄 인수에 원격 디바이스의 IP 주소 또는 호스트 이름을 제공하지 않으면 스크립트에서 오류가 발생하고 실행이 중단됩니다.
root@host> op import error: missing mandatory argument 'myhost'
또한 지정된 경로 또는 파일이 없으면 스크립트에서 오류가 발생합니다.
root@host> op import myhost router1 encoding ascii filename /var/db/scripts/op/test1.slax Enter username: root Enter password: Connected to host. Reading file... File contents: Failed to open file (/var/db/scripts/op/test1.slax): No such file or directory