Nornir 네트워크 자동화 – 3 (활용편)

Nornir 네트워크 자동화 – 3 (활용편)

이전 글(Nornir 네트워크 자동화 -2 (활용편))에서 nornir-netmiko 를 통해 시스코스위치에 명령을 내리고 결과를 가져오는 파이썬 스크립트를 작성했다.

이제, 남은것은 가져온 결과에서 원하는 부분을 추출하여 excel 에 저장하는 것이다.
만약, 결과를 눈으로 확인하기만 하면 된다고하면 print_result 사용만으로 충분할 수도 있겠지만, 장비의 시리얼 번호 추출이나 os 버전을 업그레이드 하기 위해 현재 os 버전을 확인하고자 한다면 결과를 파싱하여 정리하는 것이 보기에 좋을 것이다.

파싱의 원래 개념은 문자열을 토큰으로 분해하여 parse tree를 만드는 과정을 말하므로 엄격한 의미의 파싱이라 할 수 없을지도 모르겠지만, 넓은 의미로 원하는 데이타를 추출하는 행위도 의미한다.

어떤 문자열에서 원하는 문자열을 추출하기 위한 방법으로는 여러 가지가 있겠지만 정규표현식을 이용하는것이 좋다.

Continue reading

Nornir 네트워크 자동화 -2 (활용편)

Nornir 네트워크 자동화 – 2 활용편

목표: Nornir를 이용하여 시스코 스위치 점검하는 파이썬 스크립트를 작성

사람이 장비점검을 한다고 하면 보통 아래 과정을 거쳐야한다.

1. 스위치의 목록 확인(ID, 비밀번호, 접속방법 등등)
2. 장비 접속, 보통 순서대로 접속하지만, 터미널 프로그램에 등록해서 한번에 여러대 접속이 가능하다.
3. 장비별로 명령을 내린다. 이것 역시 순서대로 하거나 여러 장비에 동시 가능.
4. 명령의 실행 결과를 확인하고 체크리스트를 작성한다.(이부분에서 사람은 동시에 하기 어려움)

이것을 자동화한다면,
1. 장비 목록에서 hosts.yaml 작성. 또는 파이썬 딕셔너리 타입의 hosts 데이타를 작성.
2. Nornir netmiko_task로 장비에 명령을 내리고 실행 결과를 받음.
3. 실행결과에서 원하는 결과를 추출하고 체크리스트를 작성한다.

인벤토리는 기본적으로 hosts 정보만으로 Nornir를 초기화하고 실행할 수 있다. 따라서 이전 글에서 살펴본 hosts의 스키마를 기본으로 아래 항목으로 excel 파일을 작성하고, 명령을 실행한 후 결과를 excel 파일에 저장하도록 스크립트를 작성해 보도록 한다.

Continue reading

Nornir 네트워크 자동화 – 1

Nornir 네트워크 자동화 – 1 (기초편)

1. Nornir란 무엇인가?

Nornir는 파이썬으로 작성된 자동화 프레임워크다. Ansible의 경우 파이썬으로 작성되었지만 프로그래밍을 몰라도 사용하는데 문제는 없지만, Nornir를 사용하려면 파이썬 프로그래밍을 알아야한다.
Nornir는 파이썬 버전 3.6.2 이상에서 동작한다.

2. Nornir 설치

Nornir는 PyPI에 게시되며, 다른 파이썬 패키지들처럼 pip 명령으로 설치가 가능하다. 또한 개발단계에서는 virtual environment를 사용하는것이 좋다.

아래 명령으로 설치한다.

(venv) $ pip install nornir

설치후 파이썬 쉘에서 Nornir 시험해본다.

$ python
Python 3.8.5 (default, Jan 27 2021, 15:41:15)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from nornir import InitNornir
>>>

오류가 발생하지 않는다면 잘 설치된 것이다.

Continue reading

C3550, %SYS-2-MALLOCFAIL

C3550, %SYS-2-MALLOCFAIL 메시지 발생.

시스코 스위치에서 대략 30초 간격으로 아래 메시지 무한 반복.

May 10 16:23:07: %SYS-2-MALLOCFAIL: Memory allocation of 1692 bytes failed from 0x153AE4, alignment 0 
Pool: I/O  Free: 57212  Cause: Memory fragmentation 
Alternate Pool: None  Free: 0  Cause: No Alternate pool 
 -Process= "Pool Manager", ipl= 0, pid= 5
May 10 16:23:37: %SYS-2-MALLOCFAIL: Memory allocation of 1692 bytes failed from 0x153AE4, alignment 0 
Pool: I/O  Free: 57212  Cause: Memory fragmentation 
Alternate Pool: None  Free: 0  Cause: No Alternate pool 
 -Process= "Pool Manager", ipl= 0, pid= 5
May 10 16:24:07: %SYS-2-MALLOCFAIL: Memory allocation of 1692 bytes failed from 0x153AE4, alignment 0 
Pool: I/O  Free: 57212  Cause: Memory fragmentation 
Alternate Pool: None  Free: 0  Cause: No Alternate pool 
 -Process= "Pool Manager", ipl= 0, pid= 5

Continue reading

익스트림 스위치 공장 초기화 – 비밀번호 분실

익스트림 스위치 비밀번호 분실시 스위치 공장 초기화

* 사용장비: sumit x450e-24p

1. 콘솔케이블 연결하고, 전원을 넣고 를 누르고 기다린다. 그러면 BootStrap> 프롬프트가 보이는데, 이때 boot 를 입력한다.

* Summit X *
Version 1.0.5.7 Branch trunk by release-manager on Mon 03/05/12
Copyright 2003-2012, Extreme Networks, Inc.
Single Processor System Initializing...


Press and hold the <spacebar> to enter the bootstrap.


BootStrap > boot
Starting Default Bootloader ...

Continue reading

Nexus 7010 temperature alarm 발생 처리.

Nexus 7010 temperature alarm 발생 처리

Nexus 7010에서, 아래 로그가 지속적으로 발생.

xbar-4에서 한계온도 하한선인 섭시 95도를 초과했다는 메시지인데, 대략 한시간 간격으로 잠깐씩 발생했다. 아래 문서들을 본 결과, 공기 필터에 먼지가 많이 끼었기때문일 가능성이 가장 컸으며, 공기 필터를 청소하면 된다고 한다.

...
2021 Apr 14 07:18:35 Backbone_2-Main %PLATFORM-2-MOD_TEMPMINALRM: Xbar-4 reported minor temperature alarm. Sensor=3 Temperature=96 MinThreshold=95
2021 Apr 14 07:19:35 Backbone_2-Main %PLATFORM-2-MOD_TEMPOK: Xbar-4 recovered from minor temperature alarm. Sensor=3 Temperature=93 MinThreshold=9
5
2021 Apr 14 07:48:41 Backbone_2-Main %PLATFORM-2-MOD_TEMPMINALRM: Xbar-4 reported minor temperature alarm. Sensor=3 Temperature=96 MinThreshold=95
2021 Apr 14 07:49:41 Backbone_2-Main %PLATFORM-2-MOD_TEMPOK: Xbar-4 recovered from minor temperature alarm. Sensor=3 Temperature=91 MinThreshold=9
5
2021 Apr 14 08:18:47 Backbone_2-Main %PLATFORM-2-MOD_TEMPMINALRM: Xbar-4 reported minor temperature alarm. Sensor=3 Temperature=96 MinThreshold=95
2021 Apr 14 08:19:47 Backbone_2-Main %PLATFORM-2-MOD_TEMPOK: Xbar-4 recovered from minor temperature alarm. Sensor=3 Temperature=89 MinThreshold=9
5
2021 Apr 14 08:46:52 Backbone_2-Main %PLATFORM-2-MOD_TEMPMINALRM: Xbar-4 reported minor temperature alarm. Sensor=3 Temperature=96 MinThreshold=95
2021 Apr 14 08:47:52 Backbone_2-Main %PLATFORM-2-MOD_TEMPOK: Xbar-4 recovered from minor temperature alarm. Sensor=3 Temperature=89 MinThreshold=9
5
2021 Apr 14 09:20:58 Backbone_2-Main %PLATFORM-2-MOD_TEMPMINALRM: Xbar-4 reported minor temperature alarm. Sensor=3 Temperature=96 MinThreshold=95
2021 Apr 14 09:21:58 Backbone_2-Main %PLATFORM-2-MOD_TEMPOK: Xbar-4 recovered from minor temperature alarm. Sensor=3 Temperature=87 MinThreshold=9
5
2021 Apr 14 09:59:06 Backbone_2-Main %PLATFORM-2-MOD_TEMPMINALRM: Xbar-4 reported minor temperature alarm. Sensor=3 Temperature=96 MinThreshold=95
2021 Apr 14 10:00:06 Backbone_2-Main %PLATFORM-2-MOD_TEMPOK: Xbar-4 recovered from minor temperature alarm. Sensor=3 Temperature=86 MinThreshold=9
5
...

Continue reading

Ansible 네트워크 자동화 – 6

Ansible 네트워크 자동화 – 6

앤시블을 이용한 익스트림 스위치 점검하기

익스트림 스위치의 팬, 온도, 파워서플라이 점검을 위해 playbook 작성한다. 임의의 명령을 실행하기 위해서 exos_command 모듈을 사용한다.

만약, extreme 스위치 지원을 위한 모듈이 없으면, ansible-galaxy 명령으로 컬렉션을 설치한다.

$ ansible-galaxy collection install extreme.exos

플레이북을 아래처럼 작성했다.

---
- name: Extreme Switch Check Playbook
  connection: ansible.netcommon.network_cli
  gather_facts: false
  hosts: all

  tasks:
    - name: Check Extreme switches...
      exos_command:
        commands:
          - show fan
            #- show temp
            #- show power
      register: result

    - name: output
      debug:
        var: result.stdout_lines[0]

Continue reading

Ansible 네트워크 자동화 – 5

앤시블 네트워크 자동화 -5

ansible 네트워크 telnet 사용하기

오래된 네트워크 장비는 ssh를 지원하지 않을 수도 있다. 이런 경우에, telnet을 사용해야 하며, ansible.netcommon 컬렉션의 일부분인 플러그인을 사용하면 된다.

ansible-galaxy 명령으로 해당 컬렉션을 설치한다. 이미 설치되어 있으면 아래와 같은 메시지가 보인다.

$ ansible-galaxy collection install ansible.netcommon
Process install dependency map
Starting collection install process
Skipping 'ansible.netcommon' as it is already installed

참고문서(https://docs.ansible.com/ansible/latest/collections/ansible/netcommon/telnet_module.html)의 예제를 기본으로 플레이북을 작성하였으나, 작동하지 않는다.

---
- name: Telnet test....
  ansible.netcommon.telnet:
    user: cisco
    password: cisco
    login_prompt: 'Username: '
    prompts:
    - '[>#]'
    command:
    - terminal length 0
    - show version

Continue reading

Ansible 네트워크 자동화 – 4

앤시블 네트워크 자동화 – 4

앤시블 role

Role은 함께 작동하는 앤시블 기본값, 파일, 작업, 템플릿, 변수, 그리고 다른 앤시블 구성요소들의 집합이다. 첫번째 playbook과 명령에서 본것 처럼, 명령에서 플레이북으로 이동하면 여러 작업을 쉽게 실행하고 같은 작업을 같은 순서로 반복할 수 있다. 플레이북에서 Role로 이동하면 명령한 작업을 보다 쉽게 재사용하고 공유할 수 있다. 내 role과 다른사람의 role을 직접 또는 갖법적으로 사용할 수있는 Ansible Galaxy를 볼 수 있다.

role의 이해

role이 정확히 무엇이며 왜 관심가져야 하는가? 앤시블 role은 기본적으로 알려진 파일구조로 나뉜 플레이북이다. 플레이북에서 role로 이동하면 앤시블 작업흐름을 쉽게 공유하고 읽고 업데이트할 수 있다.
예를들면 DNS 플레이북을 스스로 성할 필요가 없다. 대신 DNS서버와 role을 지정하여 구성하면된다.

DNS플레이북 예제.

role의 개념을 알기 위해 아래의 playbook.yml 파일은 두개의 작업을 가지는 하나의 yml 파일이다.
이 앤시블 플레이북은 시스코 IOS 장비의 호스트네임을 설정한 후 DNS 서버를 설정한다.

Continue reading

Ansible 네트워크 자동화 – 3

Ansible 네트워크 자동화 -3

앤시블 인벤토리(Inventory) 만들기

 

인벤토리 없이 플레이북을 실행하려면 명령어에 여러 플래그들이 필요하다. 또한 하나의 장비에 대해 플레이북을 실행하는 것은 같은 작업을 수동으로 하는 것과 비교하여 크게 효율적이지도 않다.
ansible_network_os 와 ssh 사용자같은 정보를 가지는 managed node를 구성하기위해 인벤토리 파일을 사용한다. 모든 기능을 가지는 인벤토리 파일은 네트워크의 진짜 소스로 쓰일 수 있다.
인벤토리 파일을 사용하여 한 플레이북에서 단일 명령으로 수백개의 네트워크 장비를 유지할 수 있다.

기본 인벤토리

먼저, 인벤토리를 논리적으로 그룹화한다. 우수 사례는 용도(어플리케이션, 스택이나 마이크로서비스), 장소(데이터센터나 지역), 시점(개발 단계)별로 서버와 네트워크 장비를 그룹화 하는 것이다.

그룹 이름에 공백, -, 숫자를 사용하면 안된다. 그룹이름은 대소문자를 구별한다.

아래 간단한 datacenter 예제는 기본 그룹 구조를 보여준다. 그룹은 [metagroupname:children] 문법을 사용하고 메타그룹의 멤버로 그룹을 나열한다. network 그룹은 모든 leap와 spine을 v포함한다. datacenter 그룹은 모든 네트워크장비와 모든 웹서버를 추가한다.

Continue reading