プログラマブルコンフィグレット

プログラマブルコンフィグレットとは

プログラマブルコンフィグレットを使用して、複数のネットワーク装置のコンフィグ変更を自動化します。

コンフィグレットを実行する条件を指定することで、大規模なネットワーク環境においても一括かつ動的なコマンド実行を実現します。

プログラマブルコンフィグレットを使用するメリット

1.条件定義によるコンフィグ実行

プログラマブルコンフィグレットで特定の条件を定義することで、条件に該当した場合にコンフィグ変更を実行します。


2.ループ処理によるコンフィグ実行

ループ処理により、複数の装置に対して反復的にコンフィグ変更を実行します。

インターフェース情報の更新やSNMP設定の有効化、アクセスコントロールリストなど反復的な操作にかかる工数を削減します。


3.機密データを安全に操作

パスワードなどの機密データを、コンフィグレットのテンプレート内に非表示で事前定義することができます。


4.効率的に一括でコンフィグ変更

一括操作により複数のインターフェースやVLANなど、多岐にわたる設定変更を一括で実行します。


プログラマブルコンフィグレットを作成する

以下の手順で、プログラマブルコンフィグレットを作成します。

  1. [コンフィグ自動化]→[コンフィグレット]→[プログラマブルコンフィグレット]に移動
  2. 画面右上の[+]アイコンをクリック
  3. プログラマブルコンフィグレットの名前を任意に入力し、プルダウンから特定のベンダーまたは「All」を選択
  4. 「実行」で、プログラマブルコンフィグレットを単一装置に実行するか複数装置に実行するか選択
  5. 「コンフィグレット内容」で、以下のSyntax(構文)を使用してコマンドを設定
    その他のSyntax(構文)一覧
    Syntax(構文) 説明
    $device.execute("command") 単一のコマンドを実行します。
    $device.executeBulk(["command1", "command2"]) 一度に複数のコマンドを実行します。
    $device.execute("command", "prompt") コマンドとプロンプトを指定します。
    $device.execute("command", "prompt", timeout, delay, "msgSuffix") コマンドとプロンプト、タイムアウト、遅延、メッセージサフィックスを指定します。
    $device.executeTimeout("command", timeout) コマンドとタイムアウトを指定します。
    $device.executeTimeout("command", timeout, "prompt") コマンドとタイムアウト、プロンプトを指定します。
    $device.executeDelay("command", delay) コマンドと遅延を指定します。
    $device.executeDelay("command", delay) コマンドと遅延、プロンプトを指定します。

    $を使用して、変数を作成することができます。
    例: $device.execute("show interface $name")
    ここで「$name」がコンフィグレットの変数を指します。

  6. [次へ]をクリック
  7. 「ユーザー定義のパラメーター」画面で各変数の値を選択
    • デフォルト値
      変数に対してデフォルトの値を入力できます。
    • タイプ
      変数のタイプを指定します。
      • Text
        正規表現を使用できます。
        正規表現を使用することで、コンフィグレットの変数の入力の検証に使用されます。
        例として、変数にIPアドレスの入力が必要な場合、正規表現を指定することで有効なIPアドレスのみが受け入れられ、値の不一致を防止します。
        正規表現の追加方法
      • Password
        機密性の高い情報として、入力した値を非表示にします。
      • Option
        キーと値の組み合わせを2つ追加できます。
        プログラマブルコンフィグレットを実行する際に、追加したキーを選択できるようになります。
      • Boolean
        プログラマブルコンフィグレットを実行する際に、Yes、Noのプロンプトを選択できるようになります。
        Yes、Noそれぞれにプロンプト応答の値を設定します。
      • Dropdown
        キーと値の組み合わせを複数追加できます。
        プログラマブルコンフィグレットを実行する際に、必要なキーを1つ選択できます。
      • Multi-Selectキーと値の組み合わせを複数追加できます。
        プログラマブルコンフィグレットを実行する際に必要なキーを複数選択することで、動的リストを反復で適用できます。
    • 隠し変数
      機密情報を含む場合は、チェックを入れます。
      チェックを入れる場合、「デフォルト値」に値を入力してください。プログラマブルコンフィグレットを実行の際、該当の変数は非表示になります。
    • コンフィグレットを実行するために、事前定義したい値が複数存在する場合は、[選択フィールド]に値を追加できます。
      プログラマブルコンフィグレットを実行する際に、選択できるようになります。
  8. [保存]をクリック

実用例

1.Cisco:アクセスポートへのSNMPトラップ設定

目的
管理者モードをもつインターフェースにSNMPトラップ設定を行う

コンフィグレットの内容
#foreach( $interface in $device.interfaces() )
     #set( $switchport = $device.execute("switch show interface switchport $interface") )
     #if( $switchport.toString().contains("Administrative Mode: access"))
         $device.execute("config t")
         $device.execute("interface $interface")
         $device.execute("snmp trap mac-notification")
         $device.execute("exit")
     #end
#end

コンフィグレットのポイント

  • 「$device.interfaces()」を使用して、各インターフェースに対して反復処理を行います。
  • コマンド「switch show interface switchport <interface>」を実行して、インターフェースがアクセスモードであるかチェックします。
  • 条件に該当する場合、コンフィグレーションモードに移行し、「snmp trap mac-notification」を有効にします。

コンフィグレットの実行例

反復1

  • インターフェース:GigabitEthernet 0/0
  • 現在のモード:Administrative Mode: trunk
  • 条件チェック:$switchport.contains("Administrative Mode: access") = false
  • アクション:条件に該当しないためスキップ

反復2

  • インターフェース:GigabitEthernet 0/1
  • 現在のモード:AdministrativeMode:access
  • 条件チェック:$desc.contains("Administrative Mode: access") = true
  • アクション:条件に該当し、SNMPトラップ設定を更新

2.ファームウェアのアップグレード

目的 ネットワーク機器のファームウェアのアップグレードを自動化する

コンフィグレットの内容
$device.execute("copy tftp flash", "]?")
$device.execute($TFTP_SERVER_IP, "]?")
$device.execute($SOURCE_FILE_NAME, "]?")
$device.execute($DESTINATION_FILE_NAME)
#set( $flashVal = $device.execute("show flash"))
#if ( $flashVal.toString().contains($DESTINATION_FILE_NAME) )
$device.execute("reload", "confirm]")
$device.execute("y","$NO_RESPONSE",-1,240000,"")
$device.execute("config t")
$device.execute("boot system $DESTINATION_FILE_NAME")
$device.execute("exit")
$device.execute("show version")
#end

コンフィグレットのポイント

  • TFTPサーバーから装置にファームウェアをコピー
  • ファームウェアのファイルが存在するかチェック
  • ファイルが存在する場合、装置をリロードし、bootシステムを設定します。
  • 最後に、「show version」を実行して、更新状況を確認します。

事前定義された変数
事前に定義された変数に対して、手動で値を入力する必要はありません。
事前定義された変数は、コンフィグレットの実行中に対応する値に自動で置換されます。

事前定義されている変数は以下の通りです。
例:$device.execute("copy filename scp://$scp_username@$scp_serverip/filename}")

事前定義された変数 説明
$scp_serverip SCPサーバーのIPアドレス
$tftp_serverip TFTPサーバーのIPアドレス
$sftp_serverip SFTPサーバーのIPアドレス
$scp_username SCPサーバーのユーザー名
$scp_password SCPサーバーのパスワード
$sftp_username SFTPサーバーのユーザー名
$sftp_password SFTPサーバーのパスワード

3.モデルベースの更新

目的 装置のモデル情報をもとに設定を行う

コンフィグレットの内容
#if( $device.model().contains("9300"))
     #set ( $mtu_size = "9000" )
#elseif( $device.model().contains("2900"))
     #set ($mtu_size = "1500" )
#else
     #set ( $mtu_size = "1000" )
#end
$device.execute("conf t")
$device.execute("system mtu $mtu_size")
$device.execute("exit")

コンフィグレットのポイント

  • 「device.model()」関数を使用して装置のモデル情報を確認し、モデルに応じてMTUの値を設定します。
  • グローバルコンフィグレーションモードで、「$mtu_size」の値を設定します。
  • 装置のモデルに応じて、9000、1500、1000バイトを設定します。「system mtu」コマンドを使用して、MTU設定を適用します。

モデル「9300」のCisco装置の例
装置のモデルに「9300」という文字列が含まれている場合、MTUサイズを「9000」バイトに設定します。

モデル「2900」のCisco装置の例
装置のモデルに「2900」という文字列が含まれている場合、MTUサイズを「1500」バイトに設定します。

その他のモデルの例
装置のモデルに「9300」も「2900」も文字列に含まれていない場合、MTUサイズを「1000」バイトに設定します。

その他のSyntax(構文)一覧

$device関数

Syntax(構文) 説明
$device.ip() 装置のIPアドレスを取得する
$device.hostname() 装置のホスト名を取得する
$device.imgfile() イメージファイルを取得する
$device.macaddr() MACアドレスを取得する
$device.serialno() 装置のシリアル番号を取得する
$device.ostype() 装置のOSタイプを取得する
$device.vendor() 装置のベンダー情報を取得する
$device.protocol() 装置のプロトコルを取得する
$device.devicetype() 装置タイプを取得する
$device.template() 装置テンプレート情報を取得する
$device.model() 装置のモデル情報を取得する
$device.series() 装置のシリーズ情報を取得する
$device.osversion() 装置のOSバージョンを取得する

$util関数

Syntax(構文) 説明 サンプル
$util.split(String input, String regex) 文字列を区切り文字で分割します。 $util.split("hostname,interface,ip_address",",");
  • $util.integer(String integerNumber)
  • $util.bigint(String integerNumber)
数値を整数やビッグインテジャー(非常に大きな整数)に変換します。
  • $util.integer("1024");
  • $util.bigint("12345678901234567890");
  • $util.grep(String inputTxt, String regex, int group)
  • $util.parseInt(String inputTxt, String regex, int group)
  • $util.parseLong(String inputTxt, String regex, int group)
正規表現を使用して、文字列、整数、longの一部を抽出します。
例:コマンド出力から、パーセンテージやエラーコードを検索します
  • $util.grep("Error: Connection failed, ErrorCode: 404", "ErrorCode: (\\d+)", 1);
  • $util.parseInt("Progress: 30%", "Progress: (\\d+)%", 1);
  • $util.parseLong("Timestamp: 1609459200", "Timestamp: (\\d+)", 1);
$util.sleep(int seconds) 指定した秒数、スクリプトの実行を一時的に停止します。
例:装置が再起動するまでに待機する
$util.sleep(5);
  • $util.date(String pattern)
  • $util.date() (default pattern - dd-MM-YYYY)
現在の日付を取得します。
  • $util.date("yyyy-MM-dd HH:mm:ss")
  • $util.date()

$server関数

Syntax(構文) 説明
$server.ip() サーバーのIPアドレスを取得する
$server.syslogport() syslogポート番号を取得する

その他

  • #set($variable="variablevalue")
    変数に値を割り当てます。
    例:#set($i=1)
  • 利用可能なインターフェース、VLAN、カスタムカラムのリストを反復するには
    #foreach($variable in $variableList)
     ....
    #end
    $variableList:$device.interfaces()、$device.vlans()、$device.customcolumns()
  • 条件文を使用するには
    #if($true)
     ...
    #elseif
     ...
    #end
  • 参考としてコメントを追加するには
    ## This is a single-line comment

    #*
    This is a multi-line
    comment
    *#
  • 比較には、一般的な演算子を使用します。
    &&, ||, ==, !=, >, <
  • 配列には以下のリストメソッドを使用します。
    $myarray.isEmpty()、$myarray.size()、$myarray.get(index)、$myarray.set(index, value)
  • 文字列関数には、以下の関数を使用します。
    $string.length()、$string.contains()、$string.substring(index)、$string.trim()、$string.toLowerCase()、$string.toUpperCase()、$string.concat($string1)、$string.startsWith()

正規表現の追加方法

以下の手順で正規表現を追加します。

  1. [コンフィグ自動化]→[コンフィグレット]→[正規表現]を表示
  2. 画面右上の[+]アイコンをクリック
  3. 任意の表示名と正規表現、その説明を入力
  4. [保存]をクリック