コンフィグレットワークフロー
- 概要
- Commandタグで使用可能な属性
- ユーザー入力例とタイムアウト
- 実行ステータスの決定
- 実行フローの決定
- シーケンスIDは、コンフィグレット内で一意である必要があります。
- シーケンスID1を持つコマンドは、コンフィグレットの実行ワークフローの開始点として使用されます。
- シーケンスID1を持つコマンドが存在しない場合は、最初のコマンドがコンフィグレットの実行ワークフローの開始点となります。
- 最後のコマンドに条件が指定されていない場合は、最後のコマンドとして扱われ実行が終了します。
- 条件値を持たないコマンドの場合、実行フローはシーケンス番号に基づくのではなく、順序で定義された通りに処理されます。
シーケンス番号は識別子としてのみ使用され、実行フローのシーケンスには使用されません。
概要
この機能は、CLIコンフィグレット機能の「アドバンスドスクリプト実行モード」で使用できます。
Commandタグにおいて使用可能な属性について説明します。
シーケンス(Sequence)
シーケンスは、コマンドの識別子として使用され、同じコンフィグレット内で定義されている他のコマンドから参照できます。
シーケンスIDは、特定のコマンドの応答結果に基づいて、コマンド実行のフローを指示するために使用されます。
この属性には、以下の制約があります。
シーケンス属性はコマンドの識別子であるため、すべてのコマンドにはシーケンス属性が必要です。
シーケンス番号はソートして順序立てる必要はなく、任意の順序で定義できます。
Commandタグで使用可能な属性
Condition
この属性は特定のコマンドに対して、応答として満たされるべき条件を指定します。
値として、contains、notcontains、equals、onlyonceを指定できます。
これらは同じコマンドで定義された「Value属性」を使用して応答に適用されます。
この属性はオプションであり「Value属性」でのみ実装する必要があります。
「Value属性」なしでCondition属性が指定された場合、コンフィグレットの保存中に有効性の検証が行われます。
Value
この属性は、Condition属性を検証する際に、演算子(オペランド)として使用できる正規表現や文字列を指定します。
Condition属性を使用する場合にValue属性が存在している必要があり、コンフィグレットの保存中に有効性が検証されます。
この属性に基づいて、後述の成功、失敗の属性として定義された実行フローに移行します。
Success
この属性は、コンフィグレット内のコマンドで定義されたシーケンス番号を受け取ります。
Condition属性とValue属性の両方を指定する必要があり、コンフィグレットの保存中に有効性が検証されます。
指定した条件がコマンド応答の値と一致する場合、次に実行されるコマンドは、成功として定義したシーケンスIDのコマンドに基づいて実行されます。
この属性が指定されておらず条件に一致した場合、順序通りに次のコマンドが実行されます。
Failure
この属性は、コンフィグレット内のコマンドで定義されたシーケンス番号を受け取り、Success属性と同様の特性です。
Success属性との違いとして、この属性はオプションです。
ユーザーが指定した条件と一致しない場合、失敗で定義されたシーケンスIDを使用して次のコマンドが実行されます。
指定されていない場合は、コマンドの実行フローは終了とみなされます。
ErrorString
エラー文字列は、指定された文字列に基づいて、コンフィグレット実行の失敗状態を判断するために使用される属性です。
コマンド応答にErrorString(エラー文字列)が含まれている場合、対象装置におけるコンフィグレットの全体的な実行結果は失敗としてマークされます。
コマンド実行
コマンドの実行はシーケンス番号1のコマンドから開始されます。
コマンドにCondition属性が指定されている場合、コマンド応答の結果から、成功または失敗が決定されます。
成功の場合、Success属性から次のコマンドが取得され、失敗の場合Failure属性から次のコマンドが取得されます。
失敗の場合でFailure属性が指定されていない場合は、コマンド実行は停止します。
成功または失敗の条件の値として、「end」または「END」を指定することで実行を停止し成功としてマークすることができます。
同様に条件の値に「ERROR-HALT」を指定すると、実行が停止し失敗としてマークすることができます。
自動ループ検知
コマンドの実行フローでループが発生した場合、Network Configuration Managerではそのループを自動検出することはできません。
このような場合に備えて、[設定]→[一般]→[クライアント/サーバー設定]で「高度なスクリプト実行モードのコンフィグレットで自動ループ検知を有効化」を有効にすることで、ループの発生を処理します。
同じコンフィグレットが3回以上実行されると、コンフィグレットの実行が停止されます。
ユーザー入力例とタイムアウト
<command prompt=']?'>copy tftp: flash:</command>
<command prompt=']?'>$TFTP_SERVER_IP</command>
<command prompt=']?'>$SOURCE_FILE_NAME</command>
<command prompt='confirm'>$DESTINATION_FILE_NAME</command>
<command timeout='120' suffix='$NO_ENTER'>y</command>
上記のコマンドは、OSイメージファイルをTFTPサーバーからCisco IOSデバイスにアップロードするコンフィグレットの例です。
コマンド「<command prompt=']?'>copy tftp: flash:</command>」は、コマンド「copy tftp: flash:」を実行すると、TFTPサーバーのホスト名の入力を要求する「[hostname]?」で終わるプロンプトが表示されることを意味します。
これにより、プロンプトが表示された後に、次のコマンド「TFTP_SERVER_IP」を入力できるか決まります。
4つ目のコマンド「<command prompt='confirm'>$DESTINATION_FILE_NAME</command>」に関して、
これは、宛先ファイル名を入力すると、確認を要求するプロンプトが表示されることを意味します。
最後のコマンドでは「suffix='$NO_ENTER'」タグを使用しており、これは対応するコマンドのサフィックスがないことを意味します。
デフォルトでは各コマンドの最後に改行が追加されますが、改行ではなく「y」を入力することで次の実行に進むような場合に、「suffix='$NO_ENTER'」タグを使用して改行を無視できます。
実行ステータスの決定
コマンドの応答内容に基づいて実行ステータスを判断するには、以下のように、該当のコマンドに「ErrorString」属性を追加する必要があります。
Brocadeスイッチからフロー解析ツールにsflowを出力するコンフィグレットのスクリプトを例とします。
<command>sflow enable</command>
<command>sflow destination $NETFLOW_IP 9996</command>
<command>sflow polling-interval 60</command>
<command>sflow agent-ip $LOOPBACK_IFNAME</command>
<command>sflow sample $SAMPLING_NUMBER</command>
<command>interface $IF_NAME</command>
<command>sflow-forwarding</command>
特定のシリーズやモデルで上記のコマンドがサポートされていない場合、正常に実行されません。
装置側では以下のように、失敗しているにも関わらず応答に基づいてエラーと判断できず、実行結果としても成功と判断されます。
このような場合に、「ErrorString」タグを指定して、失敗と判定し実行を停止することができます。
この例の場合、「ErrorString」は「unknown command」を指定します。
<command ErrorString="unknown command">sflow enable</command>
<command>sflow destination $NETFLOW_IP 9996</command>
<command>sflow polling-interval 60</command>
<command>sflow agent-ip $LOOPBACK_IFNAME</command>
<command>sflow sample $SAMPLING_NUMBER</command>
<command>interface $IF_NAME</command>
<command>sflow-forwarding</command>
上記の場合の実行結果は以下のようになり、失敗として判定されます。
実行フローの決定
同じsflowの出力例で、応答内容に基づいて、次にどのコマンドを実行するか指定できます。
例として、応答に「unknown command」というエラー文字列が含まれている場合、最後のコマンドを実行して実行を停止できます。
エラー文字列が存在しない場合は、次のコマンドに順番に進みます。
<command Sequence="1" Condition="contains" Value="unknown command" Success="8" Failure="2">sflow enable</command>
<command>sflow destination $NETFLOW_IP 9996</command>
<commandSequence="2">sflow polling-interval 60</command>
<commandSequence="3">sflow agent-ip $LOOPBACK_IFNAME</command>
<commandSequence="4">sflow sample $SAMPLING_NUMBER</command>
<commandSequence="5">interface $IF_NAME</command>
<commandSequence="6">sflow-forwarding</command>
<commandSequence="7">sflow-forwarding</command>
<commandSequence="8">exit</command>