SNMP 스크립트에 필요한 상용구
Junos OS SNMP 스크립트는 XSLT(Extensible Stylesheet Language Transformations), SLAX(Stylesheet Language Alternative syntaX) 또는 Python으로 작성할 수 있습니다. SNMP 스크립트에는 기본 스크립트 기능뿐만 아니라 Junos OS 확장 기능 및 명명된 템플릿과 같이 스크립트 내에서 사용되는 모든 옵션 기능 모두에 대해 해당 스크립트 언어에 필요한 필수 상용구가 포함되어야 합니다. 이 주제는 XSLT, SLAX 및 Python SNMP 스크립트에서 사용할 수 있는 표준 상용구를 제공합니다.
SNMP 스크립트에 대한 SLAX 상용구
SLAX SNMP 스크립트 상용구는 다음과 같습니다.
1 version 1.2;
2 ns junos = "http://xml.juniper.net/junos/*/junos";
3 ns xnm = "http://xml.juniper.net/xnm/1.1/xnm";
4 ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";
5 ns dyn = "http://exslt.org/dynamic";
6 ns snmp extension = "http://exslt.org/functions";
7 match / {
8 <snmp-script-results> {
9 var $snmp-action = snmp-script-input/snmp-action;
10 var $snmp-oid = snmp-script-input/snmp-oid;
<!-- ... insert your code here ... -->
11 <snmp-oid> $snmp-oid;
12 <snmp-type> $snmp-type;
13 <snmp-value> $snmp-value;
}
}
SLAX 및 XSLT SNMP 스크립트는 Junos XML 및 Junos XML 프로토콜 태그 요소를 기반으로 합니다. 모든 XML 요소와 마찬가지로, 꺾쇠 괄호는 여는 태그와 닫는 태그에서 Junos XML 또는 Junos XML 프로토콜 태그 요소의 이름을 묶습니다. 이는 XML 규칙이며 대괄호는 전체 태그 요소 이름의 필수 부분입니다. Junos OS CLI 명령 문자열의 선택적 부분을 나타내기 위해 설명서에 사용된 꺾쇠 괄호와 혼동해서는 안 됩니다.
라인 1은 SLAX 버전을 1.2로 지정합니다.
1 version 1.2;
라인 2부터 6까지는 SNMP 스크립트에서 일반적으로 사용되는 모든 네임스페이스 매핑을 나열합니다. 이 예에서 이러한 접두사 모두가 사용되는 것은 아닙니다. 모든 네임스페이스 매핑을 나열하면 이후 버전의 스크립트에서 매핑을 사용하는 경우 오류를 방지할 수 있습니다. 이러한 네임스페이스 매핑을 사용하면 스크립트에서 확장 함수와 명명된 템플릿을 사용할 수 있습니다. 이러한 확장 기능과 명명된 템플릿은 Junos OS 자동화 스크립트의 확장 기능 이해 및 Junos OS 자동화 스크립트의 명명된 템플릿 이해에서 설명합니다.
5행과 6행에는 EXSLT 네임스페이스 매핑이 있습니다. SNMP 확장 함수는 연결된 URI http://exslt.org/functions 와 함께 네임스페이스에 정의됩니다. 라인 6은 확장 네임스페이스를 snmp EXSLT 함수 네임스페이스에 등록하여 SLAX 스크립트 내에서 접두사로 사용하여 snmp 사용자 지정 함수를 정의할 수 있도록 합니다. EXSLT 네임스페이스에 대한 자세한 내용은 http://exslt.org/func/index.html 를 참조하십시오.
2 ns junos = "http://xml.juniper.net/junos/*/junos"; 3 ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; 4 ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; 5 ns dyn = "http://exslt.org/dynamic"; 6 ns snmp extension = "http://exslt.org/functions";
라인 7은 구성 계층의 최상위 수준을 나타내는 이름 없는 템플릿 match /을 정의합니다. 스크립트의 모든 XPath(XML Path Language ) 식은 구성 계층의 최상위 요소에서 시작해야 합니다. 이를 통해 스크립트는 가능한 모든 Junos XML 및 Junos XML 프로토콜 원격 절차 호출(RPC)에 액세스할 수 있습니다. 자세한 내용은 XPath 개요를 참조하십시오.
7 match / {
tag 요소 뒤의 match / container 태그는 <snmp-script-results> 줄 8과 같이 최상위 하위 태그여야 합니다. 이 컨테이너의 값이 OID 요청자에게 반환됩니다.
8 <snmp-script-results> {
9행과 10행은 코드에서 작업이 get 또는 get-next인지 여부와 OID 값을 확인하는 데 사용할 수 있는 해당 요소를 기반으로 변수를 정의합니다.
9 var $snmp-action = snmp-script-input/snmp-action; 10 var $snmp-oid = snmp-script-input/snmp-oid;
10행과 11행 사이에는 템플릿 내에서 match / 호출되는 XSLT 템플릿이 포함된 추가 코드를 정의할 수 있습니다.
라인 11부터 13은 SNMP 스크립트가 OID 요청자에게 반환하는 값을 정의합니다. 의 <snmp-oid> 값은 의 snmp-script-input/snmp-oid입력 값에서 가져옵니다. SNMP 스크립트 기능의 경우, 에 대해 <snmp-type> 다음과 같은 객체 식별자 유형이 지원됩니다.
Counter32Counter64Integer32Unsigned32Octet String
을 <snmp-value> 스크립트의 반환 값으로 설정합니다.
11 <snmp-oid> $snmp-oid; 12 <snmp-type> $snmp-type; 13 <snmp-value> $snmp-value;
SNMP 스크립트용 XSLT 상용구
XSLT 상용구는 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8" 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"
xmlns:dyn="http://exslt.org/dynamic"
xmlns:snmp="http://exslt.org/functions"
version="1.0" extension-element-prefixes="snmp">
<xsl:template match="/">
<snmp-script-results>
<xsl:variable name="snmp-action" select="snmp-script-input/snmp-action"/>
<xsl:variable name="snmp-oid" select="snmp-script-input/snmp-oid"/>
<!-- Insert your code here -->
<snmp-oid>
<xsl:value-of select="$snmp-oid"/>
</snmp-oid>
<snmp-type>
<xsl:value-of select="$snmp-type"/>
</snmp-type>
<snmp-value>
<xsl:value-of select="$snmp-value"/>
</snmp-value>
</snmp-script-results>
</xsl:template>
</xsl:stylesheet>
SNMP 스크립트용 Python 상용구
Python SNMP 스크립트에는 필수 상용구가 없지만 스크립트에 사용되는 모든 개체를 가져와야 합니다. 스크립트에 전달된 작업 및 OID 값을 검색하고 요청된 MIB 개체에 대한 데이터를 반환하는 , get_snmp_oid(), 및 emit_snmp_attributes() 함수를 사용하려면 get_snmp_action()Python SNMP 스크립트에 명령문이 포함되어야 import jcs 합니다.
import jcs if __name__ == '__main__':
파이썬 자동화 스크립트는 스크립트 시작 부분에 인터프리터 지시문 줄(#!/usr/bin/env python)을 포함할 필요가 없습니다. 그러나 프로그램이 있는 경우 프로그램은 여전히 올바르게 실행됩니다.