SNMP 스크립트에 필요한 상용구
Junos OS SNMP 스크립트는 확장형 스타일시트 언어 변환(XSLT), 스타일시트 언어 대체 구문(SLAX) 또는 Python으로 작성할 수 있습니다. SNMP 스크립트에는 기본 스크립트 기능 모두에 필요한 스크립트 언어에 필요한 상용구와 Junos OS 확장 기능 및 명명된 템플릿과 같은 스크립트 내에서 사용되는 선택적 기능이 포함되어야 합니다. 이 주제는 XSLT, SLAX 및 Python SNMP 스크립트에서 사용할 수 있는 표준 보일러 플레이트를 제공합니다.
SNMP 스크립트를 위한 SLAX 상용구
SLAX SNMP 스크립트 상용구는 다음과 같습니다.
1 version 1.0; 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호는 XML 버전을 1.0으로 지정합니다.
1 version 1.0;
라인 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 /
을 정의합니다. 스크립트의 모든 XML 경로 언어 (XPath) 표현식은 구성 계층의 최상위 요소에서 시작해야 합니다. 이를 통해 스크립트는 가능한 모든 Junos XML에 액세스하고 JUNOS XML 프로토콜 원격 프로시저 호출(RPC)에 액세스할 수 있습니다. 자세한 내용은 XPath 개요를 참조하십시오.
7 match / {
태그 요소 후 match /
, <snmp-script-results>
컨테이너 태그는 8행에 표시된 대로 최상위 하위 태그여야 합니다. 이 컨테이너의 값은 OID 요청자가 반환합니다.
8 <snmp-script-results> {
라인 9와 10은 코드에서 사용할 수 있는 해당 요소를 기반으로 변수를 정의하여 작업이 제공되는지 또는 다음 작업을 수행할지, OID의 값을 결정할 수 있습니다.
9 var $snmp-action = snmp-script-input/snmp-action; 10 var $snmp-oid = snmp-script-input/snmp-oid;
10행과 11행 사이에 템플릿 내에서 호출되는 XSLT 템플릿을 포함하는 추가 코드를 정의할 match /
수 있습니다.
라인 11~13은 SNMP 스크립트가 OID 요청자에게 반환하는 값을 정의합니다. 의 값은 의 <snmp-oid>
입력 값 snmp-script-input/snmp-oid
에서 가져온다. SNMP 스크립트 기능의 경우 다음과 같은 개체 식별자 유형 <snmp-type>
이 지원됩니다.
Counter32
Counter64
Integer32
Unsigned32
Octet 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 스크립트에는 필요한 상용구가 없지만 스크립트에서 사용되는 모든 개체를 가져와야 합니다. Python SNMP 스크립트는 스크립트에 전달된 작업 및 OID 값을 검색하고 emit_snmp_attributes()
요청된 관리 정보 베이스(MIB) 개체에 대한 데이터를 반환하는 , get_snmp_oid()
및 기능을 사용get_snmp_action()
하려면 명령문을 포함 import jcs
해야 합니다.
import jcs if __name__ == '__main__':
Python 자동화 스크립트는 스크립트 시작 시 인터프리터 지시줄(#!/usr/bin/env python
)을 포함할 필요가 없습니다. 그러나 프로그램이 존재하면 프로그램이 여전히 올바르게 실행됩니다.