『Cisco Nexus 7000 シリーズ NX-OS 基本設定ガイド、リリース 6.x』
tcl によるスクリプティング
tcl によるスクリプティング

tcl によるスクリプティング

この章では、Cisco NX-OS デバイス上で tcl を対話的に実行する方法とスクリプトで実行する方法について説明しており、以下の項で構成されています。

機能情報の確認

ご使用のソフトウェア リリースで、このモジュールで説明されるすべての機能がサポートされているとは限りません。 最新の警告および機能情報については、https:/​/​tools.cisco.com/​bugsearch/​ の Bug Search Tool およびご使用のソフトウェア リリースのリリース ノートを参照してください。 このモジュールで説明される機能に関する情報、および各機能がサポートされるリリースの一覧については、「新機能および変更された機能に関する情報」の章を参照してください。

tcl に関する情報

tcl(Tool Command Language)は、カリフォルニア大学バークレー校の John Ousterhout が作成したスクリプト言語です。 tcl 8.5 は、スクリプト作成機能を提供するために、Cisco NX-OS Release 5.1(1) に追加されました。 tcl を使用すると、デバイスの CLI コマンドをより柔軟に使用できます。 tcl を使用して show コマンドの出力の特定の値を抽出したり、スイッチを設定したり、Cisco NX-OS コマンドをループで実行したり、スクリプトで EEM ポリシーを定義したりすることができます。

ここでは、Cisco NX-OS デバイスで tcl スクリプトを実行する方法や、tcl を対話的に実行する方法について説明します。

注意事項と制約事項

tcl 設定時の注意事項と制限事項は次のとおりです。

tclsh コマンドのヘルプ

tcl コマンドでは、コマンドのヘルプは使用できません。 インタラクティブ tcl シェル内から Cisco NX-OS コマンドのヘルプ機能に引き続きアクセスできます。

次に、インタラクティブ tcl シェルで tcl コマンドのヘルプがない場合の例を示します。

switch# tclsh
switch-tcl# set x 1
switch-tcl# puts ?
          ^
% Invalid command at '^' marker.
switch-tcl# configure ?
  <CR>
  session   Configure the system in a session
  terminal  Configure the system from terminal input

switch-tcl# 
 

(注)  


上の例では、Cisco NX-OS コマンドのヘルプ機能が引き続き使用できますが、tcl の puts コマンドはヘルプ機能からのエラーを返します。


tclsh コマンドの履歴

端末で矢印キーを使用して、以前にインタラクティブ tcl シェルで入力したコマンドにアクセスできます。


(注)  


インタラクティブ tcl シェルを終了すると、tclsh コマンドの履歴は保存されません。


tclsh のタブ補完

インタラクティブ tcl シェルを実行している場合は、Cisco NX-OS コマンドのタブ補完を使用できます。 tcl コマンドでは、タブ補完は使用できません。

tclsh の CLI コマンド

インタラクティブ tcl シェル内から直接 Cisco NX-OS コマンドにアクセスできますが、 tcl cli コマンドにより付加される場合のみ tcl スクリプト内で Cisco NX-OS コマンドを実行できます。

インタラクティブ tcl シェルでは、次のコマンドは同じであり、正しく実行されます。

switch-tcl# cli show module 1 | incl Mod
switch-tcl# cli "show module 1 | incl Mod"
switch-tcl# show module 1 | incl Mod
 

tcl スクリプトで、次の例のように、Cisco NX-OS コマンドに tcl cli コマンドを付加する必要があります。

set x 1
cli show module $x | incl Mod
cli "show module $x | incl Mod"
 

スクリプトで次のコマンドを使用すると、そのスクリプトは失敗し、tcl シェルにエラーが表示されます。

show module $x | incl Mod
"show module $x | incl Mod"
 

tclsh コマンドの区切り

セミコロン(;)は、Cisco NX-OS と tcl の両方でのコマンド区切りです。 tcl コマンドで複数の Cisco NX-OS コマンドを実行するには、各 Cisco NX-OS コマンドを引用符("")で囲む必要があります。

インタラクティブ tcl シェルでは、次のコマンドは同じであり、正しく実行されます。

switch-tcl# cli "configure terminal ; interface loopback 10 ; description loop10"
switch-tcl# cli configure terminal ; cli interface loopback 10 ; cli description loop10
switch-tcl# cli configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.

switch(config-tcl)# cli interface loopback 10
switch(config-if-tcl)# cli description loop10
switch(config-if-tcl)#
 

インタラクティブ tcl シェルでは、tcl の cli コマンドを付加せずに、直接 Cisco NX-OS コマンドを実行することもできます。

switch-tcl# configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.

switch(config-tcl)# interface loopback 10
switch(config-if-tcl)# description loop10
switch(config-if-tcl)#
 

tcl 変数

tcl 変数を Cisco NX-OS コマンドへの引数として使用できます。 また、tcl スクリプトに引数を渡すこともできます。 tcl 変数は永続的ではありません。

次の例では、tcl 変数を Cisco NX-OS コマンドへの引数として使用する方法を示します。

switch# tclsh
switch-tcl# set x loop10
switch-tcl# cli "configure terminal ; interface loopback 10 ; description $x"
switch(config-if-tcl)#
 

tclquit

tclquit コマンドは、どの Cisco NX-OS コマンド モードが現在アクティブであるかには関係なく tcl シェルを終了します。 また、Ctrl+C を押して tcl シェルを終了することもできます。 exit コマンドと end コマンドは、Cisco NX-OS コマンド モードを変更します。 exit コマンドは、EXEC コマンド モードからのみ tcl シェルを終了します。

tclsh のセキュリティ

tcl シェルは、Cisco NX-OS システムの特定の部分への不正アクセスを防止するために、サンドボックスで実行されます。 システムは、無限ループや過剰なメモリ使用率などのイベントを検出するために、tcl シェルによって使用されている CPU、メモリ、ファイルなどのシステム リソースをモニタリングします。

初期の tcl 環境は、scripting tcl init init-file コマンドで設定します。

tcl 環境のループ制限は、scripting tcl recursion-limit iterations コマンドで定義できます。 デフォルトの再帰制限は 1000 回の繰り返しです。

tclsh コマンドの実行

tclsh コマンドを使用すると、スクリプトまたはコマンド ラインから tcl コマンドを実行できます。


(注)  


CLI プロンプトの状態で tcl スクリプト ファイルを作成することはできません。 スクリプト ファイルはリモート デバイスで作成して、Cisco NX-OS デバイスの bootflash: ディレクトリにコピーすることができます。


手順
     コマンドまたはアクション目的
    ステップ 1 tclsh [bootflash:filename [argument ... ]]


    例:
    switch# tclsh ?
      <CR>
      bootflash:  The file to run
    
     

    tcl シェルを開始します。

    引数を指定せずに tclsh コマンドを実行すると、シェルは対話形式で実行され、標準入力から tcl コマンドを読み込んで、コマンドの結果とエラー メッセージを標準出力に出力します。 tclquit を入力するか、Ctrl+C を押すとインタラクティブ tcl シェルが終了します。

    引数を指定して tclsh コマンドを実行すると、最初の引数は、tcl コマンドが記述されたスクリプト ファイルの名前になり、他の引数をスクリプトで変数として使用できます。

     

    次に、インタラクティブ tcl シェルの例を示します。

    switch# tclsh
    switch-tcl# set x 1
    switch-tcl# cli show module $x | incl Mod
    Mod  Ports  Module-Type                      Model              Status
    1    32     1/10 Gbps Ethernet Module        N7K-F132XP-15      ok
    Mod  Sw              Hw
    Mod  MAC-Address(es)                         Serial-Num
    Mod  Online Diag Status
    Left ejector CLOSE, Right ejector CLOSE, Module HW does support ejector based shutdown.
    switch-tcl# exit
    switch#
     

    次の例は、tcl スクリプトの実行方法を示しています。

    switch# show file bootflash:showmodule.tcl
    set x 1
    while {$x < 19} {
    cli show module $x | incl Mod
    set x [expr {$x + 1}]
    }
     
    switch# tclsh bootflash:showmodule.tcl
    Mod  Ports  Module-Type                      Model              Status
    1    32     1/10 Gbps Ethernet Module        N7K-F132XP-15      ok
    Mod  Sw              Hw
    Mod  MAC-Address(es)                         Serial-Num
    Mod  Online Diag Status
    Left ejector CLOSE, Right ejector CLOSE, Module HW does support ejector based shutdown.
    switch#
     

    tclsh のコマンドによる Cisco NX-OS のモードの制御

    インタラクティブ tcl シェルの実行中に Cisco NX-OS のモードを変更できます。

    手順
       コマンドまたはアクション目的
      ステップ 1 tclsh


      例:
      switch# tclsh
      switch-tcl# 
       
       

      インタラクティブ tcl シェルを開始します。

       
      ステップ 2configure terminal


      例:
      switch-tcl# configure terminal
      switch(config-tcl)# 
       
       

      tcl シェルで Cisco NX-OS のコマンドを実行して、モードを変更します。

      (注)     

      tcl プロンプトが変化して、Cisco NX-OS コマンド モードになったことが示されます。

       
      ステップ 3tclquit


      例:
      switch-tcl# tclquit
      switch# 
       
       

      tcl シェルを終了し、開始モードに戻ります。

       

      次に、インタラクティブ tcl シェルから Cisco NX-OS のモードを変更する例を示します。

      switch# tclsh
      switch-tcl# configure terminal
      Enter configuration commands, one per line.  End with CNTL/Z.
      switch(config-tcl)# interface loopback 10
      switch(config-if-tcl)# ?
        description  Enter description of maximum 80 characters
        inherit      Inherit a port-profile
        ip           Configure IP features
        ipv6         Configure IPv6 features
        logging      Configure logging for interface
        no           Negate a command or set its defaults
        rate-limit   Set packet per second rate limit
        shutdown     Enable/disable an interface
        this         Shows info about current object (mode's instance)
        vrf          Configure VRF parameters
        end          Go to exec mode
        exit         Exit from command interpreter
        pop          Pop mode from stack or restore from name
        push         Push current mode to stack or save it under name
        where        Shows the cli context you are in
      
      switch(config-if-tcl)# description loop10
      switch(config-if-tcl)# tclquit
      Exiting Tcl
      switch#
       

      tcl の参照

      次のタイトルは、参照のために示されています。

      • Mark Harrison (ed)、『Tcl/Tk Tools』、O'Reilly Media、ISBN 1-56592-218-2、1997 年

      • Mark Harrison および Michael McLennan、『Effective Tcl/Tk Programming』、Addison-Wesley、Reading、MA、USA、ISBN 0-201-63474-0、1998 年

      • John K. Ousterhout、『Tcl and the Tk Toolkit』、Addison-Wesley、Reading、MA、USA、ISBN 0-201-63337-X、1994 年

      • Brent B. Welch、『Practical Programming in Tcl and Tk』、Prentice Hall、Upper Saddle River、NJ、USA、ISBN 0-13-038560-3、2003 年

      • J Adrian Zimmer、『Tcl/Tk for Programmers』、IEEE Computer Society、John Wiley and Sons により出版、ISBN 0-8186-8515-8、1998 年