분류없음2017.06.16 20:02

Today Keys : Programmable, config, 프로그래머블, 백업, netmiko, programmability, networker, network


 이번 포스팅은 다시 시작하는 Programmability for Networker의 23번째 포스팅입니다. 

 이번 내용은 장비의 Configuration을 백업해주는 코드입니다.  

 주기적으로 반복해서 수행되는 장비 백업 작업에 대해서 손쉽게 코드로 해결해 줄 수 있습니다. 

 이 포스팅에서는 앞 포스팅에서 소개한 netmiko 라이브러리를 사용하였고, Cisco 장비에 대해서만 진행했습니다.

 하지만 유사한 방식으로 다른 장비들도 손쉽게 구현이 가능할 것입니다.

 netmiko에서 지원되는 다양한 네트워크 장비들도 거의 동일한 방법으로 구현이 가능합니다. 

 물론 멀티벤더에 대한 부분들도 코드를 나눠서도 할 수 있겠지만, 하나의 코드에서 장비 벤더를 구분해서 코드를 

 실행하도록 할 수도 있을 것입니다. 

 하지만, 우선 시작하는 단계에서는 조금 더 쉽고 최대한 코드를 나눠서 연습해가며 진행을 하신다면 좋을 것 같습니다.

 



 아래의 코드는 별도의 파일에서 지정된 네트워크 장비 목록을 지정하고, 

 해당 목록의 모든 장비의 Configuration을 Text파일로 백업해주는 역할을 하게 됩니다. 

 아래의 코드를 Linux에서 크론탭으로 돌리거나, Windows의 스케쥴러를 이용하시면, 간단하게 정기적으로

 장비의 Configuration을 백업 받으실 수 있습니다. 


[ Config Backup ]

import device

from netmiko import ConnectHandler


for dev in device.ZIGI_devices:

    nwnode = ConnectHandler(**dev)

    hostname = nwnode.send_command("show hostname")

    print("Collecting {0}Device Running Coning".format(hostname))

    run_config = nwnode.send_command("show running")

    print("Collect Complete")

    filename = "c:\\backup\\" + hostname + "-" + backupdate + '.log'

    print("Saving configuration file")

    configFile = open(filename,'w')

    configFile.write(run_config)

    print("{0}Device Configuration Backup complete".format(hostname))

    configFile.close() 


nwnode = ConnectHandler(**dev)

 ▷ 별도의 파일에 백업하고 싶은 장비의 목록을 지정해놓고, 순환문을 이용해서 장비 정보를 불러오게 됩니다. 

     현재 백업하고자 하는 장비를 가져오는 부분입니다.

hostname = nwnode.send_command("show hostname")

  ▷ 현재 장비의 hostname을 가져오는 부분입니다. 'show hostname' 명령어를 이용해서 hostname을 변수에 

     저장하게 하게 됩니다. 

run_config = nwnode.send_command("show running")

 ▷ show running config 명령으로 전체 config를 가져와서 변수에 저장합니다.

filename = "c:\\backup\\" + hostname + "-" + backupdate + '.log'

 ▷ 파일을 저장하고 싶은 폴더에 파일명을 hostname과 백업 날짜를 해서, 텍스트 파일 형태로 이름을 지정합니다.

     여기에서는 backupdate라고 적혀있는 변수는 현재 날짜를 갖고 있는 변수라고 생각하시면 됩니다. 

     현재 시스템 날짜를 가져와서 변수에 넣어서 사용하시면 됩니다. 

configFile = open(filename,'w')

 ▷ 파일을 저장하기 위해서 file객체를 열고

configFile.write(run_config)

 ▷ running config 내용을 파일에 쓰게 됩니다.

configFile.close() 

 ▷ 마지막으로 파일 객체를 닫습니다. 


위와 같은 동작을 전체 장비 리스트를 다 백업할 때까지 반복하게 됩니다. 

아래의 코드는 실제 장비 리스트를 관리하는 파일입니다. 

계정은 공통 변수로 사용을 하게 되고, 각 장비의 이름과 ip를 지정해 놓았습니다. 


[ device.py ]

user1='admin'

pass1=‘zigipass'

dv='cisco_nxos'


CoreSW1={'device_type':dv,'verbose':False,'username':user,'password':pass,'ip':'10.0.0.1'}

CoreSW2={'device_type':dv,'verbose':False,'username':user,'password':pass,'ip':'10.0.0.2'}

ExtSW1={'device_type':dv,'verbose':False,'username':user,'password':pass,'ip':'10.0.0.3'}

ExtSW2={'device_type':dv,'verbose':False,'username':user,'password':pass,'ip':'10.0.0.4'}


ZIGI_devices = [CoreSW1,CoreSW2,ExtSW1,ExtSW2]


Posted by 네떡지기
DevOps/Programmability2017.05.17 19:37

 

Keyword : netmiko, paramiko, ssh, python, programmability, automation, network, 자동화, 프로그래머빌리티


Programmability for Networker를 새롭게 시작하는 포스팅입니다. ^^; 지난번 Part에 이어서 Part 22부터 시작입니다.

당분간 진행하는 부분이 예전에 진행을 하면서 사용했던 부분이긴 하지만,

Netmiko라는 멀티벤더에서 손쉽게 Paramiko SSH를 사용할 수 있도록 해주는 라이브러리로 진행을 하게 될 예정이라서,

먼저 Netmiko 라이브러리를 설치하는 것으로 가볍게 시작해봅니다.

 

 

Netmiko 

 Multi-vendor library to simplify Paramiko SSH connections to network devices

 

* 관련 링크 : https://github.com/ktbyers/netmiko

 

 

○ Python 버전

         Python 2.7, 3.4, 3.5

 

○ 지원되는 장비

         Paramiko >= 1.13+

         scp >= 0.10.0

         pyyaml

         pytest(for unit tests)

 

 ※ Paramiko

   - Python SSH 모듈 

 

 

 

○ 지원되는 장비

       - Regularly tested

          Arista vEOS / Cisco ASA / Cisco IOS / Cisco IOS-XE / Cisco IOS-XR / Cisco NX-OS / Cisco SG300
          HP Comware7 / HP ProCurve / Juniper Junos / Linux

 

       - Limited tested

          Avaya ERS / Avaya VSP / Brocade VDX / Brocade ICX,FastIron / Brocade MLX,NetIron / Cisco WLC
          Dell-Force10 DNOS9 / Dell PowerConnect / Huawei / Mellanox / Palo Alto PAN-OS / Pluribus / Vyatta VyOS

 

       - Experimental
          A10 / Alcatel-Lucent SR-OS / Ciena SAOS / Cisco Telepresence / CheckPoint Gaia / Enterasys / Extreme
          F5 LTM / Fortinet

 

 

 

○ 설치 방법

       - Netmiko의 설치방법은 아래의 페이지에 안내되어 있지만, 실패하실 수 있습니다.

        * https://pynet.twb-tech.com/blog/automation/netmiko-tools.html

 

 

 

 

 

설치 시에 아래와 같은 에러메시지를 만날 수도 있습니다.

 

 

       -

 

혹시 설치에 실패를 하게 되면, 아래와 같이 설치를 진행하시면 됩니다. (Cent OS 7.3 기준입니다)

 

 

   rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
   yum install python-pip

   yum install python-dev
   yum install python-lxml
   yum install opensll
   yum install openssl-devel

   pip install netmiko

 

 

 

 

 

 

 

 

 

Posted by 네떡지기

티스토리 툴바