このページで
例:サービステンプレート自動化の設定
この例では、サービステンプレートの自動化を使用して、Junos OSを実行する同様のプラットフォーム上でサービスをプロビジョニングする方法を示します。
要件
Junos OS リリース 12.3 以降を実行する 2 台の MX シリーズ デバイス。
概要
この例では、サービステンプレートの自動化を使用して、MXシリーズルーター上でサービスをプロビジョニングします。サービス テンプレート自動化 service-builder.slax スクリプトを使用するには、まずスクリプトを /var/db/scripts/op または /config/scripts/op ディレクトリにコピーし、デバイスでスクリプトを有効にする必要があります。
次のプロセスでは、サービス テンプレートの自動化を使用してサービスをプロビジョニングする方法について概要を説明します。
サービス テンプレート定義を作成します。
サービス ビルダー.slax スクリプトを実行し、サービス固有のインスタンス パラメーターを定義します。
サービス インターフェイスを生成します。
サービスが必要な各デバイスでサービスインターフェイスを有効にします。
NETCONF を使用してサービス インターフェイスを呼び出し、サービス パラメーター値を指定することで、システムをプロビジョニングします。
この例では、Junos OSリリース12.3を実行するMXシリーズデバイス上に新しいVPNサービスインターフェイスを作成し、Junos OSリリース12.3を実行する2台目のMXシリーズデバイスでサービスをプロビジョニングします。サービステンプレート定義は、 階層レベルで設定します [edit groups]
。この例では、サービス名は 、 で vpn-service
、テンプレート グループ名は です vpn-service-template-group
。設定モード コマンドは load merge terminal
、サービス テンプレート設定階層を候補コンフィギュレーションに読み込み、その後コミットされます。
最初のサービス テンプレートを作成したら、 service-builder.slax スクリプトを実行します。このスクリプトは、サービス名とテンプレート グループ名を入力するよう求め、コミットされた設定からサービス テンプレート設定を読み取ります。
service-builder.slax スクリプト インターフェイスは、 と Hierarchies Menu
の 2 つのメニューMain Menu
で構成されています。Main Menu
内では、サービステンプレート設定で定義された変数を確認するか、サービスAPIを構築または有効にすることができます。メニューオプションにはBuild Service API
、 、変数のHierarchies Menu
パラメータ化手順が表示されます。デフォルトでは、すべての変数をパラメータ化するか、選択した変数をパラメータ化することができます。サービス API の構築中に service-builder.slax スクリプトを終了する必要がある場合は、 オプションを使用Quit
して終了したときにその階層構成を保存するために、現在の階層のすべてのパラメーターの設定を完了する必要があります。その後、後で不完全な階層の設定を完了することができます。この例では、インターフェイス名とインターフェイス記述の 2 つの変数をパラメーター化します。パラメーターを指定した後、サービス・ビルダー・スクリプトによってサービス・スクリプトが生成されます。
メニュー オプションは Enable Service API
、ローカル デバイスでサービス スクリプトを有効にします。2台目のMXシリーズデバイスでサービススクリプトを有効にするには、生成されたサービススクリプトを2台目のデバイスの /var/db/scripts/op ディレクトリにコピーし、設定でスクリプトを有効にします。ステートメントが load-scripts-from-flash
設定されている場合、代わりにスクリプトをフラッシュ ドライブ上の対応するディレクトリにコピーする必要があります。
NETCONF は、リモートの MX シリーズ デバイス上でサービスをプロビジョニングするために使用されます。NETCONF リモート プロシージャ コール(RPC)アクションは、サービスが新しいサービスか既存のサービスかによって異なります。サポートされているアクションには、 、 update
、および delete
が含まれますcreate
。この例では、新しいサービスを作成します。特定のサービスがすでにデバイス上でプロビジョニングされており、サービスパラメーターを更新または削除する場合、RPCを変更してこれらのアクションを実行できます。
構成
- サービス ビルダー スクリプトの格納と有効化
- サービステンプレート定義の設定
- サービス インターフェイスの設定と生成
- サービス インターフェイスの検証
- サービス インターフェイスの有効化
- NETCONF を使用したサービスのプロビジョニング
- NETCONF を使用したサービスの更新または削除
サービス ビルダー スクリプトの格納と有効化
手順
Junos OS のインストールには 、service-builder.slax スクリプトが含まれており、デバイスの /usr/libexec/scripts/op/ ディレクトリに格納されています。 service-builder.slax スクリプトを使用するには、まず service-builder.slax スクリプトを op スクリプト ディレクトリにコピーし、構成で有効にする必要があります。Junos OS スーパーユーザー ログイン クラスのユーザーのみが、これらのディレクトリ内のファイルにアクセスおよび編集できます。
service-builder.slax スクリプトをハード ディスクの /var/db/scripts/op ディレクトリまたはフラッシュ ドライブの /config/scripts/op ディレクトリにコピーします。
user@host> file copy /usr/libexec/scripts/op/service-builder.slax /var/db/scripts/op
運用モード コマンドを使用して、スクリプトが正しいディレクトリであることを
file list
確認します。user@host> file list /var/db/scripts/op /var/db/scripts/op: service-builder.slax*
設定でスクリプトを有効にします。
[edit] user@host# set system scripts op file service-builder.slax
スクリプトをフラッシュに保存してフラッシュから読み込む場合は、まだ設定されていない場合は ステートメントを
load-scripts-from-flash
設定します。[edit] user@host# set system scripts load-scripts-from-flash
設定をコミットします。
[edit] user@host# commit
サービステンプレート定義の設定
手順
Junos OS を実行しているデバイスで新しいサービス テンプレートを作成するには、次の手順に従います。
サービス名を選択します。
この例では、 を使用しています
vpn-service
。設定モードで、実際にプロビジョニングされるサービスの階層を含む新しいグループを作成します。
[edit] user@host# set groups vpn-service-template-group
サービスの階層を設定します。
この例では、 コマンドを使用して、事前に構築された設定階層が候補コンフィギュレーションに
load merge terminal
読み込まれます。[edit] user@host# load merge terminal groups { vpn-service-template-group { interfaces { ge-2/2/6 { description "connected to customer3-site-1"; unit 0 { family bridge { interface-mode access; vlan-id 300; } } } } protocols { rstp { interface ge-2/3/0; } mvrp { interface ge-2/3/0; } } bridge-domains { bd { vlan-id-list 100; } } } } [Ctrl+D]
設定構文が正しいことを確認します。
[edit] user@host# commit check configuration check succeeds
設定をコミットします。
[edit] user@host# commit
サービス インターフェイスの設定と生成
手順
サービスインターフェイスを設定および生成するには、次の手順に従います。
運用モードで、 service-builder.slax スクリプトを実行して、対話型サービス ビルダー セッションを開始します。
user@host> op service-builder Welcome to Service Builder Script: (v1.0) - Enter the service name :
サービステンプレート定義の設定で定義された サービス名を入力します。
Enter the service name : vpn-service
サービス階層が設定されているグループ名を入力します。
この例では、 グループ名を使用しています
vpn-service-template-group
。このスクリプトは、 階層で指定された設定をvpn-service-template-group
読み取り、メインメニューを表示します。Enter the group name : vpn-service-template-group .. reading [edit group vpn-service-template-group] .. [Op Script Builder - Main Menu] ----------------------------------- 1. Show Variables 2. Build Service API 3. Enable Service API Q. Quit ----------------------------------- Enter Selection:>
(オプション)パラメータ化できるサービス テンプレート変数を確認するには、オプションを選択します
Show Variables
。スクリプトは、候補構成のテンプレート定義を階層レベル別にグループ化された一般的なパラメーター リストに変換します。
[Op Script Builder - Main Menu] ----------------------------------- 1. Show Variables 2. Build Service API 3. Enable Service API Q. Quit ----------------------------------- Enter Selection:> 1 List of variables under each hierarchy to parameterize: - 1. [ edit groups vpn-service-template-group interfaces ] 1.1. interface/name 1.2. interface/description 1.3. interface/unit/name 1.4. interface/unit/family/bridge/interface-mode 1.5. interface/unit/family/bridge/vlan-id - 2. [ edit groups vpn-service-template-group protocols ] 2.1. rstp/interface/name 2.2. mvrp/interface/name - 3. [ edit groups vpn-service-template-group bridge-domains ] 3.1. domain/name 3.2. domain/vlan-id-list -
サービス API を構築するには、オプションを選択します
Build Service API
。[Op Script Builder - Main Menu] ----------------------------------- 1. Show Variables 2. Build Service API 3. Enable Service API Q. Quit ----------------------------------- Enter Selection:> 2
Hierarchies Menu
から、パラメータ化する変数を持つ階層のメニュー選択項目を入力するか、Enter キーを押してすべての階層を選択します。[Op Script Builder - Hierarchies Menu] ----------------------------------- 1. interfaces 2. protocols 3. bridge-domains Q. Quit ----------------------------------- Please enter multiple selections separated by a comma (,) only. ----------------------------------- Enter Selection:> [default:all] 1
変数リストから、サービス・インターフェースにパラメーター化する変数のメニュー選択項目を入力するか、または Enter キーを押して、その階層内のすべての変数をパラメーター化します。
List of variables to parameterize: ... [ edit groups vpn-service-template-group interfaces ] ----------------------------------- 1. interfaces/interface/name 2. interfaces/interface/description 3. interfaces/interface/unit/name 4. interfaces/interface/unit/family/bridge/interface-mode 5. interfaces/interface/unit/family/bridge/vlan-id Q. Quit Please enter multiple selections separated by a comma (,) only. ----------------------------------- Enter Selection:> [default:all] 1,2
選択したパラメータを設定します。
必要な情報を入力するよう求められます。この例では、インターフェイス名パラメーターを として
ifname
、インターフェイス説明パラメーターを としてifdesc
設定します。Enter parameter name for: 1.interfaces/interface/name **************************** [ edit groups vpn-service-template-group interfaces ] Name for this parameter? ifname Do you want to revise 'ifname'? (yes/no)[no]: no Enter parameter name for: 2.interfaces/interface/description **************************** [ edit groups vpn-service-template-group interfaces ] Name for this parameter? ifdesc Do you want to revise 'ifdesc'? (yes/no)[no]: no
選択したパラメータを各階層レベルで設定します。
スクリプトは、選択した各階層と指定されたパラメーターに対して繰り返されます。サービス API の構築中に service-builder.slax スクリプトを終了する必要がある場合は、 オプションを使用
Quit
して終了したときにその階層構成を保存するために、現在の階層のすべてのパラメーターの設定を完了する必要があります。サービス スクリプトを作成するサービス インターフェイスを生成します。
すべてのパラメーターが設定されると、スクリプトによって自動的にサービス インターフェイスの生成が求められます。Enterキーを押すか、 はい と入力してサービスインターフェイスを生成します。
Do you want to commit the previously selected options to create vpn-service script? (yes/no)[yes]: yes Created service script: /var/db/scripts/op/vpn-service.slax
サービス インターフェイスの検証
目的
サービススクリプトの作成を確認します。ステートメントが load-scripts-from-flash
設定されている場合、生成されたファイルはフラッシュメモリに保存されます。それ以外の場合、生成されたファイルはハード ディスクに保存されます。
アクション
動作モード コマンドをfile list
発行します。この例では、vpn-service.slax スクリプトが /var/db/scripts/op ディレクトリに存在する必要があります。service-builder.slax スクリプトは、/var/db/scripts/op ディレクトリ内の utility.slax スクリプトと/var/db/scripts/lib ディレクトリ内の vpn-service-builder-info.xml ファイルも生成します。これらのファイルは service-builder.slax スクリプトで使用されるため、削除しないでください。
user@host> file list /var/db/scripts/op /var/db/scripts/op: service-builder.slax utility.slax vpn-service.slax user@host> file list /var/db/scripts/lib /var/db/scripts/lib: vpn-service-builder-info.xml
サービス インターフェイスの有効化
手順
リモートデバイスでサービスインターフェイスを有効にするには:
生成されたサービススクリプトを、新しいサービスをプロビジョニングするデバイスにコピーします。
ステートメントが
load-scripts-from-flash
設定されていない場合は、サービススクリプトを2台目のデバイスの /var/db/scripts/op ディレクトリにコピーします。それ以外の場合は、代わりにスクリプトをフラッシュ ドライブ上の対応するディレクトリにコピーする必要があります。設定で op スクリプトを有効にします。
[edit] user@host2# set system scripts op file vpn-service.slax
設定をコミットします。
[edit] user@host2# commit commit complete
運用モードで、スクリプトが有効になっており、サービス パラメーターがスクリプトの引数として表示されていることを確認します。
user@host2> op vpn-service ? Possible completions: <[Enter]> Execute this command <name> Argument name action Please enter either create/delete/update detail Display detailed output ifdesc Text description of interface ifname Name of interface service-id Service Name | Pipe through a command
NETCONF を使用したサービスのプロビジョニング
手順
サービスをプロビジョニングするには、次の手順にしたがっています。
まだ設定されていない場合は、新しいサービスをプロビジョニングするデバイスでSSH経由でNETCONFサービスを設定します。
[edit] user@host2# set system services netconf ssh user@host2# commit
設定管理サーバーから、サービスをプロビジョニングするデバイスとのNETCONFセッションを確立します。
%ssh -p 830 -s user@host2 netconf user@host2's password: <!-- user user, class super-user --> <hello> <capabilities> <capability>urn:ietf:params:xml:ns:netconf:base:1.0</capability> <capability> urn:ietf:params:xml:ns:netconf:capability:candidate:1.0 </capability> <capability> urn:ietf:params:xml:ns:netconf:capability:confirmed-commit:1.0 </capability> <capability> urn:ietf:params:xml:ns:netconf:capability:validate:1.0 </capability> <capability> urn:ietf:params:xml:ns:netconf:capability:url:1.0?protocol=http,ftp,file </capability> <capability>http://xml.juniper.net/netconf/junos/1.0</capability> <capability>http://xml.juniper.net/dmi/system/1.0</capability> </capabilities> <session-id>28898</session-id> </hello> ]]>]]>
デバイス上で新しいサービスをプロビジョニングする場合は、アクションを使用して
create
サービス op スクリプトを呼び出すリモート プロシージャ コール(RPC)を入力し、設定が必要なすべてのパラメーターの値を含めます。パラメーターの値は、
service-id
サービス名と同じにする必要があります。<rpc> <op-script> <script>vpn-service</script> <action>create</action> <service-id>vpn-service</service-id> <ifname>ge-2/0/5,ge-2/0/6</ifname> <ifdesc>connected to customer1-site-1,connected to customer3-site-2</ifdesc> </op-script> </rpc>
NETCONF を使用したサービスの更新または削除
手順
既存のサービスを更新または削除するには、以下の手順にいます。
まだ設定されていない場合は、サービスを更新または削除するデバイスでSSH経由でNETCONFサービスを設定します。
[edit] user@host2# set system services netconf ssh user@host2# commit
設定管理サーバーから、サービスをプロビジョニングするデバイスとのNETCONFセッションを確立します。
%ssh -p 830 -s user@host2 netconf user@host2's password: <!-- user user, class super-user --> <hello> <capabilities> <capability>urn:ietf:params:xml:ns:netconf:base:1.0</capability> <capability> urn:ietf:params:xml:ns:netconf:capability:candidate:1.0 </capability> <capability> urn:ietf:params:xml:ns:netconf:capability:confirmed-commit:1.0 </capability> <capability> urn:ietf:params:xml:ns:netconf:capability:validate:1.0 </capability> <capability> urn:ietf:params:xml:ns:netconf:capability:url:1.0?protocol=http,ftp,file </capability> <capability>http://xml.juniper.net/netconf/junos/1.0</capability> <capability>http://xml.juniper.net/dmi/system/1.0</capability> </capabilities> <session-id>28898</session-id> </hello> ]]>]]>
特定のサービスが既にデバイス上でプロビジョニングされていて、サービスを更新する場合は、 アクションを使用して
update
サービス op スクリプトを呼び出す RPC を入力し、更新を必要とするすべてのパラメーターの値を含めます。<rpc> <op-script> <script>vpn-service</script> <action>update</action> <service-id>vpn-service</service-id> <ifname>ge-2/0/5</ifname> <ifdesc>connected to customer1-site-2</ifdesc> </op-script> </rpc>
特定のサービスが既にデバイス上でプロビジョニングされていて、サービス パラメーターの一部またはすべてを削除する場合は、 アクションを使用して
delete
サービス op スクリプトを呼び出す RPC を入力し、削除する必要があるパラメーターを含めます。<rpc> <op-script> <script>vpn-service</script> <action>update</action> <service-id>vpn-service</service-id> <ifname>ge-2/0/6</ifname> </op-script> </rpc>
検証
設定が更新されていることを確認します。
コミットの検証
目的
コミットが成功したことを確認します。
アクション
操作モード コマンドを show system commit
発行して、最近のコミットを表示します。最も最近のコミット エントリーは、 によって user
NETCONF サーバーを介してコミットされたことを示しています。
user@host2> show system commit 0 2012-05-21 12:15:08 PDT by user via junoscript 1 2012-05-18 09:47:40 PDT by user via other ...
サービス設定の検証
目的
サービス設定がアクティブな設定に存在することを確認します。
アクション
動作モード コマンドを show configuration | compare rollback num
発行して、設定変更を表示します。
user@host2> show configuration | compare rollback 1 [edit interfaces] + ge-2/0/5 { + description "connected to customer1-site-1"; + } + ge-2/0/6 { + description "connected to customer3-site-2"; + }
意味
現在の設定と以前の設定の比較では、インターフェイスとインターフェイスの説明が設定に追加されたことが示されています。
トラブルシューティング
失敗したコミットのトラブルシューティング
問題
NETCONF セッションを通じてデバイス上のサービスの作成、更新、削除を行うと、以下のメッセージが表示されます。
<output> configuration database modified </output>
設定に以前はコミットされていない変更があり、サービススクリプトはサービス設定変更をコミットできません。
ソリューション
以前の変更をコミットするか、必要に応じて設定をロールバックし、サービス設定の変更を再送信します。
サービス パラメータを削除しようとして失敗した場合のトラブルシューティング
問題
NETCONF を介してデバイス上のサービス パラメーターを削除すると、次のメッセージが表示されます。
<xnm:error xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm"> <source-daemon> op-script </source-daemon> <message> xsl:attribute: Cannot add attributes to an element if children have been already added to the element. </message> </xnm:error>
ソリューション
RPC には、パラメーターと子要素の両方が含まれている場合があります。RPC から子要素を削除します。