このエントリーはMerakiでのREST APIの概要と、REST APIを使ってMerakiから情報を取得するところまで。
製品概要
Merakiは他の製品と大きく異なるので、簡単に紹介。
Merakiの主力製品はCiscoと同じくネットワーク機器。Cisco製品との住み分けは下のイメージ(あくまで主観)
Ciscoは基本的には大きめの企業向け。SDNに対しては大企業が社内の統合環境を構築するのを推進している。レガシーな機能のみでももちろん使える。
Merakiの狙いは企業規模というよりは構築形態が分散型のネットワーク向け。SDN的な要素を使うためのハードルがCiscoに比べてとても低い。Ciscoが厳格な管理のもとで統合環境を適用するのに対して、Merakiはそこが抽象化されているので緩やか。
API概要
MerakiはSaaSで管理を提供しているので、それぞれの機器ではなく管理サービスがAPIを提供している。
API参照資料は以下の通り
Dashboard API: https://dashboard.meraki.com/api_docs
ラボ環境
Ciscoのオンラインラボ環境を使う。
CiscoDevNetにアクセスし、Merakiラボを選択
アクセスできるネットワークがいくつかあるが、今回はTokyo-Japanを選択
ここからは通常Merakiを管理するダッシュボードで操作ができる。
APIを使ってみる
Dashboard APIを使うには事前にAPIキーをダッシュボードから取得する。
Tokyoという名前がついたネットワークにある機器一覧を取得する。
import requests from collections import defaultdict from pprint import pprint # user specified variables apikey = "************" place = "Tokyo" # static variable headers = { "X-Cisco-Meraki-API-Key": apikey, } baseurl = "https://dashboard.meraki.com/api/v0/" # Retrieve organization list which I'm belonging to url = baseurl + 'organizations' my_orgs = requests.get(url, headers=headers).json() # Set organization which I'm going to poll my_orgid = my_orgs[0]['id'] # Retrieve network list which is defined in this organization url = baseurl + 'organizations/' + str(my_orgid) + "/networks" my_networks = requests.get(url, headers=headers).json() # Set network which I'm going to poll for network in my_networks: if 'Japan' in network['name']: network_id = network['id'] # get devices in the network url = baseurl + 'networks/' + str(network_id) + '/devices' my_devices = requests.get(url, headers=headers).json() # list numbers of respective device models devices_dict = defaultdict(int) for device in my_devices: devices_dict[device["model"]] += 1 pprint(devices_dict)
これを実行するとこんな感じで情報が返ってくる
defaultdict(<class 'int'>, {'MC74': 1, 'MR30H': 1, 'MR53': 1, 'MR84': 1, 'MS220-8P': 1, 'MX65': 1})
以上