Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 58 additions & 2 deletions src/serverroot/common/computemanager.api.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,56 @@ function getVMStatsByProject (projUUID, req, callback)

function getFlavors(req, callback)
{
computeApi.getFlavors(req, function(err,data){
callback(err,data);
computeApi.getFlavors(req, function(err, data) {
callback(err, data);
});
}

function pauseInstance(req, callback)
{
computeApi.pauseInstance(req, function(err, data) {
callback(err, data);
});
}

function resumeInstance(req, callback)
{
computeApi.resumeInstance(req, function(err, data) {
callback(err, data);
});
}

function suspendInstance(req, callback)
{
computeApi.suspendInstance(req, function(err, data) {
callback(err, data);
});
}

function deleteInstance(req, callback)
{
computeApi.deleteInstance(req, function(err, data) {
callback(err, data);
});
}

function softRebootInstance(req, callback)
{
computeApi.softRebootInstance(req, function(err, data) {
callback(err, data);
});
}
function hardRebootInstance(req, callback)
{
computeApi.hardRebootInstance(req, function(err, data) {
callback(err, data);
});
}

function createImage(req, callback)
{
computeApi.createImage(req, function(err, data) {
callback(err, data);
});
}

Expand All @@ -63,3 +111,11 @@ exports.launchVNC = launchVNC;
exports.getServiceInstanceVMStatus = getServiceInstanceVMStatus;
exports.getVMStatsByProject = getVMStatsByProject;
exports.getFlavors = getFlavors;
exports.pauseInstance = pauseInstance;
exports.resumeInstance = resumeInstance;
exports.suspendInstance = suspendInstance;
exports.deleteInstance = deleteInstance;
exports.softRebootInstance = softRebootInstance;
exports.hardRebootInstance = hardRebootInstance;
exports.createImage = createImage;

129 changes: 129 additions & 0 deletions src/serverroot/orchestration/plugins/openstack/nova.api.js
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,40 @@ function launchVNCV11 (error, data, callback)
callback(null, data);
}
}
/* Wrapper function to Nova-Server to DELETE a VM Instance */
novaApi.delete = function(reqUrl, req, callback, stopRetry) {
var headers = {};
var forceAuth = stopRetry;
var tenantId = getTenantIdByReqCookie(req);
if (null == tenantId) {
/* Just return as we will be redirected to login page */
return;
}

headers['User-Agent'] = 'Contrail-WebClient';
doNovaOpCb(reqUrl, tenantId, req, novaApi.get, stopRetry,
function(err, tokenObj) {
if ((err) || (null == tokenObj) || (null == tokenObj.id)) {
callback(err, null);
} else {
headers['X-Auth-Token'] = tokenObj.id;
novaAPIServer.api.delete(reqUrl, function(err, data) {
if (err) {
/* Just retry in case of if it fails, it may happen that failure is
* due to token change, so give one more change
*/
if (stopRetry) {
callback(err, data);
} else {
novaApi.get(reqUrl, req, callback, true);
}
} else {
callback(err, data);
}
}, headers);
}
});
}

function getNovaData (novaCallObj, callback)
{
Expand Down Expand Up @@ -429,9 +463,104 @@ function getFlavors (req, callback)
});
}

function instanceActions(req, callback, action)
{
var tenantStr = getTenantIdByReqCookie(req);
if(null == tenantStr) {
/* Just return as we will be redirected to login page */
return;
}
authApi.getTokenObj(req, tenantStr, true, function(err, data){
if(err) {
logutils.logger.error("Error in getting token object for tenant: " + tenantStr);
callback(err, null);
return;
}
var tenantId = data['tenant']['id'];
var serverId = req.param('serverId');
var reqUrl = '/v1.1/' + tenantId + '/servers/' + serverId;
var postData = '';
if(action === 'delete') {
novaApi.delete(reqUrl, req, function(err, data){
callback(err, data);
});
}
else {
reqUrl = reqUrl + '/action';
switch(action) {
case 'pause':
postData = {"pause":null};
break;
case 'resume':
postData = {"os-resetState": {"state": "active"}};
break;
case 'suspend':
postData = {"suspend":null};
break;
case 'soft-reboot':
postData = {"reboot": {"type": "SOFT"}};
break;
case 'hard-reboot':
postData = {"reboot": {"type": "HARD"}};
break;
case 'create-image':
var imgName = req.body['imageName'];
console.log("IMG-NAME:" + imgName);
postData = {"createImage": {"name": imgName, "metadata": {}}};
break;
}
}
novaApi.post(reqUrl, postData, req, function(err, data){
callback(err, data);
});
});
}


function pauseInstance(req, callback)
{
instanceActions(req, callback, 'pause');
}

function resumeInstance(req, callback)
{
instanceActions(req, callback, 'resume');
}

function suspendInstance(req, callback)
{
instanceActions(req, callback, 'suspend');
}

function deleteInstance(req, callback)
{
instanceActions(req, callback, 'delete');
}

function softRebootInstance(req, callback)
{
instanceActions(req, callback, 'soft-reboot');
}

function hardRebootInstance(req, callback)
{
instanceActions(req, callback, 'hard-reboot');
}

function createImage(req, callback)
{
instanceActions(req, callback, 'create-image');
}

exports.launchVNC = launchVNC;
exports.getServiceInstanceVMStatus = getServiceInstanceVMStatus;
exports.getVMStatsByProject = getVMStatsByProject;
exports.getFlavors = getFlavors;
exports.pauseInstance = pauseInstance;
exports.resumeInstance = resumeInstance;
exports.suspendInstance = suspendInstance;
exports.deleteInstance = deleteInstance;
exports.softRebootInstance = softRebootInstance;
exports.hardRebootInstance = hardRebootInstance;
exports.createImage = createImage;

61 changes: 58 additions & 3 deletions src/serverroot/web/api/network.mon.api.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ var cacheApi = require('../core/cache.api'),
infra = require('./infraoverview.api'),
logutils = require('../../utils/log.utils'),
nwMonUtils = require('../../common/nwMon.utils'),
appErrors = require('../../errors/app.errors');

appErrors = require('../../errors/app.errors'),
computeApi = require('../../common/computemanager.api');
nwMonApi = module.exports;
opServer = rest.getAPIServer({apiName: global.label.OPS_API_SERVER,
server: config.analytics.server_ip,
Expand Down Expand Up @@ -2484,6 +2484,55 @@ function getInstanceDetails (req, res, appData)
});
}

function pauseInstance(req, res, appData)
{
computeApi.pauseInstance(req, function(err, data){
commonUtils.handleJSONResponse(err, res, data);
});
}

function resumeInstance(req, res, appData)
{
computeApi.resumeInstance(req, function(err, data){
commonUtils.handleJSONResponse(err, res, data);
});
}

function suspendInstance(req, res, appData)
{
computeApi.suspendInstance(req, function(err, data){
commonUtils.handleJSONResponse(err, res, data);
});
}

function deleteInstance(req, res, appData)
{
computeApi.deleteInstance(req, function(err, data){
commonUtils.handleJSONResponse(err, res, data);
});
}

function softRebootInstance(req, res, appData)
{
computeApi.softRebootInstance(req, function(err, data){
commonUtils.handleJSONResponse(err, res, data);
});
}

function hardRebootInstance(req, res, appData)
{
computeApi.hardRebootInstance(req, function(err, data){
commonUtils.handleJSONResponse(err, res, data);
});
}

function createImage(req, res, appData)
{
computeApi.createImage(req, function(err, data){
commonUtils.handleJSONResponse(err, res, data);
});
}

/* List all public functions */
exports.getTopNetworkDetailsByDomain = getTopNetworkDetailsByDomain;
exports.getTopNetworkDetailsByProject = getTopNetworkDetailsByProject;
Expand Down Expand Up @@ -2515,4 +2564,10 @@ exports.isAllowedVN = isAllowedVN;
exports.getVNListByProject = getVNListByProject;
exports.getOpServerPagedResponseByLastKey = getOpServerPagedResponseByLastKey;
exports.sortUVEList = sortUVEList;

exports.pauseInstance = pauseInstance;
exports.resumeInstance = resumeInstance;
exports.suspendInstance = suspendInstance;
exports.deleteInstance = deleteInstance;
exports.softRebootInstance = softRebootInstance;
exports.hardRebootInstance = hardRebootInstance;
exports.createImage = createImage;
42 changes: 42 additions & 0 deletions src/xml/parseURL.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1244,6 +1244,48 @@
<feature>monitoring</feature>
<callback>nwMonApi.getTopNetworkDetailsByDomain</callback>
</item>
<item>
<url>/api/tenant/networking/pause-instance</url>
<method>get</method>
<feature>monitoring</feature>
<callback>nwMonApi.pauseInstance</callback>
</item>
<item>
<url>/api/tenant/networking/resume-instance</url>
<method>get</method>
<feature>monitoring</feature>
<callback>nwMonApi.resumeInstance</callback>
</item>
<item>
<url>/api/tenant/networking/suspend-instance</url>
<method>get</method>
<feature>monitoring</feature>
<callback>nwMonApi.suspendInstance</callback>
</item>
<item>
<url>/api/tenant/networking/delete-instance</url>
<method>get</method>
<feature>monitoring</feature>
<callback>nwMonApi.deleteInstance</callback>
</item>
<item>
<url>/api/tenant/networking/soft-reboot-instance</url>
<method>get</method>
<feature>monitoring</feature>
<callback>nwMonApi.softRebootInstance</callback>
</item>
<item>
<url>/api/tenant/networking/hard-reboot-instance</url>
<method>get</method>
<feature>monitoring</feature>
<callback>nwMonApi.hardRebootInstance</callback>
</item>
<item>
<url>/api/tenant/networking/create-image</url>
<method>post</method>
<feature>monitoring</feature>
<callback>nwMonApi.createImage</callback>
</item>
<item>
<url>/api/tenant/networking/project/stats/top</url>
<method>get</method>
Expand Down