サービスの改善にご協力お願いします。

お客様のご意見をお聞かせください。

アンケートの所要時間はおよそ 2 分です。

close
keyboard_arrow_left
list Table of Contents
keyboard_arrow_right

この機械翻訳はお役に立ちましたでしょうか?

starstarstarstarstar
Go to English page
免責事項:

このページは、サードパーティー製機械翻訳ソフトウェアを使用して翻訳されます。質の高い翻訳を提供するために合理的な対応はされていますが、ジュニパーネットワークスがその正確性を保証することはできかねます。この翻訳に含まれる情報の正確性について疑問が生じた場合は、英語版を参照してください. ダウンロード可能なPDF (英語版のみ).

例:グローバルポリシーの先頭に追加する

date_range 16-Sep-22

このコミットスクリプトの例では、 のインポートポリシーが適用される前に、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 構文

content_copy zoom_out_map
<?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 構文

content_copy zoom_out_map
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";
                }
            }
        }
    }
}

構成

手順

手順

スクリプトをダウンロード、有効化、テストするには、以下の手順にしたがっています。

  1. スクリプトをテキスト ファイルにコピーし、 bgp-global-import.xsl または bgp-global-import.slax というファイルに名前を付け、デバイス上の /var/db/scripts/commit/ ディレクトリにコピーします。

  2. 以下のテスト構成スタンザを選択し、Ctrl+cを押してクリップボードにコピーします。

    スクリプトの SLAX バージョンを使用している場合は、 階層レベルのファイル名を [edit system scripts commit file] bgp-global-import.slax に変更します。

    content_copy zoom_out_map
    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;
        }
    }
    
  3. 設定モードで、 コマンドを load merge terminal 発行して、スタンザをデバイス設定にマージします。

    content_copy zoom_out_map
    [edit]
    user@host# load merge terminal
    [Type ^D at a new line to end input]
    ... Paste the contents of the clipboard here ...
    
    1. プロンプトで、マウスと貼り付けアイコンを使用して、クリップボードの内容を貼り付けます。

    2. Enter キーを押します。

    3. Ctrl+dを押します。

  4. 設定をコミットします。

    content_copy zoom_out_map
    user@host# commit
    

検証

設定の検証

目的

スクリプトが想定どおりに動作していることを確認します。

アクション

設定モードコマンドをshow protocols発行すると、bgp_global_import一時的な変更として追加されるため、インポートポリシーは表示されません。

content_copy zoom_out_map
[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発行して、一時変更を含むすべての設定ステートメントを表示します。

content_copy zoom_out_map
[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 発行すると、一時変更を含むすべての設定ステートメントが表示されます。

content_copy zoom_out_map
[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;
        }
    }
}
external-footer-nav