- プログラミング
便利なPythonライブラリのご紹介

はじめに
みなさんはどのように業務を自動化していますか?
私はPythonを使ったツールを作成し、業務の自動化を実施しています。
今回はネットワーク業務の自動化に便利なPythonライブラリの紹介をしたいと思います。
便利なPythonライブラリは沢山ありますが、簡単に使えるものを3種類厳選しました。
その1:ネットワーク機器との連携:netmiko, paramiko

netmiko | SSHやTelnet接続でネットワークデバイスを操作できる。 paramikoをベースに開発されており、paramikoより簡単なコードで実行可能。 未対応OSのデバイスもあるので注意。 (Netmikoがサポートするプラットフォームは公式ドキュメントで要確認) |
paramiko | SSHプロトコルを使ってデバイスに接続できる。 SSH接続ができればデバイスに制限なし(サーバなども可)。 |
今回は簡単なコードで書けるnetmikoのコード例を紹介します。
機器にログインするためのパラメータとコマンドを指定してあげるだけで、簡単にできます。

右の吹き出しにdevice_typeの例を少し記載しましたが、まだ沢山種類があります。
詳しくは、公式ドキュメントで確認してみてください。(未対応のデバイスの場合はparamikoを使用してください)
上記では分かりやすいように、1台に対して1つのコマンドを実行するコードを記載しました。
しかし、1台に対して1つのコマンドを実行となると、コードを書くより自分で直接操作したほうが早いですよね。
なので、複数台に対して複数のコマンドを実行するコードに直したいと思います。
複数のパラメータとコマンドを管理するためにエクセルを使用してみます。
その2:エクセルとの連携:openpyxl

openpyxl | エクセル読み書き、データ操作 |
今回はopenpyxlを使って、エクセルに記載したデータを取得します。
まずエクセルでパラメータシートを作成しておきます。
敢えてログイン時のユーザ名/パスワードや実行コマンドはバラバラで作成してみます。
コマンドは複数指定できるようにします。
ファイル名:parameter.xlsx

エクセルファイルにパラメータを記載したら、そのエクセルデータを読み込むコードを作成します。
先ほど作成しておいた__init__メソッド(クラスのインスタンスが生成される際に自動的に呼び出される特殊メソッド)内で実行します。

変数lines には以下のようにパラメータが格納されている状態になります。

これだと分かりづらいので、辞書型にしてself.parameterに格納していきます。

辞書型にするとこのような形になります。

これでデータの整理は完了です。
複数のホストを処理するので、コマンド実行のメソッドも少し修正します。
先ほどは_run_show_cmdメソッドを直接呼び出していましたが、
複数ホストを実行する都合で、run_projectメソッドを作成し、run_projectメソッドから呼び出す形にします。
(_run_show_cmdメソッド内で完結させてもいいのですが、メソッドを分けたほうが見やすい&他の機能を追加する際に修正しやすいため)

複数台に対して複数のコマンドを実行するコードが完成しました。
しかし、現在の作りではログ保存はしていないので、実行結果として1回出力されて終わりになります。
なので、ログ保存の機能も付けたいと思います。
ログ保存
ログのファイル名に日時をつけたいので、datetimeをインポートします。

次にログ保存のメソッドを作成します。

最後にrun_projectメソッドから_log_saveメソッドを呼び出します。
その時にコマンド実行で出力されたoutputを引数として渡します。

これでログ保存ができました。
作成したプロジェクトファイルが置いてある同じフォルダに作成されました。

中身はこんな感じです。

その3:データ抽出(データ型変換):TextFSM
最後にTextFSMの紹介です。

TextFSM | テンプレートを使ってテキストをパースするライブラリ。 テンプレートでのマッチング結果を辞書型やリスト型で出力できるため、 ログファイルから必要なデータを抽出することができる。 |
こちらはコード例は紹介しませんが、使い方としては、先ほどnetmikoで実行した結果のoutputを指定したテンプレートでパースします。パースした結果を少し加工すると、必要なデータだけ抽出することができたり、想定していた結果が正しいか判定できたりなどデータ分析が簡単にできます。
終わりに
今回紹介したライブラリを使用すれば、パラメータシートに装置のデータを入れておくだけで、showコマンド打ってshowコマンドの結果を判定するところまで自動化することができます。

判定用の答えをエクセルに書いておいたり判定結果をエクセルに入力したり機能を追加すれば、もっと簡単に誰でも使えるツールが作れると思います。特に今回紹介したopenpyxlの使用方法は一例にすぎず、様々なデータ操作ができるので、機能の組み合わせ次第でもっと自動化の可能性が広がると思います。
Pythonは便利なライブラリが豊富なので、ライブラリを使用するだけで簡単にツールが作れますし、コードも短くて済むのでプログラミング初心者も挑戦しやすいと思います。少しでも興味を持ったら使ってみてください。