파이썬 네트워크 자동화
앞선 글에서 netmiko를 이용해서 각 장비에 인터페이스 설정을 진행했습니다. 설정 시에 각 장비 별로 접속하여 명령어를 넣는 방법이었습니다. 이번 글에서는 각 장비를 장비 밴더, Role로 나누어 그룹 별로 설정 하도록 하겠습니다.
설정 시에 사용할 것은 파이썬의 리스트, for 문을 쓰겠습니다.
cisco router
cisco switch
arista router & switch
스크립트 내용.
from netmiko import ConnectHandler
cisco_routers = [
{
"device_type": "cisco_ios",
"host": "192.168.37.201",
"username": "devnet",
"password": "dn1001",
},
{
"device_type": "cisco_ios",
"host": "192.168.37.202",
"username": "devnet",
"password": "dn1001",
},
{
"device_type": "cisco_ios",
"host": "192.168.37.203",
"username": "devnet",
"password": "dn1001",
},
]
cisco_switches = [
{
"device_type": "cisco_ios",
"host": "192.168.37.102",
"username": "devnet",
"password": "dn1001",
},
{
"device_type": "cisco_ios",
"host": "192.168.37.112",
"username": "devnet",
"password": "dn1001",
},
]
arista_routers = [
{
"device_type": "arista_eos",
"host": "192.168.37.101",
"username": "devnet",
"password": "dn1001",
},
{
"device_type": "arista_eos",
"host": "192.168.37.111",
"username": "devnet",
"password": "dn1001",
},
{
"device_type": "arista_eos",
"host": "192.168.37.204",
"username": "devnet",
"password": "dn1001",
},
]
# cisco router configuration
for device in cisco_routers:
net_connect = ConnectHandler(**device)
print(f"* Configuring NTP server : {device['host']}")
commands = ['ntp server 192.168.37.129','clock timezone utc -0']
net_connect.send_config_set(commands)
output = net_connect.send_command("sh ntp status")
output += net_connect.send_command("show ntp associations")
print('-'*100)
print(output)
print('-'*100)
net_connect.disconnect()
# cisco switch configuration
for device in cisco_switches:
net_connect = ConnectHandler(**device)
print(f"* Configuring NTP server : {device['host']}")
commands = ['ntp server 192.168.37.129','clock timezone utc -0']
net_connect.send_config_set(commands)
output = net_connect.send_command("sh ntp status")
output += net_connect.send_command("show ntp associations")
print('-'*100)
print(output)
print('-'*100)
net_connect.disconnect()
# arista router configuration
for device in arista_routers:
net_connect = ConnectHandler(**device)
print(f"* Configuring NTP server : {device['host']}")
commands = ['no ntp local-NTP','ntp server 192.168.37.129','clock timezone UTC']
net_connect.enable()
net_connect.config_mode()
net_connect.send_config_set(commands,exit_config_mode=False)
output = net_connect.send_command("show ntp associations")
output += net_connect.send_command("show clock")
print('-'*100)
print(output)
print('-'*100)
net_connect.disconnect()
스크립트가 실행 될때, 각 그룹에 정의된 장비를 하나씩 호출하여 명령어를 실행합니다.
따라서 여러 대의 장비를 동일하게 설정이 필요하다면 list와 for을 적절히 사용한다면 도움이 될 것이라고 생각됩니다.