1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-25 08:19:40 +02:00

feat(networks): group networks for swarm endpoints (#3028)

* feat(networks): group networks for swarm endpoints

* fix(networks): display error on networks with 1 sub
This commit is contained in:
xAt0mZ 2019-08-12 16:26:44 +02:00 committed by GitHub
parent 552c897b3b
commit c12ce5a5c7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 118 additions and 31 deletions

View file

@ -1,6 +1,8 @@
import _ from 'lodash-es';
angular.module('portainer.docker')
.controller('NetworksController', ['$scope', '$state', 'NetworkService', 'Notifications', 'HttpRequestHelper', 'EndpointProvider',
function ($scope, $state, NetworkService, Notifications, HttpRequestHelper, EndpointProvider) {
.controller('NetworksController', ['$q', '$scope', '$state', 'NetworkService', 'Notifications', 'HttpRequestHelper', 'EndpointProvider', 'AgentService',
function ($q, $scope, $state, NetworkService, Notifications, HttpRequestHelper, EndpointProvider, AgentService) {
$scope.removeAction = function (selectedItems) {
var actionCount = selectedItems.length;
@ -28,13 +30,43 @@ function ($scope, $state, NetworkService, Notifications, HttpRequestHelper, Endp
$scope.getNetworks = getNetworks;
function groupSwarmNetworksManagerNodesFirst(networks, agents) {
const getRole = (item) => _.find(agents, (agent) => agent.NodeName === item.NodeName).NodeRole;
const nonSwarmNetworks = _.remove(networks, (item) => item.Scope !== 'swarm')
const grouped = _.toArray(_.groupBy(networks, (item) => item.Id));
const sorted = _.map(grouped, (arr) => _.sortBy(arr, (item) => getRole(item)));
const arr = _.map(sorted, (a) => {
const item = a[0];
for (let i = 1; i < a.length; i++) {
item.Subs.push(a[i]);
}
return item;
});
const res = _.concat(arr, ...nonSwarmNetworks);
return res;
}
function getNetworks() {
NetworkService.networks(true, true, true)
.then(function success(data) {
$scope.networks = data;
const req = {
networks: NetworkService.networks(true, true, true)
};
if ($scope.applicationState.endpoint.mode.agentProxy && $scope.applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE') {
req.agents = AgentService.agents();
}
$q.all(req)
.then((data) => {
$scope.offlineMode = EndpointProvider.offlineMode();
const networks = _.forEach(data.networks, (item) => item.Subs = []);
if ($scope.applicationState.endpoint.mode.agentProxy && $scope.applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE') {
$scope.networks = groupSwarmNetworksManagerNodesFirst(data.networks, data.agents);
} else {
$scope.networks = networks;
}
})
.catch(function error(err) {
.catch((err) => {
$scope.networks = [];
Notifications.error('Failure', err, 'Unable to retrieve networks');
});