Hierarchical Configuration을 사용하여 Cisco 장비 차이 Config를 자동으로 생성해 보았습니다.
7737 단어 automation파이썬네트워크시스코
소개
Network to Code.
Hierarchical Configuration이란?
NW 기기의 Running Config와 상정 Config를 비교해, 차분 Config를 출력해 주는 Python 라이브러리입니다.
Cisco IOS/IOS-XR/NX-OS나 Arista EOS에서 사용되어 온 것 같습니다만, IOS와 같은 CLI 기반의 기기라면 움직이는 것 같습니다.
참고 URL:
Awesome Network Automation
GitHub netdevops/hier_config
개인적으로는, 이하의 용도로 사용할 수 있다고 생각하고 있습니다.
NW 기기의 Running Config와 상정 Config를 비교해, 차분 Config를 출력해 주는 Python 라이브러리입니다.
Cisco IOS/IOS-XR/NX-OS나 Arista EOS에서 사용되어 온 것 같습니다만, IOS와 같은 CLI 기반의 기기라면 움직이는 것 같습니다.
참고 URL:
Awesome Network Automation
GitHub netdevops/hier_config
개인적으로는, 이하의 용도로 사용할 수 있다고 생각하고 있습니다.
설치
이번에는 Windows 단말기의 명령 프롬프트에서 GitHub에서 직접 설치했습니다.
※Python: 3.6.5, hier_config: 1.6.0
※Git을 인스톨 하고 있지 않은 경우는 코드 문서화 » hier_config 로부터 입수할 수 있습니다.
git clone https://github.com/netdevops/hier_config.git
cd .\hier_config
python setup.py install
비교할 Config 저장
설치 중에 작성된 "hier_config > tests > files"폴더 아래에 호스트 이름 brborder2
의 Running Config와 가정 Config를 저장했습니다.
hier_config
└─tests
│ tests.py
│ test_hier_config.py
│ test_host.py
│ test_pep8.py
│ test_text_match.py
│ __init__.py
│
└─files
brborder2_intended.conf # 想定Config
brborder2_running.conf # Running Config
compiled_config.conf
running_config.conf
test_options_ios.yml
test_tags_ios.yml
두 Config의 차이는 다음 6점입니다.
(1) QoS의 기존 C-DATA1 클래스에 ACL1 행 추가
(2) QoS에 새로운 C-DATA2 클래스 추가
(3) GigabitEthernet0/1을 새로 설정하고 EIGRP를 활성화
(4) Syslog 대상을 추가
(5) 로그인 배너 삭제
(6) NTP 서버의 주소 변경
여기
파이썬 스크립트
hier_config 폴더 바로 아래에 다음 파일을 저장합니다.options
로 지정하고 있는 test_options_ios.yml
로, Config 차분이 발견되었을 때의 처리 방법을 명령 마다 세세하게 정의할 수 있습니다. 이번은 테스트용의 것을 그대로 사용합니다.
hier_config_sample.pyfrom hier_config import HConfig
from hier_config.host import Host
import yaml
options = yaml.load(open('./tests/files/test_options_ios.yml'))
host = Host('brborder2', 'ios', options)
# Build HConfig object for the Running Config
running_config_hier = HConfig(host=host)
running_config_hier.load_from_file('./tests/files/brborder2_running.conf')
# Build Hierarchical Configuration object for the Compiled Config
compiled_config_hier = HConfig(host=host)
compiled_config_hier.load_from_file('./tests/files/brborder2_intended.conf')
# Build Hierarchical Configuration object for the Remediation Config
remediation_config_hier = running_config_hier.config_to_get_to(compiled_config_hier)
for line in remediation_config_hier.all_children():
print(line.cisco_style_text())
실행 결과① (Running⇒상정의 차분)
생성된 차이 Config와 확인 결과는 다음과 같습니다.
(1) QoS의 기존 C-DATA1 클래스에 ACL1 행 추가 ⇒ OK
(2) QoS에 신규 C-DATA2 클래스를 추가 ⇒ OK (정책 맵도 세트 재기록되고있다)
(3) GigabitEthernet0/1을 신규 설정해, EIGRP를 유효화⇒OK(명시적으로 no shutdown가 들어 있다)
(4) Syslog의 송신처를 추가 ⇒OK
(5) 로그인 배너를 삭제 ⇒NG( no banner login ^C
뒤에, 불필요한 4행이 포함된다.)
(6) NTP 서버의 주소 변경 ⇒ OK (이전 주소가 삭제되고 새 주소가 추가되었습니다)
C:\Users\XXXXX\hier_config>python hier_config_sample.py
no banner login ^C
============NOTICE==============
| This is test device for demo |
================================
^C
no ntp server 10.10.1.44
class-map match-all C-DATA2
match access-group name C-DATA2_ACL
policy-map P-CHILD
class C-DATA1
no priority percent 60
priority percent 40
class C-DATA2
bandwidth percent 30
class class-default
no bandwidth percent 40
bandwidth percent 30
interface GigabitEthernet0/1
no shutdown
description << To LAN >>
ip address 10.1.1.2 255.255.255.252
router eigrp 1
network 10.1.1.0 0.0.0.3
ip access-list extended C-DATA1_ACL
20 permit ip any 192.168.101.0 0.0.0.255
ip access-list extended C-DATA2_ACL
10 permit ip any 192.168.102.0 0.0.0.255
logging host 192.168.100.108
ntp server 10.10.1.47
(참고) 실행 결과 ② (상정⇒Running의 차분)
문제 발생시 Rollback Config를 작성하는 이미지로, 반대도 해 보았습니다.
(1) QoS의 기존 C-DATA1 클래스의 ACL1 행을 삭제 ⇒ OK
(2) QoS에 신규 C-DATA2 클래스를 삭제⇒NG(처음으로 no class-map match-all C-DATA2
(3) GigabitEthernet0/1을 폐색해, EIGRP를 무효화⇒OK
(4) Syslog의 송신처를 삭제 ⇒ OK
(5) 로그인 배너 추가 ⇒ OK
(6) NTP 서버의 주소 변경 ⇒ OK
C:\Users\XXXXX\hier_config>python hier_config_sample.py
no class-map match-all C-DATA2
no ip access-list extended C-DATA2_ACL
no logging host 192.168.100.108
no ntp server 10.10.1.47
policy-map P-CHILD
no class C-DATA2
class C-DATA1
no priority percent 40
priority percent 60
class class-default
no bandwidth percent 30
bandwidth percent 40
interface GigabitEthernet0/1
no description << To LAN >>
no ip address 10.1.1.2 255.255.255.252
shutdown
router eigrp 1
no network 10.1.1.0 0.0.0.3
ip access-list extended C-DATA1_ACL
no 20 permit ip any 192.168.101.0 0.0.0.255
banner login ^C
============NOTICE==============
| This is test device for demo |
================================
^C
ntp server 10.10.1.44
마지막으로
올바른 차이 Config가 생성되지 않은 경우는 options
의 YAML 파일로 룰을 정의하면 대응할 수 있을지도 모릅니다.
또, 순서의 고려가 필요한 경우도, 상기의 YAML로 순서를 지정할 수 있는 것 같기 때문에,(힘들다고는 생각합니다만) 대응할 수 있을 것 같습니다.
다만, 특수한 설정을 포함해 완전하게 대응시키는 것은 힘들 것 같기 때문에, 자동 생성된 것을 리뷰자가 최종 체크하는 전제라면, 매우 편리한 툴이라고 생각했습니다.
git clone https://github.com/netdevops/hier_config.git
cd .\hier_config
python setup.py install
설치 중에 작성된 "hier_config > tests > files"폴더 아래에 호스트 이름
brborder2
의 Running Config와 가정 Config를 저장했습니다.hier_config
└─tests
│ tests.py
│ test_hier_config.py
│ test_host.py
│ test_pep8.py
│ test_text_match.py
│ __init__.py
│
└─files
brborder2_intended.conf # 想定Config
brborder2_running.conf # Running Config
compiled_config.conf
running_config.conf
test_options_ios.yml
test_tags_ios.yml
두 Config의 차이는 다음 6점입니다.
(1) QoS의 기존 C-DATA1 클래스에 ACL1 행 추가
(2) QoS에 새로운 C-DATA2 클래스 추가
(3) GigabitEthernet0/1을 새로 설정하고 EIGRP를 활성화
(4) Syslog 대상을 추가
(5) 로그인 배너 삭제
(6) NTP 서버의 주소 변경
여기
파이썬 스크립트
hier_config 폴더 바로 아래에 다음 파일을 저장합니다.options
로 지정하고 있는 test_options_ios.yml
로, Config 차분이 발견되었을 때의 처리 방법을 명령 마다 세세하게 정의할 수 있습니다. 이번은 테스트용의 것을 그대로 사용합니다.
hier_config_sample.pyfrom hier_config import HConfig
from hier_config.host import Host
import yaml
options = yaml.load(open('./tests/files/test_options_ios.yml'))
host = Host('brborder2', 'ios', options)
# Build HConfig object for the Running Config
running_config_hier = HConfig(host=host)
running_config_hier.load_from_file('./tests/files/brborder2_running.conf')
# Build Hierarchical Configuration object for the Compiled Config
compiled_config_hier = HConfig(host=host)
compiled_config_hier.load_from_file('./tests/files/brborder2_intended.conf')
# Build Hierarchical Configuration object for the Remediation Config
remediation_config_hier = running_config_hier.config_to_get_to(compiled_config_hier)
for line in remediation_config_hier.all_children():
print(line.cisco_style_text())
실행 결과① (Running⇒상정의 차분)
생성된 차이 Config와 확인 결과는 다음과 같습니다.
(1) QoS의 기존 C-DATA1 클래스에 ACL1 행 추가 ⇒ OK
(2) QoS에 신규 C-DATA2 클래스를 추가 ⇒ OK (정책 맵도 세트 재기록되고있다)
(3) GigabitEthernet0/1을 신규 설정해, EIGRP를 유효화⇒OK(명시적으로 no shutdown가 들어 있다)
(4) Syslog의 송신처를 추가 ⇒OK
(5) 로그인 배너를 삭제 ⇒NG( no banner login ^C
뒤에, 불필요한 4행이 포함된다.)
(6) NTP 서버의 주소 변경 ⇒ OK (이전 주소가 삭제되고 새 주소가 추가되었습니다)
C:\Users\XXXXX\hier_config>python hier_config_sample.py
no banner login ^C
============NOTICE==============
| This is test device for demo |
================================
^C
no ntp server 10.10.1.44
class-map match-all C-DATA2
match access-group name C-DATA2_ACL
policy-map P-CHILD
class C-DATA1
no priority percent 60
priority percent 40
class C-DATA2
bandwidth percent 30
class class-default
no bandwidth percent 40
bandwidth percent 30
interface GigabitEthernet0/1
no shutdown
description << To LAN >>
ip address 10.1.1.2 255.255.255.252
router eigrp 1
network 10.1.1.0 0.0.0.3
ip access-list extended C-DATA1_ACL
20 permit ip any 192.168.101.0 0.0.0.255
ip access-list extended C-DATA2_ACL
10 permit ip any 192.168.102.0 0.0.0.255
logging host 192.168.100.108
ntp server 10.10.1.47
(참고) 실행 결과 ② (상정⇒Running의 차분)
문제 발생시 Rollback Config를 작성하는 이미지로, 반대도 해 보았습니다.
(1) QoS의 기존 C-DATA1 클래스의 ACL1 행을 삭제 ⇒ OK
(2) QoS에 신규 C-DATA2 클래스를 삭제⇒NG(처음으로 no class-map match-all C-DATA2
(3) GigabitEthernet0/1을 폐색해, EIGRP를 무효화⇒OK
(4) Syslog의 송신처를 삭제 ⇒ OK
(5) 로그인 배너 추가 ⇒ OK
(6) NTP 서버의 주소 변경 ⇒ OK
C:\Users\XXXXX\hier_config>python hier_config_sample.py
no class-map match-all C-DATA2
no ip access-list extended C-DATA2_ACL
no logging host 192.168.100.108
no ntp server 10.10.1.47
policy-map P-CHILD
no class C-DATA2
class C-DATA1
no priority percent 40
priority percent 60
class class-default
no bandwidth percent 30
bandwidth percent 40
interface GigabitEthernet0/1
no description << To LAN >>
no ip address 10.1.1.2 255.255.255.252
shutdown
router eigrp 1
no network 10.1.1.0 0.0.0.3
ip access-list extended C-DATA1_ACL
no 20 permit ip any 192.168.101.0 0.0.0.255
banner login ^C
============NOTICE==============
| This is test device for demo |
================================
^C
ntp server 10.10.1.44
마지막으로
올바른 차이 Config가 생성되지 않은 경우는 options
의 YAML 파일로 룰을 정의하면 대응할 수 있을지도 모릅니다.
또, 순서의 고려가 필요한 경우도, 상기의 YAML로 순서를 지정할 수 있는 것 같기 때문에,(힘들다고는 생각합니다만) 대응할 수 있을 것 같습니다.
다만, 특수한 설정을 포함해 완전하게 대응시키는 것은 힘들 것 같기 때문에, 자동 생성된 것을 리뷰자가 최종 체크하는 전제라면, 매우 편리한 툴이라고 생각했습니다.
from hier_config import HConfig
from hier_config.host import Host
import yaml
options = yaml.load(open('./tests/files/test_options_ios.yml'))
host = Host('brborder2', 'ios', options)
# Build HConfig object for the Running Config
running_config_hier = HConfig(host=host)
running_config_hier.load_from_file('./tests/files/brborder2_running.conf')
# Build Hierarchical Configuration object for the Compiled Config
compiled_config_hier = HConfig(host=host)
compiled_config_hier.load_from_file('./tests/files/brborder2_intended.conf')
# Build Hierarchical Configuration object for the Remediation Config
remediation_config_hier = running_config_hier.config_to_get_to(compiled_config_hier)
for line in remediation_config_hier.all_children():
print(line.cisco_style_text())
생성된 차이 Config와 확인 결과는 다음과 같습니다.
(1) QoS의 기존 C-DATA1 클래스에 ACL1 행 추가 ⇒ OK
(2) QoS에 신규 C-DATA2 클래스를 추가 ⇒ OK (정책 맵도 세트 재기록되고있다)
(3) GigabitEthernet0/1을 신규 설정해, EIGRP를 유효화⇒OK(명시적으로 no shutdown가 들어 있다)
(4) Syslog의 송신처를 추가 ⇒OK
(5) 로그인 배너를 삭제 ⇒NG(
no banner login ^C
뒤에, 불필요한 4행이 포함된다.)(6) NTP 서버의 주소 변경 ⇒ OK (이전 주소가 삭제되고 새 주소가 추가되었습니다)
C:\Users\XXXXX\hier_config>python hier_config_sample.py
no banner login ^C
============NOTICE==============
| This is test device for demo |
================================
^C
no ntp server 10.10.1.44
class-map match-all C-DATA2
match access-group name C-DATA2_ACL
policy-map P-CHILD
class C-DATA1
no priority percent 60
priority percent 40
class C-DATA2
bandwidth percent 30
class class-default
no bandwidth percent 40
bandwidth percent 30
interface GigabitEthernet0/1
no shutdown
description << To LAN >>
ip address 10.1.1.2 255.255.255.252
router eigrp 1
network 10.1.1.0 0.0.0.3
ip access-list extended C-DATA1_ACL
20 permit ip any 192.168.101.0 0.0.0.255
ip access-list extended C-DATA2_ACL
10 permit ip any 192.168.102.0 0.0.0.255
logging host 192.168.100.108
ntp server 10.10.1.47
(참고) 실행 결과 ② (상정⇒Running의 차분)
문제 발생시 Rollback Config를 작성하는 이미지로, 반대도 해 보았습니다.
(1) QoS의 기존 C-DATA1 클래스의 ACL1 행을 삭제 ⇒ OK
(2) QoS에 신규 C-DATA2 클래스를 삭제⇒NG(처음으로 no class-map match-all C-DATA2
(3) GigabitEthernet0/1을 폐색해, EIGRP를 무효화⇒OK
(4) Syslog의 송신처를 삭제 ⇒ OK
(5) 로그인 배너 추가 ⇒ OK
(6) NTP 서버의 주소 변경 ⇒ OK
C:\Users\XXXXX\hier_config>python hier_config_sample.py
no class-map match-all C-DATA2
no ip access-list extended C-DATA2_ACL
no logging host 192.168.100.108
no ntp server 10.10.1.47
policy-map P-CHILD
no class C-DATA2
class C-DATA1
no priority percent 40
priority percent 60
class class-default
no bandwidth percent 30
bandwidth percent 40
interface GigabitEthernet0/1
no description << To LAN >>
no ip address 10.1.1.2 255.255.255.252
shutdown
router eigrp 1
no network 10.1.1.0 0.0.0.3
ip access-list extended C-DATA1_ACL
no 20 permit ip any 192.168.101.0 0.0.0.255
banner login ^C
============NOTICE==============
| This is test device for demo |
================================
^C
ntp server 10.10.1.44
마지막으로
올바른 차이 Config가 생성되지 않은 경우는 options
의 YAML 파일로 룰을 정의하면 대응할 수 있을지도 모릅니다.
또, 순서의 고려가 필요한 경우도, 상기의 YAML로 순서를 지정할 수 있는 것 같기 때문에,(힘들다고는 생각합니다만) 대응할 수 있을 것 같습니다.
다만, 특수한 설정을 포함해 완전하게 대응시키는 것은 힘들 것 같기 때문에, 자동 생성된 것을 리뷰자가 최종 체크하는 전제라면, 매우 편리한 툴이라고 생각했습니다.
C:\Users\XXXXX\hier_config>python hier_config_sample.py
no class-map match-all C-DATA2
no ip access-list extended C-DATA2_ACL
no logging host 192.168.100.108
no ntp server 10.10.1.47
policy-map P-CHILD
no class C-DATA2
class C-DATA1
no priority percent 40
priority percent 60
class class-default
no bandwidth percent 30
bandwidth percent 40
interface GigabitEthernet0/1
no description << To LAN >>
no ip address 10.1.1.2 255.255.255.252
shutdown
router eigrp 1
no network 10.1.1.0 0.0.0.3
ip access-list extended C-DATA1_ACL
no 20 permit ip any 192.168.101.0 0.0.0.255
banner login ^C
============NOTICE==============
| This is test device for demo |
================================
^C
ntp server 10.10.1.44
올바른 차이 Config가 생성되지 않은 경우는
options
의 YAML 파일로 룰을 정의하면 대응할 수 있을지도 모릅니다.또, 순서의 고려가 필요한 경우도, 상기의 YAML로 순서를 지정할 수 있는 것 같기 때문에,(힘들다고는 생각합니다만) 대응할 수 있을 것 같습니다.
다만, 특수한 설정을 포함해 완전하게 대응시키는 것은 힘들 것 같기 때문에, 자동 생성된 것을 리뷰자가 최종 체크하는 전제라면, 매우 편리한 툴이라고 생각했습니다.
Reference
이 문제에 관하여(Hierarchical Configuration을 사용하여 Cisco 장비 차이 Config를 자동으로 생성해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kitara/items/c101bb56f090ff7f0947텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)