Skip to content

Instantly share code, notes, and snippets.

@Code-Hex
Last active August 11, 2022 01:02
Show Gist options
  • Save Code-Hex/b653ac81786e7117a63b2f13f1f11035 to your computer and use it in GitHub Desktop.
Save Code-Hex/b653ac81786e7117a63b2f13f1f11035 to your computer and use it in GitHub Desktop.
Get GCP IAM Roles
const cheerio = require('cheerio');
const fetch = require('node-fetch');
const fs = require('fs');
// roles["roles/accesscontextmanager.policyAdmin"]["en"]
const roles = {};
async function makePredefinedRoles(locale) {
const response = await fetch(
`https://cloud.google.com/iam/docs/understanding-roles?hl=${locale}`
);
const html = await response.text();
const $ = await cheerio.load(html);
if (locale === 'en') {
$('div', '#predefined-roles').each((_, div) => {
$(div)
.find('tr')
.each((_, tr) => {
const role = $(tr).find('td')[0];
const roleName = $(role).find('.role-name').text().trim();
if (roleName === '') return;
const permission = $(tr).find('td')[1];
const permissions = [];
$(permission)
.find('li')
.each((_, v) => permissions.push($(v).text()));
roles[roleName] = { permissions };
});
});
}
$('div', '#predefined-roles').each((_, div) => {
$(div)
.find('tr')
.each((_, tr) => {
const role = $(tr).find('td')[0];
const roleName = $(role).find('.role-name').text().trim();
if (roleName === '') return;
roles[roleName][locale] = {
roleTitle: $(role).find('.role-title').text().trim(),
roleName: roleName,
roleDescription: $(role).find('.role-description').text().trim(),
};
});
});
}
async function main() {
await makePredefinedRoles('en');
await makePredefinedRoles('ja');
const jsonRoles = JSON.stringify(roles);
fs.writeFile('roles.json', jsonRoles, (err) => console.error('error: ', err));
}
(async function () {
await main();
})();
$ node scripts/gcp-roles.js
This file has been truncated, but you can view the full file.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment