UNPKG

modi-cli

Version:

Console application for provisioning, displaying or destroying virtual machines in MODI

373 lines (248 loc) 11.1 kB
//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; } }