らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Cisco ACI のイベントをリアルタイムで検知する Python サンプルスクリプト

以前に Cisco ACI のイベントをリアルタイムで検知する Node.js サンプルスクリプト というメモを書きました。 このメモの Python バージョンを作ったので、改めてメモしておきます。

acitoolkit のインストール

acitoolkit に依存している為、先にインストールしておきます。

pip install acitoolkit

credentials.py

credentials.pyAPIC へのログイン情報を保存しておきます。

URL="https://10.0.0.1"
LOGIN="admin"
PASSWORD="password"

main.py

以下がスクリプトの本体です。 /api/node/class/eventRecord.json?subscription=yeseventRecord.json を Subscribe します。

import sys
import json
import time

from acitoolkit.acitoolkit import Session, Credentials, Tenant
import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()

def do_something(event_data):
    for obj in event_data['imdata']:
        for key in obj:
            if "Rs" not in key and key not in not_interesting_classes:
                print("%s:%s was %s" % (key, obj[key]['attributes']['dn'], obj[key]['attributes']['status'])  )

if __name__ == "__main__":
    description = 'APIC credentials'
    creds = Credentials('apic', description)
    creds.add_argument('-d', "--debug", default=None, help='Enable Debug mode')
    args = creds.get()

    # Now, we log into the APIC
    session = Session(args.url, args.login, args.password)
    response = session.login()
    if response.ok is False:
        print(response.content)
    else:
        print("Successfully connected to %s" % args.url)

    # Subscribe to each one
    url = "/api/node/class/eventRecord.json?subscription=yes"
    session.subscribe(url, only_new=True)

    print("Waiting for events...")
    while(True):
        if session.has_events(url):
            event = session.get_event(url)
            print(event)
        time.sleep(0.1)

    sys.exit(0)