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]