modi-cli
Version:
Console application for provisioning, displaying or destroying virtual machines in MODI
373 lines (248 loc) • 11.1 kB
JavaScript
//check NodeJS version. If higher than 0.10.35 then abort with message
var nodeVersion = process.versions.node;
console.log(nodeVersion);
//try {
// if (nodeVersion != '') {
// var versionTags = nodeVersion.split('.');
// if (
// (parseInt(versionTags[0]) > 0)
// ||
// (parseInt(versionTags[1]) > 10)
// ) {
// console.log('The installed NodeJS framework version is ' + nodeVersion + ' which is higher than the 0.10.35 (recommended). Please consider using the 0.10.35 NodeJs version. You can download and install it from here http://blog.nodejs.org/2014/12/23/node-v0-10-35-stable/');
// process.exit(0);
// }
// }
//} catch (e) {
//}
var definitions = require('./Lib/Define.js');
var pjson = require('./package.json');
//refer the actual calling MODI functions
var ProvisioningRequest = require('./ProvisioningRequest.js');
var BluePrintsRequest = require('./BluePrintsRequest.js');
var DestroyRequest = require('./DestroyRequest');
var StatusRequest = require('./StatusRequest');
var DisplayPropertiesRequest = require('./DisplayPropertiesRequest.js');
var endProcess = require('./Lib/EndProcess.js');
var Help = require('./Lib/Help.js');
var Login = require('./Login.js');
var _help = new Help();
var ArgumentValidation = require('./Lib/ArgumentValidation.js');
var ArgumentValidationMachineName = require('./Lib/ArgumentValidationMachineName.js');
//end of internal refering
//external refering
var readline = require('readline');
var js2xmlparser = require('js2xmlparser');
var minimistObject = require('minimist');
var validator = require('validator');
//end of external refering
var args = minimistObject(process.argv.slice(2), {
default:
{
n: null,
b: null,
loc: null,
'ppu-le': null,
'ppu-bu': null,
'ppu-dept': null,
'ppu-project': null,
'ppu-contact-name': null,
'ppu-contact': null,
//had to move this in ArgumentValidation.js due to the possible 'pairing' , l and lease-days, m and monitoring for ex.
//l: 1,
//c: 1,
//g: 2,
//m: true,
//a: true,
//'contains-pii' : false,
'contains-ip': ['None', 'Secret', 'Confidential', 'InternalUse', 'Public'],
'ppu-interco' : '000',
'ppu-local-account': '000000',
'ppu-future': '000000',
}
});
var operationName = eval(args._)[0];
if (
(operationName + '' == 'undefined' && args.help)
||
(operationName == 'help')
)
operationName = 'DisplayHelp';
var isValid = true;
switch (operationName) {
case definitions.Version:
console.log('Modi-Cli version: ' + pjson.version);
break;
case definitions.ProvisionVerb:
console.log('Modi-Cli version: ' + pjson.version);
isValid = ArgumentValidation(args);
if (!isValid) {
_help.ProvisionHelp();
process.exit(0);
//rl_interface.question('',
// function() {
// //console.log('\nExiting...');
// process.exit(0);
// }
//);
}
break;
case definitions.DestroyVmVerb:
case definitions.DisplayVmPropertiesVerb:
case definitions.StatusVerb:
console.log('Modi-Cli version: ' + pjson.version);
isValid = ArgumentValidationMachineName(args);
if (!isValid) {
console.log('\n');
_help.MachineNameHelp();
process.exit(0);
//rl_interface.question('',
// function () {
// //console.log('\nExiting...');
// process.exit(0);
//}
//);
}
break;
case definitions.CredentialsVerb:
console.log('Modi-Cli version: ' + pjson.version);
break;
case definitions.BlueprintsVerb:
//nothing to validate
console.log('Modi-Cli version: ' + pjson.version);
break;
case definitions.DisplayHelp:
console.log('Modi-Cli version: ' + pjson.version);
isValid = false;
_help.HelpCommands(operationName);
break;
default:
console.log('Modi-Cli version: ' + pjson.version);
isValid = false;
console.log('\n' + operationName + ' is not a valid operation. See below the list of valid operations:\n');
_help.HelpCommands(operationName);
}
if (!isValid) {
process.exit(0);
//rl_interface.question('',
// function () {
// //console.log('\nExiting...');
// process.exit(0);
//}
//);
}
var _machineName = args.n || args.machineName;
//remove the dots in the machine name
if (validator.isFQDN(_machineName)) {
_machineName = _machineName.substring(0, _machineName.indexOf('.'));
}
//authenticate the user
//eliminate the error UNABLE_TO_VERIFY_LEAF_SIGNATURE when calling the https site
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
//StartProcessing
{
var loginData = null;
switch (operationName) {
case definitions.CredentialsVerb:
Login.login();
break;
case definitions.ProvisionVerb:
var _blueprintName = args.b || args.blueprint;
var _description = args.d || args.description;
var _location = args.loc;
var _cpuCount = args.c || eval(args)['args.num-cpu'];
var _memoryGB = args.g || args.memory;
var _containsIp = eval(args)['contains-ip'] || args.i;
var _containsPii = eval(args)['contains-pii'] || args.p;
var _monitoring = args.m || args.monitoring;
var _alerting = args.a || args.alerting;
var _leaseDays = args.l || eval(args)['lease-days'];
var _ppuContact = eval(args)['ppu-contact'];
var _ppuInterCo = eval(args)['ppu-interco'];
var _ppule = eval(args)['ppu-le'];
var _ppubu = eval(args)['ppu-bu'];
var _ppudept = eval(args)['ppu-dept'];
var _ppulocalaccount = eval(args)['ppu-local-account'];
var _ppuproject = eval(args)['ppu-project'];
var _ppufuture = eval(args)['ppu-future'];
var _ppuContactname = eval(args)['ppu-contact-name'];
var _VirtualMachineNetwork0Name = args.VirtualMachineNetwork0Name;
//TODO treat the unwanted options
var jsonProviosiningRequest =
{
Alerting: _alerting,
BlueprintId: null,
BlueprintName: _blueprintName,
ContactEmail: _ppuContact,
ContactName: _ppuContactname,
ContainsPii: _containsPii,
CpuNumber: _cpuCount,
Description: _description,
IntellectualProperty: 'None',
LeaseDurationDays: _leaseDays,
MachineName: _machineName,
Memory: _memoryGB,
Monitoring: _monitoring,
PayPerUseBU: _ppubu,
PayPerUseDept: _ppudept,
PayPerUseFuture: _ppufuture,
PayPerUseInterCo: _ppuInterCo,
PayPerUseLE: _ppule,
PayPerUseLocalAccount: _ppulocalaccount,
PayPerUseProject: _ppuproject,
TotalToProvision: 1,
VirtualMachineNetwork0Name: _VirtualMachineNetwork0Name
};
//prepare the XML to post the machine request
var provisioningRequestXml = js2xmlparser('ProvisioningRequest', jsonProviosiningRequest);
provisioningRequestXml = provisioningRequestXml.replace('<ProvisioningRequest>', definitions.schemaReplacement);
//end prepare for the XML
loginData = Login.loadExistingLogin();
if (loginData == null) {
loginData = Login.login(ProvisioningRequest, provisioningRequestXml, _machineName, true);
}
else {
ProvisioningRequest(loginData.UserName, loginData.Password, loginData.UserDomain, provisioningRequestXml, _machineName, false);
}
break;
case definitions.BlueprintsVerb:
loginData = Login.loadExistingLogin();
if (loginData == null) {
loginData = Login.login(BluePrintsRequest, true);
}
else {
BluePrintsRequest(loginData.UserName, loginData.Password, loginData.UserDomain, false);
}
break;
case definitions.DestroyVmVerb:
loginData = Login.loadExistingLogin();
if (loginData == null) {
loginData = Login.login(DestroyRequest, _machineName, true);
}
else {
DestroyRequest(loginData.UserName, loginData.Password, loginData.UserDomain, _machineName, false);
}
break;
case definitions.DisplayVmPropertiesVerb:
loginData = Login.loadExistingLogin();
if (loginData == null) {
loginData = Login.login(DisplayPropertiesRequest, _machineName, true);
}
else {
DisplayPropertiesRequest(loginData.UserName, loginData.Password, loginData.UserDomain, _machineName, false);
}
break;
case definitions.StatusVerb:
loginData = Login.loadExistingLogin();
if (loginData == null) {
loginData = Login.login(StatusRequest, _machineName, true);
}
else {
StatusRequest(loginData.UserName, loginData.Password, loginData.UserDomain, _machineName, false);
}
break;
case definitions.Version:
process.exit(0);
break;
}
}