emit-change Template (SLAX and XSLT) and emit_change (Python)
구문
Python 구문
jcs.emit_change(content, tag, format)
SLAX 구문
call jcs:emit-change($dot=expression, $name = name($dot), $tag = "(change | transient-change)" { with $content = { ... } with $message = { expr "message"; } }
XSLT 구문
<xsl:call-template name="jcs:emit-change"> <xsl:with-param name="content"> ... </xsl:with-param> <xsl:with-param name="dot" select="expression"/> <xsl:with-param name="message"> <xsl:text>message</xsl:text> </xsl:with-param> <xsl:with-param name="name" select="name($dot)"/> <xsl:with-param name="tag" select="'(change | transient-change)'"/> </xsl:call-template>
설명
구성에 대한 영구 또는 일시적 변경을 생성합니다.
매개 변수
content |
지속적 또는 일시적 변화의 내용. SLAX 및 XSLT 스크립트에서는 이(가) 상대적 |
dot |
변경이 이루어질 계층 수준을 지정하는 XPath 표현식입니다. 기본 위치는 스크립트가 현재 평가하고 있는 XML 계층의 위치입니다. SLAX 스크립트의 매개 변수 또는 |
format |
Python 커밋 스크립트를 통해 로드된 구성 데이터의 형식. 유일한 지원 형식은 입니다 |
message |
구성이 변경되었음을 사용자에게 알리는 CLI에 표시된 경고 메시지. 메시지 매개 변수는 XML 계층의 현재 위치에 기본값인 편집 경로를 자동으로 포함합니다. 기본 편집 경로를 변경하려면 SLAX 스크립트의 |
name |
에서는 현재 요소 또는 속성을 참조할 수 있습니다. |
tag |
생성할 변경 유형. 을 지정 |
사용 예
다음 예는 XSLT 커밋 스크립트에서 템플릿을 호출 jcs:emit-change
하는 방법을 보여줍니다.
<xsl:template match="configuration"> <xsl:for-each select="interfaces/interface/unit[family/iso]"> <xsl:if test="not(family/mpls)"> <xsl:call-template name="jcs:emit-change"> <xsl:with-param name="message"> <xsl:text>Adding 'family mpls' to ISO-enabled interface</xsl:text> </xsl:with-param> <xsl:with-param name="content"> <family> <mpls/> </family> </xsl:with-param> </xsl:call-template> </xsl:if> </xsl:for-each> </xsl:template>
IS-IS가 활성화되어 있지만 계층 수준에 명령문이 포함되지 않은 family mpls
하나 이상의 인터페이스를 포함하는 [edit interfaces interface-name unit logical-unit-number]
구성을 커밋할 때 템플릿 jcs:emit-change
은 구성에 문을 추가하고 family mpls
다음 CLI 출력을 생성합니다.
[edit] user@host# commit [edit interfaces interface so-1/2/3 unit 0] warning: Adding 'family mpls' to ISO-enabled interface [edit interfaces interface so-1/2/3 unit 0] warning: Adding ISO-enabled interface so-1/2/3.0 to [protocols mpls] [edit interfaces interface so-1/3/2 unit 0] warning: Adding 'family mpls' to ISO-enabled interface [edit interfaces interface so-1/3/2 unit 0] warning: Adding ISO-enabled interface so-1/3/2.0 to [protocols mpls] commit complete
템플릿의 jcs:emit-change
매개 변수는 content
구성에 대한 변경을 지정하는 더 간단한 방법을 제공합니다. 예를 들어, 다음 코드를 고려하십시오.
<xsl:with-param name="content"> <family> <mpls/> </family> </xsl:with-param>
SLAX 및 XSLT 스크립트에서 템플릿은 jcs:emit-change
매개 변수를 content
요청으로 <change>
변환합니다. 요청은 <change>
제공된 부분 구성 컨텐츠를 현재 컨텍스트 노드의 전체 계층에 삽입합니다. 따라서 템플릿은 jcs:emit-change
매개 변수의 계층 정보를 content
다음 코드로 변경합니다.
<change> <interfaces> <interface> <name><xsl:value-of select="name"/></name> <unit> <name><xsl:value-of select="unit/name"/></name> <family> <mpls/> </family> </unit> </interface> </interfaces> </change>
임시 변경이 필요한 tag
경우, 여기에 표시된 대로 매개 변수가 'transient-change
'으로 전달될 수 있습니다.
<xsl:with-param name="tag" select="'transient-change'"/>
XSLT가 문자열 ""과 "transient-change
"라는transient-change
노드의 내용을 구별할 수 있도록 추가 따옴표가 필요합니다. 변경이 컨텍스트 노드가 아닌 노드와 상대적인 경우, 다음 예제에 표시된 대로 매개 변수 dot
를 해당 노드로 설정할 수 있습니다. 여기서 컨텍스트는 계층 수준으로 설정 [edit chassis]
됩니다.
<xsl:for-each select="interfaces/interface/unit"> ... <xsl:call-template name="jcs:emit-change"> <xsl:with-param name="dot" select="chassis"/> ...
다음 Python 커밋 스크립트는 구성에 대한 지속적인 변경을 생성합니다.
import jcs if __name__ == '__main__': script = "system-check.py" change_xml = """<system><scripts><op> <file><name>{0}</name></file></op> </scripts></system>""".format(script) jcs.emit_change(change_xml, "change", "xml")