LoginSignup
6
10

More than 5 years have passed since last update.

ネットワークの人間がNetmikoを試してみた

Posted at

Netmikoとは?

"""""""""""""""
Netmikoとはネットワークデバイスとかにsshやtelnetで接続してなんやかやをやってくれるpythonのライブラリの一つらしい。
前身にParamikoとかいうものがあるらしいがtelnet接続に関するドキュメントをあまり拾えなかったので自分Paramikoあんまりわかんないです( ;∀;)

使うきっかけ

"""""""""""""""
最近自分の仕事環境が変化し、ネットワークエンジニアなのに自動化とか触るようになりました。20台とか複数のデバイスに一人で設定投入とか手動でやっていたら残業三昧になって機器より先に人間壊れますよ....。ということでつまんない作業とか全部自動化したいなぁと思い最近netmikoとかautomationを勉強し始めています。なのでpythonの勉強自体も始めたのが少し前くらいになるのでプログラミングについてはズブの素人です。自分はもともとサポートの人なので基本的には機器で発生した不具合の検証とかしています。

記事の目的

"""""""""""""""
Netmikoのライブラリでどんなことができるのか。というより自分ができるようになったのか。そちらの紹介です。
netmikoとかの勉強初めて2か月くらい?(正確には1か月とちょっと)のド素人でもこんなことができるよーになりましたという備忘録と
いやもっとこんな便利なことができるぞ!という知見を頂きたいという願望をもとにかいています。

作ったもの

"""""""""""""""
簡単に言うと複数機器からバックアップのためにshow runをとってtxtファイルを作成し、ファイル名にタイムスタンプかいてます。devices.txtにはバックアップを取りたい機器のIPアドレスを入れてます。

これで一つ一つのIPアドレスに接続して、show run 打ってtxtファイルに出してくれます。
一日の仕事の始めに検証に使う機器や設定しないといけない機器のバックアップとっとけという私の現場だと
このプログラムを起動している間にトイレいったり、コーヒーいれにいったりできるので大変便利になりました。

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

from netmiko import ConnectHandler
with open('devices.txt') as f:
        #一行ずつ読み込む
        devices = f.read().splitlines()

for ip in devices:
    cisco_device = {
            'device_type': 'なんでも_telnet',#telnet接続なら必須
            'ip': ip,
            'username': 'なんでも',
            'password': 'なんでも',
            'secret': 'なんでも',
            }

    print('Connecting to ' + ip)
    #ssh = connection ,telnet = net_connect
    net_connect = ConnectHandler(**cisco_device)

    print('Entering enable mode ...')
    net_connect.enable()


    output = net_connect.send_command('show run')
    prompt = net_connect.find_prompt()
    hostname = prompt[:-1]

    list = output.split('\n')
    list = list[3:]
    config = '\n'.join(list)

    import datetime
    #取得した日のタイムスタンプ
    now = datetime.datetime.now()
    today = str(now.year) + '-' + str(now.month) + '-' + str(now.day)
    file = today + '-' + hostname + '.txt'


    with open(file + '.txt', 'w') as backup:
        backup.write(config)
        print('Backup of ' + hostname + ' completed successfully')
        print('#' * 30)

    net_connect.disconnect()

課題

このプログラム。自動でやってくれるのはいいんですが結構遅いんですよね(-_-メ)
手動でやるよりはだいぶ早いんですが、プログラムとしては遅いなぁという実感しかないです。

所感

こんな感じで今後も自分の備忘録として残していきたいなぁと思ってます。

6
10
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
6
10