Pythonで簡単な自動化運用ツールを作ってみました(1)

みなさん、こんにちは。
楊(ヤン)です。

今回は、ネットワーク運用自動化ツールの話をしたいです。
運用業務では、対象ネットワークの規模により、何十台、何百台の機器に同じコンフィグを投入する作業が時々ありますね。
その時自動化ツールで作業を行うと、手動よりかなり工数が減り、効率を高めます。
では、実際に作ったツールを、これから紹介していきます。

目標

簡単な操作で大量なネットワーク機器にコンフィグ投入する作業をできるツールの作成

成果物のイメージ

エクセルファイルのシートに、
ユーザー名、パスワード、対象機器のIP&ホスト名、コマンド文を入力し、
生成されるpythonスクリプトのファイル名を指定して、
「スクリプト作成」ボタンを押したら、
「指定ファイル名 + .py」の名前のファイルが作成されます。
中身は、シートの第三列に記入した各ホストに、第四列のコンフィグを投入するスクリプトです。

必要なもの

  • ・python
  • ・VBA

作り方

今回のコードでは、ジュニパー機器を対象にします。

以下のように、大きく二つのパートに分けて作っていきます。

  • ・pythonでネットワーク機器のコマンドを送るスクリプト
  • ・VBAで複数のpythonスクリプトを一括作成できるシート

まずは、python

pythonで機器に

  • ・自動ログイン&ログアウトする
  • ・show xx, set xx, delete xx, commitなどのコマンドを送る

ことができるスクリプトを作ります。

1.冒頭にシェバンを書きます

2.モジュールをインポートします

3.関数を定義します

4.どんなコマンドを実行したのかをログに記録したいため、コマンドリストをコンソールにプリントします(ここは後でVBAで自動化させることでヒューマンミスを防ぎます)

5.spawn()で子プロセスを立ち上げます。ここではsshを立ち上げます。
logfile=sys.stdoutで実行結果をコンソールに出力します(が、一部の文字表示がずれるので見にくくなります。そのため4番のコマンドリストが必要です。)

6.expect()とsendline()でコマンドを一行ずつ送ります。

「expect(xxx)」は「xxxという内容の質問を待っている」の意味です。
「sendline(ooo)」は「oooという内容の回答を送る」の意味です。

例えば、spawn()でsshプロセスを立ち上げた後、
「Password:」という入力欄がコンソールに表示するはずです。
pexpectの場合、

と書けば、パスワードを送り、ログインできます。

ただ、ログインする時に、ジュニパー機器は「初めてログインするユーザーか」によって表示する文字列が異なります。
初回ログインする時だけ、「Are you sure you want to continue connecting」と表示します。
そのため、ここで分岐処理をします。

7.表示される二種類の文字で、配列を定義します。

8.初回ログインの場合

例ではshow コマンドだけを送りましたが、設定コマンドが必要な場合は下記のように修正します。

9.二回目以降ログインの場合

こちらも同様に、expect()の文字や送るコマンドを修正すれば設定モードに適用できます。

10.定義した関数を呼び出します。

これで、一台の機器への設定手順が完了しました。

次のタスクは、VBAで複数のpythonスクリプトを一括作成することです。
VBAについては、また次回で触れていきたいと思います。

最後まで読んでいただき、ありがとうございました!

※記事の内容は保証はしておりません(執筆時期や実施環境により挙動が変わるものがある為)。
別途検証してご利用いただくことをおすすめいたします。