diff --git a/app/components/createNetwork/createNetworkController.js b/app/components/createNetwork/createNetworkController.js index 01b0b3c7a..ee0a1e838 100644 --- a/app/components/createNetwork/createNetworkController.js +++ b/app/components/createNetwork/createNetworkController.js @@ -1,6 +1,7 @@ angular.module('createNetwork', []) -.controller('CreateNetworkController', ['$scope', '$state', 'Notifications', 'Network', 'LabelHelper', -function ($scope, $state, Notifications, Network, LabelHelper) { +.controller('CreateNetworkController', ['$q', '$scope', '$state', 'PluginService', 'Notifications', 'Network', 'LabelHelper', +function ($q, $scope, $state, PluginService, Notifications, Network, LabelHelper) { + $scope.formValues = { DriverOptions: [], Subnet: '', @@ -8,6 +9,8 @@ function ($scope, $state, Notifications, Network, LabelHelper) { Labels: [] }; + $scope.availableNetworkDrivers = []; + $scope.config = { Driver: 'bridge', CheckDuplicate: true, @@ -89,4 +92,24 @@ function ($scope, $state, Notifications, Network, LabelHelper) { var config = prepareConfiguration(); createNetwork(config); }; + + function initView() { + $('#loadingViewSpinner').show(); + var endpointProvider = $scope.applicationState.endpoint.mode.provider; + var apiVersion = $scope.applicationState.endpoint.apiVersion; + if(endpointProvider !== 'DOCKER_SWARM') { + PluginService.networkPlugins(apiVersion < 1.25) + .then(function success(data){ + $scope.availableNetworkDrivers = data; + }) + .catch(function error(err) { + Notifications.error('Failure', err, 'Unable to retrieve network drivers'); + }) + .finally(function final() { + $('#loadingViewSpinner').hide(); + }); + } + } + + initView(); }]); diff --git a/app/components/createNetwork/createnetwork.html b/app/components/createNetwork/createnetwork.html index a9f1ef7d4..c01da87e2 100644 --- a/app/components/createNetwork/createnetwork.html +++ b/app/components/createNetwork/createnetwork.html @@ -1,5 +1,7 @@ - + + + Networks > Add network @@ -39,8 +41,11 @@
-
- +
+ +
diff --git a/app/services/docker/pluginService.js b/app/services/docker/pluginService.js index d6e3325e6..690010d1a 100644 --- a/app/services/docker/pluginService.js +++ b/app/services/docker/pluginService.js @@ -52,5 +52,37 @@ angular.module('portainer.services') return deferred.promise; }; + service.networkPlugins = function(systemOnly) { + var deferred = $q.defer(); + + $q.all({ + system: SystemService.plugins(), + plugins: systemOnly ? [] : service.plugins() + }) + .then(function success(data) { + var networkPlugins = []; + var systemPlugins = data.system; + var plugins = data.plugins; + + if (systemPlugins.Network) { + networkPlugins = networkPlugins.concat(systemPlugins.Network); + } + + for (var i = 0; i < plugins.length; i++) { + var plugin = plugins[i]; + if (plugin.Enabled && _.includes(plugin.Config.Interface.Types, 'docker.networkdriver/1.0')) { + networkPlugins.push(plugin.Name); + } + } + + deferred.resolve(networkPlugins); + }) + .catch(function error(err) { + deferred.reject({ msg: err.msg, err: err }); + }); + + return deferred.promise; + }; + return service; }]);