From 4429c6a160b8869e5e230b83956be788e48eb7e6 Mon Sep 17 00:00:00 2001 From: Konstantin Azizov Date: Sat, 2 Jun 2018 08:44:18 +0200 Subject: [PATCH] fix(container-details): recreate container with multiple networks (#1907) * fix(container): Use first network's Mac address by default * fix(container): Connect additional networks to container after creation * fix(container): Remove warning message --- .../create/createContainerController.js | 27 ++++++++++++++++--- .../containers/create/createcontainer.html | 5 ---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/app/docker/views/containers/create/createContainerController.js b/app/docker/views/containers/create/createContainerController.js index cca719cf0..d45b989be 100644 --- a/app/docker/views/containers/create/createContainerController.js +++ b/app/docker/views/containers/create/createContainerController.js @@ -19,6 +19,8 @@ function ($q, $scope, $state, $timeout, $transition$, $filter, Container, Contai NodeName: null }; + $scope.extraNetworks = {}; + $scope.state = { formValidationError: '', actionInProgress: false @@ -317,7 +319,7 @@ function ($q, $scope, $state, $timeout, $transition$, $filter, Container, Contai var bindings = []; for (var p in $scope.config.HostConfig.PortBindings) { if ({}.hasOwnProperty.call($scope.config.HostConfig.PortBindings, p)) { - var hostPort = ''; + var hostPort = ''; if ($scope.config.HostConfig.PortBindings[p][0].HostIp) { hostPort = $scope.config.HostConfig.PortBindings[p][0].HostIp + ':'; } @@ -387,7 +389,16 @@ function ($q, $scope, $state, $timeout, $transition$, $filter, Container, Contai } $scope.config.NetworkingConfig.EndpointsConfig[$scope.config.HostConfig.NetworkMode] = d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode]; // Mac Address - $scope.formValues.MacAddress = d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode].MacAddress; + if(Object.keys(d.NetworkSettings.Networks).length) { + var firstNetwork = d.NetworkSettings.Networks[Object.keys(d.NetworkSettings.Networks)[0]]; + $scope.formValues.MacAddress = firstNetwork.MacAddress; + $scope.config.NetworkingConfig.EndpointsConfig[$scope.config.HostConfig.NetworkMode] = firstNetwork; + $scope.extraNetworks = angular.copy(d.NetworkSettings.Networks); + delete $scope.extraNetworks[Object.keys(d.NetworkSettings.Networks)[0]]; + } else { + $scope.formValues.MacAddress = ''; + } + // ExtraHosts if ($scope.config.HostConfig.ExtraHosts) { var extraHosts = $scope.config.HostConfig.ExtraHosts; @@ -604,14 +615,24 @@ function ($q, $scope, $state, $timeout, $transition$, $filter, Container, Contai }; function createContainer(config, accessControlData) { + var containerIdentifier; $q.when(!$scope.formValues.alwaysPull || ImageService.pullImage($scope.config.Image, $scope.formValues.Registry, true)) .finally(function final() { ContainerService.createAndStartContainer(config) .then(function success(data) { - var containerIdentifier = data.Id; + containerIdentifier = data.Id; var userId = Authentication.getUserDetails().ID; return ResourceControlService.applyResourceControl('container', containerIdentifier, userId, accessControlData, []); }) + .then(function success() { + if($scope.extraNetworks) { + return $q.all( + Object.keys($scope.extraNetworks).map(function(networkName) { + return NetworkService.connectContainer(networkName, containerIdentifier); + }) + ); + } + }) .then(function success() { Notifications.success('Container successfully created'); $state.go('docker.containers', {}, {reload: true}); diff --git a/app/docker/views/containers/create/createcontainer.html b/app/docker/views/containers/create/createcontainer.html index fefcfa7b7..9ef898d8a 100644 --- a/app/docker/views/containers/create/createcontainer.html +++ b/app/docker/views/containers/create/createcontainer.html @@ -126,11 +126,6 @@ Deploy the container Deployment in progress... - {{ state.formValidationError }} - - - This container is connected to multiple networks, only one network will be kept at creation time. -