TeraTermマクロでコマンド出力結果を使って別のコマンドを実行する

NetAppの設定をTeraTermマクロで取得出来るようにマクロを作成中し https://github.com/osakanataro/get-ontap-config で公開中です。

物理ディスク一覧を作成する際、単純に「storage disk show」で取得すると、2ノードの表示が入り交じり、どちらに所属している物理ディスクなのか判別が面倒。

なので、「storage disk show -nodelist ノード名」という形で出力を分けたいのだが、NetAppに対して「system node show -fields node」で取得したノード一覧からノード名を抜き出して、それぞれに対してコマンドを実行するためには、TeraTermマクロで実装できるのかを調査した。

調査

まず、NetAppのノード名一覧の出力を確認

1netapp01::> system node show -fields node
2node
3-------------
4netapp01-01
5netapp01-02
62 entries were displayed.
7 
8netapp01::>

ノードとして「netapp01-01」と「netapp01-02」があることを確認。

また、system node showコマンドの出力のうち最初の2行はヘッダ、そして、ノード名出力後に「~ entries were displayed.」と出力がある。これらは使わないので除外が必要。

スクリプト

サンプルとして、ノード一覧を表示して、各ノードに対して「system node run -node ノード名 hostname」を実行する、というものを作成した。

1setsync 1
2timeout=60
3strdim nodenames 20
4I=0
5sendln 'system node show -fields node'
6recvln ; コマンド入力 のecho出力  をスキップ
7recvln ; ヘッダ部分 をスキップ
8recvln ; --- 部分 をスキップ
9 
10endflag=1
11while endflag=1
12    recvln
13    strscan inputstr 'displayed.'
14    if result>0 then
15        endflag=0
16    else
17        nodenames[I] = inputstr
18        I=I+1
19    endif
20endwhile
21wait '::> '
22 
23J=0
24while I > J
25    sendln 'system node run -node ' nodenames[J] ' hostname'
26    wait '::> '
27    J=J+1
28endwhile
29 
30setsync 0

スクリプトの解説

今回のようなコマンド出力結果を受け取る場合は、「setsync 1」を実行して、確実に出力結果を受け取る設定(同期)とする必要がある。

次に「recvln」する際、TeraTermマクロからNetAppに送信した文字列もrecvlnで受け取ることになっているため、最初の1行は捨てている。(recvlnして、その後、何の処理もしていない)

続けて2行がヘッダなので、「recvln」で2行分受け取り、何も処理していない。

「2 entries were displayed.」というエントリ以降の行は不要なので、whileを終了する処理を入れるが、1台だったりすると1 entry wasとかになったりしそうなのでdisplayed.だけで終了検出。

whileを抜けたあとは、コマンドプロンプトの「::> 」が来るまで待ちを入れる。

スクリプト実行例

1netapp01::> system node show -fields node
2node
3-------------
4netapp01-01
5netapp01-02
62 entries were displayed.
7 
8netapp01::> system node run -node netapp01-01 hostname
9netapp01-01
10netapp01::> system node run -node netapp01-02 hostname
11netapp01-02
12netapp01::>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

StatCounter - Free Web Tracker and Counter