시스코 기기의 설정 변경을 Bot에 통지시켰을 때의 메모

소개



지난번 과 같이 EEM과 On-Box Python을 조합해 설정 변경을 API 경유로 Webex Teams Bot에 통지해 보았습니다.

절차는 다음을 참고로 변경 부분을 메모로 남깁니다.
POC: Catalyst 9000 Sandbox integration with Spark.

1) 준비한 환경



AWS Marketplace의 CSR1000V를 사용했습니다.
Cisco Cloud Services Router (CSR) 1000V - AX Pkg. Max Performance

30일은 Free Trial 기간이므로 CSR 소프트웨어 비용이 들지 않습니다.
단, EC2 이용료는 부과됩니다.
버지니아 지역의 EC2(t2.medium)의 경우 0.046달러/시간이었습니다.

EC2 시작 후 보안 그룹에서 SSH를 허용하고 SSH 로그인합니다.

2) Webex Teams Bot 만들기



Cisco Webex for Developers에 로그인하고 Start Building Apps > Create a New App > Create a Bot에서 Bot을 만듭니다.
자세한 절차는 2)와 같습니다.

3) 게스트 쉘 설정



자세한 절차는 3)와 같습니다.
그러나 AWS의 경우 DNS 서버의 구성 변경은 필요하지 않습니다.

4) Python 스크립트 작성 및 Bot 테스트



기본적으로 4) 과 같습니다만, 대상 호스트명과 변경 내용을 Bot에 표시시키는 코드를 추가하고 있습니다.
구체적으로는 get_hostname 메소드로 호스트명을 취득해, diffios 모듈로 Startup Config와 Running Config의 차이를 추출하고 있습니다.
별도 ignore.txt 를 작성해, 무시해도 상관없는 차이를 정의하고 있습니다.

myscript.py
from ciscosparkapi import CiscoSparkAPI
from cli import cli
import diffios


def get_hostname():
    sh_run_host = cli('show run | include hostname')
    host_strip = sh_run_host.strip()
    hostname = host_strip.lstrip('hostname ')
    return hostname


if __name__=='__main__':
    # Get hostname of device
    hostname = get_hostname()

    # Get diffs of startup-config and running-config
    with open('sh_start.log', 'w') as f1:
        sh_start = cli('show startup-config')
        f1.write(sh_start)

    with open('sh_run.log', 'w') as f2:
        sh_run = cli('show running-config')
        f2.write(sh_run)

    baseline = 'sh_start.log'
    comparison = 'sh_run.log'
    ignore = 'ignore.txt'

    diff = diffios.Compare(baseline, comparison, ignore)
    print diff.delta()

    # Use ArgParse to retrieve command line parameters.
    from argparse import ArgumentParser

    parser = ArgumentParser("Spark Check In")

    # Retrieve the Spark Token and Destination Email
    parser.add_argument(
        "-t", "--token", help="Spark Authentication Token", required=True
    )

    # Retrieve the Spark Token and Destination Email
    parser.add_argument(
        "-e", "--email", help="Email to Send to", required=True
    )
    args = parser.parse_args()
    token = args.token
    email = args.email
    message = "**Alert:** Config Changed  \n**Hostname:** " + hostname + "  \n```\n" + diff.delta() + "\n```"
    api = CiscoSparkAPI(access_token=token)
    api.messages.create(toPersonEmail=email, markdown=message)

ignore.txt
^Using
Building configuration
Current configuration
crypto pki certificate
^end$

5) NW 기기측의 EEM 설정



5) 과 같습니다. 액세스 토큰과 이메일 주소는 준비한 주소로 다시 작성합니다.

변경 부분을 Bot으로 표시시키기 위해, 일단 설정 저장 후, 이하의 설정 변경을 실시했습니다.
conf t
ip domain lookup
ip access-list extended Test
 permit ip host 10.10.10.1 host 10.10.10.2

Webex Teams에 로그인하여 Bot의 알림을 확인합니다.
대상의 호스트명, 변경 개소가 표시되었습니다!

좋은 웹페이지 즐겨찾기