背景
当社の商用機では各NW機器について自動で設定内容がバックアップされる仕組みがあるが、
検証環境では各担当者が検証時に適宜検証ファイルにバックアップを保存して設定内容を管理しており、
以下理由からコストをかけずに検証環境でもコンフィグ自動バックアップシステムを作成したいと考えた。
- 各機器のコンフィグの一元的に管理したい
- 都度、手動でコンフィグのバックアップをとる必要性をなくしたい
利用したもの
- Python3
- ライブラリ:netmiko
- ライブラリ:pandas
仕組み
- 既存の検証環境のサーバにてPythonを利用して実装
- コンフィグバックアッププログラムをcronにより定期実行
- NetmikoというNW機器へのログイン操作を補助してくれるPythonライブラリを利用
- コンフィグ取得対象リストのcsvファイルを参照し、対象機器のコンフィグの取得を実施
コンフィグバックアップの仕組みのイメージ
プログラム
#!/usr/bin/env python3
from netmiko import Netmiko
from netmiko import NetMikoTimeoutException
#コンフィグ取得対象リストファイル読み出し
import pandas as pd
csv_input = pd.read_csv(filepath_or_buffer="/opt/config_backup/device_list.csv", encoding="ms932", sep=",")
#リストファイルに対して一行ずつ処理を行うためにforループ
for count in range(csv_input.shape[0]):
#取得コンフィグ出力先を設定
file = open("/home/share/_config_auto_get/"+csv_input.values[count, 0]+"/"+csv_input.values[count, 2]+"_"+ csv_input.values[count, 6]+".conf", 'w')
#devive情報設定(コンフィグ取得対象リストから情報取得)
device = {
'device_type': csv_input.values[count, 1],
'ip': csv_input.values[count, 2],
'username': csv_input.values[count, 3],
'password': csv_input.values[count, 4],
'secret': csv_input.values[count, 5],
}
#コンフィグ取得先に接続する旨、標準出力に表示
print("Connecting to " + csv_input.values[count, 2])
#Netmikoを用いてコンフィグ取得先への接続(try/exceptで例外処理)
try:
connection = Netmiko(**device)
except:
print (" --> [Error] unable to access " + csv_input.values[count, 2])
continue
#コンフィグ取得にenableモードに遷移する必要がある機器はenableモードに遷移
if csv_input.values[count, 7] == 1 :
#enableでモード遷移
connection.enable()
#コンフィグを取得
output = connection.send_command(csv_input.values[count, 8])
#ファイル書き出し
file.write(output)
file.close()
print(" --> " + csv_input.values[count, 2] + " config get complet")
#コンフィグ取得先への接続終了処理
connection.disconnect()
コンフィグ取得対象リストの項目
列番号 | パラメータ | 入力内容 |
---|---|---|
0 | NW | 機器が所属するNWセグメント ※コンフィグ保存ディレクトリ名に使用 |
1 | device_type | 機器のタイプ指定 |
2 | ip | 機器の管理IPアドレス |
3 | username | ユーザ名 |
4 | password | パスワード |
5 | secret | enable利用時のパスワード |
6 | hostname | ホスト名 ※コンフィグ保存時のファイル名に利用 |
7 | enable_use | コンフィグ取得にenableモードに遷移が必要か?[必要:1/不要:0] |
8 | show_run_command | コンフィグ取得コマンド |
工夫点
ログイン操作補助PythonライブラリNetmikoを利用することで機器ごとのログイン操作の作り分けが不要に
コンフィグバックアップ対象の情報をリストとから読み込み処理する仕様としたことで、バックアップ対象機器の追加/削除が容易に
終わりに
本プログラムを作成するにあたり、バックアップ対象機種ごとにログイン部分の処理を作成する点をネックに感じていたが、
情報収集を行ったところnetmikoによって対応機種であれば容易にログイン処理を任せることができることを知り、
簡易的なプログラミングで多くの機器に対して利用できるプログラムを作成することができた。
Pythonには便利なライブラリが数多くあるので、情報を仕入れて活用していきたい。