분류없음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.01 09:49

안녕하세요.

 

이번 포스팅은 기존에 진행하던 Programmabiliy for Networker 라는 주제의 포스팅을..

다시 오랜만에 재개하기 위한 사전 동영상 포스팅입니다.

 

아래의 동영상은 Access-list를 관리하기 위한 방법으로 작성한 코드입니다.

차단하기 위한 별도의 IP리스트 파일을 관리를 하여,

기존의 있는 Access-list에 해당 파일에 있는 IP를 차단하는 역할을 해줍니다.

 

또한 이력관리를 위해서 앞에 Access-list Numbering을 ACL이 추가되는 현재의 날짜와 그 날의 순번대로 작성됩니다.

즉, 2017년 5월 1일에 작성되는 ACL의 경우에는 1705010000, 1705010001 과 같이 Accesss-list가 만들어집니다.

 

개인적으로 진행하는 스터디에서 다뤄질 소모임이기도 하고...

공부를 위한 부분이기도 하고..

6월에 진행되는 네전따 커뮤니티 세미나 발표를 위한 부분이기도 하고..

업무를 위해서 필요한 부분이기도 할...

Programmability for Networker 포스팅이.. 곧 다시.. 재개합니다. ^^

 

 

.

Posted by 네떡지기

안녕하세요 

이번 포스팅은 지난 번에 했던 포스팅과 마찬가지로 간단한 동영상을 올려봅니다.


Cisco ACI에서 포트설정은 Profile 형태로 구성을 하게 되는 데, 

PortProfile을 생성하는 것을 JSON을 이용해서 Post하기 위한 예제입니다. 

동영상의 내용은, 동일한 PortProfile 그룹과 거기에 설정할 AEP를 지정하고 

그리고 각 인터페이스 별로 설정할 Port정보를 기입하여, ACI에 적용할 JSON을 생성한 후, ACI에 적용하게 되는 동영상입니다.


좀 더 많은 부분은 한꺼번에 JSON 형태로 만들어서 Profile을 만들고 싶은 생각은 있지만..

아무래도 실 운영 환경에서 테스트를 진행하는 부분에는 한계점이 있기 때문에.. 

가상머신이나. 에뮬레이터가.. 절실하다는.. 생각을 해보면서 포스팅을 마칩니다.



P.S 물론 본 동영상에 포함된 Profile 형태가 물론 ACI에서 하고자 하는 아키텍처의 그림은 아닐 수 있겠지만.

    위와 같은 형태의 자동화 부분도 가능하다는 점만 염두해두면 좋을 것 같습니다.

Posted by 네떡지기

티스토리 툴바