네트워크 장비 제어를 위한 추상화 API - 2: 명령 입력 전/후 모드 이동

dingdong·2022년 1월 15일
0

Previously

1차 방법의 명령 입력 전/후 모드 이동 문제

  • 네트워크 장비 설정 예시 : port disable 과정
# config terminal
(config)# interface ge1/1
(ge1/1)# shutdown
(ge1/1)# exit
(config)# exit
#

port ge1/1 를 disable 했다가 Enable 할 경우

  • 1차 방법의 문제점: 비효율적인 모드 이동
# config terminal
(config)# interface ge1/1
(ge1/1)# shutdown
(ge1/1)# exit
(config)# exit
#
# config terminal
(config)# interface ge1/1
(ge1/1)# no shutdown
(ge1/1)# exit
(config)# exit
#
  • 원했던 sequence: 효율적인 모드 이동
# config terminal
(config)# interface ge1/1
(ge1/1)# shutdown
(ge1/1)# no shutdown
(ge1/1)# exit
(config)# exit
#

위와 같은 상황 처럼
비효율적으로 모드를 이동하여 소요시간이 오래 걸리게됨.


1차 방법 문제점 중에 명령 입력 전/후 모드 이동 문제가 있었다.
효율적으로 모드 이동을 하도록 접근이 필요했다.



2차 방법: 접근 방법 ❗

규칙을 만들었다.
기준이 되는 모드가 있다.
기준이 되는 모드에서
명령을 입력하여
모드를 이동하고
다시 기준이되는 모드로 돌아와야된다.

순서12345
명령config terminalinterface ge1/1exitend
모드 위치기준 모드 (enable)configiface ge1/1config기준모드 (enable)

pseudocode

  • Mode Class 는 모드에 대한 정의모드로 이동하는 명령어, 기준모드로 돌아가는 명령들이 정의되어있다.
  • session 이랑 의존이 되어있지 않기 때문에 Mode.모드명1() 하더라도 장비로 입력되지 않는다.

Class ModeBase(object):
   def 모드명1(self):
       return (
           모드를_이동하기_위한_명령어들,
           모드명들,
           기준모드로_돌아가는_명령어들
       )
       
   def 모드명2(self):
       return (
           모드를_이동하기_위한_명령어들,
           모드명들,
           기준모드로_돌아가는_명령어들
       )
    
Class ModeClass1(ModeBase):
   def 모드명3(self):
       return (
           모드를_이동하기_위한_명령어들,
           모드명들,
           기준모드로_돌아가는_명령어들
       )
 
 
 모드_별칭_이름_1 = ModeClass1()
 
 
Class 기능1SubFeatureClass1(FeatureCommon):
    def __init__(self):
        self._모드 = 모드_별칭_이름_1
        
    def 명령1(self, 필요한_데이터):
        메세지.CLI = 메세지_CLI(self._모드.모드1, 필요한_데이터)
        return 메세지

    def 명령2(self, 필요한_데이터):
        메세지.CLI = 메세지_CLI(self._모드.모드2, 필요한_데이터)
        return 메세지
        
    def 명령3(self, 필요한_데이터):
        메세지.CLI = 메세지_CLI(self._모드.모드3, 필요한_데이터)
        return 메세지

내가 원했던거 이거 👉

  • 1차 방법보다 효율적으로 모드 이동을 하고 실행속도 또한 빨라졌다.
    (기준 모드에서 모드가 더 안으로 들어갈수록 속도는 더욱 줄었다.)
# config terminal
(config)# interface ge1/1
(ge1/1)# shutdown
(ge1/1)# no shutdown
(ge1/1)# exit
(config)# end
#


# config terminal
(config)# 모드1_이동_명령어
(config-모드1)# 모드2_이동_명령어
(config-모드1-모드2)# 명령1
(config-모드1-모드2)# 명령2
(config-모드1-모드2)# exit
(config-모드1)# 명령3
(config)# 명령4
(config)# end
#
profile
자동화 개발

0개의 댓글