diff --git a/app/components/network/network.html b/app/components/network/network.html index 289f1a5e9..ae0cc846d 100644 --- a/app/components/network/network.html +++ b/app/components/network/network.html @@ -65,3 +65,34 @@ + + +
+
+ + + + + + + + + + + + + + + + + + + + +
Container NameIPv4 AddressIPv6 AddressMacAddressActions
{{ container.Name }}{{ container.IPv4Address || '-' }}{{ container.IPv6Address || '-' }}{{ container.MacAddress || '-' }} + +
+
+
+
+
diff --git a/app/components/network/networkController.js b/app/components/network/networkController.js index d5e93b7ff..656a6b062 100644 --- a/app/components/network/networkController.js +++ b/app/components/network/networkController.js @@ -1,6 +1,6 @@ angular.module('network', []) -.controller('NetworkController', ['$scope', '$state', '$stateParams', 'Network', 'Messages', -function ($scope, $state, $stateParams, Network, Messages) { +.controller('NetworkController', ['$scope', '$state', '$stateParams', 'Network', 'Container', 'ContainerHelper', 'Messages', +function ($scope, $state, $stateParams, Network, Container, ContainerHelper, Messages) { $scope.removeNetwork = function removeNetwork(networkId) { $('#loadingViewSpinner').show(); @@ -19,12 +19,53 @@ function ($scope, $state, $stateParams, Network, Messages) { }); }; - $('#loadingViewSpinner').show(); - Network.get({id: $stateParams.id}, function (d) { - $scope.network = d; - $('#loadingViewSpinner').hide(); - }, function (e) { - $('#loadingViewSpinner').hide(); - Messages.error("Failure", e, "Unable to retrieve network info"); - }); + $scope.containerLeaveNetwork = function containerLeaveNetwork(network, containerId) { + $('#loadingViewSpinner').show(); + Network.disconnect({id: $stateParams.id}, { Container: containerId, Force: false }, function (d) { + if (d.message) { + $('#loadingViewSpinner').hide(); + Messages.send("Error", {}, d.message); + } else { + $('#loadingViewSpinner').hide(); + Messages.send("Container left network", $stateParams.id); + $state.go('network', {id: network.Id}, {reload: true}); + } + }, function (e) { + $('#loadingViewSpinner').hide(); + Messages.error("Failure", e, "Unable to disconnect container from network"); + }); + }; + + function getNetwork() { + $('#loadingViewSpinner').show(); + Network.get({id: $stateParams.id}, function (d) { + $scope.network = d; + getContainersInNetwork(d); + $('#loadingViewSpinner').hide(); + }, function (e) { + $('#loadingViewSpinner').hide(); + Messages.error("Failure", e, "Unable to retrieve network info"); + }); + } + + function getContainersInNetwork(network) { + if (network.Containers) { + Container.query({ + filters: {network: [$stateParams.id]} + }, function (containersInNetworkResult) { + if ($scope.containersToHideLabels) { + containersInNetworkResult = ContainerHelper.hideContainers(containersInNetworkResult, $scope.containersToHideLabels); + } + var containersInNetwork = []; + containersInNetworkResult.forEach(function(container) { + var containerInNetwork = network.Containers[container.Id]; + containerInNetwork.Id = container.Id; + containersInNetwork.push(containerInNetwork); + }); + $scope.containersInNetwork = containersInNetwork; + }); + } + } + + getNetwork(); }]); diff --git a/app/shared/services.js b/app/shared/services.js index 67fb2aa39..71091ab0d 100644 --- a/app/shared/services.js +++ b/app/shared/services.js @@ -6,7 +6,7 @@ angular.module('portainer.services', ['ngResource', 'ngSanitize']) return $resource(Settings.url + '/containers/:id/:action', { name: '@name' }, { - query: {method: 'GET', params: {all: 0, action: 'json'}, isArray: true}, + query: {method: 'GET', params: {all: 0, action: 'json', filters: '@filters' }, isArray: true}, get: {method: 'GET', params: {action: 'json'}}, stop: {method: 'POST', params: {id: '@id', t: 5, action: 'stop'}}, restart: {method: 'POST', params: {id: '@id', t: 5, action: 'restart'}},