ネットワークエンジニアのプログラミング【Python入門(設定変更)】

ネットワークエンジニアのプログラミング【Python入門(設定変更)】

Pythonで作成したツールを利用して、ネットワーク機器(Cisco)の設定変更を自動化・効率化します。

目次

ネットワーク機器の設定変更作業

ネットワーク機器の設定変更を手動で行う場合、下記のような手順で作業することがあります。

ネットワーク機器の設定変更手順
STEP
事前ログ取得

ネットワーク機器にリモート接続し、設定変更前のコンフィグ情報を取得します。

事前ログを取得する人
STEP
設定変更

事前に作成した変更用のコンフィグを、1行ずつコピー&ペーストで設定します。

設定変更する人
STEP
事後ログ取得

設定変更後のコンフィグ情報を取得します。

事後ログを取得する人
STEP
事前ログと事後ログを比較(作業エビデンスとして保存)

設定変更前後のコンフィグを、Diffソフトでの比較、もしくはエクセルに貼り付けて、設定変更箇所に問題が無いか確認します。また、Diffソフトの場合は、作業エビデンスとして、比較結果をエクスポートして保存します。

差分比較する人

この作業手順にはいくつかの課題があります。

設定変更作業の課題
  • 全て手動での作業のため時間が掛かる
  • 設定変更作業時にオペレーションミスの可能性がある
  • オペレーションミスの可能性があるため、2人体制が必須の場合がある
  • 確認作業のためにDiffツールやエクセルが必要となる
  • エビデンスを保存する作業が必要となる

今回は、Cisco機器の設定変更を例として、Pythonで設定変更ツールを作成し、上記の4ステップを自動的に処理できるようにしていきます。事前・事後の比較結果をHTMLファイルに出力し、エビデンスの保存までを自動化します。

Pythonによる設定変更ツール

ネットワーク環境

下記のネットワーク環境で、ルーター1台に対して、設定変更を行います。

ネットワーク構成

Router1には、SSHでリモートログインできるようにしておきます。

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

実行環境・前提条件

実行環境

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

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

設定変更内容

ループバックインターフェースを作成し、IPアドレスを設定します。

interface loopback1
 ip address 1.1.1.1 255.255.255.255
 no shutdown

ログ格納フォルダ

Pythonプログラムと同じフォルダに、『logfile』フォルダを作成します。(事前・事後のコンフィグと比較結果を格納するフォルダ)

Terminal[python]: ls -l

drwxr-xr-x  2 XXXXXXXX  staff    64  8  3 08:30 logfile
-rw-r--r--@ 1 XXXXXXXX  staff  2390  8  2 20:23 pychange.py

Pythonコード

設定変更を実行するプログラムは『pychange.py』として、下記のコードを記述します。

from netmiko import ConnectHandler
import datetime
import difflib


#設定変更対象ホスト名
hostname = 'Router1'


#接続情報
target_device = {
   'device_type': 'cisco_ios',
   'host':   '192.168.1.100',
   'username': 'cisco',
   'password': 'cisco',
   'port' : 22,
   'secret': 'cisco',
}


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


#接続
print('------------------------------------------------')
print('Connect to ' + hostname)
print('------------------------------------------------')

net_connect = ConnectHandler(**target_device)
net_connect.enable()


#事前ログ取得
print('Getting Before-Log for ' + hostname)
print('------------------------------------------------')

before_logfile = './logfile/00_before_' + hostname + '_' + datetime_now + '.log'	

output = net_connect.send_command('show run')
with open(before_logfile, 'w') as f:
    print(output, file=f)


#設定変更
print('Changing Config ' + hostname)
print('------------------------------------------------')

command = ["interface loopback1",
           "ip address 1.1.1.1 255.255.255.255",
           "no shutdown"]

net_connect.send_config_set(command)

	
#事後ログ取得
print('Getting After-Log for ' + hostname)
print('------------------------------------------------')

after_logfile = './logfile/10_after_' + hostname + '_' + datetime_now + '.log'	

output = net_connect.send_command('show run')
with open(after_logfile, 'w') as f:
    print(output, file=f)


#切断
print('Disconnect from ' + hostname)
print('------------------------------------------------')

net_connect.disconnect()


#事前事後のコンフィグ比較(htmlファイルを生成)
print('Export Diff Before and After')
print('------------------------------------------------')

diff = difflib.HtmlDiff()
diff_htmlfile = './logfile/20_diff_' + hostname + '_' + datetime_now + '.html'

file1 = open(before_logfile)
file2 = open(after_logfile)
output = open(diff_htmlfile, 'w')

output.writelines(diff.make_file(file1, file2))

file1.close()
file2.close()
output.close()

print('Configuration Change Completed!')
print('------------------------------------------------')

設定変更ツールの実行

ツール実行

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

python pychange.py
設定変更ツールの実行画面

ログ確認

ログが出力されていることを確認します。

ls ./logfile
Terminal[python]: ls ./logfile
00_before_Router1_20220803161332.log
10_after_Router1_20220803161332.log
20_diff_Router1_20220803161332.html

事前・事後の差分ファイル確認

出力されたHTMLファイルを開くと下記の通り表示され、設定変更箇所が明確にわかります。

下記は一部抜粋しています。全体のイメージはこちらをクリックしてください。(別ウィンドウでHTMLファイルを開きます。)

差分比較ファイルの内容

事前・事後の差分比較ファイルを自動保存するため、大幅に作業時間が短縮できます。エビデンス保存のためのコピー&ペーストも不要になります。

設定変更ツールのカスタマイズ

今回は対象機器にログインして、「事前ログ取得」→「設定変更」→「事後ログ取得」→「変更前後の差分確認」を自動化するツールでしたが、下記のようなカスタマイズも自由にできます。

設定変更ツールのカスタマイズの例
  • 複数の機器に対して設定変更を実施する。
  • 事前・事後ログとして、”show run” 以外のステータス確認コマンドも実行する。
  • 設定変更コマンドを実施した結果を表示する。(設定エラーが出ていないか確認する)

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

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

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

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

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