QFX5100から設定コンフィグを自動取得する方法

常日頃の業務でNW機器の設定を行なっているとちょっとした作業を自動化できれば業務の負担が減るのになぁ。。。と思い始めて早1ヶ月
今回はNW機器から自動で設定コンフィグを取得するPythonスクリプトを作ってみたのでその辺のメモ書きを残します!

NWの自動化なんてググればすぐ見つかる情報なのでまずはググってみた。
こちらの記事はとてもわかりやすく丁寧な内容だった為、参考にさせていただきます。
qiita.com

参考記事によると、NETCONFなるものを使ってNW機器の情報を取得するようですね。。

NETCONFとは

マルチベンダーに対応しており、NW機器の情報を取得するプロトコルだそうです。
主要どころのベンダーだとCisco、Juniper、Arista、Brocadeが対応しているそうです。

NETCONFを使ったスクリプトコード

検証端末PCがWindowsなのでコンフィグファイルを保存するパスがWindows仕様になっています。
またPythonのバージョンは3.6.5でWindows OSは7です。

from ncclient import manager

username = 'admin'
password = 'admin'
ipv4 = '192.168.2.x'
port = 22

connection = manager.connect(host = ipv4, port = port, username = username, password = password, timeout = 20, device_params={'name':'junos'}, hostkey_verify=False )

print('1. run show command')
print('='*40)

config=str(connection.command('show configuration',format="text"))
print('='*40)
config2=str(connection.command('show configuration | display set',format="text"))


file="C:\\Users\\Desktop\\log.txt"
with open(file,"a")as f:
    f.write(config)
    f.write(config2)

たったこれだけの行数で見事に設定情報を取得する事ができました!
これでわざわざSSHしてコマンドを打つ手間が省けますね。

と言う訳でここまで駆け足で過ぎて行きましたが、詳細については参考にさせて頂いた記事をご覧になってください。

2019/05/26 更新

業務で複数台のQFXのコンフィグを取得する為に書いたコードです。
基本的に最初のコードをベースにして書いています。
ポイントとしては、コンフィグを取得したい機器のIPアドレスを別のテキストファイルに用意し
そこから読み込ませるようにしています。

それから機器に接続出来なかった場合のエラーハンドリングもtry exeptで実装してあります。

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import datetime
import traceback
from ncclient import manager

def net_conf_qfx(DUT_ipaddress):
 username = '***'
 password = '***'
 ipv4 = DUT_ipaddress
 port = 22
 
 now = datetime.datetime.now()
 try:
     connection = manager.connect(host = ipv4, port = port, username = username, password = password, timeout = 20, device_params={'name':'junos'}, hostkey_verify=False )
     config=str(connection.command('show configuration',format="yaml"))
     config2=str(connection.command('show configuration | display set',format="text"))
     file="C:\\Users\\*****\\Desktop\\python\\netconf\\netconf_QFX\\config_log\\{0:%Y%m%d%H%M}_{1}.txt".format(now,ipv4)
     with open(file,"a") as f:
         f.write(config)
         f.write(config2)
 except:
     file="C:\\Users\\*****\\Desktop\\python\\netconf\\netconf_QFX\\config_log\\{0:%Y%m%d%H%M}_{1}_SSHError.txt".format(now,ipv4)
     with open(file, 'a') as f:
        traceback.print_exc(file=f)

file="C:\\Users\\*****\\Desktop\\python\\netconf\\netconf_QFX\\qfx_list.txt"
with open(file,"r") as address_list:
    address = address_list.readlines()
for list in address:
net_conf_qfx(list.rstrip('\n'))