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 console.log(response);
22 svc.addTenant = function(name, callback){
25 url:baseUrl + "tenants-instances/",
26 data: {"tenant-list":[{
29 }).then(function successCallback(response) {
30 if (callback != undefined) {
35 svc.deleteTenant = function(id, callback) {
38 url:baseUrl + "tenants-instances/tenant-list/" + id + "/",
39 }).then(function successCallback(response) {
40 if (callback != undefined) {
45 svc.addCe = function(id, name, callback) {
48 url:"/restconf/config/mef-topology:mef-topology/devices/",
55 "interfaces": {"interface": []}
60 }).then(function successCallback(response) {
61 if (callback != undefined) {
67 svc.addCeName = function(ce, new_name, callback) {
70 url:"/restconf/config/mef-topology:mef-topology/devices/device/" + ce['dev-id'],
71 data: {"device-name": new_name}
72 }).then(function successCallback(response) {
73 if (callback != undefined) {
76 }, function errorCallback(response) {
77 console.log(response);
80 url:"/restconf/config/mef-topology:mef-topology/devices/device/" + ce['dev-id']
81 }).then(function successCallback(response) {
82 ce["device-name"] = response.data["device"][0]["device-name"];
87 svc.getCes = function(callback) {
91 url:"/restconf/config/mef-topology:mef-topology/devices/"
92 }).then(function successCallback(response) {
93 ces = response.data["devices"]["device"];
94 ces.forEach(function(c){
95 c.displayName = c['device-name'] ? c['device-name'] : c['dev-id'];
97 if (callback != undefined) {
100 }, function errorCallback(response) {
101 console.log(response);
107 svc.removeCe = function(ceid, callback) {
110 url:"/restconf/config/mef-topology:mef-topology/devices/device/" + ceid + "/"
111 }).then(function successCallback(response) {
112 if (callback != undefined) {
120 svc.addUni = function(id, tenantid, callback) {
123 url:"/restconf/config/mef-interfaces:mef-interfaces/unis/",
126 "tenant-id":tenantid,
127 "admin-state-enabled":true
129 }).then(function successCallback(response) {
130 if (callback != undefined) {
137 svc.updateUni = function(id, tenantid, callback) {
138 // TODO didn't find a better way to keep other uni fields, PATCH method is not supported :(
141 url:"/restconf/operational/mef-interfaces:mef-interfaces/unis/uni/" + id + "/"
142 }).then(function successCallback(response) {
144 uni["uni"][0]["tenant-id"] = tenantid;
146 delete uni["uni"][0]["tenant-id"];
148 uni["uni"][0]["admin-state-enabled"] = true;
151 url:"/restconf/config/mef-interfaces:mef-interfaces/unis/uni/" + id + "/",
153 }).then(function successCallback(response) {
154 if (callback != undefined) {
161 svc.getUnis = function(callback) {
165 url:"/restconf/operational/mef-interfaces:mef-interfaces/unis/"
166 }).then(function successCallback(response) {
167 unis = response.data["unis"]["uni"];
168 if (unis != undefined){
169 for (i=0; i < unis.length; i++) {
170 if ((unis[i]["physical-layers"] != undefined) && (unis[i]["physical-layers"].links != undefined)){
171 unis[i].device = unis[i]["physical-layers"].links.link[0].device;
178 url:"/restconf/config/mef-interfaces:mef-interfaces/unis/"
179 }).then(function(response){
180 var confUnis = response.data["unis"]["uni"];
181 confUnis.forEach(function(u) {
182 confMap[u['uni-id']] = u;
184 }).finally(function(){
185 unis.forEach(function(u) {
186 u.prettyID = u['uni-id'].split(":")[u['uni-id'].split(":").length - 1];
187 // copy config fields like tenant-id
188 if (confMap[u['uni-id']]){
189 for (var attrname in confMap[u['uni-id']]) {
190 u[attrname] = confMap[u['uni-id']][attrname];
194 if (callback != undefined) {
198 }, function errorCallback(response) {
199 if (response.status == 404) {
202 console.log(response);
206 svc.getTenantUnis = function(tenantid, callback) {
208 svc.getUnis(function(unis){
209 if (unis != undefined){
210 unis = unis.filter(function(u){return u["tenant-id"] == tenantid;});
212 if (callback != undefined) {
218 svc.removeUni = function(uniid, callback) {
221 url:"/restconf/config/mef-interfaces:mef-interfaces/unis/uni/" + uniid + "/"
222 }).then(function successCallback(response) {
223 if (callback != undefined) {
230 svc.addIpvc = function(ipvc, tenant, callback) {
231 // var uni_json = getJsonUnis(evc.unis);
236 "svc-type" : 'eplan',
237 "tenant-id" : tenant,
240 "ipvc-type" : 'multipoint',
249 url:"/restconf/config/mef-services:mef-services/",
251 }).then(function successCallback(response) {
252 if (callback != undefined) {
258 svc.addIpUni = function(uniid, ipuni_id, ip_address, vlan, callback) {
259 var data = {"ip-uni":{
260 "ip-uni-id": ipuni_id,
261 "ip-address": ip_address
264 data["ip-uni"].vlan = vlan;
268 url:"/restconf/config/mef-interfaces:mef-interfaces/unis/uni/"+uniid+"/ip-unis/",
270 }).then(function successCallback(response) {
271 if (callback != undefined) {
277 svc.getAllIpUniSubnets = function(callback) {
280 url : "/restconf/config/mef-interfaces:mef-interfaces/subnets/"
281 }).then(function successCallback(response) {
282 var raw_subnets = response.data["subnets"]["subnet"];
284 raw_subnets.forEach(function(sub){
285 if (subnets[sub["uni-id"]] == undefined) {
286 subnets[sub["uni-id"]] = {};
288 if (subnets[sub["uni-id"]][sub["ip-uni-id"]] == undefined) {
289 subnets[sub["uni-id"]][sub["ip-uni-id"]] = [];
291 subnets[sub["uni-id"]][sub["ip-uni-id"]].push(sub);
293 if (callback != undefined) {
296 }, function errorCallback(response) {
297 console.log(response);
301 svc.addIpUniSubnet = function(uniid, ipuniid, subnet, gateway, callback) {
314 url : "/restconf/config/mef-interfaces:mef-interfaces/subnets/",
316 }).then(function successCallback(response) {
317 if (callback != undefined) {
323 svc.deleteIpUniSubnet = function(uniid, ipuni_id, subnet, callback) {
327 url:"/restconf/config/mef-interfaces:mef-interfaces/subnets/subnet/"+uniid+"/"+ipuni_id+"/"+subnet.replace("/","%2F")+"/"
328 }).then(function successCallback(response) {
329 if (callback != undefined) {
334 svc.deleteIpUni = function(uniid, ipuni_id, callback) {
338 url:"/restconf/config/mef-interfaces:mef-interfaces/unis/uni/"+uniid+"/ip-unis/ip-uni/"+ipuni_id+"/"
339 }).then(function successCallback(response) {
340 if (callback != undefined) {
346 svc.getIpUniSubnets = function(uniid, ipuni_id, callback) {
349 url:"/restconf/config/mef-interfaces:mef-interfaces/subnets/"
350 //subnet/"+uniid+"/ip-unis/ip-uni/"+ipuni_id+"/subnets"
351 }).then(function successCallback(response) {
352 subnets = response.data["subnets"]["subnet"];
353 subnets = subnets.filterByField('uni-id',uniid).filterByField('ip-uni-id',ipuni_id);
354 if (callback != undefined) {
362 function getJsonUnis(unis) {
364 if (unis == undefined) {
367 unis.forEach(function(i){uni_json.push({"uni-id":i});});
370 svc.addEvc = function(evc, evc_type, tenant, callback) {
371 var uni_json = getJsonUnis(evc.unis);
376 "svc-type" : evc.svc_type,
377 "tenant-id" : tenant,
380 "evc-type" : evc_type,
381 "preserve-ce-vlan-id" : evc.is_preserve_vlan,
382 "max-svc-frame-size" : evc.mtu_size,
383 "unicast-svc-frm-delivery" : evc.unicast,
384 "multicast-svc-frm-delivery" : evc.multicast,
388 "admin-state-enabled" : true
392 if (evc.is_preserve_vlan) {
393 data["mef-service"]["evc"]["preserved-vlan"] = evc.preserved_vlan;
397 url:"/restconf/config/mef-services:mef-services/",
399 }).then(function successCallback(response) {
400 if (callback != undefined) {
405 svc.getServices = function(tenantid, callback) {
409 url:"/restconf/config/mef-services:mef-services/"
410 }).then(function successCallback(response) {
411 evcs = response.data["mef-services"]["mef-service"]; // TODO try to filter on server side
412 if (evcs != undefined) {
413 evcs = evcs.filter(function(evc){return evc["tenant-id"] == tenantid;});
414 for (i=0; i < evcs.length; i++) {
415 if ((evcs[i].evc != undefined) && (evcs[i].evc.unis.uni != undefined)) {
416 var unis = evcs[i].evc.unis.uni;
417 for (j=0; j < unis.length; j++) {
418 if ((unis[j]['evc-uni-ce-vlans'] != undefined) && (unis[j]['evc-uni-ce-vlans']['evc-uni-ce-vlan'] != undefined)){
419 unis[j].vlans = unis[j]['evc-uni-ce-vlans']['evc-uni-ce-vlan'].map(function(u){return u.vid;}).sort();
427 if (callback != undefined) {
430 }, function errorCallback(response) {
431 console.log(response);
436 svc.getAllServices = function(callback) {
439 url:"/restconf/config/mef-services:mef-services/"
440 }).then(function successCallback(response) {
441 if (callback != undefined) {
442 callback(response.data["mef-services"]["mef-service"]);
444 }, function errorCallback(response) {
445 console.log(response);
449 svc.addTenantToService = function(svcId, tenantName, callbackSuccess, callbackFailure){
452 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcId,
453 data:{"tenant-id":tenantName}
455 if (callbackSuccess != undefined) {
459 if (callbackFailure != undefined) {
462 console.log(response);
467 svc.removeEvc = function(svcid, callback) {
470 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcid + "/"
471 }).then(function successCallback(response) {
472 if (callback != undefined) {
478 svc.addIpvcUni = function(svcid, uni_id, ipuni_id, callback) {
486 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcid + "/ipvc/unis/uni/"+uni_id+"/"+ipuni_id,
488 }).then(function successCallback(response) {
489 if (callback != undefined) {
492 }, function failureCallback(response) {
493 if (callback != undefined) {
499 svc.deleteIpvcUni = function(svcid, uni_id, ipuni_id, callback) {
502 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcid + "/ipvc/unis/uni/" + uni_id +"/"+ipuni_id + "/"
503 }).then(function successCallback(response) {
504 if (callback != undefined) {
512 svc.addEvcUni = function(svcid, uni_id, role, vlans, callback) {
516 "admin-state-enabled":true
519 if (vlans != undefined) {
520 data.uni['evc-uni-ce-vlans'] = {"evc-uni-ce-vlan":[]}
521 for (var i=0; i< vlans.length; ++i) {
522 data.uni['evc-uni-ce-vlans']["evc-uni-ce-vlan"].push({"vid":vlans[i]});
527 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcid + "/evc/unis",
529 }).then(function successCallback(response) {
530 if (callback != undefined) {
533 }, function failureCallback(response) {
534 if (callback != undefined) {
540 svc.addEvcUniVlan = function(svcid, uni_id, vlan, callback) {
543 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcid + "/evc/unis/uni/" + uni_id + "/evc-uni-ce-vlans/",
544 data:{"evc-uni-ce-vlan":{"vid":vlan}}
545 }).then(function successCallback(response) {
546 if (callback != undefined) {
552 svc.deleteEvcUni = function(svcid, uni_id, callback) {
555 url:"/restconf/config/mef-services:mef-services/mef-service/" + svcid + "/evc/unis/uni/" + uni_id + "/"
556 }).then(function successCallback(response) {
557 if (callback != undefined) {
565 svc.deleteVlan = function(svc_id, uni_id, vlan,callback) {
568 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+"/"
569 }).then(function successCallback(response) {
570 if (callback != undefined) {
576 svc.addVlan = function(svc_id, uni_id, vlan, callback) {
579 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+"/",
580 data:{"evc-uni-ce-vlan":{"vid":vlan}}
581 }).then(function successCallback(response) {
582 if (callback != undefined) {
588 svc.getNetworkNames = function(callback){
591 url:"/restconf/config/neutron:neutron/networks/"
592 }).then(function successCallback(response) {
593 if (callback != undefined) {
594 callback(response.data.networks.network);