var Composer = {};
var FileManager = {};
+var PackageManager = {};
var DataCenters = {};
// Catalog module methods
Composer.get = function(req) {
var api_server = req.query['api_server'];
var results = {}
+ var projectPrefix = req.session.projectId ? "project-" : "";
return new Promise(function(resolve, reject) {
Promise.all([
rp({
- uri: utils.confdPort(api_server) + APIVersion + '/api/config/nsd-catalog/nsd?deep',
+ uri: utils.projectContextUrl(req, utils.confdPort(api_server) + APIVersion + '/api/config/nsd-catalog/nsd?deep'),
method: 'GET',
headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
}),
forever: constants.FOREVER_ON,
rejectUnauthorized: false,
resolveWithFullResponse: true
}),
rp({
- uri: utils.confdPort(api_server) + APIVersion + '/api/config/vnfd-catalog/vnfd?deep',
+ uri: utils.projectContextUrl(req, utils.confdPort(api_server) + APIVersion + '/api/config/vnfd-catalog/vnfd?deep'),
method: 'GET',
headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
}),
forever: constants.FOREVER_ON,
rejectUnauthorized: false,
resolveWithFullResponse: true
}),
rp({
- uri: utils.confdPort(api_server) + APIVersion + '/api/operational/ns-instance-opdata?deep',
+ uri: utils.projectContextUrl(req, utils.confdPort(api_server) + APIVersion + '/api/operational/ns-instance-opdata?deep'),
method: 'GET',
headers: _.extend({}, constants.HTTP_HEADERS.accept.data, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
}),
forever: constants.FOREVER_ON,
rejectUnauthorized: false,
// headers: _.extend({},
// constants.HTTP_HEADERS.accept.collection,
// {
- // 'Authorization': req.get('Authorization')
+ // 'Authorization': req.session && req.session.authorization
// }),
// forever: constants.FOREVER_ON,
// rejectUnauthorized: false,
"descriptors": []
}];
if (result[0].body) {
- response[0].descriptors = JSON.parse(result[0].body).collection['nsd:nsd'];
+ response[0].descriptors = utils.dataToJsonSansPropNameNamespace(result[0].body).collection['nsd'];
if (result[2].body) {
- var data = JSON.parse(result[2].body);
- if (data && data["nsr:ns-instance-opdata"] && data["nsr:ns-instance-opdata"]["rw-nsr:nsd-ref-count"]) {
- var nsdRefCountCollection = data["nsr:ns-instance-opdata"]["rw-nsr:nsd-ref-count"];
+ var data = utils.dataToJsonSansPropNameNamespace(result[2].body);
+ if (data && data["nsr:ns-instance-opdata"]) {
response[0].descriptors.map(function(nsd) {
if (!nsd["meta"]) {
nsd["meta"] = {};
if (typeof nsd['meta'] == 'string') {
nsd['meta'] = JSON.parse(nsd['meta']);
}
- nsd["meta"]["instance-ref-count"] = _.findWhere(nsdRefCountCollection, {
- "nsd-id-ref": nsd.id
- })["instance-ref-count"];
});
}
}
};
if (result[1].body) {
- response[1].descriptors = JSON.parse(result[1].body).collection['vnfd:vnfd'];
+ response[1].descriptors = utils.dataToJsonSansPropNameNamespace(result[1].body).collection['vnfd'];
};
- // if (result[2].body) {
- // response[2].descriptors = JSON.parse(result[2].body).collection['pnfd:pnfd'];
- // };
resolve({
statusCode: response.statusCode || 200,
data: JSON.stringify(response)
console.log('Deleting', catalogType, id, 'from', api_server);
return new Promise(function(resolve, reject) {
request({
- uri: utils.confdPort(api_server) + APIVersion + '/api/config/' + catalogType + '-catalog/' + catalogType + '/' + id,
+ uri: utils.projectContextUrl(req, utils.confdPort(api_server) + APIVersion + '/api/config/' + catalogType + '-catalog/' + catalogType + '/' + encodeURIComponent(id)),
method: 'DELETE',
headers: _.extend({}, constants.HTTP_HEADERS.accept.data, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
}),
forever: constants.FOREVER_ON,
rejectUnauthorized: false,
Composer.getVNFD = function(req) {
var api_server = req.query['api_server'];
var vnfdID = req.body.data;
- var authorization = req.get('Authorization');
+ var authorization = req.session && req.session.authorization;
var VNFDs = [];
if (typeof(vnfdID) == "object" && vnfdID.constructor.name == "Array") {
vnfdID.map(function(id) {
function requestVNFD(id) {
return new Promise(function(resolve, reject) {
- var url = utils.confdPort(api_server) + APIVersion + '/api/config/vnfd-catalog/vnfd' + (id ? '/' + id : '') + '?deep';
+ var url = utils.confdPort(api_server) + APIVersion + '/api/config/vnfd-catalog/vnfd' + (id ? '/' + encodeURIComponent(id) : '') + '?deep';
request({
- uri: url,
+ uri: utils.projectContextUrl(req, url),
method: 'GET',
headers: _.extend({}, constants.HTTP_HEADERS.accept.data, {
'Authorization': authorization
return new Promise(function(resolve, reject) {
var requestHeaders = {};
_.extend(requestHeaders, constants.HTTP_HEADERS.accept.data, constants.HTTP_HEADERS.content_type.data, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
});
request({
- uri: utils.confdPort(api_server) + '/api/config/' + catalogType + '-catalog',
+ uri: utils.projectContextUrl(req, utils.confdPort(api_server) + '/api/config/' + catalogType + '-catalog'),
method: 'POST',
headers: requestHeaders,
forever: constants.FOREVER_ON,
return new Promise(function(resolve, reject) {
var requestHeaders = {};
_.extend(requestHeaders, constants.HTTP_HEADERS.accept.data, constants.HTTP_HEADERS.content_type.data, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
});
request({
- uri: utils.confdPort(api_server) + APIVersion + '/api/config/' + catalogType + '-catalog' + '/' + catalogType + '/' + id,
+ uri: utils.projectContextUrl(req, utils.confdPort(api_server) + APIVersion + '/api/config/' + catalogType + '-catalog' + '/' + catalogType + '/' + encodeURIComponent(id)),
method: 'PUT',
headers: requestHeaders,
forever: constants.FOREVER_ON,
});
}
-Composer.update = function(req) {
- console.log(' Updating file', req.file.originalname, 'as', req.file.filename);
+PackageManager.upload = function(req) {
+ console.log(' Uploading file', req.file.originalname, 'as', req.file.filename);
var api_server = req.query['api_server'];
// dev_download_server is for testing purposes.
// It is the direct IP address of the Node server where the
var download_host = req.query['dev_download_server'];
if (!download_host) {
- download_host = req.protocol + '://' + req.get('host');//api_server + ':' + utils.getPortForProtocol(req.protocol);
+ download_host = req.protocol + '://' + req.get('host');//req.api_server + ':' + utils.getPortForProtocol(req.protocol);
}
+
var input = {
- 'external-url': download_host + '/composer/update/' + req.file.filename,
+ 'external-url': download_host + '/composer/' + constants.BASE_PACKAGE_UPLOAD_DESTINATION + '/' + req.file.filename,
'package-type': 'VNFD',
'package-id': uuid()
}
+
+ var uri = utils.projectContextUrl(req, utils.confdPort(api_server) + '/api/operations/package-create');
+
+ input = utils.addProjectContextToRPCPayload(req, uri, input);
+
+ var authorization = {};
+ if (req.session && req.session.authorization) {
+ authorization = {
+ 'Authorization': req.session && req.session.authorization
+ };
+ } else {
+ // For RIFT-16894: onboard_pkg script | Upload packages through command line
+ authorization = {
+ 'Authorization': req.get('Authorization')
+ };
+ }
+
return new Promise(function(resolve, reject) {
Promise.all([
rp({
- uri: utils.confdPort(api_server) + '/api/operations/package-update',
+ uri: uri,
method: 'POST',
- headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, {
- 'Authorization': req.get('Authorization')
- }),
+ headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, authorization),
forever: constants.FOREVER_ON,
rejectUnauthorized: false,
resolveWithFullResponse: true,
data['transaction_id'] = result[0].body['output']['transaction-id'];
// Add a status checker on the transaction and then to delete the file later
- PackageFileHandler.checkCreatePackageStatusAndHandleFile(req, data['transaction_id'], true);
+ PackageFileHandler.checkCreatePackageStatusAndHandleFile(req, data['transaction_id'], 'create');
// Return status to composer UI to update the status.
resolve({
});
}).catch(function(error) {
var res = {};
- console.log('Problem with Composer.upload', error);
+ console.log('Problem with PackageManager.upload', error);
res.statusCode = error.statusCode || 500;
res.errorMessage = {
error: 'Failed to upload package ' + req.file.originalname + '. Error: ' + error
});
};
-Composer.upload = function(req) {
- console.log(' Uploading file', req.file.originalname, 'as', req.file.filename);
+PackageManager.update = function(req) {
+ console.log(' Updating file', req.file.originalname, 'as', req.file.filename);
var api_server = req.query['api_server'];
// dev_download_server is for testing purposes.
// It is the direct IP address of the Node server where the
var download_host = req.query['dev_download_server'];
if (!download_host) {
- download_host = req.protocol + '://' + req.get('host');//req.api_server + ':' + utils.getPortForProtocol(req.protocol);
+ download_host = req.protocol + '://' + req.get('host');//api_server + ':' + utils.getPortForProtocol(req.protocol);
}
+ var input = {
+ 'external-url': download_host + '/composer/' + constants.BASE_PACKAGE_UPLOAD_DESTINATION + '/' + req.file.filename,
+ 'package-type': 'VNFD',
+ 'package-id': uuid()
+ };
+
+ var uri = utils.projectContextUrl(req, utils.confdPort(api_server) + '/api/operations/package-update');
+
+ input = utils.addProjectContextToRPCPayload(req, uri, input);
return new Promise(function(resolve, reject) {
Promise.all([
rp({
- uri: utils.confdPort(api_server) + '/api/operations/package-create',
+ uri: uri,
method: 'POST',
headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
}),
forever: constants.FOREVER_ON,
rejectUnauthorized: false,
resolveWithFullResponse: true,
json: true,
body: {
- input: {
- 'external-url': download_host + '/composer/upload/' + req.file.filename,
- 'package-type': 'VNFD',
- 'package-id': uuid()
- }
+ input: input
}
})
]).then(function(result) {
data['transaction_id'] = result[0].body['output']['transaction-id'];
// Add a status checker on the transaction and then to delete the file later
- PackageFileHandler.checkCreatePackageStatusAndHandleFile(req, data['transaction_id']);
+ PackageFileHandler.checkCreatePackageStatusAndHandleFile(req, data['transaction_id'], 'update');
// Return status to composer UI to update the status.
resolve({
});
};
-
-
-Composer.addFile = function(req) {
- console.log(' Uploading file', req.file.originalname, 'as', req.file.filename);
+PackageManager.export = function(req) {
+ // /api/operations/package-export
var api_server = req.query['api_server'];
- var download_host = req.query['dev_download_server'];
- var package_id = req.query['package_id'];
- var package_type = req.query['package_type'].toUpperCase();
- var package_path = req.query['package_path'];
- if (!download_host) {
- download_host = req.protocol + '://' + req.get('host');//api_server + ':' + utils.getPortForProtocol(req.protocol);
- }
- var input = {
- 'external-url': download_host + '/composer/upload/' + req.query['package_id'] + '/' + req.file.filename,
- 'package-type': package_type,
- 'package-id': package_id,
- 'package-path': package_path + '/' + req.file.filename
- }
+ var uri = utils.projectContextUrl(req, utils.confdPort(api_server) + '/api/operations/package-export');
+ var input = req.body;
+ input = utils.addProjectContextToRPCPayload(req, uri, input);
return new Promise(function(resolve, reject) {
Promise.all([
rp({
- uri: utils.confdPort(api_server) + '/api/operations/package-file-add',
+ uri: uri,
method: 'POST',
headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
}),
forever: constants.FOREVER_ON,
rejectUnauthorized: false,
resolveWithFullResponse: true,
json: true,
- body: {
- input: input
- }
+ body: { "input": input }
})
]).then(function(result) {
var data = {};
- data['transaction_id'] = result[0].body['output']['task-id'];
resolve({
statusCode: constants.HTTP_RESPONSE_CODES.SUCCESS.OK,
- data: data
+ data: result[0].body
});
}).catch(function(error) {
var res = {};
- console.log('Problem with Composer.upload', error);
+ console.log('Problem with PackageManager.export', error);
res.statusCode = error.statusCode || 500;
res.errorMessage = {
- error: 'Failed to upload package ' + req.file.originalname + '. Error: ' + error
+ error: error
};
reject(res);
});
});
}
-Composer.exportPackage = function(req) {
- // /api/operations/package-export
+PackageManager.copy = function(req) {
+ // /api/operations/package-copy
var api_server = req.query['api_server'];
+ var uri = utils.projectContextUrl(req, utils.confdPort(api_server) + '/api/operations/package-copy');
+ var input = req.body;
+ input = utils.addProjectContextToRPCPayload(req, uri, input);
+
return new Promise(function(resolve, reject) {
Promise.all([
rp({
- uri: utils.confdPort(api_server) + '/api/operations/package-export',
+ uri: uri,
method: 'POST',
headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
}),
forever: constants.FOREVER_ON,
rejectUnauthorized: false,
resolveWithFullResponse: true,
json: true,
- body: { "input": req.body}
+ body: { "input": input}
})
]).then(function(result) {
var data = {};
});
}).catch(function(error) {
var res = {};
- console.log('Problem with Composer.exportPackage', error);
+ console.log('Problem with PackageManager.copy', error);
res.statusCode = error.statusCode || 500;
res.errorMessage = {
error: error
});
}
+/**
+ * These methods retrieves the status of package operations. It takes an optional
+ * transaction id (id) this if present will return only that status otherwise
+ * an array of status' will be response.
+ */
+PackageManager.getJobStatus = function(req, jobType) {
+ var api_server = req.query["api_server"];
+ var uri = utils.confdPort(api_server);
+ var id = req.params['id'];
+ var url = utils.projectContextUrl(req, uri + '/api/operational/' + jobType + (id ? '/job/' + id : ''));
+ return new Promise(function(resolve, reject) {
+ request({
+ url: url,
+ method: 'GET',
+ headers: _.extend({}, constants.HTTP_HEADERS.accept.data, {
+ 'Authorization': req.session && req.session.authorization
+ }),
+ forever: constants.FOREVER_ON,
+ rejectUnauthorized: false
+ }, function(error, response, body) {
+ if (utils.validateResponse('PackageManager.getJobStatus', error, response, body, resolve, reject)) {
+ var returnData;
+ var jsonResponse = JSON.parse(response.body);
+ if (id) {
+ returnData = jsonResponse['rw-pkg-mgmt:job'];
+ if (!returnData){
+ returnData = {
+ status: 'failure',
+ errors: [{value: "Internal error"}]
+ }
+ }
+ } else {
+ var data = jsonResponse['rw-pkg-mgmt:' + jobType];
+ returnData = (data && data.job) || [];
+ }
+ resolve({
+ statusCode: response.statusCode,
+ data: returnData
+ });
+ }
+ })
+ })
+}
+PackageManager.getCopyJobStatus = function(req) {
+ return PackageManager.getJobStatus(req, 'copy-jobs');
+}
+PackageManager.getImportJobStatus = function(req) {
+ return PackageManager.getJobStatus(req, 'create-jobs');
+}
+PackageManager.getUpdateJobStatus = function(req) {
+ return PackageManager.getJobStatus(req, 'update-jobs');
+}
+
+function makeAssetTypeParamName (type) {
+ return type.toLowerCase() + '-file-type';
+}
+FileManager.addFile = function(req) {
+ console.log(' Uploading file', req.file.originalname, 'as', req.file.filename);
+ var api_server = req.query['api_server'];
+ var download_host = req.query['dev_download_server'];
+ var package_id = req.query['package_id'];
+ var package_type = req.query['package_type'].toUpperCase();
+ var package_path = req.query['package_path'];
+ if (!download_host) {
+ download_host = req.protocol + '://' + req.get('host');//api_server + ':' + utils.getPortForProtocol(req.protocol);
+ }
+ var filename = req.file.filename;
+ var assetName = req.file.originalname;
+ var input = {
+ 'external-url': download_host + '/composer/' + constants.BASE_PACKAGE_UPLOAD_DESTINATION + '/' + filename,
+ 'package-type': package_type,
+ 'package-id': package_id,
+ 'package-path': package_path ? package_path + '/' + assetName : assetName
+ };
+
+ var uri = utils.projectContextUrl(req, utils.confdPort(api_server) + '/api/operations/package-file-add');
+
+ input = utils.addProjectContextToRPCPayload(req, uri, input);
+
+ var assetType = req.query['asset_type'].toUpperCase();
+ input[makeAssetTypeParamName(package_type)] = assetType;
+ return new Promise(function(resolve, reject) {
+ Promise.all([
+ rp({
+ uri: uri,
+ method: 'POST',
+ headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, {
+ 'Authorization': req.session && req.session.authorization
+ }),
+ forever: constants.FOREVER_ON,
+ rejectUnauthorized: false,
+ resolveWithFullResponse: true,
+ json: true,
+ body: {
+ input: input
+ }
+ })
+ ]).then(function(result) {
+ var data = {};
+ data['transaction_id'] = result[0].body['output']['task-id'];
+ // Add a status checker on the transaction and then to delete the file later
+ PackageFileHandler.checkCreatePackageStatusAndHandleFile(req, data['transaction_id'], 'download');
+ resolve({
+ statusCode: constants.HTTP_RESPONSE_CODES.SUCCESS.OK,
+ data: data
+ });
+ }).catch(function(error) {
+ var res = {};
+ console.log('Problem with Composer.upload', error);
+ res.statusCode = error.statusCode || 500;
+ res.errorMessage = {
+ error: 'Failed to upload package ' + req.file.originalname + '. Error: ' + error
+ };
+ reject(res);
+ });
+ });
+}
+
FileManager.get = function(req) {
var api_server = req.query['api_server'];
var type = req.query['package_type'] && req.query['package_type'].toUpperCase();
- var id = req.query['package_id'];
+ var packageId = req.query['package_id'];
var downloadUrl = req.query['url'];
var path = req.query['package_path'];
- var payload = {
- "input": {
- "package-type": type,
- "package-id": id
- }
+ var assetType = req.query['asset_type'];
+ var input = {
+ "package-type": type,
+ "package-id": packageId
}
+ var payload = {input: input};
if(req.method == 'GET') {
if(downloadUrl && path) {
payload.input['external-url'] = downloadUrl;
payload.input['package-path'] = path;
+ payload.input[makeAssetTypeParamName(type)] = assetType;
return download(payload);
} else {
return list(payload);
}
if(req.method == 'DELETE') {
payload.input['package-path'] = path;
+ payload.input[makeAssetTypeParamName(type)] = assetType;
return deleteFile(payload)
}
function deleteFile(payload) {
+ var uri = utils.projectContextUrl(req, utils.confdPort(api_server) + '/api/operations/rw-pkg-mgmt:package-file-delete');
+ payload.input = utils.addProjectContextToRPCPayload(req, uri, payload.input);
return new Promise(function(resolve, reject) {
rp({
- uri: utils.confdPort(api_server) + '/api/operations/rw-pkg-mgmt:package-file-delete',
+ uri: uri,
method: 'POST',
headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
}),
json: payload,
forever: constants.FOREVER_ON,
})
}
function download(payload) {
+ var uri = utils.projectContextUrl(req, utils.confdPort(api_server) + '/api/operations/rw-pkg-mgmt:package-file-add');
+ payload.input = utils.addProjectContextToRPCPayload(req, uri, payload.input);
return new Promise(function(resolve, reject) {
rp({
- uri: utils.confdPort(api_server) + '/api/operations/rw-pkg-mgmt:package-file-add',
+ uri: uri,
method: 'POST',
headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
}),
json: payload,
forever: constants.FOREVER_ON,
})
}
function list(payload) {
+ var uri = utils.projectContextUrl(req, utils.confdPort(api_server) + '/api/operations/get-package-endpoint');
+ payload.input = utils.addProjectContextToRPCPayload(req, uri, payload.input);
return new Promise(function(resolve, reject) {
rp({
- uri: utils.confdPort(api_server) + '/api/operations/get-package-endpoint',
+ uri: uri,
method: 'POST',
headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
}),
json: payload,
forever: constants.FOREVER_ON,
}
parsedEndpoint = URL.parse(endpoint);
rp({
- uri: api_server + ':' + parsedEndpoint.port + parsedEndpoint.path,
+ uri: utils.projectContextUrl(req, api_server + ':' + parsedEndpoint.port + parsedEndpoint.path),
method: 'GET',
headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
}),
forever: constants.FOREVER_ON,
rejectUnauthorized: false,
}
}).catch(function(err) {
console.log('Failed to retrieve FileManager.list')
- resolve(err);
+ reject({
+ statusCode: constants.HTTP_RESPONSE_CODES.ERROR.INTERNAL_SERVER_ERROR,
+ error: {
+ errorMessage: JSON.stringify(err)
+ }
+ });
})
}
})
var id = req.params['id'];
return new Promise(function(resolve, reject) {
request({
- url: uri + url + '?deep',
+ url: utils.projectContextUrl(req, uri + url + '?deep'),
method: 'GET',
headers: _.extend({}, constants.HTTP_HEADERS.accept.data, {
- 'Authorization': req.get('Authorization')
+ 'Authorization': req.session && req.session.authorization
}),
forever: constants.FOREVER_ON,
rejectUnauthorized: false,
}, function(error, response, body) {
- if (utils.validateResponse('restconfAPI.streams', error, response, body, resolve, reject)) {
+ if (utils.validateResponse('FileManager.job', error, response, body, resolve, reject)) {
var data = JSON.parse(response.body)['rw-pkg-mgmt:download-jobs'];
var returnData = [];
data && data.job.map(function(d) {
}
module.exports = {
Composer:Composer,
- FileManager: FileManager
+ FileManager: FileManager,
+ PackageManager: PackageManager
};