diff options
Diffstat (limited to 'admportal/server/router/routes/odl.js')
-rw-r--r-- | admportal/server/router/routes/odl.js | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/admportal/server/router/routes/odl.js b/admportal/server/router/routes/odl.js new file mode 100644 index 00000000..fba646fa --- /dev/null +++ b/admportal/server/router/routes/odl.js @@ -0,0 +1,258 @@ +var express = require('express'); +var router = express.Router(); +var csp = require('./csp'); +var properties = require(process.env.SDNC_CONFIG_DIR + '/admportal.json'); +var async = require('async'); + + +// pass host, username and password to ODL +var username = properties.odlUser; +var password = properties.odlPasswd; +var auth = 'Basic ' + new Buffer(username + ':' + password).toString('base64'); + +// target host for ODL request +var host = properties.odlHost; +var port = properties.odlPort; +var header = {'Host': host, 'Authorization': auth, 'Content-Type': 'application/yang.data+json'}; +var options = { + host: host, + headers : header, + port : port, + rejectUnauthorized: false, + strictSSL : false +}; + +// Connection to OpenDaylight +Odl = require('./Odl'); + +function handleResult(err, response_str, res) { + if (err) { + console.error( String(err) ); + res.render('pages/err', {result:{code:'failure', msg:String(err)}, header:process.env.MAIN_MENU}); + } else { + // make sure response starts with JSON string + if (response_str && response_str.indexOf('{') == 0) { + //console.log("response: ", result); + res.render('odl/listWklst', { response_obj: JSON.parse(response_str), header:process.env.MAIN_MENU }); + } else { + res.render('pages/err', {result:{code:'failure', msg:String(err) }, header:process.env.MAIN_MENU}); + } + } +} + +// / index page +// calls restconf to get information +router.get('/listWklst', csp.checkAuth, function(req, res) { + options.strictSSL = true; // used to test SSL certificate + Odl.Get('/restconf/config/L3SDN-API:services',options, handleResult,req,res); +}); + +router.get('/pageWklst', csp.checkAuth, function(req,res) { + pageWklst(req,res, {code:'', msg:''}, req.session.loggedInAdmin); +}); + + +function pageWklst(req,res,resultObj,privilegeObj) +{ + if(req.session == null || req.session == undefined + || req.session.l3sdnPageInfo == null || req.session.l3sdnPageInfo == undefined) + { + res.render("pages/err", + { result: {code:'error', msg:"Unable to read session information. "+ String(err) }, header:process.env.MAIN_MENU}); + return; + } + + var l3sdnPageInfo = req.session.l3sdnPageInfo; + var currentPage=1; + if (typeof req.query.page != 'undefined') + { + currentPage = +req.query.page; + } + l3sdnPageInfo.currentPage = currentPage; + l3sdnPageInfo.rows = l3sdnPageInfo.pages[currentPage-1]; + req.session.l3sdnPageInfo = l3sdnPageInfo; + res.render('odl/listWklst', + { + pageInfo : l3sdnPageInfo, + result : resultObj, + privilege : privilegeObj, header:process.env.MAIN_MENU + }); + return; +} + + +router.post('/update_vr_lan_interface', function(req,res){ + var svc_instance_id = encodeURIComponent(req.body.svc_instance_id); + + // format msg + var msgRsp = + { + "vr-lan-interface" : + [ + { + "vr-designation" : req.body.uf_vr_designation, + "v6-vr-lan-prefix" : req.body.uf_vr_lan_prefix, + "v6-vr-lan-prefix-length": req.body.uf_vr_lan_prefix_length, + "v6-vce-wan-address" : req.body.uf_vce_wan_address, + "v4-vr-lan-prefix" : req.body.uf_vr_lan_prefix, + "v4-vr-lan-prefix-length": req.body.uf_vr_lan_prefix_length, + "v4-vce-loopback-address": req.body.uf_vce_loopback_address + } + ] + }; + var tasks = []; + tasks.push(function(callback){ + Odl.put_vr_lan_interface('/restconf/config/L3SDN-API:services/layer3-service-list/' + + svc_instance_id + + '/service-data/vr-lan/', options, callback); + }); + async.series(tasks, function(err,result){ + + if(err){ + } + else{ + var msgArray = new Array(); + //result:{code:'error', msg:"got vr-lan information: "+ String(result)} + msgArray.push('vr-lan-interface successfully updated.'); + res.render("odl/listVRlan", + { + svc_instance_id: req.body.svc_instance_id, + response_obj : JSON.parse(result), header:process.env.MAIN_MENU + }); + return; + } + }); +}); + + +// sendData submits form data to ODL +// Data is read from URL params and converted to JSON +router.get('/svc-topology-operation', function(req, res) { + var formData = '{"input":{' + + '"svc-request-id":"'+ new Date().toISOString() + '"' +',' + + '"svc-notification-url":"'+ req.query['svc-notification-url']+ '"' + ',' + + '"svc-action":"'+ req.query['svc-action']+ '"' + ',' + + '"svc-vnf-type":"'+ req.query['svc-vnf-type']+ '"' + ',' + + '"svc-instance-id":"'+ req.query['svc-instance-id']+ '"' + ',' + + '"svc-aic-site-id":"'+ req.query['svc-aic-site-id']+ '"' + +' } }'; + Odl.Post('/restconf/operations/L3SDN-API:svc-topology-operation', options, formData, handleResult, res); +}); + +// delete request +router.get('/wklist-delete', function(req, res) { + //console.dir(req.query); + Odl.Delete('/restconf/config/L3SDN-API:l3sdn-api-worklist/requests/'+req.query['request'], options, handleResult, res); +}); + +// get request +router.get('/getid',function(req, res) { + //console.dir(req.query); + Odl.GetID('/restconf/config/L3SDN-API:l3sdn-api-worklist/requests/'+req.query['request'], options, res); +}); + +router.get('/getvnf', function(req,res) { + //console.log("/getvnf "+req.query); + Odl.GetVNF('/restconf/config/L3SDN-API:l3sdn-api-worklist/requests/'+req.query['request']+'/vnf/',options,req,res); +}); +router.get('/getvrlan', function(req,res) { + var vrtasks = []; + var reqstr = encodeURIComponent(req.query['request']); + vrtasks.push(function(callback) { + Odl.GetVRlan('/restconf/config/L3SDN-API:services/layer3-service-list/'+reqstr+'/service-data/vr-lan/',options,callback); + }); + async.series(vrtasks, function(err,result){ + var msgArray = new Array(); + if(err){ + msgArray.push(err); + Odl.Get('/restconf/config/L3SDN-API:services',options, handleResult,res); + //res.render("pages/err", + //{result:{code:'error', msg:"Unable to get vr-lan information: "+ String(err) }}); + return; + } + else { + msgArray.push('Row successfully deleted from AIC_SITE table.'); + res.render("odl/listVRlan", + { + svc_instance_id: req.query['request'], + response_obj : JSON.parse(result), header:process.env.MAIN_MENU + }); + return; + } + }); +}); +router.get('/getClusterStatus', function(req,res) { + + + var urltasks = []; + var _header = {'Host': host, 'Authorization': auth, 'Content-Type': 'application/yang.data+json'}; + var _options = null; + + var slist = properties.shard_list; + var hlist = properties.hostnameList; + var port = properties.clusterPort; + var prefix_url = properties.clusterPrefixURL; + var mid_url = properties.clusterMidURL; + var suffix_url = properties.clusterSuffixURL; + var urlArray = new Array(); + var url_request=''; + var shard=null, hostname=null; + + // build array of urls from properties + for(var x=0; x<slist.length; x++) + { + shard = slist[x]; + for(var y=0; y<hlist.length; y++) + { + hostname = hlist[y]; + + url_request = properties.odlProtocol + '://' + + hostname.hname + ':' + + port + + prefix_url + + (y+1) + + mid_url + + shard.shard_name + + suffix_url; + + _options = { + method : "GET", + path : url_request, + host : hostname.hname, + headers : _header, + port : port, + rejectUnauthorized: false, + strictSSL : false + }; + urlArray.push(_options); + } + } + + urlArray.forEach(function(request){ + urltasks.push(function(callback) { + Odl.GetClusterStatus(request,callback); + }); + }); + async.series(urltasks, function(err,result){ + var msgArray = new Array(); + if(err){ + msgArray.push(err); + res.render("pages/err", + {result:{code:'error', msg:"Unable to get status: "+ String(err) }, header:process.env.MAIN_MENU}); + return; + } + else { + var msgArray = new Array(); + msgArray.push('Sucess'); + res.render("odl/cluster_status", + { + result : {code:'success', msg:msgArray}, + response_obj : result, header:process.env.MAIN_MENU + }); + return; + } + }); +}); + + +module.exports = router; |