どうも、Ryu Seinoです。
久しぶりの投稿です。
どんな感じで書いてたかな……感覚が思い出せませんね!w
今回はインフラ自動化の話でもしようと思います。
サーバーのプロビジョニングをコードで行うというのは一般的ですが、私が以前にインフラをやっていた時はルーターに関してはテキストエディタにコマンドを書いておいて、それをコピペしたり、手でコマンドを打っている人が多かったです。
なんちゃってエンジニアの私はその辺りをPerlで自動化したりしていました。
しかし、Perlは直ぐに自分の書いたコードも読めなくなるのでいつからかPythonに変えたのでした。
前置きが長くなりましたが、今回はCiscoに対してtelnetしてコマンド実行してみます。
サンプルなのでハードコーディングになっていたりしますが、真価を発揮するのは外部のファイルを使った時でしょう。
何台ものルーターの自動設定が行えます。
もちろん、文字列置換などを行えばパラメータを個別に出来ますし、複雑な処理も出来ます。
ステータスやコンフィグの取得などもあっという間です。
また、実際に使う時はエラー処理やログの出力なんかも考慮した方がいいですね。
ああ、あと関数だとかクラスだとかにした方が後々いいかも知れないね。
でも仕組み自体は単純なので上から下にダラーって書いたままでもいいかも知れないね。
そこらへんは各自で考えましょう。
まず最初に今の状態
今回は単純にインターフェースのshutdownを行います。
なので今の状態をまず出力しておきます。
GC-Router#show ip interface brief | include FastEthernet0 FastEthernet0 unassigned YES unset up down GC-Router#
Statusはupになっています。
これをスクリプトでshutdownします。
スクリプトサンプル
コードにコメントを入れたので動作はわかると思います。
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 |
from telnetlib import Telnet WAIT_TIME = 3 # 192.168.100.10にtelnet接続 tn = Telnet('192.168.100.10') # Password: という文字列まで待つ ret = tn.read_until(b"Password: ", WAIT_TIME) # パスワードを入力 今回は gc-login としてます tn.write(b"gc-login\n") # プロンプトを待つ ret = tn.read_until(b">", WAIT_TIME) # enableに入る パスワードはgc-enable とします tn.write(b"enable\n") ret = tn.read_until(b"Password: ", WAIT_TIME) tn.write(b"gc-enable\n") ret = tn.read_until(b"#", WAIT_TIME) # configureに入る tn.write(b"conf t\n") ret = tn.read_until(b"(config)#", WAIT_TIME) # 今回はint FE 0 をシャットダウンしてみる tn.write(b"interface FastEthernet 0\n") ret = tn.read_until(b"(config-if)#", WAIT_TIME) tn.write(b"shutdown\n") ret = tn.read_until(b"(config-if)#", WAIT_TIME) tn.write(b"exit\n") ret = tn.read_until(b"(config)#", WAIT_TIME) # ルーターからログアウトする tn.write(b"exit\n") ret = tn.read_until(b"#", WAIT_TIME) tn.write(b"exit\n") tn.read_until(b"#", WAIT_TIME) tn.write(b"exit\n") tn.close() |
実行して結果をみてみる
まずこのスクリプトを実行。
そして結果を確認してみます。
GC-Router#show ip interface brief | include FastEthernet0 FastEthernet0 unassigned YES unset administratively down down GC-Router#
ちゃんとadmin downになってくれました。
他のプロトコルの場合は?
今回は昔ながらのtelnetでしたが、当然ながらsshはsshのモジュールを使えば対応できます。
Webブラウザでしか設定できないよーというタイプのルーターは?
その場合はRequestsとBeautiful Soupあたりで対応できます。
終わりに
人間の手作業はミスの可能性があります。
そのようなことが起こらない為にも、事前にスクリプトを作っておいて本番はそれに任せるというのは有効です。
また、スキルが足りない人でも作業をこなせるというメリットもあります。
何より手でやっていたら一晩かかっても終わらないような作業も直ぐに終わらせることが出来ます。
メリットしかないので、ルーターに限らず日頃の作業で繰り返しが発生していた場合は、上手くスクリプトを使ってコスト削減して正確な作業をしていきましょう。