Skip to content

Commit

Permalink
151673570 correct upgradekvm command
Browse files Browse the repository at this point in the history
Read entries in kvm 'microgateway'.
For each of below entries call 'Update an entry in an environment-scoped KVM' if already present and
call 'Create an entry in an environment-scoped KVM' if not present.

Private_key_kid
Public_key1
Public_key1_kid

Make all 3 calls in parallel and print success message after all are finished.
Show error message if any of the calls fails.
  • Loading branch information
gaonkar18y authored and keyurkarnik committed Apr 15, 2020
1 parent d7d88a8 commit 6bbd8f5
Showing 1 changed file with 140 additions and 37 deletions.
177 changes: 140 additions & 37 deletions cli/lib/upgrade-kvm.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

const pem = require("pem");
const util = require("util");
//const debug = require("debug")("jwkrotatekey");
const debug = require("debug")("upgradekvm");
const request = require("request");
const async = require('async');

const writeConsoleLog = require('microgateway-core').Logging.writeConsoleLog;

const CONSOLE_LOG_TAG_COMP = 'microgateway upgrade kvm';
Expand All @@ -21,6 +23,140 @@ function generateCredentialsObject(options) {
}
}


function updateKvmEntries(options, entries, publicKey) {

var updatekvmuri = util.format("%s/v1/organizations/%s/environments/%s/keyvaluemaps/%s/entries",
options.baseuri, options.org, options.env, options.kvm);

async.parallel([
function(cb) {

let payload = {
"name": "private_key_kid",
"value": options.kid
}
let uri = entries.findIndex( item => item.name === payload.name) !== -1 ? updatekvmuri + '/'+ payload.name : updatekvmuri;
request({
uri: uri,
auth: generateCredentialsObject(options),
method: "POST",
json: payload
}, function(err, res , body ) {
if (err) {
if ( cb ) { cb(err) } else process.exit(1);
return;
} if (res.statusCode !== 200 && res.statusCode !== 201) {
cb(new Error('Error updating KVM private_key_kid: '+ res.statusCode ))
} else {
cb(null, body)
}
});

},
function(cb) {
let payload = {
"name": "public_key1",
"value": publicKey.publicKey
}
let uri = entries.findIndex( item => item.name === payload.name) !== -1 ? updatekvmuri + '/'+ payload.name : updatekvmuri;
request({
uri: uri,
auth: generateCredentialsObject(options),
method: "POST",
json: payload
}, function(err, res , body ) {
if (err) {
if ( cb ) { cb(err) } else process.exit(1);
return;
} if (res.statusCode !== 200 && res.statusCode !== 201) {
cb(new Error('Error updating KVM public_key1: '+ res.statusCode ))
} else {
cb(null, body)
}
});
},
function(cb) {
let payload = {
"name": "public_key1_kid",
"value": options.kid
}
let uri = entries.findIndex( item => item.name === payload.name) !== -1 ? updatekvmuri + '/'+ payload.name : updatekvmuri;
request({
uri: uri,
auth: generateCredentialsObject(options),
method: "POST",
json: payload
}, function(err, res , body ) {
if (err) {
if ( cb ) { cb(err) } else process.exit(1);
return;
} if (res.statusCode !== 200 && res.statusCode !== 201) {
cb(new Error('Error updating KVM public_key1_kid: '+ res.statusCode ))
} else {
cb(null, body)
}
});
}
], function(err, results) {
debug('error %s, private_key_kid %j, public_key1 %j, public_key1_kid %j', err,
results[0], results[1], results[2]);

if ( err ) {
writeConsoleLog('log',{component: CONSOLE_LOG_TAG_COMP},"error upgrading KVM: "+ err);
process.exit(1);
}
else {
writeConsoleLog('log',{component: CONSOLE_LOG_TAG_COMP},"KVM update complete");
process.exit(0);
}

});
}

function readKvmEntries(options, publicKey) {

var getkvmuri = util.format("%s/v1/organizations/%s/environments/%s/keyvaluemaps/%s",
options.baseuri, options.org, options.env, options.kvm);


writeConsoleLog('log',{component: CONSOLE_LOG_TAG_COMP},"Reading kvm entries from %s ", getkvmuri);
request({
uri: getkvmuri,
auth: generateCredentialsObject(options),
method: "GET"
}, function(err, res, body) {
if (err) {
writeConsoleLog('error',{component: CONSOLE_LOG_TAG_COMP},err);
} else {
if ( res.statusCode === 200 ) {
try {
body = JSON.parse(body);
if ( body && Array.isArray(body.entry) ) {
updateKvmEntries(options, body.entry, publicKey);
} else {
writeConsoleLog('error',{component: CONSOLE_LOG_TAG_COMP}, 'Cannot continue with unexpected data', body);
process.exit(1);
}
} catch (err) {
writeConsoleLog('error',{component: CONSOLE_LOG_TAG_COMP}, 'Error in parsing data: %s, err: %s', body, err.message);
process.exit(1);
}

} else if ( res.statusCode === 404 ) {
writeConsoleLog('error',{component: CONSOLE_LOG_TAG_COMP}, 'KVM does not exist, Please run configure command');
process.exit(1);
} else {
writeConsoleLog('error',{component: CONSOLE_LOG_TAG_COMP}, 'Failed to read KVM values, statusCode: %d', res.statusCode);
process.exit(1);
}
}
}
);

}


const UpgradeKVM = function () {

}
Expand Down Expand Up @@ -50,42 +186,9 @@ UpgradeKVM.prototype.upgradekvm = function upgradekvm(options, cb) {
writeConsoleLog('log',{component: CONSOLE_LOG_TAG_COMP},"Certificate found!");
pem.getPublicKey(body, function(err, publicKey) {
writeConsoleLog('log',{component: CONSOLE_LOG_TAG_COMP},publicKey.publicKey);
var updatekvmuri = util.format("%s/v1/organizations/%s/environments/%s/keyvaluemaps/%s",
options.baseuri, options.org, options.env, options.kvm);
var payload = {
"name": options.kvm,
"encrypted": "true",
"entry": [
{
"name": "private_key_kid",
"value": options.kid
},
{
"name": "public_key1",
"value": publicKey.publicKey
},
{
"name": "public_key1_kid",
"value": options.kid
}
]
};
request({
uri: updatekvmuri,
auth: generateCredentialsObject(options),
method: "PUT",
json: payload
}, function(err, res /*, body */) {
if (err) {
if ( cb ) { cb(err) } else process.exit(1);
return;
} if (res.statusCode !== 200) {
writeConsoleLog('log',{component: CONSOLE_LOG_TAG_COMP},"error upgrading KVM: "+ res.statusCode);
} else {
writeConsoleLog('log',{component: CONSOLE_LOG_TAG_COMP},"KVM update complete");
process.exit(0);
}
});

readKvmEntries(options, publicKey);

});
}
}
Expand Down

0 comments on commit 6bbd8f5

Please sign in to comment.