8.2.1. 外部ファイルを読む
それでは、久しぶりの登場ですが、5.4.までで作ったシンプルマクロの進化版を使って、外部ファイルを取り込んで行きたいと思います。
8.2.1.1. シンプルマクロの振り返り
5.4.までに作成したマクロは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
;================================= ;変数格納 ;================================= PWD = 'cisco123' IP_ADDR = '172.16.0.1' ;IPアドレスに必要なオプションを追加する strconcat IP_ADDR ':23 /nossh /T=1' ;================================= ;telnet接続、ログ保存ディレクトリ ;================================= connect IP_ADDR getdir DIR changedir DIR ;================================= ;ログ保存名の確定 ;================================= getdate DATE '%Y%m%d-%H%M%S.log' SHRUN = 'show_run_' SHLOG = 'show_log_' strconcat SHRUN DATE strconcat SHLOG DATE ;================================= ;show runのログを取得 ;================================= logopen SHRUN 0 0 wait 'Password:' sendln PWD wait '>' pause 3 sendln 'en' wait 'Password' pause 3 sendln PWD wait '#' pause 3 sendln 'terminal length 0' wait '#' pause 3 sendln 'show run' pause 5 sendln '' wait '#' logclose ;================================= ;show logのログを取得 ;================================= logopen SHLOG 0 0 sendln 'show log' pause 5 sendln '' wait '#' sendln 'exit' end |
このマクロでは、telnetして、ログをとって、ログを保存するところまでできましたね。
このマクロでは、接続先のIPアドレスを変更するには、いつもマクロの中身を書き換えなければなりませんでした。
これを解消していくために、外部ファイルをうまく使って、接続先IPアドレスを取り込めるようにしましょう。
8.2.1.2. IPアドレスファイルの準備
今回は、IPアドレスのリストを別で用意して、そこから一行ずつIPアドレスを読む形式をとりたいと思います。
外部ファイルとして、list.txtを準備し、そこに下記のように適当にアクセスしたいIPアドレスリストを書き込みます。
1 2 3 |
10.0.0.1 10.0.0.2 10.0.0.3 |
テキストファイルにこちらを上の三行を書いて、マクロと同じディレクトリにlist.txtで保存しておきます。
8.2.2. マクロに組み入れる
ここまで準備できたら実際のマクロに組み込んで行きましょう
マクロの中に組み入れる前に、組み入れるマクロの元となるコマンドをあらかじめ作っておきます。
8.2.2.1. 組み入れるコマンドの確認
まずはlist.txtを読み込む必要がありますので、fileopenを書いて行く必要があります。
1 |
fileopen FH 'list.txt' 0 |
list.txtに書いてあるものを最初から読み込んで、FHに格納します。
続いて、FHに格納したものの一行目を読み込んでいきます。
1 |
filereadln FH LINE |
FHの中から一行目を読み込み、LINEに格納します。
最後にFHを閉じる必要があります。
1 |
fileclose FH |
8.2.2.2. コマンドを記述する
それでは、先ほど振り返ったマクロの中にコマンドを書いて行きましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
;================================= ;fileopenでlist.txtを開き、FHに格納 ;================================= fileopen FH 'list.txt' 0 ;================================= ;filereadlnでFHから読み出し ;LINEに格納 ;================================= filereadln FH LINE ;================================= ;LINEにIPアドレスが格納されたので、 ;LINEをIP_ADDRに代入する ;================================= IP_ADDR = LINE ;================================= ;変数格納 ;================================= PWD = 'cisco123' ;IPアドレスに必要なオプションを追加する strconcat IP_ADDR ':23 /nossh /T=1' ;================================= ;telnet接続、ログ保存ディレクトリ ;================================= connect IP_ADDR getdir DIR changedir DIR ;================================= ;ログ保存名の確定 ;================================= getdate DATE '%Y%m%d-%H%M%S.log' SHRUN = 'show_run_' SHLOG = 'show_log_' strconcat SHRUN DATE strconcat SHLOG DATE ;================================= ;show runのログを取得 ;================================= logopen SHRUN 0 0 wait 'Password:' sendln PWD wait '>' pause 3 sendln 'en' wait 'Password' pause 3 sendln PWD wait '#' pause 3 sendln 'terminal length 0' wait '#' pause 3 sendln 'show run' pause 5 sendln '' wait '#' logclose ;================================= ;show logのログを取得 ;================================= logopen SHLOG 0 0 sendln 'show log' pause 5 sendln '' wait '#' sendln 'exit' fileclose FH end |
1-4行目で、list.txtを開いて、中身をFHに格納しています。
6-10行目で、FHから一行読みだして、LINEに格納しています。
12-16行目で、今まで直接IPアドレスを変数に代入していたIP_ADDR変数に、LINE変数を代入しています。
これで、ファイルを読むところまでは作成する事ができました。
しかし、まだ実現できていない事があります。
そうです。二行目のループを考えて行かなければなりません。
そこで、次回は、ループを使って、二行目のtelnetを作って行きたいと思います。