pusuke0418’s diary

異常にマルチタスクな社内SEのブログ

Arubaの無線コントローラのconfigファイルを見やすく。。

Aruba Networks社の無線コントローラのconfigファイルは見辛い。なぜ見辛いかというと、設定は多段の階層構造になっているけどconfig中の記載順序はその階層構造とは逆で(configファイルをコントローラが読み込む順なのだろうか)、さらにデフォルトのconfigも大量に入っているから。テキストエディタの検索とかでも辛い。

直接コントローラにアクセスできれば、実はWeb管理画面にアクセスするのが、configファイルに映らないデフォルト設定値も確認できるし、ap-groupあたりからたどれば階層的に確認していけるから便利だと思う。

でも、それができない場合も多く、それがベストでない場合もあって、結局テキストのconfigを読まなければいけないときが多く、イライラを減らすためにCode Academyで学びたてのpythonスクリプト書いてみました。

目的は、見たいところが確認できること。使い方は、

  • 下記のpythonスクリプトとconfigファイルを同じ場所において、対話的にできるようにスクリプト実行する
  • そして、confsplit("<configファイル名>")とすると、configが"!"でばらばらにされて、aaaの設定、とかスクリプト中指定してあるパーツごとにわけられる(ディクショナリに入れてる)

ここまで準備。そして、

  • そこから、list(aaa)とかlist(role)と打つと、aaa profileやuser-roleのconfigにあるプロファイル名が出る
  • profs()を使って、profs(aaa)とか、profs(role)とか打つと、aaa profileやuser-roleの設定してあるconfigがだらだらと出る
  • prof_part()を使って、prof_part(aaa, "<プロファイル名>")とすると、aaaのプロファイル名で指定したものだけが確認できる。

今回利用できるのは、Aruba上のap-group, virtual-ap, ssid-profile, aaa-profile, user-role, ip access-list session, server-group, authentication-serverで、スクリプト上で指定するときはそれぞれapgroup, vap, ssid, aaa, role, acl, servergroup, authserverとしています(紛らわしいけど)

やりたかったことは、profs(apgroup)からじゅんぐりに使われている設定を見ていく感じ

import os, re

apgroup = {}
ssid = {}
vap = {}
aaa = {}
role = {}
acl = {}
servergroup = {}
authserver = {}

def confsplit(config):
    f = open(config, "r")
    spltd = (f.read()).split("!\n")
    f.close()

    for j in spltd:
        j = j.replace("\"", "")
        if "ip access-list session" in j:
            matched = re.search(r"session\s(.*)\n", j)
            acl[matched.group(1)] = j
            
        elif "user-role" in j:
            matched = re.search(r"user-role\s(.*)\n", j)
            role[matched.group(1)] = j
            
        elif "aaa profile" in j:
            matched = re.search(r"aaa\sprofile\s(.*)\n", j)
            aaa[matched.group(1)] = j
            
        elif "wlan ssid-profile" in j:
            matched = re.search(r"wlan\sssid-profile\s(.*)\n", j)
            ssid[matched.group(1)] = j
            
        elif "wlan virtual-ap" in j:
            matched = re.search(r"wlan\svirtual-ap\s(.*)\n", j)
            vap[matched.group(1)] = j
            
        elif "ap-group" in j:
            matched = re.search(r"ap-group\s(.*)\n", j)
            apgroup[matched.group(1)] = j

        elif "aaa server-group" in j:
            matched = re.search(r"server-group\s(.*)\n", j)
            servergroup[matched.group(1)] = j

        elif "authentication-server radius" in j:
            matched = re.search(r"radius\s(.*)\n", j)
            authserver[matched.group(1)] = j

def profs(part):
    for i in part:
        print part[i]

def prof_part(prof,obj):
    print prof[obj]