X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FUI.git;a=blobdiff_plain;f=skyquake%2Fplugins%2Faccounts%2Fapi%2Faccounts.js;h=e3c45230953e3b449f419be2a0931be18857d795;hp=1b51c7bfef51ccc7117756363e6ba5fb84ab9e71;hb=185cccf06053d07763702227c826e183b7661a70;hpb=8d06f92bda77338e7772a912ef3cde474f2a06ed diff --git a/skyquake/plugins/accounts/api/accounts.js b/skyquake/plugins/accounts/api/accounts.js index 1b51c7bfe..e3c452309 100644 --- a/skyquake/plugins/accounts/api/accounts.js +++ b/skyquake/plugins/accounts/api/accounts.js @@ -1,5 +1,5 @@ /* - * + * * Copyright 2016 RIFT.IO Inc * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,9 +28,11 @@ var ConfigAgent = require('./config_agent/configAgent') var Accounts = {}; var nameSpace = { cloud: 'cloud', - sdn: 'sdn-account', - 'config-agent': 'config-agent' + sdn: 'sdn', + 'config-agent': 'config-agent', + 'resource-orchestrator': 'ro-account' }; +var APIVersion = '/v2' Accounts.get = function(req) { return new Promise(function(resolve, reject) { if (req.params.type || req.params.name) { @@ -42,6 +44,8 @@ Accounts.get = function(req) { type: req.params.type }) }); + }, function(reason) { + reject(reason); }) } else { getAll(req, resolve, reject); @@ -52,12 +56,14 @@ Accounts.get = function(req) { Promise.all([ Cloud.get(req), Sdn.get(req), - ConfigAgent.get(req) + ConfigAgent.get(req), + getResourceOrchestrator(req) ]).then(function(result) { var ReturnData = { cloud: result[0], sdn: result[1], - 'config-agent': result[2] + 'config-agent': result[2], + 'resource-orchestrator': result[3] }; ReturnData.cloud.type = 'cloud'; ReturnData.sdn.type = 'sdn'; @@ -66,6 +72,8 @@ Accounts.get = function(req) { statusCode: 200, data: ReturnData }); + }, function(reason) { + reject(reason); }) } } @@ -74,6 +82,7 @@ Accounts.update = updateAccount; Accounts.create = updateAccount; Accounts.delete = deleteAccount; Accounts.refreshAccountConnectionStatus = refreshAccountConnectionStatus + function getAccount(req) { return new Promise(function(resolve, reject) { var self = this; @@ -81,24 +90,20 @@ function getAccount(req) { var id = req.params.id || req.params.name; var requestHeaders = {}; var type = nameSpace[req.params.type]; - var url = utils.confdPort(api_server) + '/api/operational/' + type; - //SDN model doesn't follow convention - if (type != 'sdn-account') { - url += '/account'; - } + var url = utils.confdPort(api_server) + '/api/operational/' + type + '/account'; if (id) { - url += '/' + id; + url += '/' + encodeURIComponent(id); } _.extend( requestHeaders, id ? constants.HTTP_HEADERS.accept.data : constants.HTTP_HEADERS.accept.collection, { - 'Authorization': req.get('Authorization') + 'Authorization': req.session && req.session.authorization } ); request({ - url: url + '?deep', + url: utils.projectContextUrl(req, url + '?deep'), type: 'GET', headers: requestHeaders, forever: constants.FOREVER_ON, @@ -108,16 +113,12 @@ function getAccount(req) { var data; var objKey = 'rw-' + type + ':account'; //SDN model doesn't follow convention - if (type == 'sdn-account') { - objKey = 'rw-sdn:sdn-account'; - } if (utils.validateResponse(type.toUpperCase() + '.get', error, response, body, resolve, reject)) { try { data = JSON.parse(response.body); if (!id) { data = data.collection; } - data = data[objKey] } catch (e) { console.log('Problem with "' + type.toUpperCase() + '.get"', e); @@ -145,30 +146,20 @@ function updateAccount(req) { var data = req.body; var requestHeaders = {}; var createData = {}; - var url = utils.confdPort(api_server) + '/api/config/' + type; + var url = utils.confdPort(api_server) + '/api/config/' + type //+ '/account'; var method = 'POST' if (!id) { - if (type == 'sdn-account') { - createData = { - 'sdn-account': Array.isArray(data) ? data : [data] - } + createData = {} + if (type == 'ro-account') { + createData['rw-ro-account:account'] = Array.isArray(data) ? data : [data] } else { - createData = { - 'account': Array.isArray(data) ? data : [data] - } + createData['account'] = Array.isArray(data) ? data : [data] } console.log('Creating ' + type + ' account: ', createData); } else { method = 'PUT'; - if (type == 'sdn-account') { - url += '/' + id; - createData['rw-sdn:sdn-account'] = Array.isArray(data) ? data : [data]; - - } else { - url += '/account/' + id; - createData['rw-' + type + ':account'] = Array.isArray(data) ? data : [data]; - } - //createData = createData[0]; + url += '/account/' + encodeURIComponent(id); + createData['rw-' + type + ':account'] = Array.isArray(data) ? data : [data]; } @@ -177,10 +168,10 @@ function updateAccount(req) { _.extend(requestHeaders, constants.HTTP_HEADERS.accept.data, constants.HTTP_HEADERS.content_type.data, { - 'Authorization': req.get('Authorization') + 'Authorization': req.session && req.session.authorization }); request({ - url: url, + url: utils.projectContextUrl(req, url), method: method, headers: requestHeaders, forever: constants.FOREVER_ON, @@ -206,19 +197,15 @@ function deleteAccount(req) { var requestHeaders = {}; var createData = {}; var url = utils.confdPort(api_server) + '/api/config/' + type; - if (type == 'sdn-account') { - url += '/' + id; - } else { - url += '/account/' + id; - } + url += '/account/' + encodeURIComponent(id); return new Promise(function(resolve, reject) { _.extend(requestHeaders, constants.HTTP_HEADERS.accept.data, constants.HTTP_HEADERS.content_type.data, { - 'Authorization': req.get('Authorization') + 'Authorization': req.session && req.session.authorization }); request({ - url: url, + url: utils.projectContextUrl(req, url), method: 'DELETE', headers: requestHeaders, forever: constants.FOREVER_ON, @@ -234,7 +221,7 @@ function deleteAccount(req) { }) } -function refreshAccountConnectionStatus (req) { +function refreshAccountConnectionStatus(req) { var api_server = req.query['api_server']; var Name = req.params.name; var Type = req.params.type; @@ -246,26 +233,34 @@ function refreshAccountConnectionStatus (req) { label: 'sdn-account', rpc: 'update-sdn-status' }, - 'config': { + 'config-agent': { label: 'cfg-agent-account', rpc: 'update-cfg-agent-status' }, cloud: { label: 'cloud-account', rpc: 'update-cloud-status' + }, + 'resource-orchestrator': { + label: 'ro-account', + rpc: 'update-ro-account-status' } } jsonData.input[rpcInfo[Type].label] = Name; var headers = _.extend({}, constants.HTTP_HEADERS.accept.data, constants.HTTP_HEADERS.content_type.data, { - 'Authorization': req.get('Authorization') + 'Authorization': req.session && req.session.authorization } ); + var uri = utils.projectContextUrl(req, utils.confdPort(api_server) + '/api/operations/' + rpcInfo[Type].rpc); + + jsonData['input'] = utils.addProjectContextToRPCPayload(req, uri, jsonData['input']); + return new Promise(function(resolve, reject) { request({ - uri: utils.confdPort(api_server) + '/api/operations/' + rpcInfo[Type].rpc, + uri: uri, method: 'POST', headers: headers, forever: constants.FOREVER_ON, @@ -285,4 +280,117 @@ function refreshAccountConnectionStatus (req) { }); }; +function getResourceOrchestrator(req, id) { + var self = this; + var api_server = req.query["api_server"]; + var accountID = req.params.id || req.params.name; + + return new Promise(function(resolve, reject) { + var requestHeaders = {}; + _.extend(requestHeaders, + constants.HTTP_HEADERS.accept.collection, { + 'Authorization': req.session && req.session.authorization + } + ); + var urlOp = utils.projectContextUrl(req, utils.confdPort(api_server) + APIVersion + '/api/operational/ro-account/account'); + var urlConfig = utils.projectContextUrl(req, utils.confdPort(api_server) + APIVersion + '/api/operational/ro-account-state/account'); + if(accountID) { + urlOp = url + '/' + encodeURIComponent(accountID); + urlConfig = url + '/' + encodeURIComponent(accountID); + } + var allRequests = []; + var roOpData = new Promise(function(resolve, reject) { + request({ + url: urlOp, + type: 'GET', + headers: requestHeaders, + forever: constants.FOREVER_ON, + rejectUnauthorized: false + }, + function(error, response, body) { + var data; + if (utils.validateResponse('RoAccount.get', error, response, body, resolve, reject)) { + try { + data = JSON.parse(response.body).collection['rw-ro-account:account'] + } catch (e) { + console.log('Problem with "RoAccount.get"', e); + var err = {}; + err.statusCode = 500; + err.errorMessage = { + error: 'Problem with "RoAccount.get": ' + e // + e.toString() + } + return reject(err); + } + return resolve({ + statusCode: response.statusCode, + data: data + }); + }; + } + ); + }); + var roConfigData = new Promise(function(resolve, reject){ + request({ + url: urlConfig, + type: 'GET', + headers: requestHeaders, + forever: constants.FOREVER_ON, + rejectUnauthorized: false + }, + function(error, response, body) { + var data; + if (utils.validateResponse('RoAccount.get', error, response, body, resolve, reject)) { + try { + data = JSON.parse(response.body).collection['rw-ro-account:account'] + } catch (e) { + console.log('Problem with "RoAccount.get"', e); + var err = {}; + err.statusCode = 500; + err.errorMessage = { + error: 'Problem with "RoAccount.get": ' + e // + e.toString() + } + return reject(err); + } + return resolve({ + statusCode: response.statusCode, + data: data + }); + }; + } + ); + }); + + allRequests.push(roOpData); + allRequests.push(roConfigData); + Promise.all(allRequests).then(function(data) { + var state = data[1].data; + var op = data[0].data; + var result = []; + var dict = {}; + if (!accountID) { + state.map && state.map(function(s){ + if(s.name != "rift") { + dict[s.name] = s; + } + }); + op.map && op.map(function(o) { + if(o.name != "rift") { + dict[o.name] = _.extend(dict[o.name], o); + } + }); + Object.keys(dict).map(function(d) { + result.push(dict[d]); + }) + } else { + result = _.extend(op, state); + } + resolve({ + statusCode: 200, + data: result + }) + }) + + }) +} + module.exports = Accounts;