diff options
author | Daniel Malachovsky <daniel.malachovsky@pantheon.sk> | 2016-02-08 19:05:54 +0100 |
---|---|---|
committer | Gerrit Code Review <gerrit@fd.io> | 2016-02-08 21:55:02 +0000 |
commit | 37c09259c1958fe5ed7c28bc24f593577070bbcb (patch) | |
tree | 19789c34c78a241a94fc55246a0fd412ed5f307d /vbd/gui/module/src/main/resources/vpp/controllers | |
parent | 1fe1660a989f6018115331e6a6c4b096ef088c82 (diff) |
Initial commit of vBd Manager functions.
- Bug Fixes for graphical manipulation. Fix req'd for unassigning pre-assigned.
- Fixed Graphical issues, interface, vpp and vBD manipulation
- Added REST functionality, GUI enhancements and squashed a few bugs.
- reworked assigning and unassigning IF to vBD
Change-Id: Ice13835699455439f6ab49a18facb49f7a16b7ef
Signed-off-by: Varun Seereeram <vseereer@cisco.com>
Signed-off-by: Daniel Malachovsky <daniel.malachovsky@pantheon.sk>
Diffstat (limited to 'vbd/gui/module/src/main/resources/vpp/controllers')
3 files changed, 198 insertions, 281 deletions
diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.controller.js index d8fe8ea0f..e5ad012fa 100644 --- a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.controller.js +++ b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.controller.js @@ -11,62 +11,125 @@ define(['app/vpp/vpp.module'], function(vpp) { }]); - vpp.register.controller('TableController', ['$scope', '$rootScope','$filter', 'dataService', 'toastService', function ($scope, $rootScope, filter, dataService, toastService) { - var vm = this; - vm.rowCollection = dataService.tableContent; - vm.displayedCollection = [].concat(vm.rowCollection); - vm.updateAssignment = function(receivedInterface) { - var interf = _.find(dataService.interfaces, {name: receivedInterface.name, 'phys-address': receivedInterface['phys-address']}); - angular.copy(receivedInterface, interf); - if (interf.assigned){ - interf['v3po:l2']['bridge-domain'] = dataService.selectedBd.name; - } else { - interf['v3po:l2']['bridge-domain'] = ''; - } - dataService.injectBridgeDomainsTopoElements(); - dataService.buildTableContent(); - var previouslyChangedInterface = _.find(dataService.changedInterfaces, {name: interf.name, 'phys-address': interf['phys-address']}); - if (!previouslyChangedInterface) { - dataService.changedInterfaces.push(interf); - } - console.log(dataService.changedInterfaces); - }; - }]); + vpp.register.controller('TableController', ['$scope', '$rootScope','$filter', 'dataService', 'toastService', 'bdmInterfaceService', + function ($scope, $rootScope, filter, dataService, toastService, bdmInterfaceService) { + var vm = this; + vm.rowCollection = dataService.tableContent; + vm.displayedCollection = [].concat(vm.rowCollection); - vpp.register.controller('BridgeDomainsController', ['$scope', '$rootScope','$filter', 'dataService', 'bdmBridgeDomainService', 'toastService', - function($scope, $rootScope, $filter, dataService, bdmBridgeDomainService, toastService) { - $scope.addBd = function() { - var obj = bdmBridgeDomainService.createObj('vBD' + ((Math.random() * 100) + 1) ); + vm.updateAssignment = function(receivedInterface) { + console.log(receivedInterface); + var interf = _.find(dataService.interfaces, {name: receivedInterface.name, 'vppName': receivedInterface.vppName}); + if (receivedInterface.assigned){ + interf.assigned = true; + interf.vbd = dataService.selectedBd.name; + receivedInterface.vbd = dataService.selectedBd.name; + + vm.assignInterface(interf); + } else { + var vbdName = receivedInterface.vbd, + vppName = receivedInterface.vppName; + + interf.assigned = false; + interf.vbd = ''; + receivedInterface.vbd = ''; + + vm.unassignInterface(interf, vbdName, vppName); + } + //dataService.buildTableContent(); + var previouslyChangedInterface = _.find(dataService.changedInterfaces, {name: interf.name, 'vppName': interf.vppName}); + if (!previouslyChangedInterface) { + dataService.changedInterfaces.push(interf); + } + console.log(dataService.changedInterfaces); + dataService.injectBridgeDomainsTopoElements(); - bdmBridgeDomainService.add(obj, - function(data) { - console.log('successadding vbd'); - }, - function() { - console.warn('add bd failed'); - }); }; - $scope.dataService = dataService; + vm.assignInterface = function(interface) { + var interfaceObject = bdmInterfaceService.createObj(interface.name, interface.name); - dataService.nextApp.container(document.getElementById('bridge-domains-next-app')); - dataService.bridgeDomainsTopo.attach(dataService.nextApp); + var successCallback = function() { + toastService.showToast('Interface assigned'); + }; - window.addEventListener('resize', function () { - if ($location.path() === '/bridgedomains') { - dataService.topo.adaptToContainer(); - } - }); + var errorCallback = function() { + toastService.showToast('Unable to assign interface'); + }; + + bdmInterfaceService.add(interfaceObject, interface.vbd, interface.vppName, successCallback, errorCallback); + }; + + vm.unassignInterface = function(interface, vbdname, vppName) { + var interfaceObject = bdmInterfaceService.createObj(interface.name, interface.name); + + var successCallback = function() { + toastService.showToast('Interface unassigned'); + }; + + var errorCallback = function() { + toastService.showToast('Unable to unassign interface'); + }; + + bdmInterfaceService.delete(interfaceObject, vbdname, vppName, successCallback, errorCallback); + + }; + }]); + + vpp.register.controller('BridgeDomainsController', ['$scope', '$rootScope','$filter', 'dataService', 'bdmBridgeDomainService', 'toastService', '$mdDialog','bdmInterfaceService', + function($scope, $rootScope, $filter, dataService, bdmBridgeDomainService, toastService, $mdDialog,bdmInterfaceService) { + console.log('Bridge Domains Controller executed.'); + + $scope.dataService = dataService; $scope.bridgedomains = dataService.bridgedomains; $scope.selectedBd = dataService.selectedBd; + dataService.nextApp.container(document.getElementById('bridge-domains-next-app')); + dataService.bridgeDomainsTopo.attach(dataService.nextApp); + + if (!dataService.bridgedomainsLoaded) { + dataService.generateInterfaces(); + bdmBridgeDomainService.get(function(data) { + //success callback + angular.copy(data['network-topology'].topology, dataService.bridgedomains); + dataService.bridgedomainsLoaded = true; + console.log('Loaded BridgeDomains:'); + console.log(dataService.bridgedomains); + dataService.buildAssignedInterfaces(); + }, function(data,status) { + //error callback + console.log(status); + }); + } + dataService.bridgeDomainsTopo.on('clickNode',function(topo,node) { console.log(node); }); + $scope.reload = function() { + dataService.selectedBd.name = ''; + dataService.changedInterfaces.length = 0; + dataService.originalAssignments.length = 0; + dataService.interfaces.length = 0; + dataService.tableContent.length = 0; + dataService.bridgeDomainsTopo.clear(); + dataService.injectedInterfaces.length = 0; + dataService.generateInterfaces(); + bdmBridgeDomainService.get(function(data) { + //success callback + angular.copy(data['network-topology'].topology, dataService.bridgedomains); + dataService.bridgedomainsLoaded = true; + console.log('Loaded BridgeDomains:'); + console.log(dataService.bridgedomains); + dataService.buildAssignedInterfaces(); + }, function(data,status) { + //error callback + console.log(status); + }); + }; + $scope.bdChanged = function() { - dataService.injectBridgeDomainsTopoElements(); dataService.buildTableContent(); }; @@ -88,8 +151,7 @@ define(['app/vpp/vpp.module'], function(vpp) { if (status === 'success') { dataService.bridgedomains.push(vm.bd); dataService.selectedBd.name = vm.bd.name; - dataService.injectBridgeDomainsTopoElements(); - dataService.buildTableContent(); + $scope.reload(); vm.close(); } }; @@ -99,23 +161,102 @@ define(['app/vpp/vpp.module'], function(vpp) { vm.waiting = true; //send a POST with the entered content in the form field + var obj = bdmBridgeDomainService.createObj(vm.bd.name); + + bdmBridgeDomainService.add(obj, + function(data) { + vm.isDone('success'); + }, + function() { + vm.isDone('failed'); + }); + }; }, controllerAs: 'NewBdDialogCtrl', - templateUrl: 'templates/new-bd-dialog.html', + templateUrl: $scope.view_path + 'new-bd-dialog.html', parent: angular.element(document.body), clickOutsideToClose:false }) }; + /* FIXME: remove after testing */ + /*$scope.deploy = function() { + var successfulRequestsRequired = dataService.changedInterfaces.length; + var successfulRequests = 0; - $scope.deploy = function() { + console.log('Removing previous assignments...'); + _.forEach(dataService.changedInterfaces, function(interf) { - }; + //Check if previously assigned.. then DELETE + //.... + var previousAssignment = _.find(dataService.originalAssignments, { + 'vbridge-topology:user-interface': interf.name, + vppName: interf.vppName + }); + + if (previousAssignment) { + successfulRequestsRequired++; + bdmInterfaceService.delete( + { + "tp-id":previousAssignment['tp-id'], + "vbridge-topology:user-interface": previousAssignment['vbridge-topology:user-interface'] + }, + previousAssignment.vbd, + previousAssignment.vppName, + function() { + //success callback + console.log('Removed previous assignment:',previousAssignment); + successfulRequests++; + + if (successfulRequests >= successfulRequestsRequired) { + toastService.showToast('Deployed! Bridge Domain Validated.'); + dataService.changedInterfaces.length = 0; + console.log('Changed interfaces tracker has been reset.'); + $scope.reload(); + } + }, + function() { + //error callback + console.error('ERROR removing assignment:',previousAssignment); + } + ) + } + if (interf.assigned) { + //Send PUT to correct vBD + bdmInterfaceService.add( + { + "tp-id":interf.vppName+'-'+interf.name, + "vbridge-topology:user-interface": interf.name + }, + interf.vbd, + interf.vppName, + function() { + //success callback + console.log('Added assignment:',interf); + successfulRequests++; + + if (successfulRequests >= successfulRequestsRequired) { + toastService.showToast('Deployed! Bridge Domain Validated.'); + dataService.changedInterfaces.length = 0; + console.log('Changed interfaces tracker has been reset.') + $scope.reload(); + } + }, + function() { + //error callback + console.error('ERROR adding assignment:',interf); + } + ) + } else { + successfulRequests++; + } + }); + };*/ $scope.removeBd = function() { - if($scope.selectedBd.name) { + if(dataService.selectedBd.name) { var successCallback = function(success) { if (success) { console.log($scope.bridgedomains); @@ -124,18 +265,20 @@ define(['app/vpp/vpp.module'], function(vpp) { }); toastService.showToast('Bridge Domain Removed!'); $scope.selectedBd.name = ''; - dataService.clearInjectedInterfacesInBridgeDomainTopo(); - dataService.injectBdIntoBridgeDomainsTopo(); + dataService.clearTopology(); dataService.tableContent.length = 0; + $scope.reload(); } else { toastService.showToast('Error removing Bridge Domain!'); - } }; - - //... removeBdFromOdl(vm.selectedBd.name, successCallback); + bdmBridgeDomainService.remove(dataService.selectedBd.name, function(){successCallback(true)}, function(){successCallback(false)}); } }; + window.addEventListener('resize', function () { + dataService.bridgeDomainsTopo.adaptToContainer(); + }); + }]); });
\ No newline at end of file diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.vpp.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.vpp.controller.js index 69dfd2fcb..44a4b0cf2 100644 --- a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.vpp.controller.js +++ b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.vpp.controller.js @@ -11,132 +11,4 @@ define(['app/vpp/vpp.module'], function(vpp) { }]); - vpp.register.controller('TableController', ['$scope', '$rootScope','$filter', 'dataService', 'toastService', function ($scope, $rootScope, filter, dataService, toastService) { - var vm = this; - vm.rowCollection = dataService.tableContent; - vm.displayedCollection = [].concat(vm.rowCollection); - vm.updateAssignment = function(receivedInterface) { - var interf = _.find(dataService.interfaces, {name: receivedInterface.name, 'phys-address': receivedInterface['phys-address']}); - angular.copy(receivedInterface, interf); - if (interf.assigned){ - interf['v3po:l2']['bridge-domain'] = dataService.selectedBd.name; - } else { - interf['v3po:l2']['bridge-domain'] = ''; - } - dataService.injectBridgeDomainsTopoElements(); - dataService.buildTableContent(); - var previouslyChangedInterface = _.find(dataService.changedInterfaces, {name: interf.name, 'phys-address': interf['phys-address']}); - if (!previouslyChangedInterface) { - dataService.changedInterfaces.push(interf); - } - console.log(dataService.changedInterfaces); - }; - }]); - - vpp.register.controller('BridgeDomainsController', ['$scope', '$rootScope','$filter', 'dataService', 'bdmBridgeDomainService', 'toastService', - function($scope, $rootScope, $filter, dataService, bdmBridgeDomainService, toastService) { - $scope.addBd = function() { - var obj = bdmBridgeDomainService.createObj('vBD' + ((Math.random() * 100) + 1) ); - - bdmBridgeDomainService.add(obj, - function(data) { - console.log('successadding vbd'); - }, - function() { - console.warn('add bd failed'); - }); - }; - - /*var vm = this; - vm.dataService = dataService; - - dataService.nextApp.container(document.getElementById('bridge-domains-next-app')); - dataService.bridgeDomainsTopo.attach(dataService.nextApp); - - window.addEventListener('resize', function () { - if ($location.path() === '/bridgedomains') { - dataService.topo.adaptToContainer(); - } - }); - - vm.bridgedomains = dataService.bridgedomains; - vm.selectedBd = dataService.selectedBd; - - dataService.bridgeDomainsTopo.on('clickNode',function(topo,node) { - console.log(node); - }); - - vm.bdChanged = function() { - dataService.injectBridgeDomainsTopoElements(); - dataService.buildTableContent(); - }; - - vm.addBd = function() { - //show dialog - $mdDialog.show({ - controller: function() { - var vm = this; - vm.bd = {}; - vm.waiting = false; - - //function called when the cancel button ( 'x' in the top right) is clicked - vm.close = function() { - $mdDialog.cancel(); - }; - - vm.isDone = function(status) { - vm.waiting = false; - if (status === 'success') { - dataService.bridgedomains.push(vm.bd); - dataService.selectedBd.name = vm.bd.name; - dataService.injectBridgeDomainsTopoElements(); - dataService.buildTableContent(); - vm.close(); - } - }; - - //function called when the update button is clicked - vm.updateConfig = function() { - vm.waiting = true; - //send a POST with the entered content in the form field - - }; - }, - controllerAs: 'NewBdDialogCtrl', - templateUrl: 'templates/new-bd-dialog.html', - parent: angular.element(document.body), - clickOutsideToClose:false - }) - }; - - - - vm.deploy = function() { - - }; - - vm.removeBd = function() { - if(vm.selectedBd.name) { - var successCallback = function(success) { - if (success) { - console.log(vm.bridgedomains); - _.remove(vm.bridgedomains, { - name: vm.selectedBd.name - }); - toastService.showToast('Bridge Domain Removed!'); - vm.selectedBd.name = ''; - dataService.clearInjectedInterfacesInBridgeDomainTopo(); - dataService.injectBdIntoBridgeDomainsTopo(); - dataService.tableContent.length = 0; - } else { - toastService.showToast('Error removing Bridge Domain!'); - - } - }; - - //... removeBdFromOdl(vm.selectedBd.name, successCallback); - } - }; - */ - }]); });
\ No newline at end of file diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/inventory.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/inventory.controller.js index c8ca1e575..7f2a4ec0c 100644 --- a/vbd/gui/module/src/main/resources/vpp/controllers/inventory.controller.js +++ b/vbd/gui/module/src/main/resources/vpp/controllers/inventory.controller.js @@ -22,6 +22,9 @@ define(['app/vpp/vpp.module'], function(vpp) { dataService.vpps = $scope.vppList; $scope.$broadcast('RELOAD_VPP_TABLE'); + + //for vppList access in BDM + dataService.vpps = $scope.vppList; }, // error callback function(res) { @@ -33,105 +36,8 @@ define(['app/vpp/vpp.module'], function(vpp) { $scope.initVppList = function() { $scope.vppList = []; $scope.displayVppList = []; - - //setting reference for vpp access in BDM - //dataService.vpps = $scope.vppList; }; - /*$scope.viewTopology = function(vpp) { - $mdDialog.show({ - controller: function() { - var vm = this; - - $scope.topo = new nx.graphic.Topology({ - height: 350, - width: 500, - scalable: true, - theme:'blue', - enableGradualScaling:true, - nodeConfig: { - color: '#414040', - label: 'model.label', - scale: 'model.scale', - iconType: function(vertex) { - var type = vertex.get().type; - if (type === 'bd') { - return 'bd' - } else if (type === 'vpp') { - return 'switch' - } else { - return 'interf'; - } - } - }, - linkConfig: { - label: 'model.label', - linkType: 'parallel', - color: function(link) { - if (link.getData().type === 'tunnel') { - return '#00FF00'; - } else { - return '#414040'; - } - }, - width: function(link) { - if (link.getData().type === 'tunnel') { - return 5; - } - } - }, - showIcon: true, - dataProcessor: 'force', - autoLayout: true, - enableSmartNode: false, - tooltipManagerConfig: { - nodeTooltipContentClass: 'TooltipNode', - linkTooltipContentClass: 'TooltipLink' - } - }); - $scope.app = new nx.ui.Application; - - vm.vpp = vpp; - vm.vpp.type = 'vpp'; - vm.vpp.label = vm.vpp.name; - - var nodes = [].concat(vm.vpp); - var links = []; - - _.forEach(vm.vpp.interfaces, function(interf, index){ - interf.label = interf.name; - interf.scale = 0.5; - nodes.push(interf); - links.push({source: 0, target: index + 1}); - }); - - console.log(vpp); - console.log(nodes); - console.log(links); - - $scope.topo.data({ - nodes: nodes, - links: links - }); - - this.close = function() { - $mdDialog.cancel(); - }; - - }, - onComplete: function() { - console.log(document.getElementById('next-vpp-topo')); - $scope.app.container(document.getElementById('next-vpp-topo')); - $scope.topo.attach($scope.app); - - }, - templateUrl: $scope.view_path + 'vpp-topo.html', - controllerAs: 'VppTopoCtrl', - parent: angular.element(document.body), - clickOutsideToClose:true - }) - };*/ - $scope.addVppShowForm = function() { $mdDialog.show({ controller: function() { @@ -340,9 +246,5 @@ define(['app/vpp/vpp.module'], function(vpp) { $scope.viewTopology($scope.selectedVpp); - /*$scope.$on('RELOAD_SELECTED_VPP', function(event) { - $scope.viewTopology($scope.selectedVpp); - });*/ - }]); });
\ No newline at end of file |