akamai-nginx
Version:
generate nginx config from akamai property
207 lines (170 loc) • 9.78 kB
JavaScript
;
require('babel-polyfill');
var _edgegrid = require('edgegrid');
var _edgegrid2 = _interopRequireDefault(_edgegrid);
var _dotenv = require('dotenv');
var _dotenv2 = _interopRequireDefault(_dotenv);
var _inquirer = require('inquirer');
var _inquirer2 = _interopRequireDefault(_inquirer);
var _formatJson = require('format-json');
var _formatJson2 = _interopRequireDefault(_formatJson);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
var papiChoice = function () {
var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(message, papiUrl, containerField, valueField, nameField) {
var choices;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return callPapi(containerField, papiUrl).then(function (data) {
return data[containerField].items.map(function (item) {
var choice = {};
choice.name = item[valueField] + ' ' + item[nameField];
choice.value = item[valueField];
return choice;
});
});
case 2:
choices = _context.sent;
_context.next = 5;
return _inquirer2.default.prompt([{
type: 'list',
name: valueField,
message: message,
paginated: true,
choices: choices
}]).then(function (answers) {
console.log('selected ' + valueField + ' = ' + answers[valueField]);
return answers[valueField];
});
case 5:
return _context.abrupt('return', _context.sent);
case 6:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
return function papiChoice(_x, _x2, _x3, _x4, _x5) {
return _ref2.apply(this, arguments);
};
}();
var callPapi = function () {
var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(type, papiUrl) {
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
return _context2.abrupt('return', new Promise(function (resolve, reject) {
console.log('calling papi url: ' + papiUrl + '\n');
edgegrid.auth({
path: papiUrl,
method: 'GET'
}).send(function (error, response, body) {
if (error) {
return reject(error);
}
var jsonResult = JSON.parse(body);
papiResponses.set(type, jsonResult);
return resolve(jsonResult);
});
}));
case 1:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
return function callPapi(_x6, _x7) {
return _ref3.apply(this, arguments);
};
}();
var papiResponses, edgegrid, contractId, groupId, propertyId, latestVersion, version, propertyJson, propertyName;
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
// load .env vars
_dotenv2.default.config();
papiResponses = new Map();
edgegrid = new _edgegrid2.default({
path: process.env.AKA_EDGERC,
section: 'default'
});
_context3.next = 5;
return papiChoice('Select Akamai contract:', '/papi/v1/contracts', 'contracts', 'contractId', 'contractTypeName');
case 5:
contractId = _context3.sent;
_context3.next = 8;
return papiChoice('Select Akamai property group:', '/papi/v1/groups/?contractId=' + contractId, 'groups', 'groupId', 'groupName');
case 8:
groupId = _context3.sent;
_context3.next = 11;
return papiChoice('Select Akamai property:', '/papi/v1/properties/?contractId=' + contractId + '&groupId=' + groupId, 'properties', 'propertyId', 'propertyName');
case 11:
propertyId = _context3.sent;
latestVersion = papiResponses.get('properties').properties.items.filter(function (property) {
return property.propertyId === propertyId;
})[0].latestVersion;
// request property version
_context3.next = 15;
return _inquirer2.default.prompt([{
type: 'input',
name: 'version',
message: 'The latest property verions is ' + latestVersion + ', which would you like?',
default: latestVersion,
validate: function validate(version) {
if (parseInt(version) > 0 && parseInt(version) <= latestVersion) {
return true;
} else {
return 'Please enter a valid version number.';
}
}
}]).then(function (answers) {
console.log('selected version = ' + answers.version);
return answers.version;
});
case 15:
version = _context3.sent;
_context3.next = 18;
return callPapi('property', '/papi/v1/properties/' + propertyId + '/versions/' + version + '/rules?contractId=' + contractId + '&groupId=' + groupId).then(function (data) {
return data;
});
case 18:
propertyJson = _context3.sent;
propertyName = papiResponses.get('properties').properties.items.filter(function (property) {
return property.propertyId === propertyId;
})[0].propertyName;
_context3.next = 22;
return _inquirer2.default.prompt([{
type: 'confirm',
name: 'outputToFile',
message: 'Output property ' + propertyName + ' v' + version + ' json to file now?',
default: true
}]).then(function (answers) {
console.log('selected outputToFile = ' + answers.outputToFile);
if (answers.outputToFile) {
var outputDir = __dirname + '/../papiJson';
if (!_fs2.default.existsSync(outputDir)) {
_fs2.default.mkdirSync(outputDir);
}
_fs2.default.writeFileSync(outputDir + '/' + propertyName + '-v' + version + '.papi.json', _formatJson2.default.plain(propertyJson), 'utf8');
console.log('\npapi json written to: ./papiJson/' + propertyName + '-v' + version + '.papi.json');
}
});
case 22:
console.log('\n# ---------------------------------------------------------\n' + '# place the following in .env or set as shell/node env vars\n' + '# if you would like to use these parameters to configure nginx directly\n' + '# from api calls - otherwise point at the generated papi json.\n' + '# refer to start.js and start-local.js\n' + 'AKA_CONTRACT_ID=' + contractId + '\n' + 'AKA_GROUP_ID=' + groupId + '\n' + 'AKA_PROPERTY_ID=' + propertyId + '\n' + 'AKA_PROPERTY_VERSION=' + version + '\n');
case 23:
case 'end':
return _context3.stop();
}
}
}, _callee3, this);
}))();