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 |
現在の要素または属性を参照できます。XPath 関数は |
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 mpls1つ以上のインターフェイスを含む設定を[edit interfaces interface-name unit logical-unit-number]コミットすると、テンプレートはそのfamily mplsステートメントを設定に追加し、jcs:emit-change以下の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
テンプレートのパラメーターは content 、 jcs:emit-change 設定の変更を指定するためのシンプルな方法を提供します。たとえば、次のコードを考えてみましょう。
<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")