Skip to content

Instantly share code, notes, and snippets.

@dexterlabora
Created April 20, 2018 08:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dexterlabora/683fa52b664fd27baadf298a4b051840 to your computer and use it in GitHub Desktop.
Save dexterlabora/683fa52b664fd27baadf298a4b051840 to your computer and use it in GitHub Desktop.
List Meraki Group Policies for all Organizations and their Networks. Uses Axios and async/await. Good pattern for traversing Meraki Dashboard API.
/* Meraki Group Policy Tool
Traverse the Meraki Dashboard API to display IDs for Organizations, Networks and Group Policies
npm install axios json-bigint --save
Run:
$ API_KEY=2f30UseYourOwnAPIkEyd170f node listGroupPolicies-allOrgs.js
Basic Flow using async/await
- get orgs
- for each org, get network
- for each network, get policy
*/
const axios = require("axios");
var JSONbig = require('json-bigint')({"storeAsString": true});
var apiKey = process.env.API_KEY || ''; // config env params
var baseUrl = 'https://api.meraki.com/api/v0';
const meraki = axios.create({
baseURL: baseUrl,
headers: { 'X-Cisco-Meraki-API-Key': apiKey }
});
const summary = async () => {
console.log("Running Meraki Network Summary Tool...");
try {
// GET Organizations (extra helper for orgs being accidentally parsed as Ints)
let orgs = await meraki.get('/organizations', { transformResponse: [data => data]}).then((res) => {return res.data});
orgs = JSONbig.parse(orgs);
//console.log("Organizations: ", orgs);
// GET Networks for each Organization
for (let o of orgs){
try {
let nets = [] = await meraki.get('/organizations/'+o.id+'/networks').then((res) => {return res.data});
//console.log("Networks:", nets);
console.log("\n-- Organization -- \n Name: "+o.name +"\n ID: "+o.id);
// GET Group Polices for each Network
for (let n of nets) {
try {
let policies = [] = await meraki.get('/networks/'+n.id+'/groupPolicies').then((res) => {return res.data});
//console.log("Policies:", policies);
console.log("\n-- Network -- \n Name: "+n.name +"\n ID: "+n.id);
console.log("\n Group Policies");
if(policies.length < 1) { console.log(" None")}
for (let p of policies){
console.log("\n Name: "+p.name +"\n ID: "+p.groupPolicyId);
}
}catch (e) {
console.log("error in nets: ", e.response.data.errors[0]);
}
}
} catch (e) {
console.log("error in orgs: ", e.response.data.errors[0]);
}
}
console.log("\n \n Done! \n");
} catch (e) {
console.log("error in summary: ", e);
}
}
summary();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment