マシンが増えたのでサブネットを多数のサーバで一気に変えなきゃという話があり、対象サーバを確認したところ、Windows系もあるけどCentOSの6系が多いとの事。サブネットを変えるにはどうしたらいいのかいろいろ調べたと所、CentOS6だと一時的なのはifconfigで行けるけど、恒久的な変更だとコンフィグファイル更新が必要らしい。ちなみにCentOS7だとまた別のコマンドらしい。windows系は調査中。。。
という事でリモート端末から一気に複数のサーバを更新するという要件なので、とりあえずはTeraTermマクロを作ってそれを各サーバに繰り返すという形にします。
下記例はログインや引数処理、該当ネットワーク名の取得等は割愛し、viコマンドによるファイル編集をマクロで実行する箇所をサブルーチンにし、それをコールする内容です。コンフィグファイルは/etc/syscomfigにある該当ネットワークのファイル(下記のCONFFILE)に指定し、検索文字列(下記のSEARCHSTR)はPREFIX=、サブネットをBit24にするとして上書文字列(下記のAPPENDSTR)に24をセットしてサブルーチンをコールしています。
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 |
CONFFILE='/etc/sysconfig/network-scripts/ifcfg-eth0' SEARCHSTR='PREFIX=' APPENDSTR='24' call CHANGECONF end :CHANGECONF ;コンフィグ変更サブルーチン ; CONFFILE コンフィグファイル名 ; SEARCHSTR 検索文字列 ; APPENDSTR 上書文字列 timeout= 3 CMD = 'vi ' strconcat CMD CONFFILE sendln CMD ;/を送る send '/' pause 1 ; 検索文字へ移動 sendln SEARCHSTR pause 1 strlen SEARCHSTR sendkcode 333 result ; Rで上書き send 'R' send APPENDSTR ; エスケープ send #$1B send ':' pause 1 sendln 'wq!' pause 1 ; 終了 return |
コマンド打った後にwaitlnとかでは出来ないのでpauseを入れてとりあえずは動く形になりましたが、環境によりタイミングは変わるのでエラーハンドリングを追加した方が良さそうです。