このページで
例:グローバルポリシーの先頭に追加する
このコミットスクリプトの例では、 他 のインポートポリシーが適用される前に、BGPグローバルインポートポリシーがすべてのBGPインポートに適用されていることを確認します。
要件
この例では、Junos OSを実行しているデバイスを使用しています。
概要とコミット スクリプト
ほとんどの設定オブジェクトでは、Junos OS設定管理ソフトウェアが設定階層の所定の位置に設定オブジェクトを保存および表示するため、オブジェクトまたはその子が作成される順序は重要ではありません。ただし、ルーティング ポリシーやファイアウォール フィルターなどの一部の構成オブジェクトは、意図したルーティング動作を生成するために順番に処理および分析する必要がある要素で構成されています。
このコミットスクリプトの例では、他のインポートポリシーが適用される前に、BGPグローバルインポートポリシーがすべてのBGPインポートに適用されるようにします。
この例では、他の BGP インポート ポリシーの前にポリシーを自動的に付加 bgp_global_import します。ポリシーステートメントが bgp_global_import 設定に含まれていない場合、エラーメッセージが生成され、コミット操作は失敗します。
それ以外の場合、コミット スクリプトは Junos XML プロトコル属性と XSLT 関数をposition()使用insert="before"して、他の適用されるポリシーに関連するグローバル BGP ポリシーの位置を制御します。属性はinsert="before"、最初に存在するbgp_global_importBGPインポートポリシーの前にポリシーを挿入します。
既存のデフォルトBGPインポートポリシーがない場合、グローバルポリシーが設定に含まれます。
このスクリプトの例は、XSLT と SLAX の両方の構文で示されています。
XSLT 構文
<?xml version="1.0" standalone="yes"?>
<xsl:stylesheet version="1.0"
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">
<xsl:import href="../import/junos.xsl"/>
<xsl:template match="configuration">
<xsl:if test="not(policy-options/policy-statement[name='bgp_global_import'])">
<xnm:error>
<message>Policy error: Policy bgp_global_import required</message>
</xnm:error>
</xsl:if>
<xsl:for-each select="protocols/bgp | protocols/bgp/group |
protocols/bgp/group/neighbor">
<xsl:variable name="first" select="import[position() = 1]"/>
<xsl:if test="$first">
<xsl:call-template name="jcs:emit-change">
<xsl:with-param name="tag" select="'transient-change'"/>
<xsl:with-param name="content">
<import insert="before"
name="{$first}">bgp_global_import</import>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="protocols/bgp">
<xsl:if test="not(import)">
<xsl:call-template name="jcs:emit-change">
<xsl:with-param name="tag" select="'transient-change'"/>
<xsl:with-param name="content">
<import>bgp_global_import</import>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
SLAX 構文
version 1.0;
ns junos = "http://xml.juniper.net/junos/*/junos";
ns xnm = "http://xml.juniper.net/xnm/1.1/xnm";
ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";
import "../import/junos.xsl";
match configuration {
if (not(policy-options/policy-statement[name='bgp_global_import'])) {
<xnm:error> {
<message> "Policy error: Policy bgp_global_import required";
}
}
for-each (protocols/bgp | protocols/bgp/group |
protocols/bgp/group/neighbor) {
var $first = import[position() = 1];
if ($first) {
call jcs:emit-change($tag = 'transient-change') {
with $content = {
<import insert="before" name="{$first}"> "bgp_global_import";
}
}
}
}
for-each (protocols/bgp) {
if (not(import)) {
call jcs:emit-change($tag = 'transient-change') {
with $content = {
<import> "bgp_global_import";
}
}
}
}
}
構成
手順
手順
スクリプトをダウンロード、有効化、テストするには、以下の手順にしたがっています。
スクリプトをテキスト ファイルにコピーし、 bgp-global-import.xsl または bgp-global-import.slax というファイルに名前を付け、デバイス上の /var/db/scripts/commit/ ディレクトリにコピーします。
以下のテスト構成スタンザを選択し、Ctrl+cを押してクリップボードにコピーします。
スクリプトの SLAX バージョンを使用している場合は、 階層レベルのファイル名を
[edit system scripts commit file]bgp-global-import.slax に変更します。system { scripts { commit { allow-transients; file bgp-global-import.xsl; } } } interfaces { fe-0/0/0 { unit 0 { family inet { address 192.168.16.2/24; } family inet6 { address 2002:18a5:e996:beef::2/64; } } } } routing-options { autonomous-system 64500; } protocols { bgp { group fish { neighbor 192.168.16.4 { import [ blue green ]; peer-as 64501; } neighbor 192.168.16.6 { peer-as 64502; } } } } policy-options { policy-statement blue { from protocol bgp; then accept; } policy-statement green { then accept; } policy-statement bgp_global_import { then accept; } }設定モードで、 コマンドを
load merge terminal発行して、スタンザをデバイス設定にマージします。[edit] user@host# load merge terminal [Type ^D at a new line to end input] ... Paste the contents of the clipboard here ...
プロンプトで、マウスと貼り付けアイコンを使用して、クリップボードの内容を貼り付けます。
Enter キーを押します。
Ctrl+dを押します。
設定をコミットします。
user@host# commit
検証
設定の検証
目的
スクリプトが想定どおりに動作していることを確認します。
アクション
設定モードコマンドをshow protocols発行すると、bgp_global_import一時的な変更として追加されるため、インポートポリシーは表示されません。
[edit]
user@host# show protocols
bgp {
group fish {
neighbor 192.168.16.4 {
import [ blue green ];
peer-as 64501;
}
neighbor 192.168.16.6 {
peer-as 64502;
}
}
}
コミット スクリプトは 階層レベルで ステートメントをimport bgp_global_import[edit protocols bgp]追加し、ポリシーを bgp_global_import 192.168.16.4 ネイバー ポリシー チェーンの先頭に追加します。をshow protocols | display commit-scripts発行して、一時変更を含むすべての設定ステートメントを表示します。
[edit]
user@host# show protocols | display commit-scripts
bgp {
import bgp_global_import;
group fish {
neighbor 192.168.16.4 {
import [ bgp_global_import blue green ];
peer-as 64501;
}
neighbor 192.168.16.6 {
peer-as 64502;
}
}
}
以前はポリシーが適用されていた 192.168.16.6 ネイバーにポリシーを追加すると、 bgp_global_import そのポリシーが先頭に追加されます。コマンドを show protocols | display commit-scripts 発行すると、一時変更を含むすべての設定ステートメントが表示されます。
[edit]
user@host# set protocols bgp group fish neighbor 192.168.16.6 import green
[edit]
user@host# show protocols | display commit-scripts
bgp {
import bgp_global_import;
group fish {
neighbor 192.168.16.4 {
import [ bgp_global_import blue green ];
peer-as 64501;
}
neighbor 192.168.16.6 {
import [ bgp_global_import green ];
peer-as 64502;
}
}
}