NSO Simple Python
실험실 환경 설정
- NSO 인스턴스와 시뮬레이션 Cisco IOS 장치 시작
ncs-netsim --dir ~/src/netsim create-device $NCS_DIR/packages/neds/cisco-ios-cli-3.8 netsim-ios ncs-setup --dest ~/src --netsim-dir ~/src/netsim cd ~/src ncs-netsim start ncs ncs_cli -C -u admin
- 장치 구성 학습
devices sync-from exit
- 구성 확인
IOS 장치 구성 확인netsim 프롬포트 내의 전체 구성 확인ncs-netsim cli-c netsim-ios
paginate false show running-config exit
NSO Python API
- Magic automation
- import ncs로 사용할 수 있으며, Yang 타입을 Python 클래스로 표현
- CRUD 작업을 수행할 수 있는 Python 매직 메서드를 가지고 있음
- CDP Run Audit
- netsim-ios가 활성화 되있는지 확인
netsim-ios 장치의 CDP 실행상태를 NSO 데이터베이스에서 읽어서 출력기존 인터페이스의 인터페이스 번호 값(name)을 조회import ncs with ncs.maapi.single_read_trans("admin", "python", groups=["ncsadmin"]) as t: root = ncs.maagic.get_root(t) device = root.devices.device["netsim-ios"] cdp_result = device.config.ios__cdp.run print( "For Device {}, CDP being enabled is {}".format(device.name, cdp_result) )
import ncs with ncs.maapi.single_read_trans("admin", "python", groups=["ncsadmin"]) as t: root = ncs.maagic.get_root(t) device = root.devices.device["netsim-ios"] for interface in device.config.ios__interface: for if_type in device.config.ios__interface[interface]: if hasattr(if_type, "name"): print( f'Device {device.name}, Interface {if_type} {if_type.name}' )
- netsim-ios가 활성화 되있는지 확인
NSO Python API 심층 탐구
- NSO Python transactions 순서
- 트랜잭션 생성
- 장치 정보 접근
- 데이터 조작
- 설정 적용
- 트랜잭션 종료
- 트랜잭션 생성
- 대부분의 Python 구문 형태admin : 사용자를 나타냄
with ncs.maapi.single_write_trans('admin', 'python', groups=['ncsadmin']) as t: # ... code ...
groups : 로컬에서는 필요 X, 시스템 설치에서는 종종 ncsadmin 그룹이 설정
t : 모델의 루트를 얻는데 사용되며, 변경 사항을 커밋할 때 트랜잭션을 적용 - single_read_trans
- single_write_trans
- config 모드와 유사
- 대부분의 Python 구문 형태
- 장치 정보 접근root : CLI 계층 구조의 최상위를 가리키는 포인터
python3 import ncs with ncs.maapi.single_read_trans('admin', 'python', groups=['ncsadmin']) as t: root = ncs.maagic.get_root(t) device_object = root.devices.device["netsim-ios"] print(device_object.name)
device_object : NSO 장치 목록에서 "netsim" 장치 이름을 딕셔너리 조회로 참조
root.devices.device : NSO CDB 모든 장치 참 - 사용 가능한 객체 메서드 검색
python3 import ncs with ncs.maapi.single_read_trans('admin', 'python', groups=['ncsadmin']) as t: root = ncs.maagic.get_root(t) device_object = root.devices.device["netsim-ios"] print(dir(device_object))
Manipulating Configuration(설정 조작)
- 데이터 조작
- 설정 데이터를 변경하기 위해서는 장치 namespace 필요
- NSO CLI(| display xpath) 또는 print(dir()) 사용
- NSO CLI 사용할 경우
- NSO 터미널 접속 및 명령어 실행
ncs_cli -C -u admin paginate false show running-config devices device netsim-ios config | display xpath exit
- NSO 터미널 접속 및 명령어 실행
- Python을 사용할 경우
- nso 쓰기 트랜잭션을 열고, 애플리케이션 데이터 트리의 루트를 가져오고, netsim-ios 장치 구성을 참조하는 축약 변수 생성 뒤 ios:cdp의 run 값을 True 할당 이후, 변경 사항 적용
python3 import ncs with ncs.maapi.single_write_trans('admin', 'python', groups=['ncsadmin']) as t: root = ncs.maagic.get_root(t) device_object = root.devices.device["netsim-ios"].config device_object.ios__cdp.run = True t.apply()
- nso 쓰기 트랜잭션을 열고, 애플리케이션 데이터 트리의 루트를 가져오고, netsim-ios 장치 구성을 참조하는 축약 변수 생성 뒤 ios:cdp의 run 값을 True 할당 이후, 변경 사항 적용
- Loopback 인터페이스 추가 및 삭제
- NSO에 인터페이스 유형(ios__interface["Loopbac"])을 알려주고 고유한 이름으로 목록 항목 생성
python3 import ncs with ncs.maapi.single_write_trans('admin', 'python', groups=['ncsadmin']) as t: root = ncs.maagic.get_root(t) device_cdb = root.devices.device["netsim-ios"] device_cdb.config.ios__interface["Loopback"].create("1337") device_cdb.config.ios__interface.Loopback["1337"].ip.address.primary.address = "192.168.1.1" device_cdb.config.ios__interface.Loopback["1337"].ip.address.primary.mask = "255.255.255.252" t.apply()
- 백그라운드에서 NSO 새 인터페이스 푸시 및 장치로 전송
paginate false show running-config interface Loopback 1337 exit
- loopback 제거
python3 import ncs with ncs.maapi.single_write_trans('admin', 'python', groups=['ncsadmin']) as t: root = ncs.maagic.get_root(t) device_cdb = root.devices.device["netsim-ios"] del device_cdb.config.ios__interface.Loopback["1337"] t.apply()
- NSO에 인터페이스 유형(ios__interface["Loopbac"])을 알려주고 고유한 이름으로 목록 항목 생성