このページで
コミット スクリプトマクロを使用したカスタム設定構文の作成
コミットスクリプトマクロを使用すると、カスタム設定構文を作成し、それを標準的なJunos OS設定ステートメントに展開することができます。カスタム構文は、コミットスクリプトへの入力として機能します。コミット スクリプトの出力は、 図 1 に示すように、標準的な Junos OS 設定構文です。標準のJunos OSステートメントが設定に追加され、意図した運用変更が発生します。
入出力
マクロは、永続的または 一時的な変更 要素のいずれかを使用して、カスタム構文を標準的なJunos OS設定ステートメントに拡張します。永続的な変更を使用する場合、カスタム構文と標準のJunos OS構文の両方が候補設定に表示されます。一時変更を使用する場合、カスタム構文が候補設定に表示され、標準のJunos OS構文はチェックアウト設定にのみコピーされます。
このセクションでは、以下のトピックについて説明します。
カスタム構文の作成
マクロは、候補コンフィギュレーション内のステートメントを apply-macro 検索し、 ステートメントで指定された値を apply-macro 、コミット・スクリプトで定義された命令のセットのパラメーターとして使用することで機能します。実質的に、カスタム設定構文は二重の目的を果たします。この構文では、設定タスクを簡素化し、複雑な設定を生成するために必要なデータをスクリプトに提供します。
カスタム構文を入力するには、任意の階層レベルに ステートメントを apply-macro 含め、 ステートメント内に必要なデータを apply-macro 指定します(例:
apply-macro macro-name { parameter-name parameter-value; }
設定階層の apply-macro 任意のレベルで ステートメントを含めることができます。この意味では、 apply-macro ステートメントは ステートメントと apply-groups 似ています。各 apply-macro ステートメントは、同じ階層レベルの他 apply-macro のステートメントと比較して、一意に名前を付ける必要があります。
ステートメントには apply-macro 、オプション値を持つパラメーターのセットを含めることができます。対応するコミット スクリプトは、マクロ名、パラメーター、またはパラメーターの値を参照できます。スクリプトが設定を検査してデータを見つけると、スクリプトは対応する永続的または一時的な変更で指定されたアクションを実行します。
例えば、以下の構成スタンザがある場合、スクリプト命令を作成して、パラメーターの名前に基づいて標準構成を生成することができます。
protocols {
mpls {
apply-macro blue-type-lsp {
color blue;
}
}
}
以下<xsl:for-each>のプログラミング命令では、 という名前colorのapply-macroパラメーターを[edit protocols mpls]含むステートメントを 階層レベルで検索します。
<xsl:for-each select="protocols/mpls/apply-macro[data/name = 'color']">
次の命令は、 という名前 color の変数を作成し、この変数にパラメーターの値を color 割り当てます。この場合は次のようになります blue。
<xsl:variable name="color" select="data[name = 'color']/value"/>
以下の命令は、 ステートメントを admin-groups コンフィギュレーションに追加し、変数の値を color グループ名に割り当てます。
<transient-change> <protocols> <mpls> <admin-groups> <name> <xsl:value-of select="$color"/> </name> </admin-groups> </mpls> </protocols> </transient-change>
その結果、設定ステートメントは次のようになります。
protocols {
mpls {
admin-groups {
blue;
}
}
}
<データ>要素
ステートメント内apply-macroのカスタム構文の XML レンダリングでは、パラメーターとその値はそれぞれ および <value> 要素に<name>含まれています。と <value> の<name>要素は、その要素の兄弟の<data>子供です。例えば、 apply-macro blue-type-lsp ステートメントには、以下のように6つのパラメーターが含まれています。
[edit protocols mpls]
apply-macro blue-type-lsp {
10.1.1.1;
10.2.2.2;
10.3.3.3;
10.4.4.4;
color blue;
group-value 0;
}
パラメーターと値は、Junos XML タグ要素で次のようにレンダリングされます。
[edit protocols mpls] user@host# show | display xml <rpc-reply xmlns:junos="http://xml.juniper.net/junos/10.0R1/junos"> <configuration> <protocols> <mpls> <apply-macro> <name>blue-type-lsp</name> <data> <name>10.1.1.1</name> </data> <data> <name>10.2.2.2</name> </data> <data> <name>10.3.3.3</name> </data> <data> <name>10.4.4.4</name> </data> <data> <name>color</name> <value>blue</value> </data> <data> <name>group-value</name> <value>0</value> </data> </apply-macro> </mpls> </protocols> </configuration> </rpc-reply>
コミット スクリプトマクロを作成する場合、 要素を参照することで、ステートメントにapply-macro含まれるパラメーターを<data><name>抽出および<value>操作できます。
次の例では、select属性の XPath 式は、テキストを含む子要素も含む<name>要素の<data>子である要素に含まれる<value>テキストを抽出しますcolor。変数宣言は、 要素のテキストを <value> という名前colorの変数に割り当てます。
<xsl:variable name="color" select="data[name = 'color']/value"/>
SLAX と同等のサービスは次のとおりです。
var $color = ./data[name='color']/value;
Pythonと同等の要素が選択apply-macroされていると仮定するとelement、次のようになります。
color = element.find("data[name='color']/value").text
カスタム構文の拡張
対応するコミットスクリプトには、指定された階層レベルで ステートメントの設定 apply-macro を検査する1つ以上のプログラミング手順を含めます。必要に応じて、 式を data/name 使用して ステートメントでパラメーターを apply-macro 選択できます。
<xsl:for-each select="xpath-expression/apply-macro[data/name = 'parameter-name']">
たとえば、次の XSLT プログラミング命令は、パラメーターをcolor含み、 階層レベルに表示されるすべてのステートメントを[edit protocols mpls]選択apply-macroします。
<xsl:for-each select="protocols/mpls/apply-macro[data/name = 'color']">
SLAX と同等のサービスは次のとおりです。
for-each (protocols/mpls/apply-macro[data/name = 'color']) {
読みやすくするために複数行にわたるPythonの同等物は次のとおりです。
for element in Junos_Configuration.xpath \
("./protocols/mpls/apply-macro[data/name='color']"):
マクロを展開する場合、XSLT スクリプトで特に役立つプログラミング命令が命令となります<xsl:value-of>。この命令は、パラメーター値を選択し、それを使用して Junos OS ステートメントのオプション値を構築します。例えば、以下の命令は、変数、テキスト-lsp-、および現行コンテキスト・ノード (" .で表される) の値colorを連結して、LSP の名前を構築します。
<label-switched-path> <name> <xsl:value-of select="concat($color, '-lsp-', .)"/> </name> </label-switched-path>
SLAX はアンダースコア(_)を使用して値を連結します。
<label-switched-path> {
<name> $color _ '-lsp-' _ .;
}
スクリプトに必要なデータを検索する手順が含まれている場合は、データを使用して標準的な Junos OS 構成を構築する一時的または一時的な変更のコンテンツを提供できます。
以下の一時変更では、管理グループが作成され、 ステートメントがlabel-switched-path設定に追加されます。ラベルスイッチ・パスには、変数、テキスト-lsp-、およびピリオド(").で表される現在選択されている IP アドレスのcolor値を連結する名前が割り当てられます。一時変更では、 to ステートメントも追加され、現在選択されているIPアドレスが割り当てられます。最後に、一時変更はステートメントをadmin-group include-any追加し、変数の値をcolor割り当てます。
<transient-change> <protocols> <mpls> <admin-groups> <name><xsl:value-of select="$color"/></name> <group-value><xsl:value-of select="$group-value"/></group-value> </admin-groups> <xsl:for-each select="data[not(value)]/name"> <label-switched-path> <name><xsl:value-of select="concat($color, '-lsp-', .)"/></name> <to><xsl:value-of select="."/></to> <admin-group> <include-any><xsl:value-of select="$color"/></include-any> </admin-group> </label-switched-path> </xsl:for-each> </mpls> </protocols> </transient-change>
SLAX と同等のサービスは次のとおりです。
<transient-change> {
<protocols> {
<mpls> {
<admin-groups> {
<name> $color;
<group-value> $group-value;
}
for-each (data[not(value)]/name) {
<label-switched-path> {
<name> $color _ '-lsp-' _ .;
<to> .;
<admin-group> {
<include-any> $color;
}
}
}
}
}
}
Pythonでも同様に:
lsp_config =""
for element2 in element.xpath("data[not(value)]/name"):
lsp_config = lsp_config + """
<label-switched-path>
<name>{0}-lsp-{1}</name>
<to>{1}</to>
<admin-group>
<include-any>{0}</include-any>
</admin-group>
</label-switched-path>
""".format(color, element2.text)
change_xml = """
<protocols>
<mpls>
<admin-groups>
<name>{0}</name>
<group-value>{1}</group-value>
</admin-groups>
{2}
</mpls>
</protocols>
""".format(color, group_value, lsp_config).strip()
jcs.emit_change(change_xml, "transient-change", "xml")
ここに示す例は部分的です。完全な例については、「 例: コミット スクリプトマクロを使用したカスタム構成構文の作成」を参照してください。
設定をコミットした後、スクリプトが実行され、結果として生じる完全な設定は次のようになります。
[edit]
protocols {
mpls {
admin-groups {
blue 0;
}
label-switched-path blue-lsp-10.1.1.1 {
to 10.1.1.1;
admin-group include-any blue;
}
label-switched-path blue-lsp-10.2.2.2 {
to 10.2.2.2;
admin-group include-any blue;
}
label-switched-path blue-lsp-10.3.3.3 {
to 10.3.3.3;
admin-group include-any blue;
}
label-switched-path blue-lsp-10.4.4.4 {
to 10.4.4.4;
admin-group include-any blue;
}
}
}
前の例では、シンプルなカスタム構文を使用してラベルスイッチパス(LSP)を設定する方法を示しています。ネットワーク設計で多数の LSP を設定する必要がある場合、コミット スクリプト マクロを使用することで、時間を節約し、一貫性を確保し、設定エラーを防ぐことができます。
マクロを使用するその他の方法
「カスタム構文の作成」で説明した例は、一時的な変更を使用して意図した運用上の影響を生み出すマクロを示しています。または、永続的な変更を使用して、標準のJunos OSステートメントを候補設定に追加し、カスタム構文を完全に削除するコミットスクリプトを作成することもできます。これにより、カスタム構文に不慣れなネットワークオペレーターは、設定ファイルを表示し、標準的なJunos OSステートメントとしてレンダリングされた完全な設定を確認できます。コミット スクリプト マクロは引き続き有効であるため、カスタム構文を使用して複雑な設定をすばやく簡単に作成できます。
カスタム構文の作成で説明するアプリケーションの種類に加えて、マクロを使用してコミット スクリプトがタスクを実行しないようにすることもできます。例えば、MPLS設定をインターフェイスに自動的に追加する基本コミットスクリプトは、 という名前no-mplsのステートメントの存在をテストすることで、MPLSを必要としないとして明示的にタグ付けするインターフェイスに例外をapply-macro発生させる可能性があります。このマクロの使用例については、 例: LDP 設定の制御を参照してください。
ステートメントを apply-macro 外部データを保存する場所として使用できます。コミットスクリプトは ステートメントを apply-macro 検査しないため、 apply-macro ステートメントはデバイスに運用上の影響を与えませんが、外部アプリケーションが使用する設定ファイルでデータを運ぶ可能性があります。