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

この章では、Cisco NX-OS デバイスで tcl をインタラクティブにスクリプトで実行する方法について説明します。

機能情報の確認

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

注意事項と制約事項

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 コマンドで設定します。

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

tcl に関する情報

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

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

tclsh コマンドの実行

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


(注)  


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


手順の概要

  1. tclsh [ bootflash:filename [ argument ... ]]

手順の詳細

コマンドまたはアクション 目的

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
  2. configure terminal
  3. tclquit

手順の詳細

  コマンドまたはアクション 目的

ステップ 1

tclsh

例:

switch# tclsh
switch-tcl# 
 

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

ステップ 2

configure terminal

例:

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

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

(注)  

 

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

ステップ 3

tclquit

例:

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 年

  • Brent B. 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 年