Cisco Active Network Abstraction 3.6.7 カスタマイゼーション ユーザ ガイド
Cisco ANA マクロ 言語
Cisco ANA マクロ言語
発行日;2012/02/01 | 英語版ドキュメント(2010/02/21 版) | ドキュメントご利用ガイド | ダウンロード ; この章pdf , ドキュメント全体pdf (PDF - 3MB) | フィードバック

目次

Cisco ANA マクロ言語

Cisco ANA マクロ言語スクリプトとは

IMO コンテキストから使用可能なプロパティ

パラメータの指定および使用

ユーザ定義パラメータ

IP サブネット パラメータの複数の形式

組み込みパラメータ

サポートされるプラグマ

Success

Fail

Prompt

Full Prompt

Rollback

Activity

Enum

コマンド スクリプト

ロールバック スクリプト

スクリプトの実行

Cisco ANA マクロ言語

この章では、Cisco ANA マクロ言語とそのシンタックス、パラメータとプログラムの使用方法、および、Cisco ANA マクロ言語スクリプトを記述する詳細例について説明します。この章では、Cisco ANA アクティベーション フレームワーク内で実行されるコマンド スクリプトを記述するプログラマによって使用されることが想定されています。

この章では、次の事項について説明します

「Cisco ANA マクロ言語スクリプトとは」

「IMO コンテキストから使用可能なプロパティ」

「パラメータの指定および使用」

「サポートされるプラグマ」

「例」

Cisco ANA マクロ言語スクリプトとは

Cisco ANA マクロ言語スクリプトは、 Telnet コマンドの単純なシーケンス、実行時に置き換えられる入力引数、インライン実行ディレクティブから構成されます。インライン実行ディレクティブは、ネットワーキング デバイスで Telnet コンフィギュレーション コマンドとして順番に実行されます。 Cisco ANA マクロ言語スクリプト ラインは、引数の置き換えのために実行時に評価され、これによって、デバイスに送信できる Telnet デバイス コンフィギュレーション コマンドが生成されます。各コマンドラインは、スクリプトを強制終了およびロールバックできるか、または次のスクリプト ラインの実行を継続できる、インライン ディレクティブに従って確認されます。 Cisco ANA マクロ言語スクリプトは、Command Builder を使用して作成でき、また、 Cisco ANA BQL API を使用して外部に提供できます。

Cisco ANA マクロ言語スクリプトは、通常、コマンド スクリプトおよびロールバック スクリプトで構成されています。コマンド スクリプトの実行に失敗した場合、ロールバック スクリプトが呼び出されます。

Cisco ANA マクロ言語スクリプトを定義するときには、次の操作を行えます。

外部ソースから、スクリプトをインポートする、または、スクリプトを貼り付ける。

ネットワーク要素の応答を確認するため、インライン ディレクティブ(プラグマ)を定義する。

失敗したコマンドを元に戻すためのロールバック スクリプトを定義する。

IMO コンテキストから使用可能なプロパティ

スクリプト IMO コンテキストにより、組み込み引数として、スクリプトに対して Cisco ANA 情報モデル オブジェクトが使用できるようになります。スクリプト IMO コンテキストは、管理対象デバイスからルーティング エントリへのポート コネクタの範囲にある、Cisco ANA IMO によって表すことができる任意のオブジェクトである場合があります。

IMO コンテキストの例には、次のものが含まれます。

管理対象デバイス

IMO 名:IManagedElement

プロパティ例:CommunicationStateEnum、DeviceName、ElementType

ポート

IMO 名:IPortConnector

プロパティ例:portalias、location、ifindex

Cisco ANA マクロ言語組み込みパラメータの詳細については、「組み込みパラメータ」を参照してください。

パラメータの指定および使用

Cisco ANA マクロ言語により、ユーザ定義および組み込みの、2 つのタイプのスクリプト パラメータがサポートされ、これは実行時に置き換えられます。Command Builder GUI では、すべてのパラメータ(組み込みおよびユーザ定義の両方)が、コマンド編集中に選択リストを介して使用できます。


) Command Builder アプリケーションで、すべてのユーザ定義パラメータおよび組み込みパラメータを参照するには、Ctrl キー+スペースバーを押して、使用可能な引数の選択リストを開きます(IMO コンテキストのユーザ定義入力引数および組み込みプロパティの両方が含まれます)。


Cisco ANA マクロ言語は、たとえばドル記号内($...$)などで、スクリプト ラインにあるパラメータの両方のタイプを表します。たとえば、VRF コンフィギュレーション コマンドでは、入力変数 vrfName は、ip vrf $vrfName$ と定義できます。


) • プラグマおよびスクリプトのタイムアウトは、BQL を使用してサポートされます。これにより、ミリ秒単位で、タイムアウト タイプの整数定義が追加されます。プラグマのタイムアウトを変更する場合、スクリプトのタイムアウトも変更することを推奨します。

プラグマのタイムアウトの例は、 route-target both $rt$ [timeout=2000] です。

スクリプトのタイムアウトの例は、 <Timeout type="Integer">5000</Timeout> です。


 

ユーザ定義パラメータ

最初に、ユーザ定義入力パラメータを定義する必要があります。パラメータ指定には、パラメータ名、タイプ、オプションのデフォルト値などが含まれます。ユーザ定義パラメータは、Command Builder を使用するか、または、Cisco ANA API を介して、定義できます。

表 6-1 に、ユーザ定義パラメータ プロパティの完全なリストを示します。

 

表 6-1 使用可能なユーザ定義パラメータ

プロパティ
説明

Name

パラメータ名。文字、数字、ハイフン(-)、および下線(_)だけを含めることができ、固有である必要があります。

Caption

パラメータの表示名。Command Builder スクリプト実行ウィンドウで表示されます。

Type

ストリング型、整数型、IPSubnet、コンボ型、IP、浮動小数点型、ロング型。

Width

文字数での、フィールド幅。Command Builder スクリプト実行ウィンドウに関連します。

Visible

パラメータがウィンドウに表示されるかどうかを示します。Command Builder スクリプト実行ウィンドウに関連します。

Tooltip

コマンド パラメータのヒント。

(注) このプロパティは、Command Builder GUI を介してのみ使用可能です。

Default

パラメータのデフォルト値。

(注) このプロパティは、Command Builder GUI を介してのみ使用可能です。

Required

引数が必須か省略可能かを示します。

(注) このプロパティは、Command Builder GUI を介してのみ使用可能です。


) 一部のパラメータ プロパティは、Command Builder のスクリプト データ エントリ ウィンドウにのみ関連します。


実行中、スクリプトは BQL コマンドを介して実行されます。すべての BQL コマンドについて、引数タイプが一致しない場合、例外がユーザに返されます。

ユーザ定義パラメータの値は、次の方法で提供できます。

フロースルー式にアクティブ化:入力パラメータは、VNE に送信される前に、API の一部として提供されます。

GUI ベース コマンドとして Cisco ANA NetworkVision から実行:たとえば、値を入力するか、またはドロップダウン リストから 1 つを選択することによって、VNE に送信される前に、入力パラメータを提供します。

IP サブネット パラメータの複数の形式

Cisco ANA マクロ言語スクリプトでは、例 198.168.2.10 255.255.255.0 を使用した 表 6-2 で説明されているように、IP サブネット パラメータの複数の形式がサポートされます。

 

表 6-2 IP サブネット パラメータの形式

#
形式
説明
出力

1

maskbits

整数値に変換される、サブネットの IP。ビットのみ。

30

2

ip

マスクなしの IP のみ。

198.168.2.10

3

mask

IP アドレスなしのサブネット マスクの IP。

255.255.255.0

4

networkmask

ネットワークに変換されるマスク アドレス。

0.0.0.255

5

ipmaskbits

マスク ビットの IP および値。

IP/30

6

ipmask

IP マスク。これはデフォルトです。

198.168.2.10 255.255.255.0

7

ipmasknot

IP およびネットワーク アドレス。

198.168.2.10 + 0.0.0.255

たとえば、routeadd$SB:IP$mask$SB:mask$ により、IP およびサブネットが抽出されます。

組み込みパラメータ

組み込みパラメータは、IMO コンテキスト(portalias または status など)の IMO 引数で使用できる組み込みプロパティで、実行中に実行時の値に自動的に設定されます。組み込みプロパティには、IMO アトリビュート、OID アトリビュート、および、インスツルメンテーション データが含まれます。

IMO コンテキストに関連する使用可能な組み込みパラメータの完全なリストについては、『Cisco Active Network Abstraction 3.6.7 Technology Support and Information Model Reference Manual』を参照してください。


) Command Builder アプリケーションで、すべてのユーザ定義パラメータおよび組み込みパラメータを参照するには、Ctrl キー+スペースバーを押して、使用可能な引数の選択リストを開きます(IMO コンテキストのユーザ定義入力引数および組み込みプロパティの両方が含まれます)。


サポートされるプラグマ

スクリプト ラインにインライン ディレクティブ(プラグマ)を挿入して、さらに細かいコントロールを行うことができます。プラグマは、角カッコ([...])で囲まれています。 表 6-3 に、Cisco ANA マクロ言語スクリプトによってサポートされるプラグマのリストを示します。

 

表 6-3 サポートされるプラグマ

プラグマ
簡単な説明
参照先

Success

ライン固有の成功チェック。

Success

Fail

ライン固有の失敗チェック。

Fail

Prompt

ライン固有のプロンプト アサーション検証。

Prompt

Full prompt

フル プロンプトの、ライン固有のプロンプト アサーション検証。

Full Prompt

Rollback

ロールバックをイネーブル化またはディセーブル化。

Rollback

Activity

スクリプトの備考。失敗した場所の特定に役立つこともあります。

Activity

Enum

列挙値の置き換えを定義。

Enum


) コマンド ラインの途中で復帰文字が必要な場合、エスケープ シーケンス &cr を使用します。



) これが発生した場合、1 つの行で複数のプラグマを使用でき、すべてのプラグマが分析されます。同じタイプのプラグマが繰り返された場合、最後のプラグマだけが使用されます。


Success

説明

Success プラグマは、スクリプト ライン応答に対して確認されます。Success プラグマにより、必要なサブストリングが応答に含まれることが確認されます。サブストリングがない場合、スクリプトは失敗します。

シンタックス

[success=<string>]
 

<string> は、デバイスからの想定される戻り値を示します。 <string> は、単純なテキストの場合か、または、実行時に置き換えられる引数を含めることができる場合があります。

ディレクティブ

デバイス応答に <string> が見つかった場合にのみ、プラグマは成功し、スクリプトが継続されます。

<string> が応答に含まれていない場合、プラグマは失敗します。

<string> は、正規表現である場合があります。厳密に一致するストリングである必要はありません。

次の例では、指定された VRF $newVrf$ が、まだ存在しないことが確認されます。

show ip vrf $newVrf$ [success=% No VRF $newVrf$]
 

このプラグマは、newVrf のトライアルを使用し、デバイス応答に % No VRF Trial が含まれている場合のみ、成功します。

Fail

説明

Fail プラグマは、スクリプト ライン応答に対して確認されます。Fail プラグマにより、必要なサブストリングが応答に含まれていないことが確認されます。

シンタックス

[fail=<string>]
 

<string> は、デバイス応答に含まれるべきではない値を示します。 <string> は、単純なテキストの場合か、または、実行時に置き換えられる引数を含めることができる場合があります。

ディレクティブ

デバイス応答に <string> が見つからなかった場合、プラグマは失敗します。 <string> が応答に含まれていない場合、スクリプトは継続されます。

<string> は、正規表現である場合があります。厳密に一致するストリングである必要はありません。

次の例では、ルート識別子が設定されます。

rd $newRD$ [fail=% Cannot set RD $newRD$]
 

このプラグマは、newRD に 60:60 を使用し、デバイス応答に =% Cannot set RD 60:60 が含まれている場合にのみ、失敗になります。

Prompt

説明

Prompt プラグマは、次の Telnet コマンド プロンプトに対して確認されます。Prompt プラグマにより、プロンプトの拡張子が該当するストリングに等しいことが確認されます。拡張子がストリングと異なる場合、スクリプトは失敗します。

シンタックス

[prompt=<prompt>]
 

ここで、 <prompt> は、新たに表示が想定されているプロンプトを表します。 <prompt> は、単純なテキストの場合か、または、デバイスに送信される前に実行時に置き換えられる引数を含めることができる場合があります。

ディレクティブ

<prompt> がデバイス プロンプトの拡張子として見つかった場合にのみ、プラグマは成功し、スクリプト実行が継続されます。デバイス プロンプトの拡張子に <prompt> が見つからなかった場合、プラグマは失敗します。

次の例では、Telnet プロンプトが変更され、新たに返された Telnet プロンプトで変更が確認されます。

configure terminal [prompt=(config)]
 

このプラグマは、次のデバイス プロンプトが (config)# で終了する場合にのみ、成功します。

Full Prompt

説明

Full prompt プラグマは、次の Telnet コマンド プロンプトに対して確認されます。Full prompt プラグマにより、プロンプトが該当するストリングに等しいことが確認されます。プロンプトがストリングと異なる場合、スクリプトは失敗します。

シンタックス

[prompt=^<prompt>]
 

ここで、 <prompt> は、表示が想定されているフル プロンプトを表します。 <prompt> は、単純なテキストの場合か、または、デバイスに送信される前に実行時に置き換えられる引数を含めることができる場合があります。

ディレクティブ

次のフル プロンプトが <prompt> と等しい場合にのみ、プラグマは成功し、スクリプト実行が継続されます。次のプロンプトが <prompt> に等しくなかった場合、プラグマは失敗します。

次の例では、Telnet プロンプトが変更され、新たに返された Telnet プロンプトで変更が確認されます。

configure terminal [prompt=^router(config)#]
 

このプラグマは、次のデバイス プロンプトが router(config)# に厳密に一致する場合にのみ、成功します。

Rollback

説明

Rollback プラグマにより、この時点以降からの失敗のみでロールバックが実行されることが決定されます。


) ロールバック スクリプトにより、スクリプトの開始前の元の値にデバイス プロンプトが戻されるようにしてください。


ディレクティブ

[rollback] マーカー後にスクリプトが失敗した場合、ロールバックが実行されます。


) ロールバック スクリプトが失敗した場合、実行される追加アクションはありません。


Activity

説明

スクリプトが失敗した場合、 Activity プラグマにより、スクリプトの結果に表示されるテキストが、失敗したアクティビティの名前に設定されます。戻される結果および生成されたプロビジョニング イベントに、失敗したアクティビティの名前(ラベル)が表示されます。

シンタックス

[activity=<activity>]
 

ここで、 <activity> はインライン備考コメントを表します。 <activity> は、単純なテキストの場合か、または、デバイスに送信される前に実行時に置き換えられる引数を含めることができる場合があります。

ディレクティブ

スクリプトの以降の部分で失敗が発生した場合、アクティビティ名によってエラーが通知されます。

[activity=now adding the vrf]

Enum

説明

Enum プラグマにより、パラメータ名を Telnet ストリングに置き換えるときに使用される値が定義されます。

ディレクティブ

リストの値の 1 つを入力する場合のみ、プラグマは成功します。リストの値の 1 つを入力しなかった場合、プラグマは失敗します。

Enum プラグマは、次のようにスクリプトの上部に表示されます。

[enum RouteTargetTypeEnum 0=export;1=import]
 

スクリプトの以降の部分で、次のように、パラメータ RouteTargetTypeEnum が使用されます。

no route-target $RouteTargetTypeEnum$ $RouteTarget$
 

Telnet コマンドの $RouteTargetTypeEnum$ に置き換えられる値は、0 または 1 の代わりに export または import です。

次のコマンド スクリプトおよびロールバック スクリプトにより、Add VRF 設定が実行されます。スクリプトによって、ユーザ定義引数が使用されて、VRF の名前、ルート ターゲット、およびルート識別子が表され、プラグマのいくつかのタイプによってデバイス応答が確認され、コマンド スクリプトおよびロールバック スクリプトに備考が記述されます。

コマンド スクリプト

[enum rd 1=60:60;2=80:80]
show ip vrf $vrfName$ [success=% No VRF named $vrfName$]
[activity=prepare for VRF creation]
config terminal [success=Enter configuration commands, one per line. End with CNTL/Z.] [prompt=(config)]
ip vrf $vrfName$ [prompt=(config-vrf)]
[rollback]
[activity=create VRF]
rd $rd$ [fail=% Cannot set RD, check if it's unique]
route-target both $rt$
end

ロールバック スクリプト

config terminal
no ip vrf $vrfName$
end
 

表 6-4 に、スクリプトで使用されるユーザ定義引数定義のリストを示します。

 

表 6-4 ユーザ定義引数の定義

名前
タイプ
デフォルト
説明

vrfName

ストリング

N/A

VRF の名前。この引数で指定される値は、VRF テーブル名として使用されます。

Manhattan

rt

ストリング

N/A

integer:integer の形式での、VRF ルート ターゲット。この引数で指定される値は、デバイス設定としてそのまま使用されます。

60:60

rd

ストリング

1

この例では、システム管理者は、事前定義された列挙型の値リストに基づいて、ルート識別子を設定します。したがって、ルート識別子は、ルックアップ テーブルとして使用されるよう、x:y ではなく整数の形式で指定されます。

1、2、または、列挙プラグマに従った有効値

表 6-5 に、行ごとのコマンド スクリプトの説明を示します。

 

表 6-5 コマンド スクリプトについて

スクリプト ライン
説明

[enum rd 1=60:60;2=80:80]

この行には、ルート識別子引数の可能性がある値が列挙されます。

show ip vrf $vrfName$ [success=% No VRF named $vrfName$]

要求された VRF がすでに存在するかどうかを確認します。必要な VRF の名前が見つからなかった場合のみ、VRF の作成が続行されます。

[activity=prepare for VRF creation]

次のセクションが、VRF 作成の準備であることが示される備考です。

config terminal [success=Enter configuration commands, one per line. End with CNTL/Z.] [prompt=(config)]

モード変更コマンド。Success プラグマ ストリングがデバイス応答の中に見つかる場合、次のコマンドが続行され、プロンプトが config に変わります。

ip vrf $vrfName$ [prompt=(config-vrf)]

モード変更コマンド。プロンプトが config-vrf に変わった場合、次のコマンドが続行されます。

[rollback]

後続のスクリプト ラインに失敗した場合にのみ、ロールバックが実行される必要があることを示す、プレースホルダーです。

[activity=create VRF]

次のセクションが、実際の VRF 作成であることが示される備考です。

rd $rd$ [fail=% Cannot set RD, check if it's unique]

ルート識別子が設定されます。このコマンドに失敗した場合、ロールバック スクリプトが呼び出されます。

route-target both $rt$

ルート ターゲットが設定されます。このコマンドに失敗した場合、ロールバック スクリプトが呼び出されます。

end

モード変更コマンド。通常(イネーブル)モードに戻ります。

表 6-6 に、行ごとのアクティベーション ロールバック スクリプトの説明を示します。

 

表 6-6 ロールバック スクリプトについて

スクリプト ライン
説明

config terminal

デバイスがターミナル モードに設定されます。

no ip vrf $vrfName$

デバイスから VRF が削除されます。

end

モード変更コマンド。通常(イネーブル)モードに戻ります。

スクリプトの実行

スクリプトは、次の入力引数で実行されます。

vrfName=Trial
rd=2
rt=60:60
 

デバイスに送信される Telnet コマンドは、次のとおりです(プレビュー)。

show ip vrf Trial
config terminal
ip vrf Trial
rd 80:80
route-target both 60:60
end
------Rollback------
config terminal
no ip vrf Trial
end

フル セッションは、次のとおりです。

vrfName=Trial
rd=2
rt=60:60
 
PE-North#show ip vrf Trial
% No VRF named Trial
PE-North#config terminal
Enter configuration commands, one per line. End with CNTL/Z.
PE-North(config)#ip vrf Trial
PE-North(config-vrf)#rd 80:80
PE-North(config-vrf)#route-target both 60:60
PE-North(config-vrf)#end

同じ入力値でスクリプトを再実行します(VRF はすでに存在し、VRF の名前の確認後、コマンドが停止します)。

PE-North#show ip vrf Trial
Name Default RD Interfaces
Trial 80:80
PE-North#
^ Failed to find the text '% No VRF named Trial' in the device reply!, script terminated.
 

異なる VRF 名だが同じ Route Target(RT; ルート ターゲット)および Route Distinguisher(RD; ルート識別子)でスクリプトを実行します(VRF の作成が開始され、RD がすでに使用中のためロールバックされます)。

vrfName=Trial2
rd=2
rt=50:50
 
PE-North#show ip vrf Trial2
% No VRF named Trial2
PE-North#config terminal
Enter configuration commands, one per line. End with CNTL/Z.
PE-North(config)#ip vrf Trial2
PE-North(config-vrf)#rd 80:80
% Cannot set RD, check if it's unique
PE-North(config-vrf)#
^ Error in activity 'create VRF'.
^ Found the text '% Cannot set RD, check if it's unique' in the device reply!, script terminated.
-----Invoking Rollback-----
PE-North#config terminal
Enter configuration commands, one per line. End with CNTL/Z.
PE-North(config)#no ip vrf Trial2
% IP addresses from all interfaces in VRF Trial2 have been removed
PE-North(config)#end