netmiko 및 ipywidget으로 Jupyter Notebook에서 Cisco 장비 조작
이번에는 ipywidget에서 Jupyter Notebook에 목록 상자를 만들고 목록 상자에서 선택한 호스트 (Cisco 라우터)에 대해 "show ip int brief | exc unass"와 "show int status | exc disa"를 실행하는 스크립트 만들기.
우선, conda나 pip로 「netmiko」와 「ipywidget」를 인스톨 합니다. 내 환경에서 다음과 같이 설치했습니다.
bash
$ pip install netmiko
$ conda install -c conda-forge ipywidgets
그런 다음 Cisco 라우터의 호스트 이름과 IP 주소를 연결하기 위해 sqlite로 데이터베이스를 만듭니다. 여기서는 "detwork_database"라는 데이터베이스 이름으로 다음 형식으로 "router_hosts"테이블을 만듭니다.
호스트 이름
IP 주소
Rtokyo001
192.168.1.110
Rosaka001
192.168.1.111
Rnagoya001
192.168.1.112
bash
$ sqlite3 network_database.sqlite3
SQLite version 3.13.0 2016-05-18 10:57:30
Enter ".help" for usage hints.
sqlite> create table router_hosts(hostname text primary key, ip_address text);
sqlite> insert into router_hosts values('Rtokyo001', '192.168.1.110');
sqlite> insert into router_hosts values('Rosaka001', '192.168.1.111');
sqlite> insert into router_hosts values('Rnagoya001', '192.168.1.112');
sqlite> select * from router_hosts;
Rtokyo001|192.168.1.110
Rosaka001|192.168.1.111
Rnagoya001|192.168.1.112
주소를 해결할 수 있으면 좋기 때문에 sqlite가 아닌 CSV 나 hosts를 사용해도 괜찮습니다.
그런 다음 Jupyter Notebook에서 다음과 같은 스크립트를 입력합니다 (라우터의 사용자 이름, 로그인 암호 및 사용 가능한 암호는 모두 "cisco"입니다).
파이썬
from IPython.display import display
from IPython.display import clear_output
from netmiko import ConnectHandler
import ipywidgets
import sqlite3
# sqliteに接続
sql_connection = sqlite3.connect('/home/${your_dir}/jupyter_workdir/network_database.sqlite3')
sql_cursor = sql_connection.cursor()
# router_hostsテーブルに登録されているホスト名を読み込む
sql_cursor.execute("""select hostname from router_hosts order by hostname asc;""")
# 読み込んだホスト名をドロップダウンリストに登録する
dropdown_lists=['-']
for sql_fetch_result in sql_cursor.fetchall():
dropdown_lists.append(sql_fetch_result[0])
dropdown_item = ipywidgets.Dropdown(options=dropdown_lists, value='-')
# ドロップダウンリストの選択肢が変更されるたびに以下の処理を行う
def on_value_change(change):
# 出力画面をクリアする
clear_output()
# router_hostsテーブルから選択されたホストのIPアドレスを取得する
sql_hostname = (change['new'],)
sql_cursor.execute('select ip_address from router_hosts where hostname=?', sql_hostname)
ip_address = sql_cursor.fetchone()[0]
# ciscoルータにアクセスするためのパラメータを設定する
dev_definition = {
"device_type": "cisco_ios",
"ip": ip_address,
"username": "cisco",
"password": "cisco",
"secret": "cisco"
}
# ciscoルータにアクセスし、"sh ip int brief | exc unass", "show int status | exc disa"を実行する
connection = ConnectHandler(**dev_definition)
connection.enable()
output1 = "\n-----\nshow ip int brief | exc unass\n-----\n"
output1 += connection.send_command("show ip int brief | exc unass")
print(output1)
output2 = "\n-----\nshow int status | exc disa\n-----\n"
output2 += connection.send_command("show int status | exc disa")
print(output2)
connection.disconnect()
# ドロップダウンリストを観測し、選択肢が変わった時にon_value_change関数を実行する
dropdown_item.observe(on_value_change, names='value')
# ドロップダウンリストを出力する
display(dropdown_item)
실행하면 다음과 같은 드롭다운 목록이 표시되고 "router_hosts"테이블에 등록한 호스트가 선택 항목으로 나타납니다.
드롭다운 목록에서 호스트를 선택하면 route_hosts 테이블에서 해당 장비의 IP 주소를 묻습니다. 요청한 IP 주소의 Cisco 라우터에 netmiko를 통해 로그인하고,
의 결과를 출력합니다.
Reference
이 문제에 관하여(netmiko 및 ipywidget으로 Jupyter Notebook에서 Cisco 장비 조작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cafedrip/items/bc481ea242138dd21939텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)