2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

netomikoを利用したNW機器の自動コンフィグバックアップの仕組みづくり

Posted at

背景

当社の商用機では各NW機器について自動で設定内容がバックアップされる仕組みがあるが、
検証環境では各担当者が検証時に適宜検証ファイルにバックアップを保存して設定内容を管理しており、
以下理由からコストをかけずに検証環境でもコンフィグ自動バックアップシステムを作成したいと考えた。

  • 各機器のコンフィグの一元的に管理したい
  • 都度、手動でコンフィグのバックアップをとる必要性をなくしたい

利用したもの

  • Python3
    • ライブラリ:netmiko
    • ライブラリ:pandas

仕組み

  • 既存の検証環境のサーバにてPythonを利用して実装
  • コンフィグバックアッププログラムをcronにより定期実行
  • NetmikoというNW機器へのログイン操作を補助してくれるPythonライブラリを利用
  • コンフィグ取得対象リストのcsvファイルを参照し、対象機器のコンフィグの取得を実施

コンフィグバックアップの仕組みのイメージ

コンフィグバックアップシステム.png

プログラム

#!/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には便利なライブラリが数多くあるので、情報を仕入れて活用していきたい。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?