ネットワークエンジニアのプログラミング【Python入門(コンフィグ取得)】

当ページのリンクには広告が含まれています。
ネットワークエンジニアのプログラミング【Python入門(コンフィグ取得)】

Pythonでプログラミングしたツールを利用して、ネットワーク機器(Cisco)のコンフィグ取得を自動化・効率化します。

目次

ネットワーク機器のコンフィグ取得

ネットワーク機器のコンフィグを取得する場合、Teratermなどのターミナルソフトでコンソール接続orリモート接続(SSH/Telet)を行い、コマンド入力を行います。自動化・効率化する場合は、Teratermのマクロを使うことが多いと思います。

しかし、Pythonで簡単なコードが書くことができれば、定期的なバックアップ処理にも利用できますし、柔軟なカスタマイズも可能です。

今回は、Cisco機器を例として、Pythonで簡単なコンフィグ取得ツールを作ります。

show runを取得しているエンジニア

Pythonによる簡単なコンフィグ取得ツール

ネットワーク環境

下記のネットワーク環境で、ルーター2台とL2スイッチ1台に対して、コンフィグ取得を行います。

ネットワーク構成

各機器には、SSHでリモートログインできるように設定を行います。

Cisco機器のSSH設定は、下記のページで説明しています。

実行環境・前提条件

実行環境

今回の実行端末の環境は下記の通りです。Windowsでも、Pythonをインストールしていれば、実行可能です。

  • OS:macOS
  • Pythonバージョン:3.9.13

対象機器リスト

コンフィグを取得する対象の機器を『host_list.csv』として、Pythonプログラムと同じフォルダに保存します。カラム区切りで、左から「ホスト名」「IPアドレス」「ユーザー名」「ログインパスワード」「enableパスワード」を記述します。

hostname,ipaddress,username,loginpass,enablepass
Router1,192.168.1.101,cisco,cisco,cisco
Router2,192.168.1.102,cisco,cisco,cisco
Switch1,192.168.1.103,cisco,cisco,cisco

コンフィグ格納フォルダ

Pythonプログラムと同じフォルダに、『logfile』フォルダを作成します。(取得したコンフィグを格納するフォルダ)

Terminal[python]: ls -l

-rw-r--r--@ 1 xxxxxxxx  staff   169  7 31 08:40 host_list.csv
drwxr-xr-x  5 xxxxxxxx  staff   160  7 31 10:00 logfile
-rw-r--r--@ 1 xxxxxxxx  staff  1412  7 31 08:57 pygetconfig.py

Pythonコード

コンフィグ取得を実行するプログラムは『pygetconfig.py』として、下記のコードを記述します。

from netmiko import ConnectHandler
import csv
import datetime

#ログファイルに付与する日時形式を定義
datetime_now = datetime.datetime.now().strftime('%Y%m%d%H%M%S')

#ホスト一覧を開く
csv_file = open("host_list.csv", "r", encoding="ms932", errors="", newline="" )
f = csv.reader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)

#1行目はヘッダーのためスキップ
header = next(f)

#ホスト一覧を一行ずつ実施
for row in f:

	#コンフィグ取得中のホスト名を表示
	print('Getting Log for ' + row[0])

	#ホスト一覧から接続先設定を読み込む
	my_device = {
	   'device_type': 'cisco_ios', #デバイスはcisco固定
	   'host':   row[1], #IPアドレスは2カラム目
	   'username': row[2], #ユーザー名は3カラム目
	   'password': row[3], #パスワードは4カラム目
	   'port' : 22, #SSHポートは22固定
	   'secret': row[4], #enableパスワードは5カラム目
	}

	#ログファイル名を設定(ホスト名+日時)
	logfile = './logfile/' + row[0] + '_' + datetime_now + '.log'	
	
	#対象機器へ接続
	net_connect = ConnectHandler(**my_device)
	net_connect.enable()
	
	#コマンドを実行
	output = net_connect.send_command('show run')
	with open(logfile, 'w') as f:
	  print(output, file=f)
	
	#対象機器から切断
	net_connect.disconnect()
★★ コードの詳細説明はこちらをクリックしてください ★★
from netmiko import ConnectHandler
import csv
import datetime

Pythonでは様々な便利な機能が使える「ライブラリ」というものを利用します。今回は『netmiko』『csv』『datetime』というライブラリを利用します。
・netmiko 〜 ネットワーク機器を操作するためのライブラリ
・csv 〜 CSVファイルの読み込みや書き込みを行うためのライブラリ
・datetime 〜 時間に関するデータを扱うためのライブラリ

datetime_now = datetime.datetime.now().strftime('%Y%m%d%H%M%S')

ログファイルに付与する日時形式を定義して、変数(datetime_now)に格納します。

csv_file = open("host_list.csv", "r", encoding="ms932", errors="", newline="" )
f = csv.reader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)

CSVファイル(host_list.csv)を読み込み、変数(f)に格納します。

header = next(f)

1行目はヘッダーのため、処理をスキップします。

for row in f:

1行ずつ読み込んで、最終行まで繰り返します。(for関数によるループ処理です。)

	print('Getting Log for ' + row[0])

コンフィグ取得中のホスト名を出力します。

	my_device = {
	   'device_type': 'cisco_ios', #デバイスはcisco固定
	   'host':   row[1], #IPアドレスは2カラム目
	   'username': row[2], #ユーザー名は3カラム目
	   'password': row[3], #パスワードは4カラム目
	   'port' : 22, #SSHポートは22固定
	   'secret': row[4], #enableパスワードは5カラム目
	}

host_list.csvから読み込んだパラメータをセットします。

	logfile = './logfile/' + row[0] + '_' + datetime_now + '.log'	

ログファイル名を「ホスト名+日時.log」に設定します。

	net_connect = ConnectHandler(**my_device)

対象機器へ接続します。

	net_connect.enable()

enableモードへ移行します。

	output = net_connect.send_command('show run')

“show run” コマンドを実行し、結果を変数(output)に格納します。

	with open(logfile, 'w') as f:
	  print(output, file=f)

ログファイルを開き、コマンドの結果を書き込みます。

	net_connect.disconnect()

対象機器から切断します。

コンフィグ取得ツールの実行結果

作成したPythonプログラムを実行します。

python pygetconfig.py
コンフィグ取得ツールの実行

3台分のログファイルが保存されていることがわかります。Teratermマクロのように、画面に取得中のログが表示されることはありません。

取得したログの内容を確認します。

cat ./logfile/Router1_XXXXXXXXXXXXXX.log
Terminal[python]: cat ./logfile/Router1_XXXXXXXXXXXXXX.log
Building configuration...

〜〜 中略 〜〜

hostname Router1

〜〜 中略 〜〜

interface GigabitEthernet0/0
 ip address 192.168.1.101 255.255.255.0

〜〜 中略 〜〜

end

今回は、入門編としての説明のため、SSH接続がNGだった場合などのエラー処理は入れていません。そのため、接続NGの場合は、エラーで途中終了してしまうので、注意してください。

コンフィグ取得ツールのカスタマイズ

今回は対象機器にログインして、”show run” の結果を取得するツールでしたが、下記のようなカスタマイズも自由にできます。

コンフィグ取得ツールのカスタマイズの例
  • 複数のコマンドを実行して結果を取得する。
  • 取得したコマンド結果を整形して、比較しやすくする。

これで、ネットワークエンジニアのプログラミング【Python入門(コンフィグ取得)】の説明は完了です!プログラミングができると、仕事の効率化ができますし、何より仕事を楽しむことができます!!

プラグラミング学習サイト・スクール情報

簡単なツール作成であれば、独学でも十分にプログラミングが可能になると思います。短期間で体系的に学習するのであれば、「有料学習サイト」や「オンラインスクール」の利用をおすすめします。

どちらのサイトも無料で学習可能な範囲があります。有料コンテンツに関しては、月額1000円程度です。

  • URLをコピーしました!
  • URLをコピーしました!
目次