1 define(['app/cpeui/cpeui.module'],function(cpeui) {
3 cpeui.factory('CpeuiSvc', function($http) {
4 var baseUrl = "/restconf/config/mef-global:mef-global/";
7 svc.getTenantList = function(callback) {
11 url:baseUrl + "tenants-instances"
12 }).then(function successCallback(response) {
13 tenantList = response.data["tenants-instances"]["tenant-list"];
14 if (callback != undefined) {
17 }, function errorCallback(response) {
18 if (response.status == 404) {
21 console.log(response);
26 svc.addTenant = function(name, callback){
29 url:baseUrl + "tenants-instances/",
30 data: {"tenant-list":[{
33 }).then(function successCallback(response) {
34 if (callback != undefined) {
39 svc.deleteTenant = function(id, callback) {
42 url:baseUrl + "tenants-instances/tenant-list/" + id + "/",
43 }).then(function successCallback(response) {
44 if (callback != undefined) {
51 svc.getProfiles = function(callback) {
54 url:"/restconf/config/mef-global:mef-global/profiles/ingress-bwp-flows/"
55 }).then(function successCallback(response) {
56 if (callback != undefined) {
57 callback(response.data["ingress-bwp-flows"]["bwp-flow"]);
59 }, function errorCallback(response) {
60 if (response.status == 404) {
63 console.log(response);
67 svc.addProfile = function(name, cir, cbs, callback){
70 url:"/restconf/config/mef-global:mef-global/profiles/ingress-bwp-flows/",
76 }).then(function successCallback(response) {
77 if (callback != undefined) {
83 svc.deleteProfile = function(name, callback) {
86 url:"/restconf/config/mef-global:mef-global/profiles/ingress-bwp-flows/bwp-flow/"+name,
87 }).then(function successCallback(response) {
88 if (callback != undefined) {
95 svc.addCe = function(id, name, callback) {
98 url:"/restconf/config/mef-topology:mef-topology/devices/",
105 "interfaces": {"interface": []}
110 }).then(function successCallback(response) {
111 if (callback != undefined) {
117 svc.addCeName = function(ce, new_name, callback) {
120 url:"/restconf/config/mef-topology:mef-topology/devices/device/" + ce['dev-id'],
121 data: {"device-name": new_name}
122 }).then(function successCallback(response) {
123 if (callback != undefined) {
126 }, function errorCallback(response) {
127 console.log(response);
130 url:"/restconf/config/mef-topology:mef-topology/devices/device/" + ce['dev-id']
131 }).then(function successCallback(response) {
132 ce["device-name"] = response.data["device"][0]["device-name"];
137 svc.getCes = function(callback) {
143 url:"/restconf/operational/mef-topology:mef-topology/devices/"
144 }).then(function successCallback(response) {
145 ces = response.data["devices"]["device"];
146 ces.forEach(function(c) {
147 c.displayName = c['dev-id'];
148 operMap[c['dev-id']] = c;
150 }).finally(function() {
153 url:"/restconf/config/mef-topology:mef-topology/devices/"
154 }).then(function(response){
155 var confCes = response.data["devices"]["device"];
156 confCes.forEach(function(c) {
157 c.displayName = c['device-name'] ? c['device-name'] : c['dev-id'];
158 if (operMap[c['dev-id']]) {
159 for (var attrname in c) {
160 operMap[c['dev-id']][attrname] = c[attrname];
163 operMap[c['dev-id']] = c;
166 }).finally(function() {
167 if (callback != undefined) {
168 callback(Object.values(operMap));
174 svc.removeCe = function(ceid, callback) {
177 url:"/restconf/config/mef-topology:mef-topology/devices/device/" + ceid + "/"
178 }).then(function successCallback(response) {
179 if (callback != undefined) {
187 svc.addUni = function(id, tenantid, callback) {
190 url:"/restconf/config/mef-interfaces:mef-interfaces/unis/",
193 "tenant-id":tenantid,
194 "admin-state-enabled":true
196 }).then(function successCallback(response) {
197 if (callback != undefined) {
204 svc.updateUni = function(id, tenantid, callback) {
205 // TODO didn't find a better way to keep other uni fields, PATCH method is not supported :(
208 url:"/restconf/operational/mef-interfaces:mef-interfaces/unis/uni/" + id + "/"
209 }).then(function successCallback(response) {
211 uni["uni"][0]["tenant-id"] = tenantid;
213 delete uni["uni"][0]["tenant-id"];
215 uni["uni"][0]["admin-state-enabled"] = true;
218 url:"/restconf/config/mef-interfaces:mef-interfaces/unis/uni/" + id + "/",
220 }).then(function successCallback(response) {
221 if (callback != undefined) {
228 svc.getUnis = function(callback) {
232 url:"/restconf/operational/mef-interfaces:mef-interfaces/unis/"
233 }).then(function successCallback(response) {
234 unis = response.data["unis"]["uni"];
235 if (unis != undefined){
236 for (i=0; i < unis.length; i++) {
237 if ((unis[i]["physical-layers"] != undefined) && (unis[i]["physical-layers"].links != undefined)){
238 unis[i].device = unis[i]["physical-layers"].links.link[0].device;
245 url:"/restconf/config/mef-interfaces:mef-interfaces/unis/"
246 }).then(function(response){
247 var confUnis = response.data["unis"]["uni"];
248 confUnis.forEach(function(u) {
249 confMap[u['uni-id']] = u;
251 }).finally(function(){
252 unis.forEach(function(u) {
253 u.prettyID = u['uni-id'].split(":")[u['uni-id'].split(":").length - 1];
254 // copy config fields like tenant-id
255 if (confMap[u['uni-id']]){
256 for (var attrname in confMap[u['uni-id']]) {
257 u[attrname] = confMap[u['uni-id']][attrname];
261 if (callback != undefined) {
265 }, function errorCallback(response) {
266 if (response.status == 404) {
269 console.log(response);
273 svc.getTenantUnis = function(tenantid, callback) {
275 svc.getUnis(function(unis){
276 if (unis != undefined){
277 unis = unis.filter(function(u){return u["tenant-id"] == tenantid;});
279 if (callback != undefined) {
285 svc.removeUni = function(uniid, callback) {
288 url:"/restconf/config/mef-interfaces:mef-interfaces/unis/uni/" + uniid + "/"
289 }).then(function successCallback(response) {
290 if (callback != undefined) {
297 svc.addIpvc = function(ipvc, tenant, callback) {
301 "svc-type" : 'eplan',
302 "tenant-id" : tenant,
305 "ipvc-type" : 'multipoint',
311 url:"/restconf/config/mef-services:mef-services/",
313 }).then(function successCallback(response) {
314 if (callback != undefined) {
320 svc.addIpUni = function(uniid, ipuni_id, ip_address, vlan, segmentation_id, callback) {
321 var data = {"ip-uni":{
322 "ip-uni-id": ipuni_id,
323 "ip-address": ip_address
326 data["ip-uni"].vlan = vlan;
328 if (segmentation_id) {
329 data["ip-uni"]["segmentation-id"] = segmentation_id;
333 url:"/restconf/config/mef-interfaces:mef-interfaces/unis/uni/"+uniid+"/ip-unis/",
335 }).then(function successCallback(response) {
336 if (callback != undefined) {
342 svc.getAllIpUniSubnets = function(callback) {
345 url : "/restconf/config/mef-interfaces:mef-interfaces/subnets/"
346 }).then(function successCallback(response) {
347 var raw_subnets = response.data["subnets"]["subnet"];
349 raw_subnets.forEach(function(sub){
350 if (subnets[sub["uni-id"]] == undefined) {
351 subnets[sub["uni-id"]] = {};
353 if (subnets[sub["uni-id"]][sub["ip-uni-id"]] == undefined) {
354 subnets[sub["uni-id"]][sub["ip-uni-id"]] = [];
356 subnets[sub["uni-id"]][sub["ip-uni-id"]].push(sub);
358 if (callback != undefined) {
361 }, function errorCallback(response) {
362 console.log(response);
366 svc.addIpUniSubnet = function(uniid, ipuniid, subnet, gateway, callback) {
379 url : "/restconf/config/mef-interfaces:mef-interfaces/subnets/",
381 }).then(function successCallback(response) {
382 if (callback != undefined) {
388 svc.deleteIpUniSubnet = function(uniid, ipuni_id, subnet, callback) {
392 url:"/restconf/config/mef-interfaces:mef-interfaces/subnets/subnet/"+uniid+"/"+ipuni_id+"/"+subnet.replace("/","%2F")+"/"
393 }).then(function successCallback(response) {
394 if (callback != undefined) {
399 svc.deleteIpUni = function(uniid, ipuni_id, callback) {
403 url:"/restconf/config/mef-interfaces:mef-interfaces/unis/uni/"+uniid+"/ip-unis/ip-uni/"+ipuni_id+"/"
404 }).then(function successCallback(response) {
405 if (callback != undefined) {
411 svc.getIpUniSubnets = function(uniid, ipuni_id, callback) {
414 url:"/restconf/config/mef-interfaces:mef-interfaces/subnets/"
415 //subnet/"+uniid+"/ip-unis/ip-uni/"+ipuni_id+"/subnets"
416 }).then(function successCallback(response) {
417 subnets = response.data["subnets"]["subnet"];
418 subnets = subnets.filterByField('uni-id',uniid).filterByField('ip-uni-id',ipuni_id);
419 if (callback != undefined) {
427 function getJsonUnis(unis) {
429 if (unis == undefined) {
432 unis.forEach(function(i){uni_json.push({"uni-id":i});});
436 svc.addEvc = function(evc, evc_type, tenant, callback) {
437 var uni_json = getJsonUnis(evc.unis);
442 "svc-type" : evc.svc_type,
443 "tenant-id" : tenant,
446 "evc-type" : evc_type,
447 "preserve-ce-vlan-id" : evc.is_preserve_vlan,
448 "max-svc-frame-size" : evc.mtu_size,
449 "unicast-svc-frm-delivery" : evc.unicast,
450 "multicast-svc-frm-delivery" : evc.multicast,
454 "admin-state-enabled" : true
458 if (evc.is_preserve_vlan) {
459 data["mef-service"]["evc"]["preserved-vlan"] = evc.preserved_vlan;
462 data["mef-service"]["evc"].subnet = evc.subnet;
464 if (evc.segmentation_id) {
465 data["mef-service"]["evc"]["segmentation-id"] = evc.segmentation_id;
469 url:"/restconf/config/mef-services:mef-services/",
471 }).then(function successCallback(response) {
472 if (callback != undefined) {
477 svc.getServices = function(tenantid, callback) {
481 url:"/restconf/config/mef-services:mef-services/"
482 }).then(function successCallback(response) {
483 evcs = response.data["mef-services"]["mef-service"]; // TODO try to filter on server side
484 if (evcs != undefined) {
485 evcs = evcs.filter(function(evc){return evc["tenant-id"] == tenantid;});
486 for (i=0; i < evcs.length; i++) {
487 if ((evcs[i].evc != undefined) && (evcs[i].evc.unis.uni != undefined)) {
488 var unis = evcs[i].evc.unis.uni;
489 for (j=0; j < unis.length; j++) {
490 if ((unis[j]['evc-uni-ce-vlans'] != undefined) && (unis[j]['evc-uni-ce-vlans']['evc-uni-ce-vlan'] != undefined)){
491 unis[j].vlans = unis[j]['evc-uni-ce-vlans']['evc-uni-ce-vlan'].map(function(u){return u.vid;}).sort();
499 if (callback != undefined) {
502 }, function errorCallback(response) {
503 console.log(response);
508 svc.getAllServices = function(callback) {
511 url:"/restconf/config/mef-services:mef-services/"
512 }).then(function successCallback(response) {
513 if (callback != undefined) {
514 callback(response.data["mef-services"]["mef-service"]);
516 }, function errorCallback(response) {
517 if (response.status == 404) {
520 console.log(response);
524 svc.addTenantToService = function(svcId, tenantName, callbackSuccess, callbackFailure){
527 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcId,
528 data:{"tenant-id":tenantName}
530 if (callbackSuccess != undefined) {
534 if (callbackFailure != undefined) {
537 console.log(response);
542 svc.removeEvc = function(svcid, callback) {
545 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcid + "/"
546 }).then(function successCallback(response) {
547 if (callback != undefined) {
553 svc.addIpvcUni = function(svcid, uni_id, ipuni_id, profile_name, callback) {
560 data.uni["ingress-bw-profile"] = profile_name;
564 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcid + "/ipvc/unis/uni/"+uni_id+"/"+ipuni_id,
566 }).then(function successCallback(response) {
567 if (callback != undefined) {
570 }, function failureCallback(response) {
571 if (callback != undefined) {
577 svc.deleteIpvcUni = function(svcid, uni_id, ipuni_id, callback) {
580 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcid + "/ipvc/unis/uni/" + uni_id +"/"+ipuni_id + "/"
581 }).then(function successCallback(response) {
582 if (callback != undefined) {
590 svc.addEvcUni = function(svcid, uni_id, role, vlans, profile_name, callback) {
594 "admin-state-enabled":true
598 data.uni["ingress-bw-profile"] = profile_name;
600 if (vlans != undefined) {
601 data.uni['evc-uni-ce-vlans'] = {"evc-uni-ce-vlan":[]}
602 for (var i=0; i< vlans.length; ++i) {
603 data.uni['evc-uni-ce-vlans']["evc-uni-ce-vlan"].push({"vid":vlans[i]});
608 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcid + "/evc/unis",
610 }).then(function successCallback(response) {
611 if (callback != undefined) {
614 }, function failureCallback(response) {
615 if (callback != undefined) {
621 svc.addEvcUniVlan = function(svcid, uni_id, vlan, callback) {
624 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcid + "/evc/unis/uni/" + uni_id + "/evc-uni-ce-vlans/",
625 data:{"evc-uni-ce-vlan":{"vid":vlan}}
626 }).then(function successCallback(response) {
627 if (callback != undefined) {
633 svc.deleteEvcUni = function(svcid, uni_id, callback) {
636 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcid + "/evc/unis/uni/" + uni_id + "/"
637 }).then(function successCallback(response) {
638 if (callback != undefined) {
646 svc.deleteVlan = function(svc_id, uni_id, vlan,callback) {
649 url:"/restconf/config/mef-services:mef-services/mef-service/" + svc_id + "/evc/unis/uni/" + uni_id + "/evc-uni-ce-vlans/evc-uni-ce-vlan/"+ vlan+"/"
650 }).then(function successCallback(response) {
651 if (callback != undefined) {
657 svc.addVlan = function(svc_id, uni_id, vlan, callback) {
660 url:"/restconf/config/mef-services:mef-services/mef-service/" + svc_id + "/evc/unis/uni/"+uni_id+"/evc-uni-ce-vlans/evc-uni-ce-vlan/"+vlan+"/",
661 data:{"evc-uni-ce-vlan":{"vid":vlan}}
662 }).then(function successCallback(response) {
663 if (callback != undefined) {
669 svc.getNetworkNames = function(callback){
672 url:"/restconf/config/neutron:neutron/networks/"
673 }).then(function successCallback(response) {
674 if (callback != undefined) {
675 callback(response.data.networks.network);